Revert "Implement AudioTrack callback in AudioPlayer" This reverts commit 075746dd0e6a3fc55b89a19a5ec0d6491829a74b. Reason for revert: Bug: 204055298 Change-Id: I3d8a4e56797d6eccc2ba56f766d4e4d53e24a88d (cherry picked from commit b807582a7cf76f1a95a1b28d3c4bfddfac20109e)
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;