Merge "Allow directly setting a DataSource for NuMediaExtractor" into jb-mr1-dev
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 @@
 
     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 @@
 
     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();