am 4c232c5b: Merge change Idd16976f into eclair
Merge commit '4c232c5b3f7fcbea73cd3cec2d3befe06e85c068' into eclair-plus-aosp * commit '4c232c5b3f7fcbea73cd3cec2d3befe06e85c068': Fix some metadata retriever issues:
This commit is contained in:
@@ -51,15 +51,8 @@ MetadataRetrieverClient::MetadataRetrieverClient(pid_t pid)
|
|||||||
mAlbumArtDealer = NULL;
|
mAlbumArtDealer = NULL;
|
||||||
mThumbnail = NULL;
|
mThumbnail = NULL;
|
||||||
mAlbumArt = NULL;
|
mAlbumArt = NULL;
|
||||||
|
|
||||||
#ifndef NO_OPENCORE
|
|
||||||
mRetriever = new PVMetadataRetriever();
|
|
||||||
#else
|
|
||||||
mRetriever = NULL;
|
mRetriever = NULL;
|
||||||
#endif
|
mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL;
|
||||||
if (mRetriever == NULL) {
|
|
||||||
LOGE("failed to initialize the retriever");
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
MetadataRetrieverClient::~MetadataRetrieverClient()
|
MetadataRetrieverClient::~MetadataRetrieverClient()
|
||||||
@@ -74,7 +67,7 @@ status_t MetadataRetrieverClient::dump(int fd, const Vector<String16>& args) con
|
|||||||
char buffer[SIZE];
|
char buffer[SIZE];
|
||||||
String8 result;
|
String8 result;
|
||||||
result.append(" MetadataRetrieverClient\n");
|
result.append(" MetadataRetrieverClient\n");
|
||||||
snprintf(buffer, 255, " pid(%d)\n", mPid);
|
snprintf(buffer, 255, " pid(%d) mode(%d)\n", mPid, mMode);
|
||||||
result.append(buffer);
|
result.append(buffer);
|
||||||
write(fd, result.string(), result.size());
|
write(fd, result.string(), result.size());
|
||||||
write(fd, "\n", 1);
|
write(fd, "\n", 1);
|
||||||
@@ -90,6 +83,7 @@ void MetadataRetrieverClient::disconnect()
|
|||||||
mAlbumArtDealer.clear();
|
mAlbumArtDealer.clear();
|
||||||
mThumbnail.clear();
|
mThumbnail.clear();
|
||||||
mAlbumArt.clear();
|
mAlbumArt.clear();
|
||||||
|
mMode = METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL;
|
||||||
IPCThreadState::self()->flushCommands();
|
IPCThreadState::self()->flushCommands();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -134,7 +128,10 @@ status_t MetadataRetrieverClient::setDataSource(const char *url)
|
|||||||
LOGV("player type = %d", playerType);
|
LOGV("player type = %d", playerType);
|
||||||
sp<MediaMetadataRetrieverBase> p = createRetriever(playerType);
|
sp<MediaMetadataRetrieverBase> p = createRetriever(playerType);
|
||||||
if (p == NULL) return NO_INIT;
|
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;
|
if (ret == NO_ERROR) mRetriever = p;
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
@@ -143,12 +140,6 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t
|
|||||||
{
|
{
|
||||||
LOGV("setDataSource fd=%d, offset=%lld, length=%lld", fd, offset, length);
|
LOGV("setDataSource fd=%d, offset=%lld, length=%lld", fd, offset, length);
|
||||||
Mutex::Autolock lock(mLock);
|
Mutex::Autolock lock(mLock);
|
||||||
if (mRetriever == NULL) {
|
|
||||||
LOGE("retriever is not initialized");
|
|
||||||
::close(fd);
|
|
||||||
return NO_INIT;
|
|
||||||
}
|
|
||||||
|
|
||||||
struct stat sb;
|
struct stat sb;
|
||||||
int ret = fstat(fd, &sb);
|
int ret = fstat(fd, &sb);
|
||||||
if (ret != 0) {
|
if (ret != 0) {
|
||||||
@@ -178,7 +169,10 @@ status_t MetadataRetrieverClient::setDataSource(int fd, int64_t offset, int64_t
|
|||||||
::close(fd);
|
::close(fd);
|
||||||
return NO_INIT;
|
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;
|
if (status == NO_ERROR) mRetriever = p;
|
||||||
::close(fd);
|
::close(fd);
|
||||||
return status;
|
return status;
|
||||||
@@ -188,22 +182,30 @@ status_t MetadataRetrieverClient::setMode(int mode)
|
|||||||
{
|
{
|
||||||
LOGV("setMode");
|
LOGV("setMode");
|
||||||
Mutex::Autolock lock(mLock);
|
Mutex::Autolock lock(mLock);
|
||||||
if (mRetriever == NULL) {
|
if (mode < METADATA_MODE_NOOP ||
|
||||||
LOGE("retriever is not initialized");
|
mode > METADATA_MODE_FRAME_CAPTURE_AND_METADATA_RETRIEVAL) {
|
||||||
return NO_INIT;
|
LOGE("invalid mode %d", mode);
|
||||||
|
return BAD_VALUE;
|
||||||
}
|
}
|
||||||
return mRetriever->setMode(mode);
|
mMode = mode;
|
||||||
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
status_t MetadataRetrieverClient::getMode(int* mode) const
|
status_t MetadataRetrieverClient::getMode(int* mode) const
|
||||||
{
|
{
|
||||||
LOGV("getMode");
|
LOGV("getMode");
|
||||||
Mutex::Autolock lock(mLock);
|
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) {
|
if (mRetriever == NULL) {
|
||||||
LOGE("retriever is not initialized");
|
*mode = mMode;
|
||||||
return NO_INIT;
|
} else {
|
||||||
|
mRetriever->getMode(mode);
|
||||||
}
|
}
|
||||||
return mRetriever->getMode(mode);
|
return NO_ERROR;
|
||||||
}
|
}
|
||||||
|
|
||||||
sp<IMemory> MetadataRetrieverClient::captureFrame()
|
sp<IMemory> MetadataRetrieverClient::captureFrame()
|
||||||
|
|||||||
@@ -60,6 +60,7 @@ private:
|
|||||||
mutable Mutex mLock;
|
mutable Mutex mLock;
|
||||||
sp<MediaMetadataRetrieverBase> mRetriever;
|
sp<MediaMetadataRetrieverBase> mRetriever;
|
||||||
pid_t mPid;
|
pid_t mPid;
|
||||||
|
int mMode;
|
||||||
|
|
||||||
// Keep the shared memory copy of album art and capture frame (for thumbnail)
|
// Keep the shared memory copy of album art and capture frame (for thumbnail)
|
||||||
sp<MemoryDealer> mAlbumArtDealer;
|
sp<MemoryDealer> mAlbumArtDealer;
|
||||||
|
|||||||
Reference in New Issue
Block a user