summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/NuMediaExtractor.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2012-04-13 11:16:48 -0700
committerAndreas Huber <andih@google.com>2012-04-13 11:51:05 -0700
commit918c7652b9a38c02e26c0c46541cea82070c0e43 (patch)
tree5ac94f452e54c8027bd3e67b773a62b047349d56 /media/libstagefright/NuMediaExtractor.cpp
parent1803c3ae573e5fa3f3a1abe24ae802e30e5d5495 (diff)
downloadframeworks_av-918c7652b9a38c02e26c0c46541cea82070c0e43.zip
frameworks_av-918c7652b9a38c02e26c0c46541cea82070c0e43.tar.gz
frameworks_av-918c7652b9a38c02e26c0c46541cea82070c0e43.tar.bz2
Change NuMediaExtractor's API to support different kinds of data sources.
Change-Id: I080aa2ce28300a72a85751509334dbdc491936c6 related-to-bug: 6276111
Diffstat (limited to 'media/libstagefright/NuMediaExtractor.cpp')
-rw-r--r--media/libstagefright/NuMediaExtractor.cpp36
1 files changed, 34 insertions, 2 deletions
diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp
index 224ec33..8758c93 100644
--- a/media/libstagefright/NuMediaExtractor.cpp
+++ b/media/libstagefright/NuMediaExtractor.cpp
@@ -26,6 +26,7 @@
#include <media/stagefright/foundation/ADebug.h>
#include <media/stagefright/foundation/AMessage.h>
#include <media/stagefright/DataSource.h>
+#include <media/stagefright/FileSource.h>
#include <media/stagefright/MediaBuffer.h>
#include <media/stagefright/MediaDefs.h>
#include <media/stagefright/MediaErrors.h>
@@ -51,8 +52,13 @@ NuMediaExtractor::~NuMediaExtractor() {
mSelectedTracks.clear();
}
-status_t NuMediaExtractor::setDataSource(const char *path) {
- sp<DataSource> dataSource = DataSource::CreateFromURI(path);
+status_t NuMediaExtractor::setDataSource(
+ const char *path, const KeyedVector<String8, String8> *headers) {
+ if (mImpl != NULL) {
+ return -EINVAL;
+ }
+
+ sp<DataSource> dataSource = DataSource::CreateFromURI(path, headers);
if (dataSource == NULL) {
return -ENOENT;
@@ -67,6 +73,27 @@ status_t NuMediaExtractor::setDataSource(const char *path) {
return OK;
}
+status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {
+ if (mImpl != NULL) {
+ return -EINVAL;
+ }
+
+ sp<FileSource> fileSource = new FileSource(dup(fd), offset, size);
+
+ status_t err = fileSource->initCheck();
+ if (err != OK) {
+ return err;
+ }
+
+ mImpl = MediaExtractor::Create(fileSource);
+
+ if (mImpl == NULL) {
+ return ERROR_UNSUPPORTED;
+ }
+
+ return OK;
+}
+
size_t NuMediaExtractor::countTracks() const {
return mImpl == NULL ? 0 : mImpl->countTracks();
}
@@ -91,6 +118,11 @@ status_t NuMediaExtractor::getTrackFormat(
sp<AMessage> msg = new AMessage;
msg->setString("mime", mime);
+ int64_t durationUs;
+ if (meta->findInt64(kKeyDuration, &durationUs)) {
+ msg->setInt64("durationUs", durationUs);
+ }
+
if (!strncasecmp("video/", mime, 6)) {
int32_t width, height;
CHECK(meta->findInt32(kKeyWidth, &width));