diff options
author | Andreas Huber <andih@google.com> | 2010-01-08 10:57:34 -0800 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2010-01-08 11:54:36 -0800 |
commit | 67e5a4f6f6879d512a859e5dba92e9beec7a2f91 (patch) | |
tree | db31b16d1b6e0ec2074c76058da7a86c1ea2a9c6 /media/libstagefright/StagefrightMediaScanner.cpp | |
parent | 23d7a43fb32482e2573b7f203fd9dd5a8349b329 (diff) | |
download | frameworks_av-67e5a4f6f6879d512a859e5dba92e9beec7a2f91.zip frameworks_av-67e5a4f6f6879d512a859e5dba92e9beec7a2f91.tar.gz frameworks_av-67e5a4f6f6879d512a859e5dba92e9beec7a2f91.tar.bz2 |
Reorganize some of the stagefright implementation related to metadata.
Diffstat (limited to 'media/libstagefright/StagefrightMediaScanner.cpp')
-rw-r--r-- | media/libstagefright/StagefrightMediaScanner.cpp | 80 |
1 files changed, 80 insertions, 0 deletions
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 <media/stagefright/StagefrightMediaScanner.h> + +#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 |