Loading media/libmedia/include/media/mediaplayer.h +2 −1 Original line number Diff line number Diff line Loading @@ -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, }; // ---------------------------------------------------------------------------- Loading media/libmediaplayerservice/MediaPlayerService.cpp +17 −1 Original line number Diff line number Diff line Loading @@ -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), Loading Loading @@ -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); Loading Loading @@ -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; Loading media/libmediaplayerservice/MediaPlayerService.h +3 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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; Loading media/libmediaplayerservice/include/MediaPlayerInterface.h +2 −0 Original line number Diff line number Diff line Loading @@ -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|. Loading media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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), Loading Loading @@ -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; Loading @@ -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( Loading Loading @@ -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(); } Loading @@ -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 Loading
media/libmedia/include/media/mediaplayer.h +2 −1 Original line number Diff line number Diff line Loading @@ -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, }; // ---------------------------------------------------------------------------- Loading
media/libmediaplayerservice/MediaPlayerService.cpp +17 −1 Original line number Diff line number Diff line Loading @@ -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), Loading Loading @@ -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); Loading Loading @@ -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; Loading
media/libmediaplayerservice/MediaPlayerService.h +3 −0 Original line number Diff line number Diff line Loading @@ -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(); Loading Loading @@ -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; Loading
media/libmediaplayerservice/include/MediaPlayerInterface.h +2 −0 Original line number Diff line number Diff line Loading @@ -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|. Loading
media/libmediaplayerservice/nuplayer/NuPlayerDriver.cpp +18 −0 Original line number Diff line number Diff line Loading @@ -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> Loading Loading @@ -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), Loading Loading @@ -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; Loading @@ -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( Loading Loading @@ -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(); } Loading @@ -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