diff options
author | Andreas Huber <andih@google.com> | 2012-04-23 11:21:47 -0700 |
---|---|---|
committer | Andreas Huber <andih@google.com> | 2012-04-23 11:21:47 -0700 |
commit | dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2 (patch) | |
tree | 74201c84c06f59e3c431e90449abd19a4c2f798e /media/libstagefright/NuMediaExtractor.cpp | |
parent | 0818e739bdbcf16f6dfb21d507002ceaaf664ee4 (diff) | |
download | frameworks_av-dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2.zip frameworks_av-dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2.tar.gz frameworks_av-dc7431e70b4b030b5f42d0dfc3ef244d4f583dd2.tar.bz2 |
Make sure NuMediaExtractor is thread safe.
Change-Id: If261c4d87d5569a0d7cfd75afe311803a6ce0109
Diffstat (limited to 'media/libstagefright/NuMediaExtractor.cpp')
-rw-r--r-- | media/libstagefright/NuMediaExtractor.cpp | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/media/libstagefright/NuMediaExtractor.cpp b/media/libstagefright/NuMediaExtractor.cpp index 123e510..5d218e4 100644 --- a/media/libstagefright/NuMediaExtractor.cpp +++ b/media/libstagefright/NuMediaExtractor.cpp @@ -59,6 +59,8 @@ NuMediaExtractor::~NuMediaExtractor() { status_t NuMediaExtractor::setDataSource( const char *path, const KeyedVector<String8, String8> *headers) { + Mutex::Autolock autoLock(mLock); + if (mImpl != NULL) { return -EINVAL; } @@ -104,6 +106,8 @@ status_t NuMediaExtractor::setDataSource( } status_t NuMediaExtractor::setDataSource(int fd, off64_t offset, off64_t size) { + Mutex::Autolock autoLock(mLock); + if (mImpl != NULL) { return -EINVAL; } @@ -155,11 +159,15 @@ void NuMediaExtractor::updateDurationAndBitrate() { } size_t NuMediaExtractor::countTracks() const { + Mutex::Autolock autoLock(mLock); + return mImpl == NULL ? 0 : mImpl->countTracks(); } status_t NuMediaExtractor::getTrackFormat( size_t index, sp<AMessage> *format) const { + Mutex::Autolock autoLock(mLock); + *format = NULL; if (mImpl == NULL) { @@ -335,6 +343,8 @@ status_t NuMediaExtractor::getTrackFormat( } status_t NuMediaExtractor::selectTrack(size_t index) { + Mutex::Autolock autoLock(mLock); + if (mImpl == NULL) { return -EINVAL; } @@ -438,6 +448,8 @@ ssize_t NuMediaExtractor::fetchTrackSamples(int64_t seekTimeUs) { } status_t NuMediaExtractor::seekTo(int64_t timeUs) { + Mutex::Autolock autoLock(mLock); + ssize_t minIndex = fetchTrackSamples(timeUs); if (minIndex < 0) { @@ -448,6 +460,8 @@ status_t NuMediaExtractor::seekTo(int64_t timeUs) { } status_t NuMediaExtractor::advance() { + Mutex::Autolock autoLock(mLock); + ssize_t minIndex = fetchTrackSamples(); if (minIndex < 0) { @@ -464,6 +478,8 @@ status_t NuMediaExtractor::advance() { } status_t NuMediaExtractor::readSampleData(const sp<ABuffer> &buffer) { + Mutex::Autolock autoLock(mLock); + ssize_t minIndex = fetchTrackSamples(); if (minIndex < 0) { @@ -508,6 +524,8 @@ status_t NuMediaExtractor::readSampleData(const sp<ABuffer> &buffer) { } status_t NuMediaExtractor::getSampleTrackIndex(size_t *trackIndex) { + Mutex::Autolock autoLock(mLock); + ssize_t minIndex = fetchTrackSamples(); if (minIndex < 0) { @@ -521,6 +539,8 @@ status_t NuMediaExtractor::getSampleTrackIndex(size_t *trackIndex) { } status_t NuMediaExtractor::getSampleTime(int64_t *sampleTimeUs) { + Mutex::Autolock autoLock(mLock); + ssize_t minIndex = fetchTrackSamples(); if (minIndex < 0) { @@ -534,6 +554,8 @@ status_t NuMediaExtractor::getSampleTime(int64_t *sampleTimeUs) { } status_t NuMediaExtractor::getSampleMeta(sp<MetaData> *sampleMeta) { + Mutex::Autolock autoLock(mLock); + *sampleMeta = NULL; ssize_t minIndex = fetchTrackSamples(); @@ -566,6 +588,8 @@ bool NuMediaExtractor::getTotalBitrate(int64_t *bitrate) const { // Returns true iff cached duration is available/applicable. bool NuMediaExtractor::getCachedDuration( int64_t *durationUs, bool *eos) const { + Mutex::Autolock autoLock(mLock); + int64_t bitrate; if (mIsWidevineExtractor) { sp<WVMExtractor> wvmExtractor = |