diff options
author | Lajos Molnar <lajos@google.com> | 2015-05-08 20:30:02 -0700 |
---|---|---|
committer | Lajos Molnar <lajos@google.com> | 2015-05-08 20:36:00 -0700 |
commit | e66c5a42f01e2f445857b54a9d7bbb8ee062edeb (patch) | |
tree | 7fe14ba80918fa8aea83f5973da974b07d499b52 | |
parent | badb2c466b9a9e84ad1cd794c52052a436b661fa (diff) | |
download | frameworks_av-e66c5a42f01e2f445857b54a9d7bbb8ee062edeb.zip frameworks_av-e66c5a42f01e2f445857b54a9d7bbb8ee062edeb.tar.gz frameworks_av-e66c5a42f01e2f445857b54a9d7bbb8ee062edeb.tar.bz2 |
stagefright: fix legacy-adaptive experiment
Now that we are checking for unregistered buffers, we need to
preregister the buffers on allocation.
Bug: 20894716
Change-Id: Ie89663232c4c0d5bc2dfbd58c3347581c25fb041
-rw-r--r-- | media/libstagefright/ACodec.cpp | 69 |
1 files changed, 35 insertions, 34 deletions
diff --git a/media/libstagefright/ACodec.cpp b/media/libstagefright/ACodec.cpp index 0843ad1..b9ae125 100644 --- a/media/libstagefright/ACodec.cpp +++ b/media/libstagefright/ACodec.cpp @@ -972,8 +972,36 @@ status_t ACodec::allocateOutputMetaDataBuffers() { return err; mNumUndequeuedBuffers = minUndequeuedBuffers; + ALOGV("[%s] Allocating %u meta buffers on output port", + mComponentName.c_str(), bufferCount); + + size_t totalSize = bufferCount * 8; + mDealer[kPortIndexOutput] = new MemoryDealer(totalSize, "ACodec"); + + // Dequeue buffers and send them to OMX + for (OMX_U32 i = 0; i < bufferCount; i++) { + BufferInfo info; + info.mStatus = BufferInfo::OWNED_BY_NATIVE_WINDOW; + info.mGraphicBuffer = NULL; + info.mDequeuedAt = mDequeueCounter; + + sp<IMemory> mem = mDealer[kPortIndexOutput]->allocate( + sizeof(struct VideoDecoderOutputMetaData)); + CHECK(mem.get() != NULL); + info.mData = new ABuffer(mem->pointer(), mem->size()); + + // we use useBuffer for metadata regardless of quirks + err = mOMX->useBuffer( + mNode, kPortIndexOutput, mem, &info.mBufferID); + + mBuffers[kPortIndexOutput].push(info); + + ALOGV("[%s] allocated meta buffer with ID %u (pointer = %p)", + mComponentName.c_str(), info.mBufferID, mem->pointer()); + } + if (mLegacyAdaptiveExperiment) { - // preallocate buffers + // preallocate and preregister buffers static_cast<Surface *>(mNativeWindow.get()) ->getIGraphicBufferProducer()->allowAllocation(true); @@ -983,6 +1011,8 @@ status_t ACodec::allocateOutputMetaDataBuffers() { // Dequeue buffers then cancel them all for (OMX_U32 i = 0; i < bufferCount; i++) { + BufferInfo *info = &mBuffers[kPortIndexOutput].editItemAt(i); + ANativeWindowBuffer *buf; err = native_window_dequeue_buffer_and_wait(mNativeWindow.get(), &buf); if (err != 0) { @@ -991,10 +1021,10 @@ status_t ACodec::allocateOutputMetaDataBuffers() { } sp<GraphicBuffer> graphicBuffer(new GraphicBuffer(buf, false)); - BufferInfo info; - info.mStatus = BufferInfo::OWNED_BY_US; - info.mGraphicBuffer = graphicBuffer; - mBuffers[kPortIndexOutput].push(info); + mOMX->updateGraphicBufferInMeta( + mNode, kPortIndexOutput, graphicBuffer, info->mBufferID); + info->mStatus = BufferInfo::OWNED_BY_US; + info->mGraphicBuffer = graphicBuffer; } for (OMX_U32 i = 0; i < mBuffers[kPortIndexOutput].size(); i++) { @@ -1005,39 +1035,10 @@ status_t ACodec::allocateOutputMetaDataBuffers() { } } - mBuffers[kPortIndexOutput].clear(); static_cast<Surface*>(mNativeWindow.get()) ->getIGraphicBufferProducer()->allowAllocation(false); } - ALOGV("[%s] Allocating %u meta buffers on output port", - mComponentName.c_str(), bufferCount); - - size_t totalSize = bufferCount * 8; - mDealer[kPortIndexOutput] = new MemoryDealer(totalSize, "ACodec"); - - // Dequeue buffers and send them to OMX - for (OMX_U32 i = 0; i < bufferCount; i++) { - BufferInfo info; - info.mStatus = BufferInfo::OWNED_BY_NATIVE_WINDOW; - info.mGraphicBuffer = NULL; - info.mDequeuedAt = mDequeueCounter; - - sp<IMemory> mem = mDealer[kPortIndexOutput]->allocate( - sizeof(struct VideoDecoderOutputMetaData)); - CHECK(mem.get() != NULL); - info.mData = new ABuffer(mem->pointer(), mem->size()); - - // we use useBuffer for metadata regardless of quirks - err = mOMX->useBuffer( - mNode, kPortIndexOutput, mem, &info.mBufferID); - - mBuffers[kPortIndexOutput].push(info); - - ALOGV("[%s] allocated meta buffer with ID %u (pointer = %p)", - mComponentName.c_str(), info.mBufferID, mem->pointer()); - } - mMetaDataBuffersToSubmit = bufferCount - minUndequeuedBuffers; return err; } |