summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/NuMediaExtractor.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2012-04-23 11:21:47 -0700
committerAndreas Huber <andih@google.com>2012-04-23 11:21:47 -0700
commitdc7431e70b4b030b5f42d0dfc3ef244d4f583dd2 (patch)
tree74201c84c06f59e3c431e90449abd19a4c2f798e /media/libstagefright/NuMediaExtractor.cpp
parent0818e739bdbcf16f6dfb21d507002ceaaf664ee4 (diff)
downloadframeworks_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.cpp24
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 =