summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/OMXCodec.cpp
diff options
context:
space:
mode:
authorAndreas Huber <andih@google.com>2010-06-10 11:12:39 -0700
committerAndreas Huber <andih@google.com>2010-06-10 11:24:49 -0700
commitd35bd5fb4e09c2cd8608497c279cbb2ef9c3a029 (patch)
tree202a1dc44facac79bb0175f2dce9ec1381850854 /media/libstagefright/OMXCodec.cpp
parent98c7c319907f4ed3915461ca62b1027590d351e5 (diff)
downloadframeworks_av-d35bd5fb4e09c2cd8608497c279cbb2ef9c3a029.zip
frameworks_av-d35bd5fb4e09c2cd8608497c279cbb2ef9c3a029.tar.gz
frameworks_av-d35bd5fb4e09c2cd8608497c279cbb2ef9c3a029.tar.bz2
Support "pausing" of MediaSources with the effect that they no longer pull on their upstream source until a subsequent read-with-seek.
Change-Id: Ie4153a10ab36c1135f5fcfb572958129d886bcc3
Diffstat (limited to 'media/libstagefright/OMXCodec.cpp')
-rw-r--r--media/libstagefright/OMXCodec.cpp20
1 files changed, 19 insertions, 1 deletions
diff --git a/media/libstagefright/OMXCodec.cpp b/media/libstagefright/OMXCodec.cpp
index 14682af..6be41b4 100644
--- a/media/libstagefright/OMXCodec.cpp
+++ b/media/libstagefright/OMXCodec.cpp
@@ -1145,7 +1145,8 @@ OMXCodec::OMXCodec(
mNoMoreOutputData(false),
mOutputPortSettingsHaveChanged(false),
mSeekTimeUs(-1),
- mLeftOverBuffer(NULL) {
+ mLeftOverBuffer(NULL),
+ mPaused(false) {
mPortStatus[kPortIndexInput] = ENABLED;
mPortStatus[kPortIndexOutput] = ENABLED;
@@ -1735,6 +1736,9 @@ void OMXCodec::onCmdComplete(OMX_COMMANDTYPE cmd, OMX_U32 data) {
CODEC_LOGV("Finished flushing both ports, now continuing from"
" seek-time.");
+ // We implicitly resume pulling on our upstream source.
+ mPaused = false;
+
drainInputBuffers();
fillOutputBuffers();
}
@@ -2034,6 +2038,10 @@ void OMXCodec::drainInputBuffer(BufferInfo *info) {
return;
}
+ if (mPaused) {
+ return;
+ }
+
status_t err;
bool signalEOS = false;
@@ -2554,6 +2562,7 @@ status_t OMXCodec::start(MetaData *) {
mOutputPortSettingsHaveChanged = false;
mSeekTimeUs = -1;
mFilledBuffers.clear();
+ mPaused = false;
return init();
}
@@ -2660,6 +2669,7 @@ status_t OMXCodec::read(
// There's no reason to trigger the code below, there's
// nothing to flush yet.
seeking = false;
+ mPaused = false;
}
drainInputBuffers();
@@ -3220,6 +3230,14 @@ void OMXCodec::initOutputFormat(const sp<MetaData> &inputFormat) {
}
}
+status_t OMXCodec::pause() {
+ Mutex::Autolock autoLock(mLock);
+
+ mPaused = true;
+
+ return OK;
+}
+
////////////////////////////////////////////////////////////////////////////////
status_t QueryCodecs(