Loading media/libmedia/MediaPlayer2Manager.cpp +46 −63 Original line number Diff line number Diff line Loading @@ -328,7 +328,7 @@ status_t MediaPlayer2Manager::Client::dump(int fd, const Vector<String16>& args) mPid, mConnId, mStatus, mLoop?"true": "false"); result.append(buffer); sp<MediaPlayer2Base> p; sp<MediaPlayer2Interface> p; sp<AudioOutput> audioOutput; bool locked = false; for (int i = 0; i < kDumpLockRetries; ++i) { Loading Loading @@ -532,7 +532,7 @@ void MediaPlayer2Manager::Client::disconnect() ALOGV("disconnect(%d) from pid %d", mConnId, mPid); // grab local reference and clear main reference to prevent future // access to object sp<MediaPlayer2Base> p; sp<MediaPlayer2Interface> p; { Mutex::Autolock l(mLock); p = mPlayer; Loading Loading @@ -560,8 +560,8 @@ void MediaPlayer2Manager::Client::disconnect() IPCThreadState::self()->flushCommands(); } sp<MediaPlayer2Base> MediaPlayer2Manager::Client::createPlayer() { sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> MediaPlayer2Manager::Client::createPlayer() { sp<MediaPlayer2Interface> p = getPlayer(); if (p == NULL) { p = new NuPlayer2Driver(mPid); status_t init_result = p->initCheck(); Loading @@ -583,7 +583,7 @@ sp<MediaPlayer2Base> MediaPlayer2Manager::Client::createPlayer() { void MediaPlayer2Manager::Client::AudioDeviceUpdatedNotifier::onAudioDeviceUpdate( audio_io_handle_t audioIo, audio_port_handle_t deviceId) { sp<MediaPlayer2Base> listener = mListener.promote(); sp<MediaPlayer2Interface> listener = mListener.promote(); if (listener != NULL) { listener->sendEvent(MEDIA2_AUDIO_ROUTING_CHANGED, audioIo, deviceId); } else { Loading @@ -591,8 +591,8 @@ void MediaPlayer2Manager::Client::AudioDeviceUpdatedNotifier::onAudioDeviceUpdat } } sp<MediaPlayer2Base> MediaPlayer2Manager::Client::setDataSource_pre() { sp<MediaPlayer2Base> p = createPlayer(); sp<MediaPlayer2Interface> MediaPlayer2Manager::Client::setDataSource_pre() { sp<MediaPlayer2Interface> p = createPlayer(); if (p == NULL) { return p; } Loading @@ -601,17 +601,15 @@ sp<MediaPlayer2Base> MediaPlayer2Manager::Client::setDataSource_pre() { mAudioDeviceUpdatedListener = new AudioDeviceUpdatedNotifier(p); if (!p->hardwareOutput()) { mAudioOutput = new AudioOutput(mAudioSessionId, mUid, mPid, mAudioAttributes, mAudioDeviceUpdatedListener); static_cast<MediaPlayer2Interface*>(p.get())->setAudioSink(mAudioOutput); } p->setAudioSink(mAudioOutput); return p; } status_t MediaPlayer2Manager::Client::setDataSource_post( const sp<MediaPlayer2Base>& p, const sp<MediaPlayer2Interface>& p, status_t status) { ALOGV(" setDataSource"); Loading Loading @@ -657,7 +655,7 @@ status_t MediaPlayer2Manager::Client::setDataSource( mStatus = UNKNOWN_ERROR; return mStatus; } else { sp<MediaPlayer2Base> p = setDataSource_pre(); sp<MediaPlayer2Interface> p = setDataSource_pre(); if (p == NULL) { return NO_INIT; } Loading Loading @@ -694,7 +692,7 @@ status_t MediaPlayer2Manager::Client::setDataSource(int fd, int64_t offset, int6 ALOGV("calculated length = %lld", (long long)length); } sp<MediaPlayer2Base> p = setDataSource_pre(); sp<MediaPlayer2Interface> p = setDataSource_pre(); if (p == NULL) { return NO_INIT; } Loading @@ -705,7 +703,7 @@ status_t MediaPlayer2Manager::Client::setDataSource(int fd, int64_t offset, int6 status_t MediaPlayer2Manager::Client::setDataSource( const sp<IStreamSource> &source) { sp<MediaPlayer2Base> p = setDataSource_pre(); sp<MediaPlayer2Interface> p = setDataSource_pre(); if (p == NULL) { return NO_INIT; } Loading @@ -716,7 +714,7 @@ status_t MediaPlayer2Manager::Client::setDataSource( status_t MediaPlayer2Manager::Client::setDataSource( const sp<DataSource> &source) { sp<MediaPlayer2Base> p = setDataSource_pre(); sp<MediaPlayer2Interface> p = setDataSource_pre(); if (p == NULL) { return NO_INIT; } Loading @@ -743,7 +741,7 @@ status_t MediaPlayer2Manager::Client::setVideoSurfaceTexture( ALOGV("[%d] setVideoSurfaceTexture(%p)", mConnId, (nww == NULL ? NULL : nww->getANativeWindow())); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; if (nww != NULL && nww->getANativeWindow() != NULL) { Loading Loading @@ -796,7 +794,7 @@ status_t MediaPlayer2Manager::Client::setVideoSurfaceTexture( status_t MediaPlayer2Manager::Client::invoke(const Parcel& request, Parcel *reply) { sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == NULL) return UNKNOWN_ERROR; return p->invoke(request, reply); } Loading @@ -820,7 +818,7 @@ status_t MediaPlayer2Manager::Client::setMetadataFilter(const Parcel& filter) status_t MediaPlayer2Manager::Client::getMetadata( bool update_only, bool /*apply_filter*/, Parcel *reply) { sp<MediaPlayer2Base> player = getPlayer(); sp<MediaPlayer2Interface> player = getPlayer(); if (player == 0) return UNKNOWN_ERROR; status_t status; Loading Loading @@ -865,7 +863,7 @@ status_t MediaPlayer2Manager::Client::setBufferingSettings( { ALOGV("[%d] setBufferingSettings{%s}", mConnId, buffering.toString().string()); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->setBufferingSettings(buffering); } Loading @@ -873,7 +871,7 @@ status_t MediaPlayer2Manager::Client::setBufferingSettings( status_t MediaPlayer2Manager::Client::getBufferingSettings( BufferingSettings* buffering /* nonnull */) { sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); // TODO: create mPlayer on demand. if (p == 0) return UNKNOWN_ERROR; status_t ret = p->getBufferingSettings(buffering); Loading @@ -889,7 +887,7 @@ status_t MediaPlayer2Manager::Client::getBufferingSettings( status_t MediaPlayer2Manager::Client::prepareAsync() { ALOGV("[%d] prepareAsync", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->prepareAsync(); #if CALLBACK_ANTAGONIZER Loading @@ -902,7 +900,7 @@ status_t MediaPlayer2Manager::Client::prepareAsync() status_t MediaPlayer2Manager::Client::start() { ALOGV("[%d] start", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; p->setLooping(mLoop); return p->start(); Loading @@ -911,7 +909,7 @@ status_t MediaPlayer2Manager::Client::start() status_t MediaPlayer2Manager::Client::stop() { ALOGV("[%d] stop", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->stop(); } Loading @@ -919,7 +917,7 @@ status_t MediaPlayer2Manager::Client::stop() status_t MediaPlayer2Manager::Client::pause() { ALOGV("[%d] pause", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->pause(); } Loading @@ -927,7 +925,7 @@ status_t MediaPlayer2Manager::Client::pause() status_t MediaPlayer2Manager::Client::isPlaying(bool* state) { *state = false; sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; *state = p->isPlaying(); ALOGV("[%d] isPlaying: %d", mConnId, *state); Loading @@ -938,14 +936,14 @@ status_t MediaPlayer2Manager::Client::setPlaybackSettings(const AudioPlaybackRat { ALOGV("[%d] setPlaybackSettings(%f, %f, %d, %d)", mConnId, rate.mSpeed, rate.mPitch, rate.mFallbackMode, rate.mStretchMode); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->setPlaybackSettings(rate); } status_t MediaPlayer2Manager::Client::getPlaybackSettings(AudioPlaybackRate* rate /* nonnull */) { sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->getPlaybackSettings(rate); if (ret == NO_ERROR) { Loading @@ -962,7 +960,7 @@ status_t MediaPlayer2Manager::Client::setSyncSettings( { ALOGV("[%d] setSyncSettings(%u, %u, %f, %f)", mConnId, sync.mSource, sync.mAudioAdjustMode, sync.mTolerance, videoFpsHint); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->setSyncSettings(sync, videoFpsHint); } Loading @@ -970,7 +968,7 @@ status_t MediaPlayer2Manager::Client::setSyncSettings( status_t MediaPlayer2Manager::Client::getSyncSettings( AVSyncSettings* sync /* nonnull */, float* videoFps /* nonnull */) { sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->getSyncSettings(sync, videoFps); if (ret == NO_ERROR) { Loading @@ -985,7 +983,7 @@ status_t MediaPlayer2Manager::Client::getSyncSettings( status_t MediaPlayer2Manager::Client::getCurrentPosition(int *msec) { ALOGV("getCurrentPosition"); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->getCurrentPosition(msec); if (ret == NO_ERROR) { Loading @@ -999,7 +997,7 @@ status_t MediaPlayer2Manager::Client::getCurrentPosition(int *msec) status_t MediaPlayer2Manager::Client::getDuration(int *msec) { ALOGV("getDuration"); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->getDuration(msec); if (ret == NO_ERROR) { Loading @@ -1023,7 +1021,7 @@ status_t MediaPlayer2Manager::Client::setNextPlayer(const sp<MediaPlayer2Engine> if (c != NULL) { if (mAudioOutput != NULL) { mAudioOutput->setNextOutput(c->mAudioOutput); } else if ((mPlayer != NULL) && !mPlayer->hardwareOutput()) { } else { ALOGE("no current audio output"); } Loading @@ -1040,13 +1038,9 @@ VolumeShaper::Status MediaPlayer2Manager::Client::applyVolumeShaper( const sp<VolumeShaper::Operation>& operation) { // for hardware output, call player instead ALOGV("Client::applyVolumeShaper(%p)", this); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); { Mutex::Autolock l(mLock); if (p != 0 && p->hardwareOutput()) { // TODO: investigate internal implementation return VolumeShaper::Status(INVALID_OPERATION); } if (mAudioOutput.get() != nullptr) { return mAudioOutput->applyVolumeShaper(configuration, operation); } Loading @@ -1057,13 +1051,9 @@ VolumeShaper::Status MediaPlayer2Manager::Client::applyVolumeShaper( sp<VolumeShaper::State> MediaPlayer2Manager::Client::getVolumeShaperState(int id) { // for hardware output, call player instead ALOGV("Client::getVolumeShaperState(%p)", this); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); { Mutex::Autolock l(mLock); if (p != 0 && p->hardwareOutput()) { // TODO: investigate internal implementation. return nullptr; } if (mAudioOutput.get() != nullptr) { return mAudioOutput->getVolumeShaperState(id); } Loading @@ -1074,7 +1064,7 @@ sp<VolumeShaper::State> MediaPlayer2Manager::Client::getVolumeShaperState(int id status_t MediaPlayer2Manager::Client::seekTo(int msec, MediaPlayer2SeekMode mode) { ALOGV("[%d] seekTo(%d, %d)", mConnId, msec, mode); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->seekTo(msec, mode); } Loading @@ -1083,7 +1073,7 @@ status_t MediaPlayer2Manager::Client::reset() { ALOGV("[%d] reset", mConnId); mRetransmitEndpointValid = false; sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->reset(); } Loading @@ -1091,7 +1081,7 @@ status_t MediaPlayer2Manager::Client::reset() status_t MediaPlayer2Manager::Client::notifyAt(int64_t mediaTimeUs) { ALOGV("[%d] notifyAt(%lld)", mConnId, (long long)mediaTimeUs); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->notifyAt(mediaTimeUs); } Loading Loading @@ -1128,7 +1118,7 @@ status_t MediaPlayer2Manager::Client::setLooping(int loop) { ALOGV("[%d] setLooping(%d)", mConnId, loop); mLoop = loop; sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p != 0) return p->setLooping(loop); return NO_ERROR; } Loading @@ -1138,17 +1128,10 @@ status_t MediaPlayer2Manager::Client::setVolume(float leftVolume, float rightVol ALOGV("[%d] setVolume(%f, %f)", mConnId, leftVolume, rightVolume); // for hardware output, call player instead sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); { Mutex::Autolock l(mLock); if (p != 0 && p->hardwareOutput()) { MediaPlayerHWInterface* hwp = reinterpret_cast<MediaPlayerHWInterface*>(p.get()); return hwp->setVolume(leftVolume, rightVolume); } else { if (mAudioOutput != 0) mAudioOutput->setVolume(leftVolume, rightVolume); return NO_ERROR; } } return NO_ERROR; Loading Loading @@ -1179,7 +1162,7 @@ status_t MediaPlayer2Manager::Client::setParameter(int key, const Parcel &reques return setAudioAttributes_l(request); } default: sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) { return UNKNOWN_ERROR; } return p->setParameter(key, request); } Loading @@ -1187,7 +1170,7 @@ status_t MediaPlayer2Manager::Client::setParameter(int key, const Parcel &reques status_t MediaPlayer2Manager::Client::getParameter(int key, Parcel *reply) { ALOGV("[%d] getParameter(%d)", mConnId, key); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->getParameter(key, reply); } Loading @@ -1204,7 +1187,7 @@ status_t MediaPlayer2Manager::Client::setRetransmitEndpoint( ALOGV("[%d] setRetransmitEndpoint = <none>", mConnId); } sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); // Right now, the only valid time to set a retransmit endpoint is before // player selection has been made (since the presence or absence of a Loading @@ -1230,7 +1213,7 @@ status_t MediaPlayer2Manager::Client::getRetransmitEndpoint( if (NULL == endpoint) return BAD_VALUE; sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p != NULL) return p->getRetransmitEndpoint(endpoint); Loading Loading @@ -1333,7 +1316,7 @@ status_t MediaPlayer2Manager::Client::prepareDrm(const uint8_t uuid[16], const Vector<uint8_t>& drmSessionId) { ALOGV("[%d] prepareDrm", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->prepareDrm(uuid, drmSessionId); Loading @@ -1345,7 +1328,7 @@ status_t MediaPlayer2Manager::Client::prepareDrm(const uint8_t uuid[16], status_t MediaPlayer2Manager::Client::releaseDrm() { ALOGV("[%d] releaseDrm", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->releaseDrm(); Loading media/libmedia/MediaPlayer2Manager.h +10 −10 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ class MediaPlayer2EngineClient; class Antagonizer { public: Antagonizer( MediaPlayer2Base::NotifyCallback cb, MediaPlayer2Interface::NotifyCallback cb, const wp<MediaPlayer2Engine> &client); void start() { mActive = true; } void stop() { mActive = false; } Loading @@ -62,14 +62,14 @@ private: bool mExit; bool mActive; wp<MediaPlayer2Engine> mClient; MediaPlayer2Base::NotifyCallback mCb; MediaPlayer2Interface::NotifyCallback mCb; }; #endif class MediaPlayer2Manager { class Client; class AudioOutput : public MediaPlayer2Base::AudioSink class AudioOutput : public MediaPlayer2Interface::AudioSink { class CallbackData; Loading Loading @@ -287,7 +287,7 @@ private: const sp<media::VolumeShaper::Operation>& operation) override; virtual sp<media::VolumeShaper::State> getVolumeShaperState(int id) override; sp<MediaPlayer2Base> createPlayer(); sp<MediaPlayer2Interface> createPlayer(); virtual status_t setDataSource( const sp<MediaHTTPService> &httpService, Loading @@ -300,8 +300,8 @@ private: virtual status_t setDataSource(const sp<DataSource> &source); sp<MediaPlayer2Base> setDataSource_pre(); status_t setDataSource_post(const sp<MediaPlayer2Base>& p, sp<MediaPlayer2Interface> setDataSource_pre(); status_t setDataSource_post(const sp<MediaPlayer2Interface>& p, status_t status); static void notify(const wp<MediaPlayer2Engine> &listener, int msg, Loading @@ -323,7 +323,7 @@ private: class AudioDeviceUpdatedNotifier: public AudioSystem::AudioDeviceCallback { public: AudioDeviceUpdatedNotifier(const sp<MediaPlayer2Base>& listener) { AudioDeviceUpdatedNotifier(const sp<MediaPlayer2Interface>& listener) { mListener = listener; } ~AudioDeviceUpdatedNotifier() {} Loading @@ -332,7 +332,7 @@ private: audio_port_handle_t deviceId); private: wp<MediaPlayer2Base> mListener; wp<MediaPlayer2Interface> mListener; }; friend class MediaPlayer2Manager; Loading @@ -346,7 +346,7 @@ private: void deletePlayer(); sp<MediaPlayer2Base> getPlayer() const { Mutex::Autolock lock(mLock); return mPlayer; } sp<MediaPlayer2Interface> getPlayer() const { Mutex::Autolock lock(mLock); return mPlayer; } Loading @@ -366,7 +366,7 @@ private: status_t setAudioAttributes_l(const Parcel &request); mutable Mutex mLock; sp<MediaPlayer2Base> mPlayer; sp<MediaPlayer2Interface> mPlayer; sp<MediaPlayer2EngineClient> mClient; sp<AudioOutput> mAudioOutput; pid_t mPid; Loading media/libmedia/include/media/MediaPlayer2Interface.h +9 −26 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ template<typename T> class SortedVector; #define AUDIO_SINK_MIN_DEEP_BUFFER_DURATION_US 5000000 // abstract base class - use MediaPlayer2Interface class MediaPlayer2Base : public AHandler class MediaPlayer2Interface : public AHandler { public: // callback mechanism for passing messages to MediaPlayer2 object Loading Loading @@ -148,15 +148,16 @@ public: virtual status_t enableAudioDeviceCallback(bool enabled); }; MediaPlayer2Base() : mClient(0), mNotify(0) {} virtual ~MediaPlayer2Base() {} MediaPlayer2Interface() : mClient(0), mNotify(0) { } virtual ~MediaPlayer2Interface() { } virtual status_t initCheck() = 0; virtual bool hardwareOutput() = 0; virtual status_t setUID(uid_t /* uid */) { return INVALID_OPERATION; } virtual void setAudioSink(const sp<AudioSink>& audioSink) { mAudioSink = audioSink; } virtual status_t setDataSource( const sp<MediaHTTPService> &httpService, const char *url, Loading Loading @@ -234,7 +235,7 @@ public: virtual status_t getRetransmitEndpoint(struct sockaddr_in* /* endpoint */) { return INVALID_OPERATION; } virtual status_t setNextPlayer(const sp<MediaPlayer2Base>& /* next */) { virtual status_t setNextPlayer(const sp<MediaPlayer2Interface>& /* next */) { return OK; } Loading Loading @@ -292,6 +293,9 @@ public: return INVALID_OPERATION; } protected: sp<AudioSink> mAudioSink; private: friend class MediaPlayer2Manager; Loading @@ -300,27 +304,6 @@ private: NotifyCallback mNotify; }; // Implement this class for media players that use the AudioFlinger software mixer class MediaPlayer2Interface : public MediaPlayer2Base { public: virtual ~MediaPlayer2Interface() { } virtual bool hardwareOutput() { return false; } virtual void setAudioSink(const sp<AudioSink>& audioSink) { mAudioSink = audioSink; } protected: sp<AudioSink> mAudioSink; }; // Implement this class for media players that output audio directly to hardware class MediaPlayer2HWInterface : public MediaPlayer2Base { public: virtual ~MediaPlayer2HWInterface() {} virtual bool hardwareOutput() { return true; } virtual status_t setVolume(float leftVolume, float rightVolume) = 0; virtual status_t setAudioStreamType(audio_stream_type_t streamType) = 0; }; }; // namespace android #endif // __cplusplus Loading media/libmedia/nuplayer2/NuPlayer2.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ namespace android { static status_t sendMetaDataToHal(sp<MediaPlayer2Base::AudioSink>& sink, static status_t sendMetaDataToHal(sp<MediaPlayer2Interface::AudioSink>& sink, const sp<MetaData>& meta) { int32_t sampleRate = 0; int32_t bitRate = 0; Loading Loading @@ -417,7 +417,7 @@ void NuPlayer2::setVideoSurfaceTextureAsync(const sp<ANativeWindowWrapper> &nww) msg->post(); } void NuPlayer2::setAudioSink(const sp<MediaPlayer2Base::AudioSink> &sink) { void NuPlayer2::setAudioSink(const sp<MediaPlayer2Interface::AudioSink> &sink) { sp<AMessage> msg = new AMessage(kWhatSetAudioSink, this); msg->setObject("sink", sink); msg->post(); Loading Loading @@ -850,7 +850,7 @@ void NuPlayer2::onMessageReceived(const sp<AMessage> &msg) { sp<RefBase> obj; CHECK(msg->findObject("sink", &obj)); mAudioSink = static_cast<MediaPlayer2Base::AudioSink *>(obj.get()); mAudioSink = static_cast<MediaPlayer2Interface::AudioSink *>(obj.get()); break; } Loading media/libmedia/nuplayer2/NuPlayer2.h +2 −2 Original line number Diff line number Diff line Loading @@ -61,7 +61,7 @@ struct NuPlayer2 : public AHandler { void setVideoSurfaceTextureAsync(const sp<ANativeWindowWrapper> &nww); void setAudioSink(const sp<MediaPlayer2Base::AudioSink> &sink); void setAudioSink(const sp<MediaPlayer2Interface::AudioSink> &sink); status_t setPlaybackSettings(const AudioPlaybackRate &rate); status_t getPlaybackSettings(AudioPlaybackRate *rate /* nonnull */); status_t setSyncSettings(const AVSyncSettings &sync, float videoFpsHint); Loading Loading @@ -168,7 +168,7 @@ private: sp<Source> mSource; uint32_t mSourceFlags; sp<ANativeWindowWrapper> mNativeWindow; sp<MediaPlayer2Base::AudioSink> mAudioSink; sp<MediaPlayer2Interface::AudioSink> mAudioSink; sp<DecoderBase> mVideoDecoder; bool mOffloadAudio; sp<DecoderBase> mAudioDecoder; Loading Loading
media/libmedia/MediaPlayer2Manager.cpp +46 −63 Original line number Diff line number Diff line Loading @@ -328,7 +328,7 @@ status_t MediaPlayer2Manager::Client::dump(int fd, const Vector<String16>& args) mPid, mConnId, mStatus, mLoop?"true": "false"); result.append(buffer); sp<MediaPlayer2Base> p; sp<MediaPlayer2Interface> p; sp<AudioOutput> audioOutput; bool locked = false; for (int i = 0; i < kDumpLockRetries; ++i) { Loading Loading @@ -532,7 +532,7 @@ void MediaPlayer2Manager::Client::disconnect() ALOGV("disconnect(%d) from pid %d", mConnId, mPid); // grab local reference and clear main reference to prevent future // access to object sp<MediaPlayer2Base> p; sp<MediaPlayer2Interface> p; { Mutex::Autolock l(mLock); p = mPlayer; Loading Loading @@ -560,8 +560,8 @@ void MediaPlayer2Manager::Client::disconnect() IPCThreadState::self()->flushCommands(); } sp<MediaPlayer2Base> MediaPlayer2Manager::Client::createPlayer() { sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> MediaPlayer2Manager::Client::createPlayer() { sp<MediaPlayer2Interface> p = getPlayer(); if (p == NULL) { p = new NuPlayer2Driver(mPid); status_t init_result = p->initCheck(); Loading @@ -583,7 +583,7 @@ sp<MediaPlayer2Base> MediaPlayer2Manager::Client::createPlayer() { void MediaPlayer2Manager::Client::AudioDeviceUpdatedNotifier::onAudioDeviceUpdate( audio_io_handle_t audioIo, audio_port_handle_t deviceId) { sp<MediaPlayer2Base> listener = mListener.promote(); sp<MediaPlayer2Interface> listener = mListener.promote(); if (listener != NULL) { listener->sendEvent(MEDIA2_AUDIO_ROUTING_CHANGED, audioIo, deviceId); } else { Loading @@ -591,8 +591,8 @@ void MediaPlayer2Manager::Client::AudioDeviceUpdatedNotifier::onAudioDeviceUpdat } } sp<MediaPlayer2Base> MediaPlayer2Manager::Client::setDataSource_pre() { sp<MediaPlayer2Base> p = createPlayer(); sp<MediaPlayer2Interface> MediaPlayer2Manager::Client::setDataSource_pre() { sp<MediaPlayer2Interface> p = createPlayer(); if (p == NULL) { return p; } Loading @@ -601,17 +601,15 @@ sp<MediaPlayer2Base> MediaPlayer2Manager::Client::setDataSource_pre() { mAudioDeviceUpdatedListener = new AudioDeviceUpdatedNotifier(p); if (!p->hardwareOutput()) { mAudioOutput = new AudioOutput(mAudioSessionId, mUid, mPid, mAudioAttributes, mAudioDeviceUpdatedListener); static_cast<MediaPlayer2Interface*>(p.get())->setAudioSink(mAudioOutput); } p->setAudioSink(mAudioOutput); return p; } status_t MediaPlayer2Manager::Client::setDataSource_post( const sp<MediaPlayer2Base>& p, const sp<MediaPlayer2Interface>& p, status_t status) { ALOGV(" setDataSource"); Loading Loading @@ -657,7 +655,7 @@ status_t MediaPlayer2Manager::Client::setDataSource( mStatus = UNKNOWN_ERROR; return mStatus; } else { sp<MediaPlayer2Base> p = setDataSource_pre(); sp<MediaPlayer2Interface> p = setDataSource_pre(); if (p == NULL) { return NO_INIT; } Loading Loading @@ -694,7 +692,7 @@ status_t MediaPlayer2Manager::Client::setDataSource(int fd, int64_t offset, int6 ALOGV("calculated length = %lld", (long long)length); } sp<MediaPlayer2Base> p = setDataSource_pre(); sp<MediaPlayer2Interface> p = setDataSource_pre(); if (p == NULL) { return NO_INIT; } Loading @@ -705,7 +703,7 @@ status_t MediaPlayer2Manager::Client::setDataSource(int fd, int64_t offset, int6 status_t MediaPlayer2Manager::Client::setDataSource( const sp<IStreamSource> &source) { sp<MediaPlayer2Base> p = setDataSource_pre(); sp<MediaPlayer2Interface> p = setDataSource_pre(); if (p == NULL) { return NO_INIT; } Loading @@ -716,7 +714,7 @@ status_t MediaPlayer2Manager::Client::setDataSource( status_t MediaPlayer2Manager::Client::setDataSource( const sp<DataSource> &source) { sp<MediaPlayer2Base> p = setDataSource_pre(); sp<MediaPlayer2Interface> p = setDataSource_pre(); if (p == NULL) { return NO_INIT; } Loading @@ -743,7 +741,7 @@ status_t MediaPlayer2Manager::Client::setVideoSurfaceTexture( ALOGV("[%d] setVideoSurfaceTexture(%p)", mConnId, (nww == NULL ? NULL : nww->getANativeWindow())); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; if (nww != NULL && nww->getANativeWindow() != NULL) { Loading Loading @@ -796,7 +794,7 @@ status_t MediaPlayer2Manager::Client::setVideoSurfaceTexture( status_t MediaPlayer2Manager::Client::invoke(const Parcel& request, Parcel *reply) { sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == NULL) return UNKNOWN_ERROR; return p->invoke(request, reply); } Loading @@ -820,7 +818,7 @@ status_t MediaPlayer2Manager::Client::setMetadataFilter(const Parcel& filter) status_t MediaPlayer2Manager::Client::getMetadata( bool update_only, bool /*apply_filter*/, Parcel *reply) { sp<MediaPlayer2Base> player = getPlayer(); sp<MediaPlayer2Interface> player = getPlayer(); if (player == 0) return UNKNOWN_ERROR; status_t status; Loading Loading @@ -865,7 +863,7 @@ status_t MediaPlayer2Manager::Client::setBufferingSettings( { ALOGV("[%d] setBufferingSettings{%s}", mConnId, buffering.toString().string()); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->setBufferingSettings(buffering); } Loading @@ -873,7 +871,7 @@ status_t MediaPlayer2Manager::Client::setBufferingSettings( status_t MediaPlayer2Manager::Client::getBufferingSettings( BufferingSettings* buffering /* nonnull */) { sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); // TODO: create mPlayer on demand. if (p == 0) return UNKNOWN_ERROR; status_t ret = p->getBufferingSettings(buffering); Loading @@ -889,7 +887,7 @@ status_t MediaPlayer2Manager::Client::getBufferingSettings( status_t MediaPlayer2Manager::Client::prepareAsync() { ALOGV("[%d] prepareAsync", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->prepareAsync(); #if CALLBACK_ANTAGONIZER Loading @@ -902,7 +900,7 @@ status_t MediaPlayer2Manager::Client::prepareAsync() status_t MediaPlayer2Manager::Client::start() { ALOGV("[%d] start", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; p->setLooping(mLoop); return p->start(); Loading @@ -911,7 +909,7 @@ status_t MediaPlayer2Manager::Client::start() status_t MediaPlayer2Manager::Client::stop() { ALOGV("[%d] stop", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->stop(); } Loading @@ -919,7 +917,7 @@ status_t MediaPlayer2Manager::Client::stop() status_t MediaPlayer2Manager::Client::pause() { ALOGV("[%d] pause", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->pause(); } Loading @@ -927,7 +925,7 @@ status_t MediaPlayer2Manager::Client::pause() status_t MediaPlayer2Manager::Client::isPlaying(bool* state) { *state = false; sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; *state = p->isPlaying(); ALOGV("[%d] isPlaying: %d", mConnId, *state); Loading @@ -938,14 +936,14 @@ status_t MediaPlayer2Manager::Client::setPlaybackSettings(const AudioPlaybackRat { ALOGV("[%d] setPlaybackSettings(%f, %f, %d, %d)", mConnId, rate.mSpeed, rate.mPitch, rate.mFallbackMode, rate.mStretchMode); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->setPlaybackSettings(rate); } status_t MediaPlayer2Manager::Client::getPlaybackSettings(AudioPlaybackRate* rate /* nonnull */) { sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->getPlaybackSettings(rate); if (ret == NO_ERROR) { Loading @@ -962,7 +960,7 @@ status_t MediaPlayer2Manager::Client::setSyncSettings( { ALOGV("[%d] setSyncSettings(%u, %u, %f, %f)", mConnId, sync.mSource, sync.mAudioAdjustMode, sync.mTolerance, videoFpsHint); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->setSyncSettings(sync, videoFpsHint); } Loading @@ -970,7 +968,7 @@ status_t MediaPlayer2Manager::Client::setSyncSettings( status_t MediaPlayer2Manager::Client::getSyncSettings( AVSyncSettings* sync /* nonnull */, float* videoFps /* nonnull */) { sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->getSyncSettings(sync, videoFps); if (ret == NO_ERROR) { Loading @@ -985,7 +983,7 @@ status_t MediaPlayer2Manager::Client::getSyncSettings( status_t MediaPlayer2Manager::Client::getCurrentPosition(int *msec) { ALOGV("getCurrentPosition"); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->getCurrentPosition(msec); if (ret == NO_ERROR) { Loading @@ -999,7 +997,7 @@ status_t MediaPlayer2Manager::Client::getCurrentPosition(int *msec) status_t MediaPlayer2Manager::Client::getDuration(int *msec) { ALOGV("getDuration"); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->getDuration(msec); if (ret == NO_ERROR) { Loading @@ -1023,7 +1021,7 @@ status_t MediaPlayer2Manager::Client::setNextPlayer(const sp<MediaPlayer2Engine> if (c != NULL) { if (mAudioOutput != NULL) { mAudioOutput->setNextOutput(c->mAudioOutput); } else if ((mPlayer != NULL) && !mPlayer->hardwareOutput()) { } else { ALOGE("no current audio output"); } Loading @@ -1040,13 +1038,9 @@ VolumeShaper::Status MediaPlayer2Manager::Client::applyVolumeShaper( const sp<VolumeShaper::Operation>& operation) { // for hardware output, call player instead ALOGV("Client::applyVolumeShaper(%p)", this); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); { Mutex::Autolock l(mLock); if (p != 0 && p->hardwareOutput()) { // TODO: investigate internal implementation return VolumeShaper::Status(INVALID_OPERATION); } if (mAudioOutput.get() != nullptr) { return mAudioOutput->applyVolumeShaper(configuration, operation); } Loading @@ -1057,13 +1051,9 @@ VolumeShaper::Status MediaPlayer2Manager::Client::applyVolumeShaper( sp<VolumeShaper::State> MediaPlayer2Manager::Client::getVolumeShaperState(int id) { // for hardware output, call player instead ALOGV("Client::getVolumeShaperState(%p)", this); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); { Mutex::Autolock l(mLock); if (p != 0 && p->hardwareOutput()) { // TODO: investigate internal implementation. return nullptr; } if (mAudioOutput.get() != nullptr) { return mAudioOutput->getVolumeShaperState(id); } Loading @@ -1074,7 +1064,7 @@ sp<VolumeShaper::State> MediaPlayer2Manager::Client::getVolumeShaperState(int id status_t MediaPlayer2Manager::Client::seekTo(int msec, MediaPlayer2SeekMode mode) { ALOGV("[%d] seekTo(%d, %d)", mConnId, msec, mode); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->seekTo(msec, mode); } Loading @@ -1083,7 +1073,7 @@ status_t MediaPlayer2Manager::Client::reset() { ALOGV("[%d] reset", mConnId); mRetransmitEndpointValid = false; sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->reset(); } Loading @@ -1091,7 +1081,7 @@ status_t MediaPlayer2Manager::Client::reset() status_t MediaPlayer2Manager::Client::notifyAt(int64_t mediaTimeUs) { ALOGV("[%d] notifyAt(%lld)", mConnId, (long long)mediaTimeUs); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->notifyAt(mediaTimeUs); } Loading Loading @@ -1128,7 +1118,7 @@ status_t MediaPlayer2Manager::Client::setLooping(int loop) { ALOGV("[%d] setLooping(%d)", mConnId, loop); mLoop = loop; sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p != 0) return p->setLooping(loop); return NO_ERROR; } Loading @@ -1138,17 +1128,10 @@ status_t MediaPlayer2Manager::Client::setVolume(float leftVolume, float rightVol ALOGV("[%d] setVolume(%f, %f)", mConnId, leftVolume, rightVolume); // for hardware output, call player instead sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); { Mutex::Autolock l(mLock); if (p != 0 && p->hardwareOutput()) { MediaPlayerHWInterface* hwp = reinterpret_cast<MediaPlayerHWInterface*>(p.get()); return hwp->setVolume(leftVolume, rightVolume); } else { if (mAudioOutput != 0) mAudioOutput->setVolume(leftVolume, rightVolume); return NO_ERROR; } } return NO_ERROR; Loading Loading @@ -1179,7 +1162,7 @@ status_t MediaPlayer2Manager::Client::setParameter(int key, const Parcel &reques return setAudioAttributes_l(request); } default: sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) { return UNKNOWN_ERROR; } return p->setParameter(key, request); } Loading @@ -1187,7 +1170,7 @@ status_t MediaPlayer2Manager::Client::setParameter(int key, const Parcel &reques status_t MediaPlayer2Manager::Client::getParameter(int key, Parcel *reply) { ALOGV("[%d] getParameter(%d)", mConnId, key); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; return p->getParameter(key, reply); } Loading @@ -1204,7 +1187,7 @@ status_t MediaPlayer2Manager::Client::setRetransmitEndpoint( ALOGV("[%d] setRetransmitEndpoint = <none>", mConnId); } sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); // Right now, the only valid time to set a retransmit endpoint is before // player selection has been made (since the presence or absence of a Loading @@ -1230,7 +1213,7 @@ status_t MediaPlayer2Manager::Client::getRetransmitEndpoint( if (NULL == endpoint) return BAD_VALUE; sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p != NULL) return p->getRetransmitEndpoint(endpoint); Loading Loading @@ -1333,7 +1316,7 @@ status_t MediaPlayer2Manager::Client::prepareDrm(const uint8_t uuid[16], const Vector<uint8_t>& drmSessionId) { ALOGV("[%d] prepareDrm", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->prepareDrm(uuid, drmSessionId); Loading @@ -1345,7 +1328,7 @@ status_t MediaPlayer2Manager::Client::prepareDrm(const uint8_t uuid[16], status_t MediaPlayer2Manager::Client::releaseDrm() { ALOGV("[%d] releaseDrm", mConnId); sp<MediaPlayer2Base> p = getPlayer(); sp<MediaPlayer2Interface> p = getPlayer(); if (p == 0) return UNKNOWN_ERROR; status_t ret = p->releaseDrm(); Loading
media/libmedia/MediaPlayer2Manager.h +10 −10 Original line number Diff line number Diff line Loading @@ -48,7 +48,7 @@ class MediaPlayer2EngineClient; class Antagonizer { public: Antagonizer( MediaPlayer2Base::NotifyCallback cb, MediaPlayer2Interface::NotifyCallback cb, const wp<MediaPlayer2Engine> &client); void start() { mActive = true; } void stop() { mActive = false; } Loading @@ -62,14 +62,14 @@ private: bool mExit; bool mActive; wp<MediaPlayer2Engine> mClient; MediaPlayer2Base::NotifyCallback mCb; MediaPlayer2Interface::NotifyCallback mCb; }; #endif class MediaPlayer2Manager { class Client; class AudioOutput : public MediaPlayer2Base::AudioSink class AudioOutput : public MediaPlayer2Interface::AudioSink { class CallbackData; Loading Loading @@ -287,7 +287,7 @@ private: const sp<media::VolumeShaper::Operation>& operation) override; virtual sp<media::VolumeShaper::State> getVolumeShaperState(int id) override; sp<MediaPlayer2Base> createPlayer(); sp<MediaPlayer2Interface> createPlayer(); virtual status_t setDataSource( const sp<MediaHTTPService> &httpService, Loading @@ -300,8 +300,8 @@ private: virtual status_t setDataSource(const sp<DataSource> &source); sp<MediaPlayer2Base> setDataSource_pre(); status_t setDataSource_post(const sp<MediaPlayer2Base>& p, sp<MediaPlayer2Interface> setDataSource_pre(); status_t setDataSource_post(const sp<MediaPlayer2Interface>& p, status_t status); static void notify(const wp<MediaPlayer2Engine> &listener, int msg, Loading @@ -323,7 +323,7 @@ private: class AudioDeviceUpdatedNotifier: public AudioSystem::AudioDeviceCallback { public: AudioDeviceUpdatedNotifier(const sp<MediaPlayer2Base>& listener) { AudioDeviceUpdatedNotifier(const sp<MediaPlayer2Interface>& listener) { mListener = listener; } ~AudioDeviceUpdatedNotifier() {} Loading @@ -332,7 +332,7 @@ private: audio_port_handle_t deviceId); private: wp<MediaPlayer2Base> mListener; wp<MediaPlayer2Interface> mListener; }; friend class MediaPlayer2Manager; Loading @@ -346,7 +346,7 @@ private: void deletePlayer(); sp<MediaPlayer2Base> getPlayer() const { Mutex::Autolock lock(mLock); return mPlayer; } sp<MediaPlayer2Interface> getPlayer() const { Mutex::Autolock lock(mLock); return mPlayer; } Loading @@ -366,7 +366,7 @@ private: status_t setAudioAttributes_l(const Parcel &request); mutable Mutex mLock; sp<MediaPlayer2Base> mPlayer; sp<MediaPlayer2Interface> mPlayer; sp<MediaPlayer2EngineClient> mClient; sp<AudioOutput> mAudioOutput; pid_t mPid; Loading
media/libmedia/include/media/MediaPlayer2Interface.h +9 −26 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ template<typename T> class SortedVector; #define AUDIO_SINK_MIN_DEEP_BUFFER_DURATION_US 5000000 // abstract base class - use MediaPlayer2Interface class MediaPlayer2Base : public AHandler class MediaPlayer2Interface : public AHandler { public: // callback mechanism for passing messages to MediaPlayer2 object Loading Loading @@ -148,15 +148,16 @@ public: virtual status_t enableAudioDeviceCallback(bool enabled); }; MediaPlayer2Base() : mClient(0), mNotify(0) {} virtual ~MediaPlayer2Base() {} MediaPlayer2Interface() : mClient(0), mNotify(0) { } virtual ~MediaPlayer2Interface() { } virtual status_t initCheck() = 0; virtual bool hardwareOutput() = 0; virtual status_t setUID(uid_t /* uid */) { return INVALID_OPERATION; } virtual void setAudioSink(const sp<AudioSink>& audioSink) { mAudioSink = audioSink; } virtual status_t setDataSource( const sp<MediaHTTPService> &httpService, const char *url, Loading Loading @@ -234,7 +235,7 @@ public: virtual status_t getRetransmitEndpoint(struct sockaddr_in* /* endpoint */) { return INVALID_OPERATION; } virtual status_t setNextPlayer(const sp<MediaPlayer2Base>& /* next */) { virtual status_t setNextPlayer(const sp<MediaPlayer2Interface>& /* next */) { return OK; } Loading Loading @@ -292,6 +293,9 @@ public: return INVALID_OPERATION; } protected: sp<AudioSink> mAudioSink; private: friend class MediaPlayer2Manager; Loading @@ -300,27 +304,6 @@ private: NotifyCallback mNotify; }; // Implement this class for media players that use the AudioFlinger software mixer class MediaPlayer2Interface : public MediaPlayer2Base { public: virtual ~MediaPlayer2Interface() { } virtual bool hardwareOutput() { return false; } virtual void setAudioSink(const sp<AudioSink>& audioSink) { mAudioSink = audioSink; } protected: sp<AudioSink> mAudioSink; }; // Implement this class for media players that output audio directly to hardware class MediaPlayer2HWInterface : public MediaPlayer2Base { public: virtual ~MediaPlayer2HWInterface() {} virtual bool hardwareOutput() { return true; } virtual status_t setVolume(float leftVolume, float rightVolume) = 0; virtual status_t setAudioStreamType(audio_stream_type_t streamType) = 0; }; }; // namespace android #endif // __cplusplus Loading
media/libmedia/nuplayer2/NuPlayer2.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -64,7 +64,7 @@ namespace android { static status_t sendMetaDataToHal(sp<MediaPlayer2Base::AudioSink>& sink, static status_t sendMetaDataToHal(sp<MediaPlayer2Interface::AudioSink>& sink, const sp<MetaData>& meta) { int32_t sampleRate = 0; int32_t bitRate = 0; Loading Loading @@ -417,7 +417,7 @@ void NuPlayer2::setVideoSurfaceTextureAsync(const sp<ANativeWindowWrapper> &nww) msg->post(); } void NuPlayer2::setAudioSink(const sp<MediaPlayer2Base::AudioSink> &sink) { void NuPlayer2::setAudioSink(const sp<MediaPlayer2Interface::AudioSink> &sink) { sp<AMessage> msg = new AMessage(kWhatSetAudioSink, this); msg->setObject("sink", sink); msg->post(); Loading Loading @@ -850,7 +850,7 @@ void NuPlayer2::onMessageReceived(const sp<AMessage> &msg) { sp<RefBase> obj; CHECK(msg->findObject("sink", &obj)); mAudioSink = static_cast<MediaPlayer2Base::AudioSink *>(obj.get()); mAudioSink = static_cast<MediaPlayer2Interface::AudioSink *>(obj.get()); break; } Loading
media/libmedia/nuplayer2/NuPlayer2.h +2 −2 Original line number Diff line number Diff line Loading @@ -61,7 +61,7 @@ struct NuPlayer2 : public AHandler { void setVideoSurfaceTextureAsync(const sp<ANativeWindowWrapper> &nww); void setAudioSink(const sp<MediaPlayer2Base::AudioSink> &sink); void setAudioSink(const sp<MediaPlayer2Interface::AudioSink> &sink); status_t setPlaybackSettings(const AudioPlaybackRate &rate); status_t getPlaybackSettings(AudioPlaybackRate *rate /* nonnull */); status_t setSyncSettings(const AVSyncSettings &sync, float videoFpsHint); Loading Loading @@ -168,7 +168,7 @@ private: sp<Source> mSource; uint32_t mSourceFlags; sp<ANativeWindowWrapper> mNativeWindow; sp<MediaPlayer2Base::AudioSink> mAudioSink; sp<MediaPlayer2Interface::AudioSink> mAudioSink; sp<DecoderBase> mVideoDecoder; bool mOffloadAudio; sp<DecoderBase> mAudioDecoder; Loading