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:
committed by
Android (Google) Code Review
commit
b94b52b94e
@ -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 &);
|
||||
|
@ -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;
|
||||
}
|
||||
|
Reference in New Issue
Block a user