OSDN Git Service

Report buffer size even when using hardware buffers
authorMarco Nelissen <marcone@google.com>
Tue, 18 Dec 2012 20:28:27 +0000 (12:28 -0800)
committerMarco Nelissen <marcone@google.com>
Tue, 18 Dec 2012 22:46:11 +0000 (14:46 -0800)
This makes it so that the buffers dequeued from a MediaCodec show
a non-zero size when there's actually data in them, which allows
the caller to distinguish between a valid frame and an empty buffer.

Change-Id: I891b2301501e26f0b4e8cf2e24c169e501a6d026

media/libstagefright/ACodec.cpp

index 2b20ab0..7920d32 100644 (file)
@@ -612,7 +612,7 @@ status_t ACodec::allocateOutputBuffersFromNativeWindow() {
         sp<GraphicBuffer> graphicBuffer(new GraphicBuffer(buf, false));
         BufferInfo info;
         info.mStatus = BufferInfo::OWNED_BY_US;
-        info.mData = new ABuffer(0);
+        info.mData = new ABuffer(NULL /* data */, def.nBufferSize /* capacity */);
         info.mGraphicBuffer = graphicBuffer;
         mBuffers[kPortIndexOutput].push(info);
 
@@ -2868,15 +2868,14 @@ bool ACodec::BaseState::onOMXFillBufferDone(
                 mCodec->sendFormatChange();
             }
 
-            if (mCodec->mNativeWindow == NULL) {
-                info->mData->setRange(rangeOffset, rangeLength);
-
+            info->mData->setRange(rangeOffset, rangeLength);
 #if 0
+            if (mCodec->mNativeWindow == NULL) {
                 if (IsIDR(info->mData)) {
                     ALOGI("IDR frame");
                 }
-#endif
             }
+#endif
 
             if (mCodec->mSkipCutBuffer != NULL) {
                 mCodec->mSkipCutBuffer->submit(info->mData);