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

Commit 42418a3b authored by Atneya Nair's avatar Atneya Nair
Browse files

Revert "Revert "Implement AudioTrack callback in AudioPlayer""

This reverts commit b807582a.

Reason for revert: Issue causing revert was fixed in Ifbf177ae43fa4c2a61027af6c131846961c09cd8

Change-Id: I864e4ea9b186856bc4a204b4dcc33c3cf4635582
Related-To: Ifbf177ae43fa4c2a61027af6c131846961c09cd8
parent 7cb80e51
Loading
Loading
Loading
Loading
+7 −18
Original line number Diff line number Diff line
@@ -249,7 +249,8 @@ 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, &AudioCallback, this,
                0 /*frameCount*/, AUDIO_OUTPUT_FLAG_NONE,
                wp<IAudioTrackCallback>::fromExisting(this),
                0 /*notificationFrames*/);

        if ((err = mAudioTrack->initCheck()) != OK) {
@@ -397,10 +398,6 @@ 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;
@@ -455,20 +452,12 @@ size_t AudioPlayer::AudioSinkCallback(
    return 0;
}

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;
size_t AudioPlayer::onMoreData(const AudioTrack::Buffer& buffer) {
    return fillBuffer(buffer.raw, buffer.size);
}
        break;

    case AudioTrack::EVENT_STREAM_END:
void AudioPlayer::onStreamEnd() {
    mReachedEOS = true;
        break;
    }
}

size_t AudioPlayer::fillBuffer(void *data, size_t size) {
+5 −5
Original line number Diff line number Diff line
@@ -19,6 +19,7 @@
#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>
@@ -26,10 +27,9 @@

namespace android {

class AudioTrack;
struct AwesomePlayer;

class AudioPlayer {
class AudioPlayer : AudioTrack::IAudioTrackCallback {
public:
    enum {
        REACHED_EOS,
@@ -66,6 +66,9 @@ 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;

@@ -99,9 +102,6 @@ private:
    int64_t mStartPosUs;
    const uint32_t mCreateFlags;

    static void AudioCallback(int event, void *user, void *info);
    void AudioCallback(int event, void *info);

    static size_t AudioSinkCallback(
            MediaPlayerBase::AudioSink *audioSink,
            void *data, size_t size, void *me,
+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) {
            AudioPlayer player(NULL);
            player.setSource(decoder);
            player.start();
            sp<AudioPlayer> player = sp<AudioPlayer>::make(nullptr);
            player->setSource(decoder);
            player->start();
            sleep(duration);

ALOGI("Line: %d", __LINE__);
+0 −12
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@
#include <media/stagefright/SimpleDecodingSource.h>
#include <media/MediaPlayerInterface.h>

#include "AudioPlayer.h"

using namespace android;

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

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

@@ -235,9 +235,6 @@ 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;