Loading include/media/IOMX.h +4 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,10 @@ public: node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer) = 0; virtual status_t updateGraphicBufferInMeta( node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer) = 0; virtual status_t createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer) = 0; Loading media/libmedia/IOMX.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ enum { OBSERVER_ON_MSG, GET_GRAPHIC_BUFFER_USAGE, SET_INTERNAL_OPTION, UPDATE_GRAPHIC_BUFFER_IN_META, }; class BpOMX : public BpInterface<IOMX> { Loading Loading @@ -283,6 +284,21 @@ public: return err; } virtual status_t updateGraphicBufferInMeta( node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); data.writeIntPtr((intptr_t)node); data.writeInt32(port_index); data.write(*graphicBuffer); data.writeIntPtr((intptr_t)buffer); remote()->transact(UPDATE_GRAPHIC_BUFFER_IN_META, data, &reply); status_t err = reply.readInt32(); return err; } virtual status_t createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer) { Loading Loading @@ -691,6 +707,23 @@ status_t BnOMX::onTransact( return NO_ERROR; } case UPDATE_GRAPHIC_BUFFER_IN_META: { CHECK_OMX_INTERFACE(IOMX, data, reply); node_id node = (void*)data.readIntPtr(); OMX_U32 port_index = data.readInt32(); sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(); data.read(*graphicBuffer); buffer_id buffer = (void*)data.readIntPtr(); status_t err = updateGraphicBufferInMeta( node, port_index, graphicBuffer, buffer); reply->writeInt32(err); return NO_ERROR; } case CREATE_INPUT_SURFACE: { CHECK_OMX_INTERFACE(IOMX, data, reply); Loading media/libstagefright/ACodec.cpp +11 −6 Original line number Diff line number Diff line Loading @@ -833,15 +833,20 @@ ACodec::BufferInfo *ACodec::dequeueBufferFromNativeWindow() { oldest->mGraphicBuffer = new GraphicBuffer(buf, false); oldest->mStatus = BufferInfo::OWNED_BY_US; struct VideoDecoderOutputMetaData metaData; metaData.eType = kMetadataBufferTypeGrallocSource; metaData.pHandle = oldest->mGraphicBuffer->handle; memcpy(oldest->mData->base(), &metaData, sizeof(metaData)); mOMX->updateGraphicBufferInMeta( mNode, kPortIndexOutput, oldest->mGraphicBuffer, oldest->mBufferID); ALOGV("replaced oldest buffer #%u with age %u (%p stored in %p)", VideoDecoderOutputMetaData *metaData = reinterpret_cast<VideoDecoderOutputMetaData *>( oldest->mData->base()); CHECK_EQ(metaData->eType, kMetadataBufferTypeGrallocSource); ALOGV("replaced oldest buffer #%u with age %u (%p/%p stored in %p)", oldest - &mBuffers[kPortIndexOutput][0], mDequeueCounter - oldest->mDequeuedAt, metaData.pHandle, oldest->mData->base()); metaData->pHandle, oldest->mGraphicBuffer->handle, oldest->mData->base()); return oldest; } Loading media/libstagefright/OMXClient.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,10 @@ struct MuxOMX : public IOMX { node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer); virtual status_t updateGraphicBufferInMeta( node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer); virtual status_t createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer); Loading Loading @@ -287,6 +291,13 @@ status_t MuxOMX::useGraphicBuffer( node, port_index, graphicBuffer, buffer); } status_t MuxOMX::updateGraphicBufferInMeta( node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer) { return getOMX(node)->updateGraphicBufferInMeta( node, port_index, graphicBuffer, buffer); } status_t MuxOMX::createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer) { Loading media/libstagefright/include/OMX.h +4 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,10 @@ public: node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer); virtual status_t updateGraphicBufferInMeta( node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer); virtual status_t createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer); Loading Loading
include/media/IOMX.h +4 −0 Original line number Diff line number Diff line Loading @@ -97,6 +97,10 @@ public: node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer) = 0; virtual status_t updateGraphicBufferInMeta( node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer) = 0; virtual status_t createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer) = 0; Loading
media/libmedia/IOMX.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -52,6 +52,7 @@ enum { OBSERVER_ON_MSG, GET_GRAPHIC_BUFFER_USAGE, SET_INTERNAL_OPTION, UPDATE_GRAPHIC_BUFFER_IN_META, }; class BpOMX : public BpInterface<IOMX> { Loading Loading @@ -283,6 +284,21 @@ public: return err; } virtual status_t updateGraphicBufferInMeta( node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer) { Parcel data, reply; data.writeInterfaceToken(IOMX::getInterfaceDescriptor()); data.writeIntPtr((intptr_t)node); data.writeInt32(port_index); data.write(*graphicBuffer); data.writeIntPtr((intptr_t)buffer); remote()->transact(UPDATE_GRAPHIC_BUFFER_IN_META, data, &reply); status_t err = reply.readInt32(); return err; } virtual status_t createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer) { Loading Loading @@ -691,6 +707,23 @@ status_t BnOMX::onTransact( return NO_ERROR; } case UPDATE_GRAPHIC_BUFFER_IN_META: { CHECK_OMX_INTERFACE(IOMX, data, reply); node_id node = (void*)data.readIntPtr(); OMX_U32 port_index = data.readInt32(); sp<GraphicBuffer> graphicBuffer = new GraphicBuffer(); data.read(*graphicBuffer); buffer_id buffer = (void*)data.readIntPtr(); status_t err = updateGraphicBufferInMeta( node, port_index, graphicBuffer, buffer); reply->writeInt32(err); return NO_ERROR; } case CREATE_INPUT_SURFACE: { CHECK_OMX_INTERFACE(IOMX, data, reply); Loading
media/libstagefright/ACodec.cpp +11 −6 Original line number Diff line number Diff line Loading @@ -833,15 +833,20 @@ ACodec::BufferInfo *ACodec::dequeueBufferFromNativeWindow() { oldest->mGraphicBuffer = new GraphicBuffer(buf, false); oldest->mStatus = BufferInfo::OWNED_BY_US; struct VideoDecoderOutputMetaData metaData; metaData.eType = kMetadataBufferTypeGrallocSource; metaData.pHandle = oldest->mGraphicBuffer->handle; memcpy(oldest->mData->base(), &metaData, sizeof(metaData)); mOMX->updateGraphicBufferInMeta( mNode, kPortIndexOutput, oldest->mGraphicBuffer, oldest->mBufferID); ALOGV("replaced oldest buffer #%u with age %u (%p stored in %p)", VideoDecoderOutputMetaData *metaData = reinterpret_cast<VideoDecoderOutputMetaData *>( oldest->mData->base()); CHECK_EQ(metaData->eType, kMetadataBufferTypeGrallocSource); ALOGV("replaced oldest buffer #%u with age %u (%p/%p stored in %p)", oldest - &mBuffers[kPortIndexOutput][0], mDequeueCounter - oldest->mDequeuedAt, metaData.pHandle, oldest->mData->base()); metaData->pHandle, oldest->mGraphicBuffer->handle, oldest->mData->base()); return oldest; } Loading
media/libstagefright/OMXClient.cpp +11 −0 Original line number Diff line number Diff line Loading @@ -83,6 +83,10 @@ struct MuxOMX : public IOMX { node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer); virtual status_t updateGraphicBufferInMeta( node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer); virtual status_t createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer); Loading Loading @@ -287,6 +291,13 @@ status_t MuxOMX::useGraphicBuffer( node, port_index, graphicBuffer, buffer); } status_t MuxOMX::updateGraphicBufferInMeta( node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer) { return getOMX(node)->updateGraphicBufferInMeta( node, port_index, graphicBuffer, buffer); } status_t MuxOMX::createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer) { Loading
media/libstagefright/include/OMX.h +4 −0 Original line number Diff line number Diff line Loading @@ -79,6 +79,10 @@ public: node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id *buffer); virtual status_t updateGraphicBufferInMeta( node_id node, OMX_U32 port_index, const sp<GraphicBuffer> &graphicBuffer, buffer_id buffer); virtual status_t createInputSurface( node_id node, OMX_U32 port_index, sp<IGraphicBufferProducer> *bufferProducer); Loading