summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/StagefrightMediaScanner.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-01-08 10:57:34 -0800
committerAndreas Huber <andih@google.com>2010-01-08 11:54:36 -0800
commit67e5a4f6f6879d512a859e5dba92e9beec7a2f91 (patch)
treedb31b16d1b6e0ec2074c76058da7a86c1ea2a9c6 /media/libstagefright/StagefrightMediaScanner.cpp
parent23d7a43fb32482e2573b7f203fd9dd5a8349b329 (diff)
downloadframeworks_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.cpp80
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