Loading media/libmediaplayerservice/MediaPlayerService.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -225,7 +225,10 @@ MediaPlayerService::~MediaPlayerService() sp<IMediaRecorder> MediaPlayerService::createMediaRecorder(pid_t pid) { #ifndef NO_OPENCORE sp<MediaRecorderClient> recorder = new MediaRecorderClient(pid); sp<MediaRecorderClient> recorder = new MediaRecorderClient(this, pid); wp<MediaRecorderClient> w = recorder; Mutex::Autolock lock(mLock); mMediaRecorderClients.add(w); #else sp<MediaRecorderClient> recorder = NULL; #endif Loading @@ -233,6 +236,13 @@ sp<IMediaRecorder> MediaPlayerService::createMediaRecorder(pid_t pid) return recorder; } void MediaPlayerService::removeMediaRecorderClient(wp<MediaRecorderClient> client) { Mutex::Autolock lock(mLock); mMediaRecorderClients.remove(client); LOGV("Delete media recorder client"); } sp<IMediaMetadataRetriever> MediaPlayerService::createMetadataRetriever(pid_t pid) { sp<MetadataRetrieverClient> retriever = new MetadataRetrieverClient(pid); Loading Loading @@ -499,6 +509,13 @@ status_t MediaPlayerService::dump(int fd, const Vector<String16>& args) sp<Client> c = mClients[i].promote(); if (c != 0) c->dump(fd, args); } for (int i = 0, n = mMediaRecorderClients.size(); i < n; ++i) { result.append(" MediaRecorderClient\n"); sp<MediaRecorderClient> c = mMediaRecorderClients[i].promote(); snprintf(buffer, 255, " pid(%d)\n\n", c->mPid); result.append(buffer); } result.append(" Files opened and/or mapped:\n"); snprintf(buffer, SIZE, "/proc/%d/maps", myTid()); FILE *f = fopen(buffer, "r"); Loading media/libmediaplayerservice/MediaPlayerService.h +3 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ namespace android { class IMediaRecorder; class IMediaMetadataRetriever; class IOMX; class MediaRecorderClient; #define CALLBACK_ANTAGONIZER 0 #if CALLBACK_ANTAGONIZER Loading Loading @@ -175,6 +176,7 @@ public: // IMediaPlayerService interface virtual sp<IMediaRecorder> createMediaRecorder(pid_t pid); void removeMediaRecorderClient(wp<MediaRecorderClient> client); virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid); // House keeping for media player clients Loading Loading @@ -280,6 +282,7 @@ private: mutable Mutex mLock; SortedVector< wp<Client> > mClients; SortedVector< wp<MediaRecorderClient> > mMediaRecorderClients; int32_t mNextConnId; sp<IOMX> mOMX; }; Loading media/libmediaplayerservice/MediaRecorderClient.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,10 @@ #include <media/PVMediaRecorder.h> #include <utils/String16.h> #include <media/AudioTrack.h> #include "MediaRecorderClient.h" #include "MediaPlayerService.h" namespace android { Loading Loading @@ -80,6 +83,7 @@ status_t MediaRecorderClient::setVideoSource(int vs) Mutex::Autolock lock(mLock); if (mRecorder == NULL) { LOGE("recorder is not initialized"); return NO_INIT; } return mRecorder->setVideoSource((video_source)vs); } Loading @@ -93,6 +97,7 @@ status_t MediaRecorderClient::setAudioSource(int as) Mutex::Autolock lock(mLock); if (mRecorder == NULL) { LOGE("recorder is not initialized"); return NO_INIT; } return mRecorder->setAudioSource((audio_source)as); } Loading Loading @@ -271,15 +276,18 @@ status_t MediaRecorderClient::release() if (mRecorder != NULL) { delete mRecorder; mRecorder = NULL; wp<MediaRecorderClient> client(this); mMediaPlayerService->removeMediaRecorderClient(client); } return NO_ERROR; } MediaRecorderClient::MediaRecorderClient(pid_t pid) MediaRecorderClient::MediaRecorderClient(const sp<MediaPlayerService>& service, pid_t pid) { LOGV("Client constructor"); mPid = pid; mRecorder = new PVMediaRecorder(); mMediaPlayerService = service; } MediaRecorderClient::~MediaRecorderClient() Loading media/libmediaplayerservice/MediaRecorderClient.h +3 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ namespace android { class PVMediaRecorder; class ISurface; class MediaPlayerService; class MediaRecorderClient : public BnMediaRecorder { Loading Loading @@ -53,12 +54,13 @@ public: private: friend class MediaPlayerService; // for accessing private constructor MediaRecorderClient(pid_t pid); MediaRecorderClient(const sp<MediaPlayerService>& service, pid_t pid); virtual ~MediaRecorderClient(); pid_t mPid; Mutex mLock; PVMediaRecorder *mRecorder; sp<MediaPlayerService> mMediaPlayerService; }; }; // namespace android Loading Loading
media/libmediaplayerservice/MediaPlayerService.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -225,7 +225,10 @@ MediaPlayerService::~MediaPlayerService() sp<IMediaRecorder> MediaPlayerService::createMediaRecorder(pid_t pid) { #ifndef NO_OPENCORE sp<MediaRecorderClient> recorder = new MediaRecorderClient(pid); sp<MediaRecorderClient> recorder = new MediaRecorderClient(this, pid); wp<MediaRecorderClient> w = recorder; Mutex::Autolock lock(mLock); mMediaRecorderClients.add(w); #else sp<MediaRecorderClient> recorder = NULL; #endif Loading @@ -233,6 +236,13 @@ sp<IMediaRecorder> MediaPlayerService::createMediaRecorder(pid_t pid) return recorder; } void MediaPlayerService::removeMediaRecorderClient(wp<MediaRecorderClient> client) { Mutex::Autolock lock(mLock); mMediaRecorderClients.remove(client); LOGV("Delete media recorder client"); } sp<IMediaMetadataRetriever> MediaPlayerService::createMetadataRetriever(pid_t pid) { sp<MetadataRetrieverClient> retriever = new MetadataRetrieverClient(pid); Loading Loading @@ -499,6 +509,13 @@ status_t MediaPlayerService::dump(int fd, const Vector<String16>& args) sp<Client> c = mClients[i].promote(); if (c != 0) c->dump(fd, args); } for (int i = 0, n = mMediaRecorderClients.size(); i < n; ++i) { result.append(" MediaRecorderClient\n"); sp<MediaRecorderClient> c = mMediaRecorderClients[i].promote(); snprintf(buffer, 255, " pid(%d)\n\n", c->mPid); result.append(buffer); } result.append(" Files opened and/or mapped:\n"); snprintf(buffer, SIZE, "/proc/%d/maps", myTid()); FILE *f = fopen(buffer, "r"); Loading
media/libmediaplayerservice/MediaPlayerService.h +3 −0 Original line number Diff line number Diff line Loading @@ -35,6 +35,7 @@ namespace android { class IMediaRecorder; class IMediaMetadataRetriever; class IOMX; class MediaRecorderClient; #define CALLBACK_ANTAGONIZER 0 #if CALLBACK_ANTAGONIZER Loading Loading @@ -175,6 +176,7 @@ public: // IMediaPlayerService interface virtual sp<IMediaRecorder> createMediaRecorder(pid_t pid); void removeMediaRecorderClient(wp<MediaRecorderClient> client); virtual sp<IMediaMetadataRetriever> createMetadataRetriever(pid_t pid); // House keeping for media player clients Loading Loading @@ -280,6 +282,7 @@ private: mutable Mutex mLock; SortedVector< wp<Client> > mClients; SortedVector< wp<MediaRecorderClient> > mMediaRecorderClients; int32_t mNextConnId; sp<IOMX> mOMX; }; Loading
media/libmediaplayerservice/MediaRecorderClient.cpp +9 −1 Original line number Diff line number Diff line Loading @@ -32,7 +32,10 @@ #include <media/PVMediaRecorder.h> #include <utils/String16.h> #include <media/AudioTrack.h> #include "MediaRecorderClient.h" #include "MediaPlayerService.h" namespace android { Loading Loading @@ -80,6 +83,7 @@ status_t MediaRecorderClient::setVideoSource(int vs) Mutex::Autolock lock(mLock); if (mRecorder == NULL) { LOGE("recorder is not initialized"); return NO_INIT; } return mRecorder->setVideoSource((video_source)vs); } Loading @@ -93,6 +97,7 @@ status_t MediaRecorderClient::setAudioSource(int as) Mutex::Autolock lock(mLock); if (mRecorder == NULL) { LOGE("recorder is not initialized"); return NO_INIT; } return mRecorder->setAudioSource((audio_source)as); } Loading Loading @@ -271,15 +276,18 @@ status_t MediaRecorderClient::release() if (mRecorder != NULL) { delete mRecorder; mRecorder = NULL; wp<MediaRecorderClient> client(this); mMediaPlayerService->removeMediaRecorderClient(client); } return NO_ERROR; } MediaRecorderClient::MediaRecorderClient(pid_t pid) MediaRecorderClient::MediaRecorderClient(const sp<MediaPlayerService>& service, pid_t pid) { LOGV("Client constructor"); mPid = pid; mRecorder = new PVMediaRecorder(); mMediaPlayerService = service; } MediaRecorderClient::~MediaRecorderClient() Loading
media/libmediaplayerservice/MediaRecorderClient.h +3 −1 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ namespace android { class PVMediaRecorder; class ISurface; class MediaPlayerService; class MediaRecorderClient : public BnMediaRecorder { Loading Loading @@ -53,12 +54,13 @@ public: private: friend class MediaPlayerService; // for accessing private constructor MediaRecorderClient(pid_t pid); MediaRecorderClient(const sp<MediaPlayerService>& service, pid_t pid); virtual ~MediaRecorderClient(); pid_t mPid; Mutex mLock; PVMediaRecorder *mRecorder; sp<MediaPlayerService> mMediaPlayerService; }; }; // namespace android Loading