summaryrefslogtreecommitdiffstats
path: root/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c
diff options
context:
space:
mode:
Diffstat (limited to 'sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c')
-rw-r--r--sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c88
1 files changed, 55 insertions, 33 deletions
diff --git a/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c b/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c
index 48705c1..841ed70 100644
--- a/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c
+++ b/sec_mm/sec_omx/sec_omx_component/video/dec/SEC_OMX_Vdec.c
@@ -34,15 +34,13 @@
#include "SEC_OMX_Vdec.h"
#include "SEC_OMX_Basecomponent.h"
#include "SEC_OSAL_Thread.h"
+#include "color_space_convertor.h"
#undef SEC_LOG_TAG
#define SEC_LOG_TAG "SEC_VIDEO_DEC"
#define SEC_LOG_OFF
#include "SEC_OSAL_Log.h"
-#define ONE_FRAME_OUTPUT /* only one frame output for Android */
-#define S5PC110_DECODE_OUT_DATA_BUFFER /* for Android s5pc110 0copy*/
-
inline void SEC_UpdateFrameSize(OMX_COMPONENTTYPE *pOMXComponent)
{
@@ -161,6 +159,8 @@ OMX_ERRORTYPE SEC_OMX_UseBuffer(
goto EXIT;
}
}
+
+ SEC_OSAL_Free(temp_bufferHeader);
ret = OMX_ErrorInsufficientResources;
EXIT:
@@ -257,6 +257,9 @@ OMX_ERRORTYPE SEC_OMX_AllocateBuffer(
goto EXIT;
}
}
+
+ SEC_OSAL_Free(temp_bufferHeader);
+ SEC_OSAL_Free(temp_buffer);
ret = OMX_ErrorInsufficientResources;
EXIT:
@@ -607,10 +610,9 @@ OMX_ERRORTYPE SEC_OutputBufferGetQueue(SEC_OMX_BASECOMPONENT *pSECComponent)
dataBuffer->dataValid =OMX_TRUE;
/* dataBuffer->nFlags = dataBuffer->bufferHeader->nFlags; */
/* dataBuffer->nTimeStamp = dataBuffer->bufferHeader->nTimeStamp; */
-#ifdef S5PC110_DECODE_OUT_DATA_BUFFER
pSECComponent->processData[OUTPUT_PORT_INDEX].dataBuffer = dataBuffer->bufferHeader->pBuffer;
pSECComponent->processData[OUTPUT_PORT_INDEX].allocSize = dataBuffer->bufferHeader->nAllocLen;
-#endif
+
SEC_OSAL_Free(message);
}
SEC_OSAL_MutexUnlock(outputUseBuffer->bufferMutex);
@@ -816,13 +818,6 @@ OMX_BOOL SEC_Postprocess_OutputData(OMX_COMPONENTTYPE *pOMXComponent)
if (outputData->remainDataLen <= (outputUseBuffer->allocSize - outputUseBuffer->dataLen)) {
copySize = outputData->remainDataLen;
-#ifndef S5PC110_DECODE_OUT_DATA_BUFFER
- if (copySize > 0)
- SEC_OSAL_Memcpy((outputUseBuffer->bufferHeader->pBuffer + outputUseBuffer->dataLen),
- (outputData->dataBuffer + outputData->usedDataLen),
- copySize);
-#endif
-
outputUseBuffer->dataLen += copySize;
outputUseBuffer->remainDataLen += copySize;
outputUseBuffer->nFlags = outputData->nFlags;
@@ -833,28 +828,13 @@ OMX_BOOL SEC_Postprocess_OutputData(OMX_COMPONENTTYPE *pOMXComponent)
/* reset outputData */
SEC_DataReset(pOMXComponent, OUTPUT_PORT_INDEX);
-#ifdef ONE_FRAME_OUTPUT /* only one frame output for Android */
if ((outputUseBuffer->remainDataLen > 0) ||
(outputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS))
SEC_OutputBufferReturn(pOMXComponent);
-#else
- if ((outputUseBuffer->remainDataLen > 0) ||
- ((outputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)) {
- SEC_OutputBufferReturn(pOMXComponent);
- } else {
- outputUseBuffer->dataValid = OMX_TRUE;
- }
-#endif
} else {
SEC_OSAL_Log(SEC_LOG_ERROR, "output buffer is smaller than decoded data size Out Length");
copySize = outputUseBuffer->allocSize - outputUseBuffer->dataLen;
-
-#ifndef S5PC110_DECODE_OUT_DATA_BUFFER
- SEC_OSAL_Memcpy((outputUseBuffer->bufferHeader->pBuffer + outputUseBuffer->dataLen),
- (outputData->dataBuffer + outputData->usedDataLen),
- copySize);
-#endif
outputUseBuffer->dataLen += copySize;
outputUseBuffer->remainDataLen += copySize;
outputUseBuffer->nFlags = 0;
@@ -1063,19 +1043,19 @@ OMX_ERRORTYPE SEC_OMX_VideoDecodeGetParameter(
portDefinition = &pSECPort->portDefinition;
switch (index) {
- case supportFormat_1:
+ case supportFormat_0:
portFormat->eCompressionFormat = OMX_VIDEO_CodingUnused;
- portFormat->eColorFormat = OMX_COLOR_FormatYUV420Planar;
+ portFormat->eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
portFormat->xFramerate = portDefinition->format.video.xFramerate;
break;
- case supportFormat_2:
+ case supportFormat_1:
portFormat->eCompressionFormat = OMX_VIDEO_CodingUnused;
- portFormat->eColorFormat = OMX_COLOR_FormatYUV420SemiPlanar;
+ portFormat->eColorFormat = OMX_COLOR_FormatYUV420Planar;
portFormat->xFramerate = portDefinition->format.video.xFramerate;
break;
- case supportFormat_3:
+ case supportFormat_2:
portFormat->eCompressionFormat = OMX_VIDEO_CodingUnused;
- portFormat->eColorFormat = SEC_OMX_COLOR_FormatNV12PhysicalAddress;
+ portFormat->eColorFormat = OMX_SEC_COLOR_FormatNV12TPhysicalAddress;
portFormat->xFramerate = portDefinition->format.video.xFramerate;
break;
}
@@ -1103,6 +1083,20 @@ OMX_ERRORTYPE SEC_OMX_VideoDecodeGetParameter(
ret = OMX_ErrorNone;
}
break;
+#ifdef USE_ANDROID_EXTENSION
+ case OMX_IndexParamGetAndroidNativeBuffer:
+ {
+ if (OMX_ErrorNone != checkVersionANB(ComponentParameterStructure))
+ goto EXIT;
+
+ if (OUTPUT_PORT_INDEX != checkPortIndexANB(ComponentParameterStructure)) {
+ ret = OMX_ErrorBadPortIndex;
+ goto EXIT;
+ }
+ ret = getAndroidNativeBuffer(hComponent, ComponentParameterStructure);
+ }
+ break;
+#endif
default:
{
ret = SEC_OMX_GetParameter(hComponent, nParamIndex, ComponentParameterStructure);
@@ -1201,6 +1195,34 @@ OMX_ERRORTYPE SEC_OMX_VideoDecodeSetParameter(
ret = OMX_ErrorNone;
}
break;
+#ifdef USE_ANDROID_EXTENSION
+ case OMX_IndexParamEnableAndroidBuffers:
+ {
+ if (OMX_ErrorNone != checkVersionANB(ComponentParameterStructure))
+ goto EXIT;
+
+ if (OUTPUT_PORT_INDEX != checkPortIndexANB(ComponentParameterStructure)) {
+ ret = OMX_ErrorBadPortIndex;
+ goto EXIT;
+ }
+
+ ret = enableAndroidNativeBuffer(hComponent, ComponentParameterStructure);
+ }
+ break;
+ case OMX_IndexParamUseAndroidNativeBuffer:
+ {
+ if (OMX_ErrorNone != checkVersionANB(ComponentParameterStructure))
+ goto EXIT;
+
+ if (OUTPUT_PORT_INDEX != checkPortIndexANB(ComponentParameterStructure)) {
+ ret = OMX_ErrorBadPortIndex;
+ goto EXIT;
+ }
+
+ ret = useAndroidNativeBuffer(hComponent, ComponentParameterStructure);
+ }
+ break;
+#endif
default:
{
ret = SEC_OMX_SetParameter(hComponent, nIndex, ComponentParameterStructure);