summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--include/media/stagefright/NuMediaExtractor.h2
-rw-r--r--media/libstagefright/NuMediaExtractor.cpp16
2 files changed, 15 insertions, 3 deletions
diff --git a/include/media/stagefright/NuMediaExtractor.h b/include/media/stagefright/NuMediaExtractor.h
index c9c709c..0833110 100644
--- a/include/media/stagefright/NuMediaExtractor.h
+++ b/include/media/stagefright/NuMediaExtractor.h
@@ -50,6 +50,8 @@ struct NuMediaExtractor : public RefBase {
status_t setDataSource(int fd, off64_t offset, off64_t size);
+ status_t setDataSource(const sp<DataSource> &datasource);
+
size_t countTracks() const;
status_t getTrackFormat(size_t index, sp<AMessage> *format) const;
diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp
index 64e5403..bf833dc 100644
--- a/media/libstagefright/NuMediaExtractor.cpp
+++ b/media/libstagefright/NuMediaExtractor.cpp
@@ -134,18 +134,28 @@ status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {
sp<FileSource> fileSource = new FileSource(dup(fd), offset, size);
- status_t err = fileSource->initCheck();
+ return setDataSource(fileSource);
+}
+
+status_t NuMediaExtractor::setDataSource(const sp<DataSource> &source) {
+ Mutex::Autolock autoLock(mLock);
+
+ if (mImpl != NULL) {
+ return -EINVAL;
+ }
+
+ status_t err = source->initCheck();
if (err != OK) {
return err;
}
- mImpl = MediaExtractor::Create(fileSource);
+ mImpl = MediaExtractor::Create(source);
if (mImpl == NULL) {
return ERROR_UNSUPPORTED;
}
- mDataSource = fileSource;
+ mDataSource = source;
updateDurationAndBitrate();