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

Commit b4f5b01f authored by Vlad Popa's avatar Vlad Popa
Browse files

Set the piid for the MediaPlayer AudioTrack

This enables the mapping between piid and portId in the AudioService.
The mapping is used for the playback mute notifications.

Test: dumpsys audio & atest android.media.audio.cts.AudioPlaybackConfigurationTest
Bug: 235521198
Change-Id: I60f0b154f7464fe6012e546c0a30e65220482181
parent 0e7b2f1e
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