From 054219874873b41f1c815552987c10465c34ba2b Mon Sep 17 00:00:00 2001 From: Lajos Molnar Date: Fri, 15 May 2015 20:39:14 -0700 Subject: stagefright: rework metadata buffer support - Add fence to new metadata buffer mode structure, but don't use it yet, so that we don't have to add another mode soon. - Change GraphicBuffers to ANativeWindowBuffer in new metadata mode. This removes internal depencency from vendor codecs. - Extend new metadata mode from SW encoders to all codecs. - Fallback from new metadata mode to old mode (so Camera can always use the new mode even with legacy codecs) Related-bug: 19614055 Bug: 13222807 Change-Id: I405a21dd6ce8e99808f633bfeab8f14278eb7079 --- media/libstagefright/include/OMX.h | 8 +++++--- media/libstagefright/include/OMXNodeInstance.h | 25 ++++++++++++++++--------- 2 files changed, 21 insertions(+), 12 deletions(-) (limited to 'media/libstagefright/include') diff --git a/media/libstagefright/include/OMX.h b/media/libstagefright/include/OMX.h index fa1e03f..c34954b 100644 --- a/media/libstagefright/include/OMX.h +++ b/media/libstagefright/include/OMX.h @@ -69,7 +69,7 @@ public: node_id node, OMX_U32 port_index, OMX_U32* usage); virtual status_t storeMetaDataInBuffers( - node_id node, OMX_U32 port_index, OMX_BOOL enable); + node_id node, OMX_U32 port_index, OMX_BOOL enable, MetadataBufferType *type); virtual status_t prepareForAdaptivePlayback( node_id node, OMX_U32 portIndex, OMX_BOOL enable, @@ -93,7 +93,8 @@ public: virtual status_t createInputSurface( node_id node, OMX_U32 port_index, - sp *bufferProducer); + sp *bufferProducer, + MetadataBufferType *type); virtual status_t createPersistentInputSurface( sp *bufferProducer, @@ -101,7 +102,8 @@ public: virtual status_t setInputSurface( node_id node, OMX_U32 port_index, - const sp &bufferConsumer); + const sp &bufferConsumer, + MetadataBufferType *type); virtual status_t signalEndOfInputStream(node_id node); diff --git a/media/libstagefright/include/OMXNodeInstance.h b/media/libstagefright/include/OMXNodeInstance.h index e067598..fe6dccd 100644 --- a/media/libstagefright/include/OMXNodeInstance.h +++ b/media/libstagefright/include/OMXNodeInstance.h @@ -58,7 +58,8 @@ struct OMXNodeInstance { status_t getGraphicBufferUsage(OMX_U32 portIndex, OMX_U32* usage); - status_t storeMetaDataInBuffers(OMX_U32 portIndex, OMX_BOOL enable); + status_t storeMetaDataInBuffers( + OMX_U32 portIndex, OMX_BOOL enable, MetadataBufferType *type); status_t prepareForAdaptivePlayback( OMX_U32 portIndex, OMX_BOOL enable, @@ -81,14 +82,16 @@ struct OMXNodeInstance { OMX::buffer_id buffer); status_t createInputSurface( - OMX_U32 portIndex, sp *bufferProducer); + OMX_U32 portIndex, sp *bufferProducer, + MetadataBufferType *type); static status_t createPersistentInputSurface( sp *bufferProducer, sp *bufferConsumer); status_t setInputSurface( - OMX_U32 portIndex, const sp &bufferConsumer); + OMX_U32 portIndex, const sp &bufferConsumer, + MetadataBufferType *type); status_t signalEndOfInputStream(); @@ -109,9 +112,8 @@ struct OMXNodeInstance { OMX_U32 rangeOffset, OMX_U32 rangeLength, OMX_U32 flags, OMX_TICKS timestamp); - status_t emptyDirectBuffer( - OMX_BUFFERHEADERTYPE *header, - OMX_U32 rangeOffset, OMX_U32 rangeLength, + status_t emptyGraphicBuffer( + OMX_BUFFERHEADERTYPE *header, const sp &buffer, OMX_U32 flags, OMX_TICKS timestamp); status_t getExtensionIndex( @@ -156,6 +158,7 @@ private: uint32_t mBufferIDCount; KeyedVector mBufferIDToBufferHeader; KeyedVector mBufferHeaderToBufferID; + MetadataBufferType mMetadataType[2]; // For debug support char *mName; @@ -203,15 +206,19 @@ private: OMX_IN OMX_BUFFERHEADERTYPE *pBuffer); status_t storeMetaDataInBuffers_l( - OMX_U32 portIndex, OMX_BOOL enable, - OMX_BOOL useGraphicBuffer, OMX_BOOL *usingGraphicBufferInMeta); + OMX_U32 portIndex, OMX_BOOL enable, MetadataBufferType *type); status_t emptyBuffer_l( OMX_BUFFERHEADERTYPE *header, OMX_U32 flags, OMX_TICKS timestamp, intptr_t debugAddr); + status_t updateGraphicBufferInMeta_l( + OMX_U32 portIndex, const sp &graphicBuffer, + OMX::buffer_id buffer, OMX_BUFFERHEADERTYPE *header); + status_t createGraphicBufferSource( - OMX_U32 portIndex, sp consumer = NULL); + OMX_U32 portIndex, sp consumer /* nullable */, + MetadataBufferType *type); sp getGraphicBufferSource(); void setGraphicBufferSource(const sp& bufferSource); -- cgit v1.1