From a17a1347ffe281fc70633ba8dc98f6cf49ac06ff Mon Sep 17 00:00:00 2001 From: Dave Sparks Date: Thu, 1 Apr 2010 18:00:58 -0700 Subject: Use local lock for most MediaMetadataRetriever methods. Bug 2560834. MediaMetadataRetriever uses a single static lock for all operations. This effectively serializes all metadata retrieval operations in a single process. This patch uses the object level lock for all normal operations and only uses the static lock to serialize calls to release. Change-Id: I81c9f234c2f0007a26d18e1398c709b41a4dbbd7 --- media/libmedia/mediametadataretriever.cpp | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'media/libmedia/mediametadataretriever.cpp') diff --git a/media/libmedia/mediametadataretriever.cpp b/media/libmedia/mediametadataretriever.cpp index d34a8ed..e2712ba 100644 --- a/media/libmedia/mediametadataretriever.cpp +++ b/media/libmedia/mediametadataretriever.cpp @@ -95,6 +95,7 @@ void MediaMetadataRetriever::disconnect() status_t MediaMetadataRetriever::setDataSource(const char* srcUrl) { LOGV("setDataSource"); + Mutex::Autolock _l(mLock); if (mRetriever == 0) { LOGE("retriever is not initialized"); return INVALID_OPERATION; @@ -110,6 +111,7 @@ status_t MediaMetadataRetriever::setDataSource(const char* srcUrl) status_t MediaMetadataRetriever::setDataSource(int fd, int64_t offset, int64_t length) { LOGV("setDataSource(%d, %lld, %lld)", fd, offset, length); + Mutex::Autolock _l(mLock); if (mRetriever == 0) { LOGE("retriever is not initialized"); return INVALID_OPERATION; @@ -124,6 +126,7 @@ status_t MediaMetadataRetriever::setDataSource(int fd, int64_t offset, int64_t l status_t MediaMetadataRetriever::setMode(int mode) { LOGV("setMode(%d)", mode); + Mutex::Autolock _l(mLock); if (mRetriever == 0) { LOGE("retriever is not initialized"); return INVALID_OPERATION; @@ -134,6 +137,7 @@ status_t MediaMetadataRetriever::setMode(int mode) status_t MediaMetadataRetriever::getMode(int* mode) { LOGV("getMode"); + Mutex::Autolock _l(mLock); if (mRetriever == 0) { LOGE("retriever is not initialized"); return INVALID_OPERATION; @@ -144,6 +148,7 @@ status_t MediaMetadataRetriever::getMode(int* mode) sp MediaMetadataRetriever::captureFrame() { LOGV("captureFrame"); + Mutex::Autolock _l(mLock); if (mRetriever == 0) { LOGE("retriever is not initialized"); return NULL; @@ -154,6 +159,7 @@ sp MediaMetadataRetriever::captureFrame() const char* MediaMetadataRetriever::extractMetadata(int keyCode) { LOGV("extractMetadata(%d)", keyCode); + Mutex::Autolock _l(mLock); if (mRetriever == 0) { LOGE("retriever is not initialized"); return NULL; @@ -164,6 +170,7 @@ const char* MediaMetadataRetriever::extractMetadata(int keyCode) sp MediaMetadataRetriever::extractAlbumArt() { LOGV("extractAlbumArt"); + Mutex::Autolock _l(mLock); if (mRetriever == 0) { LOGE("retriever is not initialized"); return NULL; -- cgit v1.1