Loading media/libmediaplayerservice/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ cc_library_shared { ], shared_libs: [ "android.hardware.media.c2@1.0", "android.hardware.media.omx@1.0", "libbase", "libaudioclient", Loading @@ -21,7 +22,6 @@ cc_library_shared { "libdl", "libgui", "libhidlbase", "libhidlmemory", "liblog", "libmedia", "libmedia_omx", Loading media/libmediaplayerservice/MediaPlayerService.cpp +46 −17 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ #include <utils/misc.h> #include <android/hardware/media/omx/1.0/IOmxStore.h> #include <android/hardware/media/c2/1.0/IComponentStore.h> #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> #include <binder/MemoryHeapBase.h> Loading Loading @@ -650,17 +652,17 @@ MediaPlayerService::Client::ServiceDeathNotifier::ServiceDeathNotifier( const sp<MediaPlayerBase>& listener, int which) { mService = service; mOmx = nullptr; mHService = nullptr; mListener = listener; mWhich = which; } MediaPlayerService::Client::ServiceDeathNotifier::ServiceDeathNotifier( const sp<IOmx>& omx, const sp<android::hidl::base::V1_0::IBase>& hService, const sp<MediaPlayerBase>& listener, int which) { mService = nullptr; mOmx = omx; mHService = hService; mListener = listener; mWhich = which; } Loading Loading @@ -692,9 +694,9 @@ void MediaPlayerService::Client::ServiceDeathNotifier::unlinkToDeath() { if (mService != nullptr) { mService->unlinkToDeath(this); mService = nullptr; } else if (mOmx != nullptr) { mOmx->unlinkToDeath(this); mOmx = nullptr; } else if (mHService != nullptr) { mHService->unlinkToDeath(this); mHService = nullptr; } } Loading @@ -714,11 +716,13 @@ void MediaPlayerService::Client::clearDeathNotifiers_l() { mExtractorDeathListener->unlinkToDeath(); mExtractorDeathListener = nullptr; } if (mCodecDeathListener != nullptr) { mCodecDeathListener->unlinkToDeath(); mCodecDeathListener = nullptr; for (const sp<ServiceDeathNotifier>& codecDeathListener : mCodecDeathListeners) { if (codecDeathListener != nullptr) { codecDeathListener->unlinkToDeath(); } } mCodecDeathListeners.clear(); } sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( player_type playerType) Loading @@ -741,20 +745,45 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( new ServiceDeathNotifier(binder, p, MEDIAEXTRACTOR_PROCESS_DEATH); binder->linkToDeath(extractorDeathListener); sp<IOmx> omx = IOmx::getService(); if (omx == nullptr) { ALOGE("IOmx service is not available"); return NULL; std::vector<sp<ServiceDeathNotifier>> codecDeathListeners; { using ::android::hidl::base::V1_0::IBase; // Listen to OMX's IOmxStore/default { sp<IBase> store = ::android::hardware::media::omx::V1_0:: IOmxStore::getService(); if (store == nullptr) { ALOGD("OMX service is not available"); } else { sp<ServiceDeathNotifier> codecDeathListener = new ServiceDeathNotifier(store, p, MEDIACODEC_PROCESS_DEATH); store->linkToDeath(codecDeathListener, 0); codecDeathListeners.emplace_back(codecDeathListener); } } // Listen to Codec2's IComponentStore/software // TODO: Listen to all Codec2 services. { sp<IBase> store = ::android::hardware::media::c2::V1_0:: IComponentStore::getService(); if (store == nullptr) { ALOGD("Codec2 system service is not available"); } else { sp<ServiceDeathNotifier> codecDeathListener = new ServiceDeathNotifier(omx, p, MEDIACODEC_PROCESS_DEATH); omx->linkToDeath(codecDeathListener, 0); new ServiceDeathNotifier(store, p, MEDIACODEC_PROCESS_DEATH); store->linkToDeath(codecDeathListener, 0); codecDeathListeners.emplace_back(codecDeathListener); } } } Mutex::Autolock lock(mLock); clearDeathNotifiers_l(); mExtractorDeathListener = extractorDeathListener; mCodecDeathListener = codecDeathListener; mCodecDeathListeners.swap(codecDeathListeners); mAudioDeviceUpdatedListener = new AudioDeviceUpdatedNotifier(p); if (!p->hardwareOutput()) { Loading media/libmediaplayerservice/MediaPlayerService.h +4 −6 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ #include <media/Metadata.h> #include <media/stagefright/foundation/ABase.h> #include <android/hardware/media/omx/1.0/IOmx.h> #include <hidl/HidlSupport.h> #include <system/audio.h> Loading @@ -42,7 +42,6 @@ struct AVSyncSettings; class IDataSource; class IMediaRecorder; class IMediaMetadataRetriever; class IOMX; class IRemoteDisplay; class IRemoteDisplayClient; class MediaRecorderClient; Loading Loading @@ -70,7 +69,6 @@ private: class MediaPlayerService : public BnMediaPlayerService { class Client; typedef ::android::hardware::media::omx::V1_0::IOmx IOmx; class AudioOutput : public MediaPlayerBase::AudioSink { Loading Loading @@ -400,7 +398,7 @@ private: const sp<MediaPlayerBase>& listener, int which); ServiceDeathNotifier( const sp<IOmx>& omx, const sp<android::hidl::base::V1_0::IBase>& hService, const sp<MediaPlayerBase>& listener, int which); virtual ~ServiceDeathNotifier(); Loading @@ -413,7 +411,7 @@ private: private: int mWhich; sp<IBinder> mService; sp<IOmx> mOmx; sp<android::hidl::base::V1_0::IBase> mHService; // HIDL service wp<MediaPlayerBase> mListener; }; Loading Loading @@ -509,7 +507,7 @@ private: media::Metadata::Filter mMetadataUpdated; // protected by mLock sp<ServiceDeathNotifier> mExtractorDeathListener; sp<ServiceDeathNotifier> mCodecDeathListener; std::vector<sp<ServiceDeathNotifier>> mCodecDeathListeners; sp<AudioDeviceUpdatedNotifier> mAudioDeviceUpdatedListener; #if CALLBACK_ANTAGONIZER Antagonizer* mAntagonizer; Loading media/libstagefright/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ cc_library { export_shared_lib_headers: [ "libgui", "libhidlmemory", "libmedia", "android.hidl.allocator@1.0", ], Loading Loading
media/libmediaplayerservice/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -11,6 +11,7 @@ cc_library_shared { ], shared_libs: [ "android.hardware.media.c2@1.0", "android.hardware.media.omx@1.0", "libbase", "libaudioclient", Loading @@ -21,7 +22,6 @@ cc_library_shared { "libdl", "libgui", "libhidlbase", "libhidlmemory", "liblog", "libmedia", "libmedia_omx", Loading
media/libmediaplayerservice/MediaPlayerService.cpp +46 −17 Original line number Diff line number Diff line Loading @@ -34,6 +34,8 @@ #include <utils/misc.h> #include <android/hardware/media/omx/1.0/IOmxStore.h> #include <android/hardware/media/c2/1.0/IComponentStore.h> #include <binder/IPCThreadState.h> #include <binder/IServiceManager.h> #include <binder/MemoryHeapBase.h> Loading Loading @@ -650,17 +652,17 @@ MediaPlayerService::Client::ServiceDeathNotifier::ServiceDeathNotifier( const sp<MediaPlayerBase>& listener, int which) { mService = service; mOmx = nullptr; mHService = nullptr; mListener = listener; mWhich = which; } MediaPlayerService::Client::ServiceDeathNotifier::ServiceDeathNotifier( const sp<IOmx>& omx, const sp<android::hidl::base::V1_0::IBase>& hService, const sp<MediaPlayerBase>& listener, int which) { mService = nullptr; mOmx = omx; mHService = hService; mListener = listener; mWhich = which; } Loading Loading @@ -692,9 +694,9 @@ void MediaPlayerService::Client::ServiceDeathNotifier::unlinkToDeath() { if (mService != nullptr) { mService->unlinkToDeath(this); mService = nullptr; } else if (mOmx != nullptr) { mOmx->unlinkToDeath(this); mOmx = nullptr; } else if (mHService != nullptr) { mHService->unlinkToDeath(this); mHService = nullptr; } } Loading @@ -714,11 +716,13 @@ void MediaPlayerService::Client::clearDeathNotifiers_l() { mExtractorDeathListener->unlinkToDeath(); mExtractorDeathListener = nullptr; } if (mCodecDeathListener != nullptr) { mCodecDeathListener->unlinkToDeath(); mCodecDeathListener = nullptr; for (const sp<ServiceDeathNotifier>& codecDeathListener : mCodecDeathListeners) { if (codecDeathListener != nullptr) { codecDeathListener->unlinkToDeath(); } } mCodecDeathListeners.clear(); } sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( player_type playerType) Loading @@ -741,20 +745,45 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( new ServiceDeathNotifier(binder, p, MEDIAEXTRACTOR_PROCESS_DEATH); binder->linkToDeath(extractorDeathListener); sp<IOmx> omx = IOmx::getService(); if (omx == nullptr) { ALOGE("IOmx service is not available"); return NULL; std::vector<sp<ServiceDeathNotifier>> codecDeathListeners; { using ::android::hidl::base::V1_0::IBase; // Listen to OMX's IOmxStore/default { sp<IBase> store = ::android::hardware::media::omx::V1_0:: IOmxStore::getService(); if (store == nullptr) { ALOGD("OMX service is not available"); } else { sp<ServiceDeathNotifier> codecDeathListener = new ServiceDeathNotifier(store, p, MEDIACODEC_PROCESS_DEATH); store->linkToDeath(codecDeathListener, 0); codecDeathListeners.emplace_back(codecDeathListener); } } // Listen to Codec2's IComponentStore/software // TODO: Listen to all Codec2 services. { sp<IBase> store = ::android::hardware::media::c2::V1_0:: IComponentStore::getService(); if (store == nullptr) { ALOGD("Codec2 system service is not available"); } else { sp<ServiceDeathNotifier> codecDeathListener = new ServiceDeathNotifier(omx, p, MEDIACODEC_PROCESS_DEATH); omx->linkToDeath(codecDeathListener, 0); new ServiceDeathNotifier(store, p, MEDIACODEC_PROCESS_DEATH); store->linkToDeath(codecDeathListener, 0); codecDeathListeners.emplace_back(codecDeathListener); } } } Mutex::Autolock lock(mLock); clearDeathNotifiers_l(); mExtractorDeathListener = extractorDeathListener; mCodecDeathListener = codecDeathListener; mCodecDeathListeners.swap(codecDeathListeners); mAudioDeviceUpdatedListener = new AudioDeviceUpdatedNotifier(p); if (!p->hardwareOutput()) { Loading
media/libmediaplayerservice/MediaPlayerService.h +4 −6 Original line number Diff line number Diff line Loading @@ -30,7 +30,7 @@ #include <media/Metadata.h> #include <media/stagefright/foundation/ABase.h> #include <android/hardware/media/omx/1.0/IOmx.h> #include <hidl/HidlSupport.h> #include <system/audio.h> Loading @@ -42,7 +42,6 @@ struct AVSyncSettings; class IDataSource; class IMediaRecorder; class IMediaMetadataRetriever; class IOMX; class IRemoteDisplay; class IRemoteDisplayClient; class MediaRecorderClient; Loading Loading @@ -70,7 +69,6 @@ private: class MediaPlayerService : public BnMediaPlayerService { class Client; typedef ::android::hardware::media::omx::V1_0::IOmx IOmx; class AudioOutput : public MediaPlayerBase::AudioSink { Loading Loading @@ -400,7 +398,7 @@ private: const sp<MediaPlayerBase>& listener, int which); ServiceDeathNotifier( const sp<IOmx>& omx, const sp<android::hidl::base::V1_0::IBase>& hService, const sp<MediaPlayerBase>& listener, int which); virtual ~ServiceDeathNotifier(); Loading @@ -413,7 +411,7 @@ private: private: int mWhich; sp<IBinder> mService; sp<IOmx> mOmx; sp<android::hidl::base::V1_0::IBase> mHService; // HIDL service wp<MediaPlayerBase> mListener; }; Loading Loading @@ -509,7 +507,7 @@ private: media::Metadata::Filter mMetadataUpdated; // protected by mLock sp<ServiceDeathNotifier> mExtractorDeathListener; sp<ServiceDeathNotifier> mCodecDeathListener; std::vector<sp<ServiceDeathNotifier>> mCodecDeathListeners; sp<AudioDeviceUpdatedNotifier> mAudioDeviceUpdatedListener; #if CALLBACK_ANTAGONIZER Antagonizer* mAntagonizer; Loading
media/libstagefright/Android.bp +1 −0 Original line number Diff line number Diff line Loading @@ -227,6 +227,7 @@ cc_library { export_shared_lib_headers: [ "libgui", "libhidlmemory", "libmedia", "android.hidl.allocator@1.0", ], Loading