From 15ab4996019387f27a48b81cb4774c21502bc0e5 Mon Sep 17 00:00:00 2001 From: Lajos Molnar Date: Mon, 1 Jun 2015 10:54:31 -0700 Subject: stagefright: add support for fences in OMX Pass Fence between Surface and ACodec, and between ACodec and IOMX. Bug: 12386081 Change-Id: Ifdc566979dec0d91ed8b07c3b69d2cf092accc73 --- media/libstagefright/include/OMX.h | 8 ++++---- media/libstagefright/include/OMXNodeInstance.h | 17 +++++++++++++---- 2 files changed, 17 insertions(+), 8 deletions(-) (limited to 'media/libstagefright/include') diff --git a/media/libstagefright/include/OMX.h b/media/libstagefright/include/OMX.h index c34954b..d468dfc 100644 --- a/media/libstagefright/include/OMX.h +++ b/media/libstagefright/include/OMX.h @@ -118,13 +118,13 @@ public: virtual status_t freeBuffer( node_id node, OMX_U32 port_index, buffer_id buffer); - virtual status_t fillBuffer(node_id node, buffer_id buffer); + virtual status_t fillBuffer(node_id node, buffer_id buffer, int fenceFd); virtual status_t emptyBuffer( node_id node, buffer_id buffer, OMX_U32 range_offset, OMX_U32 range_length, - OMX_U32 flags, OMX_TICKS timestamp); + OMX_U32 flags, OMX_TICKS timestamp, int fenceFd); virtual status_t getExtensionIndex( node_id node, @@ -148,10 +148,10 @@ public: OMX_IN OMX_PTR pEventData); OMX_ERRORTYPE OnEmptyBufferDone( - node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); + node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer, int fenceFd); OMX_ERRORTYPE OnFillBufferDone( - node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); + node_id node, buffer_id buffer, OMX_IN OMX_BUFFERHEADERTYPE *pBuffer, int fenceFd); void invalidateNodeID(node_id node); diff --git a/media/libstagefright/include/OMXNodeInstance.h b/media/libstagefright/include/OMXNodeInstance.h index fe6dccd..76df815 100644 --- a/media/libstagefright/include/OMXNodeInstance.h +++ b/media/libstagefright/include/OMXNodeInstance.h @@ -105,16 +105,16 @@ struct OMXNodeInstance { status_t freeBuffer(OMX_U32 portIndex, OMX::buffer_id buffer); - status_t fillBuffer(OMX::buffer_id buffer); + status_t fillBuffer(OMX::buffer_id buffer, int fenceFd); status_t emptyBuffer( OMX::buffer_id buffer, OMX_U32 rangeOffset, OMX_U32 rangeLength, - OMX_U32 flags, OMX_TICKS timestamp); + OMX_U32 flags, OMX_TICKS timestamp, int fenceFd); status_t emptyGraphicBuffer( OMX_BUFFERHEADERTYPE *header, const sp &buffer, - OMX_U32 flags, OMX_TICKS timestamp); + OMX_U32 flags, OMX_TICKS timestamp, int fenceFd); status_t getExtensionIndex( const char *parameterName, OMX_INDEXTYPE *index); @@ -208,9 +208,18 @@ private: status_t storeMetaDataInBuffers_l( OMX_U32 portIndex, OMX_BOOL enable, MetadataBufferType *type); + // Stores fence into buffer if it is ANWBuffer type and has enough space. + // otherwise, waits for the fence to signal. Takes ownership of |fenceFd|. + status_t storeFenceInMeta_l( + OMX_BUFFERHEADERTYPE *header, int fenceFd, OMX_U32 portIndex); + + // Retrieves the fence from buffer if ANWBuffer type and has enough space. Otherwise, returns -1 + int retrieveFenceFromMeta_l( + OMX_BUFFERHEADERTYPE *header, OMX_U32 portIndex); + status_t emptyBuffer_l( OMX_BUFFERHEADERTYPE *header, - OMX_U32 flags, OMX_TICKS timestamp, intptr_t debugAddr); + OMX_U32 flags, OMX_TICKS timestamp, intptr_t debugAddr, int fenceFd); status_t updateGraphicBufferInMeta_l( OMX_U32 portIndex, const sp &graphicBuffer, -- cgit v1.1