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

Commit 1e7a97da authored by Vlad Popa's avatar Vlad Popa Committed by Android (Google) Code Review
Browse files

Merge "Set the piid for the MediaPlayer AudioTrack"

parents 0f9c1a8a b4f5b01f
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -195,7 +195,8 @@ enum media_player_invoke_ids {
    INVOKE_ID_SELECT_TRACK = 4,
    INVOKE_ID_UNSELECT_TRACK = 5,
    INVOKE_ID_SET_VIDEO_SCALING_MODE = 6,
    INVOKE_ID_GET_SELECTED_TRACK = 7
    INVOKE_ID_GET_SELECTED_TRACK = 7,
    INVOKE_ID_SET_PLAYER_IID = 8,
};

// ----------------------------------------------------------------------------
+17 −1
Original line number Diff line number Diff line
@@ -1805,7 +1805,8 @@ int Antagonizer::callbackThread(void* user)
MediaPlayerService::AudioOutput::AudioOutput(audio_session_t sessionId,
        const AttributionSourceState& attributionSource, const audio_attributes_t* attr,
        const sp<AudioSystem::AudioDeviceCallback>& deviceCallback)
    : mCallback(NULL),
    : mCachedPlayerIId(PLAYER_PIID_INVALID),
      mCallback(NULL),
      mCallbackCookie(NULL),
      mCallbackData(NULL),
      mStreamType(AUDIO_STREAM_MUSIC),
@@ -2314,6 +2315,10 @@ status_t MediaPlayerService::AudioOutput::open(
        return t->applyVolumeShaper(shaper.mConfiguration, operationToEnd);
    });

    if (mCachedPlayerIId != PLAYER_PIID_INVALID) {
        t->setPlayerIId(mCachedPlayerIId);
    }

    mSampleRateHz = sampleRate;
    mFlags = flags;
    mMsecsPerFrame = 1E3f / (mPlaybackRate.mSpeed * sampleRate);
@@ -2366,6 +2371,17 @@ status_t MediaPlayerService::AudioOutput::start()
    return NO_INIT;
}

void MediaPlayerService::AudioOutput::setPlayerIId(int32_t playerIId)
{
    ALOGV("setPlayerIId(%d)", playerIId);
    Mutex::Autolock lock(mLock);
    mCachedPlayerIId = playerIId;

    if (mTrack != nullptr) {
        mTrack->setPlayerIId(mCachedPlayerIId);
    }
}

void MediaPlayerService::AudioOutput::setNextOutput(const sp<AudioOutput>& nextOutput) {
    Mutex::Autolock lock(mLock);
    mNextOutput = nextOutput;
+3 −0
Original line number Diff line number Diff line
@@ -113,6 +113,8 @@ class MediaPlayerService : public BnMediaPlayerService
                bool doNotReconnect = false,
                uint32_t suggestedFrameCount = 0);

        virtual void            setPlayerIId(int32_t playerIId);

        virtual status_t        start();
        virtual ssize_t         write(const void* buffer, size_t size, bool blocking = true);
        virtual void            stop();
@@ -160,6 +162,7 @@ class MediaPlayerService : public BnMediaPlayerService
        sp<AudioTrack>          mTrack;
        sp<AudioTrack>          mRecycledTrack;
        sp<AudioOutput>         mNextOutput;
        int                     mCachedPlayerIId;
        AudioCallback           mCallback;
        void *                  mCallbackCookie;
        sp<CallbackData>        mCallbackData;
+2 −0
Original line number Diff line number Diff line
@@ -123,6 +123,8 @@ public:
                bool doNotReconnect = false,
                uint32_t suggestedFrameCount = 0) = 0;

        virtual void        setPlayerIId(int32_t playerIId) = 0;

        virtual status_t    start() = 0;

        /* Input parameter |size| is in byte units stored in |buffer|.
+18 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@
#include "NuPlayer.h"
#include "NuPlayerSource.h"

#include <audiomanager/AudioManager.h>
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/ALooper.h>
#include <media/stagefright/foundation/AUtils.h>
@@ -85,6 +86,7 @@ NuPlayerDriver::NuPlayerDriver(pid_t pid)
      mMediaClock(new MediaClock),
      mPlayer(new NuPlayer(pid, mMediaClock)),
      mPlayerFlags(0),
      mCachedPlayerIId(PLAYER_PIID_INVALID),
      mMetricsItem(NULL),
      mClientUid(-1),
      mAtEOS(false),
@@ -804,6 +806,16 @@ status_t NuPlayerDriver::invoke(const Parcel &request, Parcel *reply) {
            return mPlayer->getSelectedTrack(type, reply);
        }

        case INVOKE_ID_SET_PLAYER_IID:
        {
            Mutex::Autolock autoLock(mAudioSinkLock);
            mCachedPlayerIId = request.readInt32();
            if (mAudioSink != nullptr) {
                mAudioSink->setPlayerIId(mCachedPlayerIId);
            }
            return OK;
        }

        default:
        {
            return INVALID_OPERATION;
@@ -812,8 +824,12 @@ status_t NuPlayerDriver::invoke(const Parcel &request, Parcel *reply) {
}

void NuPlayerDriver::setAudioSink(const sp<AudioSink> &audioSink) {
    Mutex::Autolock autoLock(mAudioSinkLock);
    mPlayer->setAudioSink(audioSink);
    mAudioSink = audioSink;
    if (mCachedPlayerIId != PLAYER_PIID_INVALID) {
        mAudioSink->setPlayerIId(mCachedPlayerIId);
    }
}

status_t NuPlayerDriver::setParameter(
@@ -1027,6 +1043,7 @@ void NuPlayerDriver::notifyListener_l(
            if (mState != STATE_RESET_IN_PROGRESS) {
                if (mAutoLoop) {
                    audio_stream_type_t streamType = AUDIO_STREAM_MUSIC;
                    Mutex::Autolock autoLock(mAudioSinkLock);
                    if (mAudioSink != NULL) {
                        streamType = mAudioSink->getAudioStreamType();
                    }
@@ -1037,6 +1054,7 @@ void NuPlayerDriver::notifyListener_l(
                }
                if (mLooping || mAutoLoop) {
                    mPlayer->seekToAsync(0);
                    Mutex::Autolock autoLock(mAudioSinkLock);
                    if (mAudioSink != NULL) {
                        // The renderer has stopped the sink at the end in order to play out
                        // the last little bit of audio. If we're looping, we need to restart it.
Loading