Merge "Instead of instantiating StagefrightMetadataRetriever directly, instantiate a MediaMetadataRetriever which will do-the-right-thing(tm) even for .wma/.wmv/.asf files."

This commit is contained in:
Andreas Huber
2010-03-10 11:12:56 -08:00
committed by Android (Google) Code Review
2 changed files with 14 additions and 10 deletions

View File

@ -22,7 +22,7 @@
namespace android {
struct StagefrightMetadataRetriever;
struct MediaMetadataRetriever;
struct StagefrightMediaScanner : public MediaScanner {
StagefrightMediaScanner();
@ -35,7 +35,7 @@ struct StagefrightMediaScanner : public MediaScanner {
virtual char *extractAlbumArt(int fd);
private:
sp<StagefrightMetadataRetriever> mRetriever;
sp<MediaMetadataRetriever> mRetriever;
StagefrightMediaScanner(const StagefrightMediaScanner &);
StagefrightMediaScanner &operator=(const StagefrightMediaScanner &);

View File

@ -20,7 +20,8 @@
#include <media/stagefright/StagefrightMediaScanner.h>
#include "include/StagefrightMetadataRetriever.h"
#include <media/mediametadataretriever.h>
#include <private/media/VideoFrame.h>
// Sonivox includes
#include <libsonivox/eas.h>
@ -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<IMemory> mem = mRetriever->extractAlbumArt();
if (mem != NULL) {
MediaAlbumArt *art = static_cast<MediaAlbumArt *>(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;
}