summaryrefslogtreecommitdiffstats
path: root/media/libstagefright/omx/GraphicBufferSource.cpp
diff options
context:
space:
mode:
authorAndy McFadden <fadden@android.com>2013-03-05 14:31:02 -0800
committerAndy McFadden <fadden@android.com>2013-03-05 16:29:55 -0800
commitba6218eae3dbcf3f962b3561b26374a214dbf5e2 (patch)
tree4b7922c6822c116b67123022fa48489a23724fe7 /media/libstagefright/omx/GraphicBufferSource.cpp
parenta7a5917a064710edea9cfacc8eda44532150e852 (diff)
downloadframeworks_av-ba6218eae3dbcf3f962b3561b26374a214dbf5e2.zip
frameworks_av-ba6218eae3dbcf3f962b3561b26374a214dbf5e2.tar.gz
frameworks_av-ba6218eae3dbcf3f962b3561b26374a214dbf5e2.tar.bz2
Correct MediaCodec + Surface behavior
Assorted tweaks: - Allow signalEndOfInputStream() before ACodec is in Executing state (added message to two more states). - Return an error if signalEndOfInputStream() is called a second time on the same stream. - Require AndroidOpaque color format in createInputSurface(). - Disallow dequeueInputBuffer() after an input surface has been created (boolean flag in MediaCodec tracks it). - Discard input surface when encoder is re-configure()ed (drop OMXNodeInstance's ref when we go back to Loaded). Bug 7991062 Change-Id: Iff30f3036e14eb5a2f6536910dcf11aba33031ee
Diffstat (limited to 'media/libstagefright/omx/GraphicBufferSource.cpp')
-rw-r--r--media/libstagefright/omx/GraphicBufferSource.cpp25
1 files changed, 15 insertions, 10 deletions
diff --git a/media/libstagefright/omx/GraphicBufferSource.cpp b/media/libstagefright/omx/GraphicBufferSource.cpp
index f207954..211e1d1 100644
--- a/media/libstagefright/omx/GraphicBufferSource.cpp
+++ b/media/libstagefright/omx/GraphicBufferSource.cpp
@@ -15,6 +15,7 @@
*/
#define LOG_TAG "GraphicBufferSource"
+//#define LOG_NDEBUG 0
#include <utils/Log.h>
#include <GraphicBufferSource.h>
@@ -110,15 +111,12 @@ void GraphicBufferSource::omxExecuting() {
}
}
-void GraphicBufferSource::omxIdling(){
+void GraphicBufferSource::omxLoaded(){
Mutex::Autolock autoLock(mMutex);
- ALOGV("--> idling");
- if (!mExecuting) {
- // Transition from "loading" to "idling". Nothing to do.
- return;
- }
+ ALOGV("--> loaded");
+ CHECK(mExecuting);
- ALOGV("Dropped down to idle, avail=%d eos=%d eosSent=%d",
+ ALOGV("Dropped down to loaded, avail=%d eos=%d eosSent=%d",
mNumFramesAvailable, mEndOfStream, mEndOfStreamSent);
// Codec is no longer executing. Discard all codec-related state.
@@ -282,10 +280,15 @@ status_t GraphicBufferSource::fillCodecBuffer_l() {
return OK;
}
-void GraphicBufferSource::signalEndOfInputStream() {
+status_t GraphicBufferSource::signalEndOfInputStream() {
Mutex::Autolock autoLock(mMutex);
- ALOGV("signalEndOfInputStream: exec=%d avail=%d",
- mExecuting, mNumFramesAvailable);
+ ALOGV("signalEndOfInputStream: exec=%d avail=%d eos=%d",
+ mExecuting, mNumFramesAvailable, mEndOfStream);
+
+ if (mEndOfStream) {
+ ALOGE("EOS was already signaled");
+ return INVALID_OPERATION;
+ }
// Set the end-of-stream flag. If no frames are pending from the
// BufferQueue, and a codec buffer is available, and we're executing,
@@ -300,6 +303,8 @@ void GraphicBufferSource::signalEndOfInputStream() {
if (mExecuting && mNumFramesAvailable == 0) {
submitEndOfInputStream_l();
}
+
+ return OK;
}
status_t GraphicBufferSource::submitBuffer_l(sp<GraphicBuffer>& graphicBuffer,