Merge "Revert "Implement AudioTrack callback in AudioPlayer""
diff --git a/cmds/stagefright/AudioPlayer.cpp b/cmds/stagefright/AudioPlayer.cpp
index a63bde6..55427ca 100644
--- a/cmds/stagefright/AudioPlayer.cpp
+++ b/cmds/stagefright/AudioPlayer.cpp
@@ -249,8 +249,7 @@
mAudioTrack = new AudioTrack(
AUDIO_STREAM_MUSIC, mSampleRate, AUDIO_FORMAT_PCM_16_BIT, audioMask,
- 0 /*frameCount*/, AUDIO_OUTPUT_FLAG_NONE,
- wp<IAudioTrackCallback>::fromExisting(this),
+ 0 /*frameCount*/, AUDIO_OUTPUT_FLAG_NONE, &AudioCallback, this,
0 /*notificationFrames*/);
if ((err = mAudioTrack->initCheck()) != OK) {
@@ -398,6 +397,10 @@
mStartPosUs = 0;
}
+// static
+void AudioPlayer::AudioCallback(int event, void *user, void *info) {
+ static_cast<AudioPlayer *>(user)->AudioCallback(event, info);
+}
bool AudioPlayer::reachedEOS(status_t *finalStatus) {
*finalStatus = OK;
@@ -452,12 +455,20 @@
return 0;
}
-size_t AudioPlayer::onMoreData(const AudioTrack::Buffer& buffer) {
- return fillBuffer(buffer.raw, buffer.size);
-}
+void AudioPlayer::AudioCallback(int event, void *info) {
+ switch (event) {
+ case AudioTrack::EVENT_MORE_DATA:
+ {
+ AudioTrack::Buffer *buffer = (AudioTrack::Buffer *)info;
+ size_t numBytesWritten = fillBuffer(buffer->raw, buffer->size);
+ buffer->size = numBytesWritten;
+ }
+ break;
-void AudioPlayer::onStreamEnd() {
- mReachedEOS = true;
+ case AudioTrack::EVENT_STREAM_END:
+ mReachedEOS = true;
+ break;
+ }
}
size_t AudioPlayer::fillBuffer(void *data, size_t size) {
diff --git a/cmds/stagefright/AudioPlayer.h b/cmds/stagefright/AudioPlayer.h
index 95b8702..43550ea 100644
--- a/cmds/stagefright/AudioPlayer.h
+++ b/cmds/stagefright/AudioPlayer.h
@@ -19,7 +19,6 @@
#define AUDIO_PLAYER_H_
#include <media/AudioResamplerPublic.h>
-#include <media/AudioTrack.h>
#include <media/stagefright/MediaSource.h>
#include <media/MediaPlayerInterface.h>
#include <media/stagefright/MediaBuffer.h>
@@ -27,9 +26,10 @@
namespace android {
+class AudioTrack;
struct AwesomePlayer;
-class AudioPlayer : AudioTrack::IAudioTrackCallback {
+class AudioPlayer {
public:
enum {
REACHED_EOS,
@@ -66,9 +66,6 @@
status_t getPlaybackRate(AudioPlaybackRate *rate /* nonnull */);
private:
- friend sp<AudioPlayer>;
- size_t onMoreData(const AudioTrack::Buffer& buffer) override;
- void onStreamEnd() override;
sp<MediaSource> mSource;
sp<AudioTrack> mAudioTrack;
diff --git a/cmds/stagefright/audioloop.cpp b/cmds/stagefright/audioloop.cpp
index 83f8fe9..4b41ff8 100644
--- a/cmds/stagefright/audioloop.cpp
+++ b/cmds/stagefright/audioloop.cpp
@@ -166,9 +166,9 @@
sp<MediaSource> decoder = SimpleDecodingSource::Create(encoder);
if (playToSpeaker) {
- sp<AudioPlayer> player = sp<AudioPlayer>::make(nullptr);
- player->setSource(decoder);
- player->start();
+ AudioPlayer player(NULL);
+ player.setSource(decoder);
+ player.start();
sleep(duration);
ALOGI("Line: %d", __LINE__);
diff --git a/cmds/stagefright/record.cpp b/cmds/stagefright/record.cpp
index 5743ad6..098c278 100644
--- a/cmds/stagefright/record.cpp
+++ b/cmds/stagefright/record.cpp
@@ -32,6 +32,7 @@
#include <media/stagefright/SimpleDecodingSource.h>
#include <media/MediaPlayerInterface.h>
+#include "AudioPlayer.h"
using namespace android;
@@ -273,6 +274,17 @@
const int32_t kNumChannels = 2;
sp<MediaSource> audioSource = new SineSource(kSampleRate, kNumChannels);
+#if 0
+ sp<MediaPlayerBase::AudioSink> audioSink;
+ AudioPlayer *player = new AudioPlayer(audioSink);
+ player->setSource(audioSource);
+ player->start();
+
+ sleep(10);
+
+ player->stop();
+#endif
+
sp<AMessage> encMeta = new AMessage;
encMeta->setString("mime",
0 ? MEDIA_MIMETYPE_AUDIO_AMR_WB : MEDIA_MIMETYPE_AUDIO_AAC);
diff --git a/cmds/stagefright/stagefright.cpp b/cmds/stagefright/stagefright.cpp
index ec16bc2..c430f05 100644
--- a/cmds/stagefright/stagefright.cpp
+++ b/cmds/stagefright/stagefright.cpp
@@ -220,7 +220,7 @@
}
if (gPlaybackAudio) {
- sp<AudioPlayer> player = sp<AudioPlayer>::make(nullptr);
+ AudioPlayer *player = new AudioPlayer(NULL);
player->setSource(rawSource);
rawSource.clear();
@@ -235,6 +235,9 @@
fprintf(stderr, "unable to start playback err=%d (0x%08x)\n", err, err);
}
+ delete player;
+ player = NULL;
+
return;
} else if (gReproduceBug >= 3 && gReproduceBug <= 5) {
int64_t durationUs;