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

Commit 075746dd authored by Atneya's avatar Atneya
Browse files

Implement AudioTrack callback in AudioPlayer

Modify AudioPlayer to implement AudioTrack callback interface rather
than passing callback function pointers. Change instantiations of
AudioPlayer to use sp.

Test: Compiles
Change-Id: Iad51430dd99c985ad6e6fc4f39d6ed5b44120f5b
parent 36c0118a
Loading
Loading
Loading
Loading
+7 −18
Original line number Original line Diff line number Diff line
@@ -249,7 +249,8 @@ status_t AudioPlayer::start(bool sourceAlreadyStarted) {


        mAudioTrack = new AudioTrack(
        mAudioTrack = new AudioTrack(
                AUDIO_STREAM_MUSIC, mSampleRate, AUDIO_FORMAT_PCM_16_BIT, audioMask,
                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*/);
                0 /*notificationFrames*/);


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


void AudioPlayer::AudioCallback(int event, void *info) {
size_t AudioPlayer::onMoreData(const AudioTrack::Buffer& buffer) {
    switch (event) {
    return fillBuffer(buffer.raw, buffer.size);
    case AudioTrack::EVENT_MORE_DATA:
        {
        AudioTrack::Buffer *buffer = (AudioTrack::Buffer *)info;
        size_t numBytesWritten = fillBuffer(buffer->raw, buffer->size);
        buffer->size = numBytesWritten;
}
}
        break;


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


size_t AudioPlayer::fillBuffer(void *data, size_t size) {
size_t AudioPlayer::fillBuffer(void *data, size_t size) {
+5 −2
Original line number Original line Diff line number Diff line
@@ -19,6 +19,7 @@
#define AUDIO_PLAYER_H_
#define AUDIO_PLAYER_H_


#include <media/AudioResamplerPublic.h>
#include <media/AudioResamplerPublic.h>
#include <media/AudioTrack.h>
#include <media/stagefright/MediaSource.h>
#include <media/stagefright/MediaSource.h>
#include <media/MediaPlayerInterface.h>
#include <media/MediaPlayerInterface.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaBuffer.h>
@@ -26,10 +27,9 @@


namespace android {
namespace android {


class AudioTrack;
struct AwesomePlayer;
struct AwesomePlayer;


class AudioPlayer {
class AudioPlayer : AudioTrack::IAudioTrackCallback {
public:
public:
    enum {
    enum {
        REACHED_EOS,
        REACHED_EOS,
@@ -66,6 +66,9 @@ public:
    status_t getPlaybackRate(AudioPlaybackRate *rate /* nonnull */);
    status_t getPlaybackRate(AudioPlaybackRate *rate /* nonnull */);


private:
private:
    friend sp<AudioPlayer>;
    size_t onMoreData(const AudioTrack::Buffer& buffer) override;
    void onStreamEnd() override;
    sp<MediaSource> mSource;
    sp<MediaSource> mSource;
    sp<AudioTrack> mAudioTrack;
    sp<AudioTrack> mAudioTrack;


+3 −3
Original line number Original line Diff line number Diff line
@@ -166,9 +166,9 @@ int main(int argc, char* argv[])
        sp<MediaSource> decoder = SimpleDecodingSource::Create(encoder);
        sp<MediaSource> decoder = SimpleDecodingSource::Create(encoder);


        if (playToSpeaker) {
        if (playToSpeaker) {
            AudioPlayer player(NULL);
            sp<AudioPlayer> player = sp<AudioPlayer>::make(nullptr);
            player.setSource(decoder);
            player->setSource(decoder);
            player.start();
            player->start();
            sleep(duration);
            sleep(duration);


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


#include "AudioPlayer.h"


using namespace android;
using namespace android;


@@ -274,17 +273,6 @@ int main(int /* argc */, char ** /* argv */) {
    const int32_t kNumChannels = 2;
    const int32_t kNumChannels = 2;
    sp<MediaSource> audioSource = new SineSource(kSampleRate, kNumChannels);
    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;
    sp<AMessage> encMeta = new AMessage;
    encMeta->setString("mime",
    encMeta->setString("mime",
            0 ? MEDIA_MIMETYPE_AUDIO_AMR_WB : MEDIA_MIMETYPE_AUDIO_AAC);
            0 ? MEDIA_MIMETYPE_AUDIO_AMR_WB : MEDIA_MIMETYPE_AUDIO_AAC);
+1 −4
Original line number Original line Diff line number Diff line
@@ -220,7 +220,7 @@ static void playSource(sp<MediaSource> &source) {
    }
    }


    if (gPlaybackAudio) {
    if (gPlaybackAudio) {
        AudioPlayer *player = new AudioPlayer(NULL);
        sp<AudioPlayer> player = sp<AudioPlayer>::make(nullptr);
        player->setSource(rawSource);
        player->setSource(rawSource);
        rawSource.clear();
        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);
            fprintf(stderr, "unable to start playback err=%d (0x%08x)\n", err, err);
        }
        }


        delete player;
        player = NULL;

        return;
        return;
    } else if (gReproduceBug >= 3 && gReproduceBug <= 5) {
    } else if (gReproduceBug >= 3 && gReproduceBug <= 5) {
        int64_t durationUs;
        int64_t durationUs;