Loading media/libmediaplayerservice/MediaPlayerService.cpp +57 −41 Original line number Diff line number Diff line Loading @@ -600,17 +600,14 @@ MediaPlayerService::Client::Client( MediaPlayerService::Client::~Client() { ALOGV("Client(%d) destructor pid = %d", mConnId, mPid); { Mutex::Autolock l(mLock); mAudioOutput.clear(); } wp<Client> client(this); disconnect(); mService->removeClient(client); if (mAudioAttributes != NULL) { free(mAudioAttributes); } clearDeathNotifiers(); clearDeathNotifiers_l(); } void MediaPlayerService::Client::disconnect() Loading Loading @@ -638,7 +635,10 @@ void MediaPlayerService::Client::disconnect() p->reset(); } disconnectNativeWindow(); { Mutex::Autolock l(mLock); disconnectNativeWindow_l(); } IPCThreadState::self()->flushCommands(); } Loading Loading @@ -715,7 +715,7 @@ void MediaPlayerService::Client::ServiceDeathNotifier::unlinkToDeath() { } } void MediaPlayerService::Client::clearDeathNotifiers() { void MediaPlayerService::Client::clearDeathNotifiers_l() { if (mExtractorDeathListener != nullptr) { mExtractorDeathListener->unlinkToDeath(); mExtractorDeathListener = nullptr; Loading @@ -730,7 +730,6 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( player_type playerType) { ALOGV("player type = %d", playerType); clearDeathNotifiers(); // create the right type of player sp<MediaPlayerBase> p = createPlayer(playerType); Loading @@ -744,9 +743,11 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( ALOGE("extractor service not available"); return NULL; } mExtractorDeathListener = new ServiceDeathNotifier(binder, p, MEDIAEXTRACTOR_PROCESS_DEATH); binder->linkToDeath(mExtractorDeathListener); sp<ServiceDeathNotifier> extractorDeathListener = new ServiceDeathNotifier(binder, p, MEDIAEXTRACTOR_PROCESS_DEATH); binder->linkToDeath(extractorDeathListener); sp<ServiceDeathNotifier> codecDeathListener; if (property_get_bool("persist.media.treble_omx", true)) { // Treble IOmx sp<IOmx> omx = IOmx::getService(); Loading @@ -754,8 +755,8 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( ALOGE("Treble IOmx not available"); return NULL; } mCodecDeathListener = new ServiceDeathNotifier(omx, p, MEDIACODEC_PROCESS_DEATH); omx->linkToDeath(mCodecDeathListener, 0); codecDeathListener = new ServiceDeathNotifier(omx, p, MEDIACODEC_PROCESS_DEATH); omx->linkToDeath(codecDeathListener, 0); } else { // Legacy IOMX binder = sm->getService(String16("media.codec")); Loading @@ -763,12 +764,17 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( ALOGE("codec service not available"); return NULL; } mCodecDeathListener = new ServiceDeathNotifier(binder, p, MEDIACODEC_PROCESS_DEATH); binder->linkToDeath(mCodecDeathListener); codecDeathListener = new ServiceDeathNotifier(binder, p, MEDIACODEC_PROCESS_DEATH); binder->linkToDeath(codecDeathListener); } Mutex::Autolock lock(mLock); clearDeathNotifiers_l(); mExtractorDeathListener = extractorDeathListener; mCodecDeathListener = codecDeathListener; if (!p->hardwareOutput()) { Mutex::Autolock l(mLock); mAudioOutput = new AudioOutput(mAudioSessionId, IPCThreadState::self()->getCallingUid(), mPid, mAudioAttributes); static_cast<MediaPlayerInterface*>(p.get())->setAudioSink(mAudioOutput); Loading @@ -777,29 +783,29 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( return p; } void MediaPlayerService::Client::setDataSource_post( status_t MediaPlayerService::Client::setDataSource_post( const sp<MediaPlayerBase>& p, status_t status) { ALOGV(" setDataSource"); mStatus = status; if (mStatus != OK) { ALOGE(" error: %d", mStatus); return; if (status != OK) { ALOGE(" error: %d", status); return status; } // Set the re-transmission endpoint if one was chosen. if (mRetransmitEndpointValid) { mStatus = p->setRetransmitEndpoint(&mRetransmitEndpoint); if (mStatus != NO_ERROR) { ALOGE("setRetransmitEndpoint error: %d", mStatus); status = p->setRetransmitEndpoint(&mRetransmitEndpoint); if (status != NO_ERROR) { ALOGE("setRetransmitEndpoint error: %d", status); } } if (mStatus == OK) { Mutex::Autolock l(mLock); if (status == OK) { Mutex::Autolock lock(mLock); mPlayer = p; } return status; } status_t MediaPlayerService::Client::setDataSource( Loading Loading @@ -830,9 +836,9 @@ status_t MediaPlayerService::Client::setDataSource( ALOGE("Couldn't open fd for %s", url); return UNKNOWN_ERROR; } setDataSource(fd, 0, 0x7fffffffffLL); // this sets mStatus status_t status = setDataSource(fd, 0, 0x7fffffffffLL); // this sets mStatus close(fd); return mStatus; return mStatus = status; } else { player_type playerType = MediaPlayerFactory::getPlayerType(this, url); sp<MediaPlayerBase> p = setDataSource_pre(playerType); Loading @@ -840,8 +846,9 @@ status_t MediaPlayerService::Client::setDataSource( return NO_INIT; } setDataSource_post(p, p->setDataSource(httpService, url, headers)); return mStatus; return mStatus = setDataSource_post( p, p->setDataSource(httpService, url, headers)); } } Loading Loading @@ -881,8 +888,7 @@ status_t MediaPlayerService::Client::setDataSource(int fd, int64_t offset, int64 } // now set data source setDataSource_post(p, p->setDataSource(fd, offset, length)); return mStatus; return mStatus = setDataSource_post(p, p->setDataSource(fd, offset, length)); } status_t MediaPlayerService::Client::setDataSource( Loading @@ -895,8 +901,7 @@ status_t MediaPlayerService::Client::setDataSource( } // now set data source setDataSource_post(p, p->setDataSource(source)); return mStatus; return mStatus = setDataSource_post(p, p->setDataSource(source)); } status_t MediaPlayerService::Client::setDataSource( Loading @@ -908,11 +913,10 @@ status_t MediaPlayerService::Client::setDataSource( return NO_INIT; } // now set data source setDataSource_post(p, p->setDataSource(dataSource)); return mStatus; return mStatus = setDataSource_post(p, p->setDataSource(dataSource)); } void MediaPlayerService::Client::disconnectNativeWindow() { void MediaPlayerService::Client::disconnectNativeWindow_l() { if (mConnectedWindow != NULL) { status_t err = nativeWindowDisconnect( mConnectedWindow.get(), "disconnectNativeWindow"); Loading Loading @@ -949,7 +953,8 @@ status_t MediaPlayerService::Client::setVideoSurfaceTexture( // ANW, which may result in errors. reset(); disconnectNativeWindow(); Mutex::Autolock lock(mLock); disconnectNativeWindow_l(); return err; } Loading @@ -960,14 +965,22 @@ status_t MediaPlayerService::Client::setVideoSurfaceTexture( // on the disconnected ANW, which may result in errors. status_t err = p->setVideoSurfaceTexture(bufferProducer); disconnectNativeWindow(); mConnectedWindow = anw; mLock.lock(); disconnectNativeWindow_l(); if (err == OK) { mConnectedWindow = anw; mConnectedWindowBinder = binder; mLock.unlock(); } else { disconnectNativeWindow(); mLock.unlock(); status_t err = nativeWindowDisconnect( anw.get(), "disconnectNativeWindow"); if (err != OK) { ALOGW("nativeWindowDisconnect returned an error: %s (%d)", strerror(-err), err); } } return err; Loading Loading @@ -1385,9 +1398,11 @@ status_t MediaPlayerService::Client::setRetransmitEndpoint( if (p != 0) return INVALID_OPERATION; if (NULL != endpoint) { Mutex::Autolock lock(mLock); mRetransmitEndpoint = *endpoint; mRetransmitEndpointValid = true; } else { Mutex::Autolock lock(mLock); mRetransmitEndpointValid = false; } Loading @@ -1405,6 +1420,7 @@ status_t MediaPlayerService::Client::getRetransmitEndpoint( if (p != NULL) return p->getRetransmitEndpoint(endpoint); Mutex::Autolock lock(mLock); if (!mRetransmitEndpointValid) return NO_INIT; Loading media/libmediaplayerservice/MediaPlayerService.h +3 −3 Original line number Diff line number Diff line Loading @@ -362,7 +362,7 @@ private: sp<MediaPlayerBase> setDataSource_pre(player_type playerType); void setDataSource_post(const sp<MediaPlayerBase>& p, status_t setDataSource_post(const sp<MediaPlayerBase>& p, status_t status); static void notify(void* cookie, int msg, Loading Loading @@ -404,7 +404,7 @@ private: wp<MediaPlayerBase> mListener; }; void clearDeathNotifiers(); void clearDeathNotifiers_l(); friend class MediaPlayerService; Client( const sp<MediaPlayerService>& service, Loading Loading @@ -433,7 +433,7 @@ private: void addNewMetadataUpdate(media::Metadata::Type type); // Disconnect from the currently connected ANativeWindow. void disconnectNativeWindow(); void disconnectNativeWindow_l(); status_t setAudioAttributes_l(const Parcel &request); Loading media/libmediaplayerservice/MediaRecorderClient.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -339,7 +339,7 @@ status_t MediaRecorderClient::release() wp<MediaRecorderClient> client(this); mMediaPlayerService->removeMediaRecorderClient(client); } clearDeathNotifiers(); clearDeathNotifiers_l(); return NO_ERROR; } Loading Loading @@ -411,7 +411,7 @@ void MediaRecorderClient::ServiceDeathNotifier::unlinkToDeath() { } } void MediaRecorderClient::clearDeathNotifiers() { void MediaRecorderClient::clearDeathNotifiers_l() { if (mCameraDeathListener != nullptr) { mCameraDeathListener->unlinkToDeath(); mCameraDeathListener = nullptr; Loading @@ -425,8 +425,8 @@ void MediaRecorderClient::clearDeathNotifiers() { status_t MediaRecorderClient::setListener(const sp<IMediaRecorderClient>& listener) { ALOGV("setListener"); clearDeathNotifiers(); Mutex::Autolock lock(mLock); clearDeathNotifiers_l(); if (mRecorder == NULL) { ALOGE("recorder is not initialized"); return NO_INIT; Loading media/libmediaplayerservice/MediaRecorderClient.h +1 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ class MediaRecorderClient : public BnMediaRecorder wp<IMediaRecorderClient> mListener; }; void clearDeathNotifiers(); void clearDeathNotifiers_l(); public: virtual status_t setCamera(const sp<hardware::ICamera>& camera, Loading Loading
media/libmediaplayerservice/MediaPlayerService.cpp +57 −41 Original line number Diff line number Diff line Loading @@ -600,17 +600,14 @@ MediaPlayerService::Client::Client( MediaPlayerService::Client::~Client() { ALOGV("Client(%d) destructor pid = %d", mConnId, mPid); { Mutex::Autolock l(mLock); mAudioOutput.clear(); } wp<Client> client(this); disconnect(); mService->removeClient(client); if (mAudioAttributes != NULL) { free(mAudioAttributes); } clearDeathNotifiers(); clearDeathNotifiers_l(); } void MediaPlayerService::Client::disconnect() Loading Loading @@ -638,7 +635,10 @@ void MediaPlayerService::Client::disconnect() p->reset(); } disconnectNativeWindow(); { Mutex::Autolock l(mLock); disconnectNativeWindow_l(); } IPCThreadState::self()->flushCommands(); } Loading Loading @@ -715,7 +715,7 @@ void MediaPlayerService::Client::ServiceDeathNotifier::unlinkToDeath() { } } void MediaPlayerService::Client::clearDeathNotifiers() { void MediaPlayerService::Client::clearDeathNotifiers_l() { if (mExtractorDeathListener != nullptr) { mExtractorDeathListener->unlinkToDeath(); mExtractorDeathListener = nullptr; Loading @@ -730,7 +730,6 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( player_type playerType) { ALOGV("player type = %d", playerType); clearDeathNotifiers(); // create the right type of player sp<MediaPlayerBase> p = createPlayer(playerType); Loading @@ -744,9 +743,11 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( ALOGE("extractor service not available"); return NULL; } mExtractorDeathListener = new ServiceDeathNotifier(binder, p, MEDIAEXTRACTOR_PROCESS_DEATH); binder->linkToDeath(mExtractorDeathListener); sp<ServiceDeathNotifier> extractorDeathListener = new ServiceDeathNotifier(binder, p, MEDIAEXTRACTOR_PROCESS_DEATH); binder->linkToDeath(extractorDeathListener); sp<ServiceDeathNotifier> codecDeathListener; if (property_get_bool("persist.media.treble_omx", true)) { // Treble IOmx sp<IOmx> omx = IOmx::getService(); Loading @@ -754,8 +755,8 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( ALOGE("Treble IOmx not available"); return NULL; } mCodecDeathListener = new ServiceDeathNotifier(omx, p, MEDIACODEC_PROCESS_DEATH); omx->linkToDeath(mCodecDeathListener, 0); codecDeathListener = new ServiceDeathNotifier(omx, p, MEDIACODEC_PROCESS_DEATH); omx->linkToDeath(codecDeathListener, 0); } else { // Legacy IOMX binder = sm->getService(String16("media.codec")); Loading @@ -763,12 +764,17 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( ALOGE("codec service not available"); return NULL; } mCodecDeathListener = new ServiceDeathNotifier(binder, p, MEDIACODEC_PROCESS_DEATH); binder->linkToDeath(mCodecDeathListener); codecDeathListener = new ServiceDeathNotifier(binder, p, MEDIACODEC_PROCESS_DEATH); binder->linkToDeath(codecDeathListener); } Mutex::Autolock lock(mLock); clearDeathNotifiers_l(); mExtractorDeathListener = extractorDeathListener; mCodecDeathListener = codecDeathListener; if (!p->hardwareOutput()) { Mutex::Autolock l(mLock); mAudioOutput = new AudioOutput(mAudioSessionId, IPCThreadState::self()->getCallingUid(), mPid, mAudioAttributes); static_cast<MediaPlayerInterface*>(p.get())->setAudioSink(mAudioOutput); Loading @@ -777,29 +783,29 @@ sp<MediaPlayerBase> MediaPlayerService::Client::setDataSource_pre( return p; } void MediaPlayerService::Client::setDataSource_post( status_t MediaPlayerService::Client::setDataSource_post( const sp<MediaPlayerBase>& p, status_t status) { ALOGV(" setDataSource"); mStatus = status; if (mStatus != OK) { ALOGE(" error: %d", mStatus); return; if (status != OK) { ALOGE(" error: %d", status); return status; } // Set the re-transmission endpoint if one was chosen. if (mRetransmitEndpointValid) { mStatus = p->setRetransmitEndpoint(&mRetransmitEndpoint); if (mStatus != NO_ERROR) { ALOGE("setRetransmitEndpoint error: %d", mStatus); status = p->setRetransmitEndpoint(&mRetransmitEndpoint); if (status != NO_ERROR) { ALOGE("setRetransmitEndpoint error: %d", status); } } if (mStatus == OK) { Mutex::Autolock l(mLock); if (status == OK) { Mutex::Autolock lock(mLock); mPlayer = p; } return status; } status_t MediaPlayerService::Client::setDataSource( Loading Loading @@ -830,9 +836,9 @@ status_t MediaPlayerService::Client::setDataSource( ALOGE("Couldn't open fd for %s", url); return UNKNOWN_ERROR; } setDataSource(fd, 0, 0x7fffffffffLL); // this sets mStatus status_t status = setDataSource(fd, 0, 0x7fffffffffLL); // this sets mStatus close(fd); return mStatus; return mStatus = status; } else { player_type playerType = MediaPlayerFactory::getPlayerType(this, url); sp<MediaPlayerBase> p = setDataSource_pre(playerType); Loading @@ -840,8 +846,9 @@ status_t MediaPlayerService::Client::setDataSource( return NO_INIT; } setDataSource_post(p, p->setDataSource(httpService, url, headers)); return mStatus; return mStatus = setDataSource_post( p, p->setDataSource(httpService, url, headers)); } } Loading Loading @@ -881,8 +888,7 @@ status_t MediaPlayerService::Client::setDataSource(int fd, int64_t offset, int64 } // now set data source setDataSource_post(p, p->setDataSource(fd, offset, length)); return mStatus; return mStatus = setDataSource_post(p, p->setDataSource(fd, offset, length)); } status_t MediaPlayerService::Client::setDataSource( Loading @@ -895,8 +901,7 @@ status_t MediaPlayerService::Client::setDataSource( } // now set data source setDataSource_post(p, p->setDataSource(source)); return mStatus; return mStatus = setDataSource_post(p, p->setDataSource(source)); } status_t MediaPlayerService::Client::setDataSource( Loading @@ -908,11 +913,10 @@ status_t MediaPlayerService::Client::setDataSource( return NO_INIT; } // now set data source setDataSource_post(p, p->setDataSource(dataSource)); return mStatus; return mStatus = setDataSource_post(p, p->setDataSource(dataSource)); } void MediaPlayerService::Client::disconnectNativeWindow() { void MediaPlayerService::Client::disconnectNativeWindow_l() { if (mConnectedWindow != NULL) { status_t err = nativeWindowDisconnect( mConnectedWindow.get(), "disconnectNativeWindow"); Loading Loading @@ -949,7 +953,8 @@ status_t MediaPlayerService::Client::setVideoSurfaceTexture( // ANW, which may result in errors. reset(); disconnectNativeWindow(); Mutex::Autolock lock(mLock); disconnectNativeWindow_l(); return err; } Loading @@ -960,14 +965,22 @@ status_t MediaPlayerService::Client::setVideoSurfaceTexture( // on the disconnected ANW, which may result in errors. status_t err = p->setVideoSurfaceTexture(bufferProducer); disconnectNativeWindow(); mConnectedWindow = anw; mLock.lock(); disconnectNativeWindow_l(); if (err == OK) { mConnectedWindow = anw; mConnectedWindowBinder = binder; mLock.unlock(); } else { disconnectNativeWindow(); mLock.unlock(); status_t err = nativeWindowDisconnect( anw.get(), "disconnectNativeWindow"); if (err != OK) { ALOGW("nativeWindowDisconnect returned an error: %s (%d)", strerror(-err), err); } } return err; Loading Loading @@ -1385,9 +1398,11 @@ status_t MediaPlayerService::Client::setRetransmitEndpoint( if (p != 0) return INVALID_OPERATION; if (NULL != endpoint) { Mutex::Autolock lock(mLock); mRetransmitEndpoint = *endpoint; mRetransmitEndpointValid = true; } else { Mutex::Autolock lock(mLock); mRetransmitEndpointValid = false; } Loading @@ -1405,6 +1420,7 @@ status_t MediaPlayerService::Client::getRetransmitEndpoint( if (p != NULL) return p->getRetransmitEndpoint(endpoint); Mutex::Autolock lock(mLock); if (!mRetransmitEndpointValid) return NO_INIT; Loading
media/libmediaplayerservice/MediaPlayerService.h +3 −3 Original line number Diff line number Diff line Loading @@ -362,7 +362,7 @@ private: sp<MediaPlayerBase> setDataSource_pre(player_type playerType); void setDataSource_post(const sp<MediaPlayerBase>& p, status_t setDataSource_post(const sp<MediaPlayerBase>& p, status_t status); static void notify(void* cookie, int msg, Loading Loading @@ -404,7 +404,7 @@ private: wp<MediaPlayerBase> mListener; }; void clearDeathNotifiers(); void clearDeathNotifiers_l(); friend class MediaPlayerService; Client( const sp<MediaPlayerService>& service, Loading Loading @@ -433,7 +433,7 @@ private: void addNewMetadataUpdate(media::Metadata::Type type); // Disconnect from the currently connected ANativeWindow. void disconnectNativeWindow(); void disconnectNativeWindow_l(); status_t setAudioAttributes_l(const Parcel &request); Loading
media/libmediaplayerservice/MediaRecorderClient.cpp +3 −3 Original line number Diff line number Diff line Loading @@ -339,7 +339,7 @@ status_t MediaRecorderClient::release() wp<MediaRecorderClient> client(this); mMediaPlayerService->removeMediaRecorderClient(client); } clearDeathNotifiers(); clearDeathNotifiers_l(); return NO_ERROR; } Loading Loading @@ -411,7 +411,7 @@ void MediaRecorderClient::ServiceDeathNotifier::unlinkToDeath() { } } void MediaRecorderClient::clearDeathNotifiers() { void MediaRecorderClient::clearDeathNotifiers_l() { if (mCameraDeathListener != nullptr) { mCameraDeathListener->unlinkToDeath(); mCameraDeathListener = nullptr; Loading @@ -425,8 +425,8 @@ void MediaRecorderClient::clearDeathNotifiers() { status_t MediaRecorderClient::setListener(const sp<IMediaRecorderClient>& listener) { ALOGV("setListener"); clearDeathNotifiers(); Mutex::Autolock lock(mLock); clearDeathNotifiers_l(); if (mRecorder == NULL) { ALOGE("recorder is not initialized"); return NO_INIT; Loading
media/libmediaplayerservice/MediaRecorderClient.h +1 −1 Original line number Diff line number Diff line Loading @@ -58,7 +58,7 @@ class MediaRecorderClient : public BnMediaRecorder wp<IMediaRecorderClient> mListener; }; void clearDeathNotifiers(); void clearDeathNotifiers_l(); public: virtual status_t setCamera(const sp<hardware::ICamera>& camera, Loading