summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/NuMediaExtractor.cpp
diff options
context:
space:
mode:
authorMarco Nelissen <marcone@google.com>2012-08-24 17:10:17 -0700
committerMarco Nelissen <marcone@google.com>2012-08-24 17:12:20 -0700
commitfd7ec80f3d0e30c8df61b86951d926ab9c8c6d25 (patch)
treea43a6dee60d9c94ad41b1801803c1ce09ac2dea0 /media/libstagefright/NuMediaExtractor.cpp
parentff3f75c3e827c1c1f3e3a11b1de46b19444af197 (diff)
downloadframeworks_av-fd7ec80f3d0e30c8df61b86951d926ab9c8c6d25.zip
frameworks_av-fd7ec80f3d0e30c8df61b86951d926ab9c8c6d25.tar.gz
frameworks_av-fd7ec80f3d0e30c8df61b86951d926ab9c8c6d25.tar.bz2
Fix deadlock
I wanted to save some space, and ended up with a deadlock. This change basically restores setDataSource(fd, offset, size) to the way it was before I added the new setDataSource(DataSource) method, instead of calling through to it. Change-Id: Iacf4627c8745369fa84b467530189a9f64f8726b
Diffstat (limited to 'media/libstagefright/NuMediaExtractor.cpp')
-rw-r--r--media/libstagefright/NuMediaExtractor.cpp18
1 files changed, 17 insertions, 1 deletions
diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp
index bf833dc..404fa94 100644
--- a/media/libstagefright/NuMediaExtractor.cpp
+++ b/media/libstagefright/NuMediaExtractor.cpp
@@ -126,6 +126,7 @@ status_t NuMediaExtractor::setDataSource(
}
status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {
+
Mutex::Autolock autoLock(mLock);
if (mImpl != NULL) {
@@ -134,7 +135,22 @@ status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) {
sp<FileSource> fileSource = new FileSource(dup(fd), offset, size);
- return setDataSource(fileSource);
+ status_t err = fileSource->initCheck();
+ if (err != OK) {
+ return err;
+ }
+
+ mImpl = MediaExtractor::Create(fileSource);
+
+ if (mImpl == NULL) {
+ return ERROR_UNSUPPORTED;
+ }
+
+ mDataSource = fileSource;
+
+ updateDurationAndBitrate();
+
+ return OK;
}
status_t NuMediaExtractor::setDataSource(const sp<DataSource> &source) {