summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2012-08-24 09:53:35 -0700
committerMarco Nelissen <marcone@google.com>2012-08-24 10:14:37 -0700
commitdbcb4c17f16230dfc6af908f176681c49f61b13e (patch)
treebef549ee2c80ee54309207846ab36192b0124879
parent9a150640a28d3fa5507a590125a6c004681bb221 (diff)
Allow directly setting a DataSource for NuMediaExtractor
This adds NuMediaExtractor::setDataSource(const sp<DataSource> &source), which some new code under frameworks/av will use to let applications provide a custom data source for extractors. Change-Id: I8fb743441d04b4eadbda3c2d76858c3d60e2a3b2
-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 c9c709cc..0833110b 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 64e54033..bf833dcd 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();