From dbcb4c17f16230dfc6af908f176681c49f61b13e Mon Sep 17 00:00:00 2001 From: Marco Nelissen Date: Fri, 24 Aug 2012 09:53:35 -0700 Subject: Allow directly setting a DataSource for NuMediaExtractor This adds NuMediaExtractor::setDataSource(const sp &source), which some new code under frameworks/av will use to let applications provide a custom data source for extractors. Change-Id: I8fb743441d04b4eadbda3c2d76858c3d60e2a3b2 --- include/media/stagefright/NuMediaExtractor.h | 2 ++ media/libstagefright/NuMediaExtractor.cpp | 16 +++++++++++++--- 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); + size_t countTracks() const; status_t getTrackFormat(size_t index, sp *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 = new FileSource(dup(fd), offset, size); - status_t err = fileSource->initCheck(); + return setDataSource(fileSource); +} + +status_t NuMediaExtractor::setDataSource(const sp &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(); -- cgit v1.1