am 4c232c5b: Merge change Idd16976f into eclair
Merge commit '4c232c5b3f7fcbea73cd3cec2d3befe06e85c068' into eclair-plus-aosp
* commit '4c232c5b3f7fcbea73cd3cec2d3befe06e85c068':
Fix some metadata retriever issues:
diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.cpp b/media/libmediaplayerservice/MetadataRetrieverClient.cpp
index b34421d..ddd4e24 100644
--- a/media/libmediaplayerservice/MetadataRetrieverClient.cpp
+++ b/media/libmediaplayerservice/MetadataRetrieverClient.cpp
@@ -51,15 +51,8 @@
mAlbumArtDealer = NULL;
mThumbnail = NULL;
mAlbumArt = NULL;
-
-#ifndef NO_OPENCORE
- mRetriever = new PVMetadataRetriever();
-#else
mRetriever = NULL;
-#endif
- if (mRetriever == NULL) {
- LOGE("failed to initialize the retriever");
- }
+ mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL;
}
MetadataRetrieverClient::~MetadataRetrieverClient()
@@ -74,7 +67,7 @@
char buffer[SIZE];
String8 result;
result.append(" MetadataRetrieverClient\n");
- snprintf(buffer, 255, " pid(%d)\n", mPid);
+ snprintf(buffer, 255, " pid(%d) mode(%d)\n", mPid, mMode);
result.append(buffer);
write(fd, result.string(), result.size());
write(fd, "\n", 1);
@@ -90,6 +83,7 @@
mAlbumArtDealer.clear();
mThumbnail.clear();
mAlbumArt.clear();
+ mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL;
IPCThreadState::self()->flushCommands();
}
@@ -134,7 +128,10 @@
LOGV("player type = %d", playerType);
sp<MediaMetadataRetrieverBase> p = createRetriever(playerType);
if (p == NULL) return NO_INIT;
- status_t ret = p->setDataSource(url);
+ status_t ret = p->setMode(mMode);
+ if (ret == NO_ERROR) {
+ ret = p->setDataSource(url);
+ }
if (ret == NO_ERROR) mRetriever = p;
return ret;
}
@@ -143,12 +140,6 @@
{
LOGV("setDataSource fd=%d, offset=%lld, length=%lld", fd, offset, length);
Mutex::Autolock lock(mLock);
- if (mRetriever == NULL) {
- LOGE("retriever is not initialized");
- ::close(fd);
- return NO_INIT;
- }
-
struct stat sb;
int ret = fstat(fd, &sb);
if (ret != 0) {
@@ -178,7 +169,10 @@
::close(fd);
return NO_INIT;
}
- status_t status = p->setDataSource(fd, offset, length);
+ status_t status = p->setMode(mMode);
+ if (status == NO_ERROR) {
+ p->setDataSource(fd, offset, length);
+ }
if (status == NO_ERROR) mRetriever = p;
::close(fd);
return status;
@@ -188,22 +182,30 @@
{
LOGV("setMode");
Mutex::Autolock lock(mLock);
- if (mRetriever == NULL) {
- LOGE("retriever is not initialized");
- return NO_INIT;
+ if (mode < METADATA_MODE_NOOP ||
+ mode > METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL) {
+ LOGE("invalid mode %d", mode);
+ return BAD_VALUE;
}
- return mRetriever->setMode(mode);
+ mMode = mode;
+ return NO_ERROR;
}
status_t MetadataRetrieverClient::getMode(int* mode) const
{
LOGV("getMode");
Mutex::Autolock lock(mLock);
+
+ // TODO:
+ // This may not be necessary.
+ // If setDataSource() has not been called, return the cached value
+ // otherwise, return the value retrieved from the retriever
if (mRetriever == NULL) {
- LOGE("retriever is not initialized");
- return NO_INIT;
+ *mode = mMode;
+ } else {
+ mRetriever->getMode(mode);
}
- return mRetriever->getMode(mode);
+ return NO_ERROR;
}
sp<IMemory> MetadataRetrieverClient::captureFrame()
diff --git a/media/libmediaplayerservice/MetadataRetrieverClient.h b/media/libmediaplayerservice/MetadataRetrieverClient.h
index 88d50bf..8cb8ad1 100644
--- a/media/libmediaplayerservice/MetadataRetrieverClient.h
+++ b/media/libmediaplayerservice/MetadataRetrieverClient.h
@@ -60,6 +60,7 @@
mutable Mutex mLock;
sp<MediaMetadataRetrieverBase> mRetriever;
pid_t mPid;
+ int mMode;
// Keep the shared memory copy of album art and capture frame (for thumbnail)
sp<MemoryDealer> mAlbumArtDealer;