From 28516617d7c679a9d1c4d1a5a29af157eb25cc29 Mon Sep 17 00:00:00 2001 From: Chang Ying Date: Wed, 12 Sep 2012 16:21:51 +0800 Subject: AVCE: Add AndroidOpaque input color format support BZ: 34659 Briefly, this implies that encoder can use texture object as source buffer. On our platform texture object is represented as buffer_handle_t and in RGB color format, however encoder only supports YUV color space, so a color space conversion is needed. Change-Id: Iad91a911184e0c6e66576b3c0bd402f1636b933f Signed-off-by: Chang Ying Reviewed-on: http://android.intel.com:8080/66722 Reviewed-by: Jiang, Fei Reviewed-by: Shi, PingX Tested-by: Shi, PingX Reviewed-by: buildbot Tested-by: buildbot --- videocodec/OMXVideoEncoderAVC.cpp | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'videocodec/OMXVideoEncoderAVC.cpp') diff --git a/videocodec/OMXVideoEncoderAVC.cpp b/videocodec/OMXVideoEncoderAVC.cpp index 29a0f34..9a39570 100644 --- a/videocodec/OMXVideoEncoderAVC.cpp +++ b/videocodec/OMXVideoEncoderAVC.cpp @@ -19,6 +19,7 @@ #define LOG_TAG "OMXVideoEncoderAVC" #include #include "OMXVideoEncoderAVC.h" +#include "IntelMetadataBuffer.h" static const char *AVC_MIME_TYPE = "video/h264"; @@ -190,6 +191,10 @@ OMX_ERRORTYPE OMXVideoEncoderAVC::ProcessorProcess( goto out; } + if (bAndroidOpaqueFormat) { + mCurHandle = rgba2nv12conversion(buffers[INPORT_INDEX]); + } + inBuf.data = buffers[INPORT_INDEX]->pBuffer + buffers[INPORT_INDEX]->nOffset; inBuf.size = buffers[INPORT_INDEX]->nFilledLen; @@ -429,6 +434,14 @@ out: if (retains[OUTPORT_INDEX] == BUFFER_RETAIN_NOT_RETAIN) mFrameOutputCount ++; + if (bAndroidOpaqueFormat && buffers[INPORT_INDEX]->nFilledLen != 0) { + // Restore input buffer's content + buffers[INPORT_INDEX]->nFilledLen = 4 + sizeof(buffer_handle_t); + memcpy(buffers[INPORT_INDEX]->pBuffer, mBufferHandleMaps[mCurHandle].backBuffer, + buffers[INPORT_INDEX]->nFilledLen); + + } + #if 0 if (avcEncParamIntelBitrateType.eControlRate != OMX_Video_Intel_ControlRateVideoConferencingMode) { if (oret == (OMX_ERRORTYPE) OMX_ErrorIntelExtSliceSizeOverflow) { -- cgit v1.2.3