Loading include/media/stagefright/OMXCodec.h +2 −0 Original line number Diff line number Diff line Loading @@ -293,6 +293,8 @@ private: uint32_t flags, Vector<String8> *matchingCodecs); void restorePatchedDataPointer(BufferInfo *info); OMXCodec(const OMXCodec &); OMXCodec &operator=(const OMXCodec &); }; Loading media/libstagefright/OMXCodec.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -1913,6 +1913,13 @@ void OMXCodec::on_message(const omx_message &msg) { // Buffer could not be released until empty buffer done is called. if (info->mMediaBuffer != NULL) { if (mIsEncoder && (mQuirks & kAvoidMemcopyInputRecordingFrames)) { // If zero-copy mode is enabled this will send the // input buffer back to the upstream source. restorePatchedDataPointer(info); } info->mMediaBuffer->release(); info->mMediaBuffer = NULL; } Loading Loading @@ -2462,6 +2469,7 @@ status_t OMXCodec::freeBuffer(OMX_U32 portIndex, size_t bufIndex) { status_t err = mOMX->freeBuffer(mNode, portIndex, info->mBuffer); if (err == OK && info->mMediaBuffer != NULL) { CHECK_EQ(portIndex, kPortIndexOutput); info->mMediaBuffer->setObserver(NULL); // Make sure nobody but us owns this buffer at this point. Loading @@ -2474,6 +2482,7 @@ status_t OMXCodec::freeBuffer(OMX_U32 portIndex, size_t bufIndex) { } info->mMediaBuffer->release(); info->mMediaBuffer = NULL; } if (err == OK) { Loading Loading @@ -2714,10 +2723,10 @@ void OMXCodec::drainInputBuffer(BufferInfo *info) { if (mIsEncoder && (mQuirks & kAvoidMemcopyInputRecordingFrames)) { CHECK(mOMXLivesLocally && offset == 0); OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *) info->mBuffer; CHECK(header->pBuffer == info->mData); header->pBuffer = (OMX_U8 *) srcBuffer->data() + srcBuffer->range_offset(); releaseBuffer = false; info->mMediaBuffer = srcBuffer; // FIXME: we are leaking memory } else { if (mIsMetaDataStoredInVideoBuffers) { releaseBuffer = false; Loading Loading @@ -4001,4 +4010,12 @@ status_t QueryCodecs( } } void OMXCodec::restorePatchedDataPointer(BufferInfo *info) { CHECK(mIsEncoder && (mQuirks & kAvoidMemcopyInputRecordingFrames)); CHECK(mOMXLivesLocally); OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)info->mBuffer; header->pBuffer = (OMX_U8 *)info->mData; } } // namespace android Loading
include/media/stagefright/OMXCodec.h +2 −0 Original line number Diff line number Diff line Loading @@ -293,6 +293,8 @@ private: uint32_t flags, Vector<String8> *matchingCodecs); void restorePatchedDataPointer(BufferInfo *info); OMXCodec(const OMXCodec &); OMXCodec &operator=(const OMXCodec &); }; Loading
media/libstagefright/OMXCodec.cpp +18 −1 Original line number Diff line number Diff line Loading @@ -1913,6 +1913,13 @@ void OMXCodec::on_message(const omx_message &msg) { // Buffer could not be released until empty buffer done is called. if (info->mMediaBuffer != NULL) { if (mIsEncoder && (mQuirks & kAvoidMemcopyInputRecordingFrames)) { // If zero-copy mode is enabled this will send the // input buffer back to the upstream source. restorePatchedDataPointer(info); } info->mMediaBuffer->release(); info->mMediaBuffer = NULL; } Loading Loading @@ -2462,6 +2469,7 @@ status_t OMXCodec::freeBuffer(OMX_U32 portIndex, size_t bufIndex) { status_t err = mOMX->freeBuffer(mNode, portIndex, info->mBuffer); if (err == OK && info->mMediaBuffer != NULL) { CHECK_EQ(portIndex, kPortIndexOutput); info->mMediaBuffer->setObserver(NULL); // Make sure nobody but us owns this buffer at this point. Loading @@ -2474,6 +2482,7 @@ status_t OMXCodec::freeBuffer(OMX_U32 portIndex, size_t bufIndex) { } info->mMediaBuffer->release(); info->mMediaBuffer = NULL; } if (err == OK) { Loading Loading @@ -2714,10 +2723,10 @@ void OMXCodec::drainInputBuffer(BufferInfo *info) { if (mIsEncoder && (mQuirks & kAvoidMemcopyInputRecordingFrames)) { CHECK(mOMXLivesLocally && offset == 0); OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *) info->mBuffer; CHECK(header->pBuffer == info->mData); header->pBuffer = (OMX_U8 *) srcBuffer->data() + srcBuffer->range_offset(); releaseBuffer = false; info->mMediaBuffer = srcBuffer; // FIXME: we are leaking memory } else { if (mIsMetaDataStoredInVideoBuffers) { releaseBuffer = false; Loading Loading @@ -4001,4 +4010,12 @@ status_t QueryCodecs( } } void OMXCodec::restorePatchedDataPointer(BufferInfo *info) { CHECK(mIsEncoder && (mQuirks & kAvoidMemcopyInputRecordingFrames)); CHECK(mOMXLivesLocally); OMX_BUFFERHEADERTYPE *header = (OMX_BUFFERHEADERTYPE *)info->mBuffer; header->pBuffer = (OMX_U8 *)info->mData; } } // namespace android