From 2e39c1ca101e01ff13b03129a87939e7982b25bf Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Wed, 10 Mar 2010 10:55:35 -0800 Subject: Instead of instantiating StagefrightMetadataRetriever directly, instantiate a MediaMetadataRetriever which will do-the-right-thing(tm) even for .wma/.wmv/.asf files. Change-Id: Ibda4b5268514934f14a3d49a564902bc670f4384 related-to-bug: 2074137 --- media/libstagefright/StagefrightMediaScanner.cpp | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'media/libstagefright/StagefrightMediaScanner.cpp') diff --git a/media/libstagefright/StagefrightMediaScanner.cpp b/media/libstagefright/StagefrightMediaScanner.cpp index b1eca2b..34fb2bc 100644 --- a/media/libstagefright/StagefrightMediaScanner.cpp +++ b/media/libstagefright/StagefrightMediaScanner.cpp @@ -20,7 +20,8 @@ #include -#include "include/StagefrightMetadataRetriever.h" +#include +#include // Sonivox includes #include @@ -32,7 +33,7 @@ namespace android { StagefrightMediaScanner::StagefrightMediaScanner() - : mRetriever(new StagefrightMetadataRetriever) { + : mRetriever(new MediaMetadataRetriever) { } StagefrightMediaScanner::~StagefrightMediaScanner() {} @@ -146,6 +147,8 @@ failure: status_t StagefrightMediaScanner::processFile( const char *path, const char *mimeType, MediaScannerClient &client) { + LOGV("processFile '%s'.", path); + client.setLocale(locale()); client.beginFile(); @@ -218,6 +221,8 @@ status_t StagefrightMediaScanner::processFile( } char *StagefrightMediaScanner::extractAlbumArt(int fd) { + LOGV("extractAlbumArt %d", fd); + off_t size = lseek(fd, 0, SEEK_END); if (size < 0) { return NULL; @@ -227,15 +232,14 @@ char *StagefrightMediaScanner::extractAlbumArt(int fd) { if (mRetriever->setDataSource(fd, 0, size) == OK && mRetriever->setMode( METADATA_MODE_FRAME_CAPTURE_ONLY) == OK) { - MediaAlbumArt *art = mRetriever->extractAlbumArt(); + sp mem = mRetriever->extractAlbumArt(); + + if (mem != NULL) { + MediaAlbumArt *art = static_cast(mem->pointer()); - if (art != NULL) { char *data = (char *)malloc(art->mSize + 4); *(int32_t *)data = art->mSize; - memcpy(&data[4], art->mData, art->mSize); - - delete art; - art = NULL; + memcpy(&data[4], &art[1], art->mSize); return data; } -- cgit v1.1