From 67e5a4f6f6879d512a859e5dba92e9beec7a2f91 Mon Sep 17 00:00:00 2001 From: Andreas Huber Date: Fri, 8 Jan 2010 10:57:34 -0800 Subject: Reorganize some of the stagefright implementation related to metadata. --- media/libstagefright/StagefrightMediaScanner.cpp | 80 ++++++++++++++++++++++++ 1 file changed, 80 insertions(+) create mode 100644 media/libstagefright/StagefrightMediaScanner.cpp (limited to 'media/libstagefright/StagefrightMediaScanner.cpp') diff --git a/media/libstagefright/StagefrightMediaScanner.cpp b/media/libstagefright/StagefrightMediaScanner.cpp new file mode 100644 index 0000000..9b41929 --- /dev/null +++ b/media/libstagefright/StagefrightMediaScanner.cpp @@ -0,0 +1,80 @@ +/* + * Copyright (C) 2009 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include + +#include "include/StagefrightMetadataRetriever.h" + +namespace android { + +StagefrightMediaScanner::StagefrightMediaScanner() + : mRetriever(new StagefrightMetadataRetriever) { +} + +StagefrightMediaScanner::~StagefrightMediaScanner() {} + +status_t StagefrightMediaScanner::processFile( + const char *path, const char *mimeType, + MediaScannerClient &client) { + client.setLocale(locale()); + client.beginFile(); + + if (mRetriever->setDataSource(path) == OK + && mRetriever->setMode( + METADATA_MODE_METADATA_RETRIEVAL_ONLY) == OK) { + struct KeyMap { + const char *tag; + int key; + }; + static const KeyMap kKeyMap[] = { + { "tracknumber", METADATA_KEY_CD_TRACK_NUMBER }, + { "album", METADATA_KEY_ALBUM }, + { "artist", METADATA_KEY_ARTIST }, + { "composer", METADATA_KEY_COMPOSER }, + { "genre", METADATA_KEY_GENRE }, + { "title", METADATA_KEY_TITLE }, + { "year", METADATA_KEY_YEAR }, + { "duration", METADATA_KEY_DURATION }, + { "writer", METADATA_KEY_WRITER }, + }; + static const size_t kNumEntries = sizeof(kKeyMap) / sizeof(kKeyMap[0]); + + for (size_t i = 0; i < kNumEntries; ++i) { + const char *value; + if ((value = mRetriever->extractMetadata(kKeyMap[i].key)) != NULL) { + client.addStringTag(kKeyMap[i].tag, value); + } + } + } + + client.endFile(); + + return OK; +} + +char *StagefrightMediaScanner::extractAlbumArt(int fd) { + if (mRetriever->setDataSource(fd, 0, 0) == OK + && mRetriever->setMode( + METADATA_MODE_FRAME_CAPTURE_ONLY) == OK) { + MediaAlbumArt *art = mRetriever->extractAlbumArt(); + + // TODO: figure out what format the result should be in. + } + + return NULL; +} + +} // namespace android -- cgit v1.1