Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 3ce02e4a authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Revert "Implement AudioTrack callback in AudioPlayer""

parents 10400634 b807582a
Loading
Loading
Loading
Loading
+18 −7
Original line number Diff line number Diff line
@@ -249,8 +249,7 @@ status_t AudioPlayer::start(bool sourceAlreadyStarted) {

        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 @@ void AudioPlayer::reset() {
    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 @@ size_t AudioPlayer::AudioSinkCallback(
    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() {
    case AudioTrack::EVENT_STREAM_END:
        mReachedEOS = true;
        break;
    }
}

size_t AudioPlayer::fillBuffer(void *data, size_t size) {
+2 −5
Original line number Diff line number Diff line
@@ -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 @@ public:
    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;

+3 −3
Original line number Diff line number Diff line
@@ -166,9 +166,9 @@ int main(int argc, char* argv[])
        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__);
+12 −0
Original line number Diff line number Diff line
@@ -32,6 +32,7 @@
#include <media/stagefright/SimpleDecodingSource.h>
#include <media/MediaPlayerInterface.h>

#include "AudioPlayer.h"

using namespace android;

@@ -273,6 +274,17 @@ int main(int /* argc */, char ** /* argv */) {
    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);
+4 −1
Original line number Diff line number Diff line
@@ -220,7 +220,7 @@ static void playSource(sp<MediaSource> &source) {
    }

    if (gPlaybackAudio) {
        sp<AudioPlayer> player = sp<AudioPlayer>::make(nullptr);
        AudioPlayer *player = new AudioPlayer(NULL);
        player->setSource(rawSource);
        rawSource.clear();

@@ -235,6 +235,9 @@ static void playSource(sp<MediaSource> &source) {
            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;