summaryrefslogtreecommitdiff
path: root/exynos_omx
diff options
context:
space:
mode:
authorSeungBeom Kim <sbcrux.kim@samsung.com>2013-11-08 12:33:36 +0900
committerLajos Molnar <lajos@google.com>2014-06-03 18:05:29 -0700
commitc2eff709449b17a1bab5fc8c32f3f1408592c0b2 (patch)
tree59af770e8dc812a6429e4036cf19701bda6e75e1 /exynos_omx
parentae68c595f44b030329f6842f6c426716168dca09 (diff)
downloadexynos5-c2eff709449b17a1bab5fc8c32f3f1408592c0b2.tar.gz
exynos_omx: multi_thread: Change scheme of codec buffer alloc in video encode.
The case of input port copy mode in video encode, Need codec buffer. This patch supports dynamic calculation of the buffer size of the codec. Bug: 10838086 Change-Id: I7b7ad97a57455a861ad8e93964891565d95a3899 Signed-off-by: SeungBeom Kim <sbcrux.kim@samsung.com>
Diffstat (limited to 'exynos_omx')
-rw-r--r--exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_Venc.c45
-rw-r--r--exynos_omx/openmax/exynos_omx/component/video/enc/h264/Exynos_OMX_H264enc.c25
-rw-r--r--exynos_omx/openmax/exynos_omx/component/video/enc/mpeg4/Exynos_OMX_Mpeg4enc.c25
-rw-r--r--exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp1
4 files changed, 25 insertions, 71 deletions
diff --git a/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_Venc.c b/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_Venc.c
index 092265d..5c0b583 100644
--- a/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_Venc.c
+++ b/exynos_omx/openmax/exynos_omx/component/video/enc/Exynos_OMX_Venc.c
@@ -682,30 +682,31 @@ OMX_ERRORTYPE Exynos_OMX_ExtensionSetup(OMX_HANDLETYPE hComponent)
} else {
exynosInputPort->bufferProcessType = BUFFER_COPY;
}
-
- if ((exynosInputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- OMX_U32 nPlaneSize[MFC_INPUT_BUFFER_PLANE] = {0, };
- nPlaneSize[0] = DEFAULT_MFC_INPUT_YBUFFER_SIZE;
- nPlaneSize[1] = DEFAULT_MFC_INPUT_CBUFFER_SIZE;
-
- Exynos_OSAL_SemaphoreCreate(&exynosInputPort->codecSemID);
- Exynos_OSAL_QueueCreate(&exynosInputPort->codecBufferQ, MAX_QUEUE_ELEMENTS);
-
- ret = Exynos_Allocate_CodecBuffers(pOMXComponent, INPUT_PORT_INDEX, MFC_INPUT_BUFFER_NUM_MAX, nPlaneSize);
- if (ret != OMX_ErrorNone)
- goto EXIT;
-
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- Exynos_CodecBufferEnQueue(pExynosComponent, INPUT_PORT_INDEX, pVideoEnc->pMFCEncInputBuffer[i]);
- } else if (exynosInputPort->bufferProcessType == BUFFER_SHARE) {
- /*************/
- /* TBD */
- /*************/
- /* Does not require any actions. */
- }
}
}
+ if ((exynosInputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
+ OMX_U32 nPlaneSize[MFC_INPUT_BUFFER_PLANE] = {0, };
+ nPlaneSize[0] = ALIGN_TO_16B(exynosInputPort->portDefinition.format.video.nFrameWidth)
+ * ALIGN_TO_16B(exynosInputPort->portDefinition.format.video.nFrameHeight);
+ nPlaneSize[1] = ALIGN((nPlaneSize[0] / 2), 256);
+
+ Exynos_OSAL_SemaphoreCreate(&exynosInputPort->codecSemID);
+ Exynos_OSAL_QueueCreate(&exynosInputPort->codecBufferQ, MAX_QUEUE_ELEMENTS);
+
+ ret = Exynos_Allocate_CodecBuffers(pOMXComponent, INPUT_PORT_INDEX, MFC_INPUT_BUFFER_NUM_MAX, nPlaneSize);
+ if (ret != OMX_ErrorNone)
+ goto EXIT;
+
+ for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
+ Exynos_CodecBufferEnQueue(pExynosComponent, INPUT_PORT_INDEX, pVideoEnc->pMFCEncInputBuffer[i]);
+ } else if (exynosInputPort->bufferProcessType == BUFFER_SHARE) {
+ /*************/
+ /* TBD */
+ /*************/
+ /* Does not require any actions. */
+ }
+
EXIT:
return ret;
@@ -1237,7 +1238,7 @@ OMX_ERRORTYPE Exynos_OMX_VideoEncodeComponentInit(OMX_IN OMX_HANDLETYPE hCompone
pExynosComponent->bSaveFlagEOS = OMX_FALSE;
pExynosComponent->bBehaviorEOS = OMX_FALSE;
- pVideoEnc->bFirstInput = OMX_FALSE;
+ pVideoEnc->bFirstInput = OMX_TRUE;
pVideoEnc->bFirstOutput = OMX_FALSE;
pVideoEnc->configChange = OMX_FALSE;
pVideoEnc->quantization.nQpI = 4; // I frame quantization parameter
diff --git a/exynos_omx/openmax/exynos_omx/component/video/enc/h264/Exynos_OMX_H264enc.c b/exynos_omx/openmax/exynos_omx/component/video/enc/h264/Exynos_OMX_H264enc.c
index 12f8178..ee60500 100644
--- a/exynos_omx/openmax/exynos_omx/component/video/enc/h264/Exynos_OMX_H264enc.c
+++ b/exynos_omx/openmax/exynos_omx/component/video/enc/h264/Exynos_OMX_H264enc.c
@@ -1626,30 +1626,6 @@ OMX_ERRORTYPE Exynos_H264Enc_Init(OMX_COMPONENTTYPE *pOMXComponent)
pInbufOps = pH264Enc->hMFCH264Handle.pInbufOps;
pOutbufOps = pH264Enc->hMFCH264Handle.pOutbufOps;
- if ((pExynosInputPort->bStoreMetaData != OMX_TRUE) &&
- (eColorFormat != OMX_COLOR_FormatAndroidOpaque)) {
- if ((pExynosInputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- OMX_U32 nPlaneSize[MFC_INPUT_BUFFER_PLANE] = {0, };
- nPlaneSize[0] = DEFAULT_MFC_INPUT_YBUFFER_SIZE;
- nPlaneSize[1] = DEFAULT_MFC_INPUT_CBUFFER_SIZE;
-
- Exynos_OSAL_SemaphoreCreate(&pExynosInputPort->codecSemID);
- Exynos_OSAL_QueueCreate(&pExynosInputPort->codecBufferQ, MAX_QUEUE_ELEMENTS);
-
- ret = Exynos_Allocate_CodecBuffers(pOMXComponent, INPUT_PORT_INDEX, MFC_INPUT_BUFFER_NUM_MAX, nPlaneSize);
- if (ret != OMX_ErrorNone)
- goto EXIT;
-
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- Exynos_CodecBufferEnQueue(pExynosComponent, INPUT_PORT_INDEX, pVideoEnc->pMFCEncInputBuffer[i]);
- } else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) {
- /*************/
- /* TBD */
- /*************/
- /* Does not require any actions. */
- }
- }
-
if ((pExynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
Exynos_OSAL_SemaphoreCreate(&pExynosOutputPort->codecSemID);
Exynos_OSAL_QueueCreate(&pExynosOutputPort->codecBufferQ, MAX_QUEUE_ELEMENTS);
@@ -1719,6 +1695,7 @@ OMX_ERRORTYPE Exynos_H264Enc_Terminate(OMX_COMPONENTTYPE *pOMXComponent)
Exynos_Free_CodecBuffers(pOMXComponent, INPUT_PORT_INDEX);
Exynos_OSAL_QueueTerminate(&pExynosInputPort->codecBufferQ);
Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->codecSemID);
+ pVideoEnc->bFirstInput = OMX_TRUE;
} else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) {
/*************/
/* TBD */
diff --git a/exynos_omx/openmax/exynos_omx/component/video/enc/mpeg4/Exynos_OMX_Mpeg4enc.c b/exynos_omx/openmax/exynos_omx/component/video/enc/mpeg4/Exynos_OMX_Mpeg4enc.c
index 883f12b..e915304 100644
--- a/exynos_omx/openmax/exynos_omx/component/video/enc/mpeg4/Exynos_OMX_Mpeg4enc.c
+++ b/exynos_omx/openmax/exynos_omx/component/video/enc/mpeg4/Exynos_OMX_Mpeg4enc.c
@@ -1824,30 +1824,6 @@ OMX_ERRORTYPE Exynos_Mpeg4Enc_Init(OMX_COMPONENTTYPE *pOMXComponent)
pInbufOps = pMpeg4Enc->hMFCMpeg4Handle.pInbufOps;
pOutbufOps = pMpeg4Enc->hMFCMpeg4Handle.pOutbufOps;
- if ((pExynosInputPort->bStoreMetaData != OMX_TRUE) &&
- (eColorFormat != OMX_COLOR_FormatAndroidOpaque)) {
- if ((pExynosInputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- OMX_U32 nPlaneSize[MFC_INPUT_BUFFER_PLANE] = {0, };
- nPlaneSize[0] = DEFAULT_MFC_INPUT_YBUFFER_SIZE;
- nPlaneSize[1] = DEFAULT_MFC_INPUT_CBUFFER_SIZE;
-
- Exynos_OSAL_SemaphoreCreate(&pExynosInputPort->codecSemID);
- Exynos_OSAL_QueueCreate(&pExynosInputPort->codecBufferQ, MAX_QUEUE_ELEMENTS);
-
- ret = Exynos_Allocate_CodecBuffers(pOMXComponent, INPUT_PORT_INDEX, MFC_INPUT_BUFFER_NUM_MAX, nPlaneSize);
- if (ret != OMX_ErrorNone)
- goto EXIT;
-
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- Exynos_CodecBufferEnQueue(pExynosComponent, INPUT_PORT_INDEX, pVideoEnc->pMFCEncInputBuffer[i]);
- } else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) {
- /*************/
- /* TBD */
- /*************/
- /* Does not require any actions. */
- }
- }
-
if ((pExynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
Exynos_OSAL_SemaphoreCreate(&pExynosOutputPort->codecSemID);
Exynos_OSAL_QueueCreate(&pExynosOutputPort->codecBufferQ, MAX_QUEUE_ELEMENTS);
@@ -1917,6 +1893,7 @@ OMX_ERRORTYPE Exynos_Mpeg4Enc_Terminate(OMX_COMPONENTTYPE *pOMXComponent)
Exynos_Free_CodecBuffers(pOMXComponent, INPUT_PORT_INDEX);
Exynos_OSAL_QueueTerminate(&pExynosInputPort->codecBufferQ);
Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->codecSemID);
+ pVideoEnc->bFirstInput = OMX_TRUE;
} else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) {
/*************/
/* TBD */
diff --git a/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp b/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp
index da348f3..5c99e9c 100644
--- a/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp
+++ b/exynos_omx/openmax/exynos_omx/osal/Exynos_OSAL_Android.cpp
@@ -803,7 +803,6 @@ OMX_ERRORTYPE Exynos_OSAL_SetANBParameter(
pExynosPort->bStoreMetaData = pANBParams->bStoreMetaData;
if (pExynosComponent->codecType == HW_VIDEO_ENC_CODEC) {
EXYNOS_OMX_VIDEOENC_COMPONENT *pVideoEnc = (EXYNOS_OMX_VIDEOENC_COMPONENT *)pExynosComponent->hComponentHandle;;
- pVideoEnc->bFirstInput = OMX_TRUE;
} else if (pExynosComponent->codecType == HW_VIDEO_DEC_CODEC) {
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = (EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle;;
if ((portIndex == OUTPUT_PORT_INDEX) &&