- remove tab & line.
- remove log message.
Change-Id: I0e21ff7da9b1d4e3533e340be276e98e82f6f6e7
Signed-off-by: SeungBeom Kim <sbcrux.kim@samsung.com>
}
}
- return;
+ return;
}
OMX_BOOL Exynos_Check_BufferProcess_State(EXYNOS_OMX_BASECOMPONENT *pExynosComponent, OMX_U32 nPortIndex)
OMX_PTR pSrcBuf[MAX_BUFFER_PLANE];
OMX_U32 allocSize[MAX_BUFFER_PLANE];
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s: buffer=%p\n", __func__, codecBuffer);
-
pVideoDec->exynos_codec_getCodecOutputPrivateData(codecBuffer, pSrcBuf, allocSize);
pData->buffer.multiPlaneBuffer.dataBuffer[0] = pSrcBuf[0];
pData->buffer.multiPlaneBuffer.dataBuffer[1] = pSrcBuf[1];
pData->buffer.multiPlaneBuffer.dataBuffer[2] = pSrcBuf[2];
-
pData->allocSize = allocSize[0] + allocSize[1] + allocSize[2];
pData->dataLen = 0;
pData->usedDataLen = 0;
flagEOF = OMX_FALSE;
}
-// if ((inputUseBuffer->remainDataLen == 0) ||
-// (CHECK_PORT_BEING_FLUSHED(exynosInputPort)))
- Exynos_InputBufferReturn(pOMXComponent);
-// else
-// inputUseBuffer->dataValid = OMX_TRUE;
+ Exynos_InputBufferReturn(pOMXComponent);
}
if ((srcInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) {
while (!pVideoDec->bExitBufferProcessThread) {
Exynos_OSAL_SleepMillisec(0);
- // Exynos_Wait_ProcessPause(pExynosComponent, INPUT_PORT_INDEX);
-
while (!pVideoDec->bExitBufferProcessThread) {
if ((exynosInputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
if (Exynos_Check_BufferProcess_State(pExynosComponent, INPUT_PORT_INDEX) == OMX_FALSE)
if (CHECK_PORT_BEING_FLUSHED(exynosInputPort))
break;
-/*
- if (exynosInputPort->portState != OMX_StateIdle)
- break;
-*/
+
Exynos_OSAL_MutexLock(srcOutputUseBuffer->bufferMutex);
ret = pVideoDec->exynos_codec_srcOutputProcess(pOMXComponent, &srcOutputData);
if (exynosInputPort->bufferProcessType == BUFFER_SHARE) {
Exynos_Shared_DataToBuffer(&srcOutputData, srcOutputUseBuffer);
Exynos_InputBufferReturn(pOMXComponent);
-/*
- if ((pVideoDec->exynos_codec_getCodecBufferNumber != NULL) &&
- (CHECK_PORT_BEING_FLUSHED(exynosInputPort)))
- if (pVideoDec->exynos_codec_getCodecBufferNumber(pOMXComponent, INPUT_PORT_INDEX) == 0) {
- Exynos_OSAL_SignalSet(exynosInputPort->hAllCodecBufferReturnEvent);
- }
-*/
}
Exynos_ResetCodecData(&srcOutputData);
}
while (!pVideoDec->bExitBufferProcessThread) {
Exynos_OSAL_SleepMillisec(0);
-// Exynos_Wait_ProcessPause(pExynosComponent, OUTPUT_PORT_INDEX);
-
while ((Exynos_Check_BufferProcess_State(pExynosComponent, OUTPUT_PORT_INDEX)) &&
(!pVideoDec->bExitBufferProcessThread)) {
Exynos_OSAL_SleepMillisec(0);
if (CHECK_PORT_BEING_FLUSHED(exynosOutputPort))
break;
-/*
- if (exynosOutputPort->portState != OMX_StateIdle)
- break;
-*/
+
Exynos_OSAL_MutexLock(dstOutputUseBuffer->bufferMutex);
if ((exynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
if ((dstOutputUseBuffer->dataValid != OMX_TRUE) &&
pVideoDec->bExitBufferProcessThread = OMX_TRUE;
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s:%d", __FUNCTION__, __LINE__);
Exynos_OSAL_Get_SemaphoreCount(pExynosComponent->pExynosPort[INPUT_PORT_INDEX].bufferSemID, &countValue);
if (countValue == 0)
Exynos_OSAL_SemaphorePost(pExynosComponent->pExynosPort[INPUT_PORT_INDEX].bufferSemID);
Exynos_OSAL_ThreadTerminate(pVideoDec->hSrcInputThread);
pVideoDec->hSrcInputThread = NULL;
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s:%d", __FUNCTION__, __LINE__);
Exynos_OSAL_Get_SemaphoreCount(pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX].bufferSemID, &countValue);
if (countValue == 0)
Exynos_OSAL_SemaphorePost(pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX].bufferSemID);
Exynos_OSAL_ThreadTerminate(pVideoDec->hDstInputThread);
pVideoDec->hDstInputThread = NULL;
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s:%d", __FUNCTION__, __LINE__);
pVideoDec->exynos_codec_stop(pOMXComponent, INPUT_PORT_INDEX);
pVideoDec->exynos_codec_bufferProcessRun(pOMXComponent, INPUT_PORT_INDEX);
Exynos_OSAL_SignalSet(pExynosComponent->pExynosPort[INPUT_PORT_INDEX].pauseEvent);
Exynos_OSAL_ThreadTerminate(pVideoDec->hSrcOutputThread);
pVideoDec->hSrcOutputThread = NULL;
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s:%d", __FUNCTION__, __LINE__);
pVideoDec->exynos_codec_stop(pOMXComponent, OUTPUT_PORT_INDEX);
pVideoDec->exynos_codec_bufferProcessRun(pOMXComponent, INPUT_PORT_INDEX);
Exynos_OSAL_SignalSet(pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX].pauseEvent);
Exynos_OSAL_ThreadTerminate(pVideoDec->hDstOutputThread);
pVideoDec->hDstOutputThread = NULL;
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s:%d", __FUNCTION__, __LINE__);
-
EXIT:
FunctionOut();
#define DEFAULT_MFC_INPUT_BUFFER_SIZE 1920 * 1080 * 3 / 2
#define MFC_OUTPUT_BUFFER_NUM_MAX 16 * 2
-#define MFC_OUTPUT_BUFFER_PLANE 2
#define DEFAULT_MFC_OUTPUT_YBUFFER_SIZE 1920 * 1080
#define DEFAULT_MFC_OUTPUT_CBUFFER_SIZE 1920 * 1080 / 2
#define EXTRA_DPB_NUM 5
+#define MFC_INPUT_BUFFER_PLANE 1
+#define MFC_OUTPUT_BUFFER_PLANE 2
+
typedef struct
{
void *pAddrY;
FunctionIn();
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s: idx=%d sz=%d pBuffer=%p\n", __func__, nPortIndex, nSizeBytes, pBuffer);
-
if (hComponent == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
return ret;
}
-
OMX_ERRORTYPE Exynos_InputBufferReturn(OMX_COMPONENTTYPE *pOMXComponent)
{
OMX_ERRORTYPE ret = OMX_ErrorNone;
}
while (1) {
int cnt = 0;
- Exynos_OSAL_Get_SemaphoreCount(pExynosPort->codecSemID, &cnt);
+ Exynos_OSAL_Get_SemaphoreCount(pExynosPort->codecSemID, &cnt);
if (cnt > 0)
Exynos_OSAL_SemaphoreWait(pExynosPort->codecSemID);
else
return ret;
}
-
OMX_ERRORTYPE Exynos_OMX_VideoDecodeGetParameter(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_INDEXTYPE nParamIndex,
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
if (pOMXComponent->pComponentPrivate == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
}
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
-
if (pComponentConfigStructure == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
if (pOMXComponent->pComponentPrivate == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
}
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
-
if (pComponentConfigStructure == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
OMX_ERRORTYPE H264CodecOpen(EXYNOS_H264DEC_HANDLE *pH264Dec)
{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
+ OMX_ERRORTYPE ret = OMX_ErrorNone;
ExynosVideoDecOps *pDecOps = NULL;
ExynosVideoDecBufferOps *pInbufOps = NULL;
ExynosVideoDecBufferOps *pOutbufOps = NULL;
goto EXIT;
}
- /* MFC Open */
/* alloc ops structure */
pDecOps = (ExynosVideoDecOps *)Exynos_OSAL_Malloc(sizeof(ExynosVideoDecOps));
pInbufOps = (ExynosVideoDecBufferOps *)Exynos_OSAL_Malloc(sizeof(ExynosVideoDecBufferOps));
pOutbufOps->nSize = sizeof(ExynosVideoDecBufferOps);
Exynos_Video_Register_Decoder(pDecOps, pInbufOps, pOutbufOps);
+
/* check mandatory functions for decoder ops */
if ((pDecOps->Init == NULL) || (pDecOps->Finalize == NULL) ||
(pDecOps->Get_ActualBufferCount == NULL) || (pDecOps->Set_FrameTag == NULL) ||
ExynosVideoDecBufferOps *pInbufOps = NULL;
ExynosVideoDecBufferOps *pOutbufOps = NULL;
+ FunctionIn();
+
if (pH264Dec == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
if (hMFCHandle != NULL) {
pDecOps->Finalize(hMFCHandle);
- hMFCHandle = pH264Dec->hMFCH264Handle.hMFCHandle = NULL;
+ pH264Dec->hMFCH264Handle.hMFCHandle = NULL;
}
if (pOutbufOps != NULL) {
Exynos_OSAL_Free(pOutbufOps);
- pOutbufOps = pH264Dec->hMFCH264Handle.pOutbufOps = NULL;
+ pH264Dec->hMFCH264Handle.pOutbufOps = NULL;
}
if (pInbufOps != NULL) {
Exynos_OSAL_Free(pInbufOps);
- pInbufOps = pH264Dec->hMFCH264Handle.pInbufOps = NULL;
+ pH264Dec->hMFCH264Handle.pInbufOps = NULL;
}
if (pDecOps != NULL) {
Exynos_OSAL_Free(pDecOps);
- pDecOps = pH264Dec->hMFCH264Handle.pDecOps = NULL;
+ pH264Dec->hMFCH264Handle.pDecOps = NULL;
}
ret = OMX_ErrorNone;
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
EXYNOS_H264DEC_HANDLE *pH264Dec = NULL;
+ FunctionIn();
+
if (pOMXComponent == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
ret = OMX_ErrorBadParameter;
goto EXIT;
}
+
pH264Dec = (EXYNOS_H264DEC_HANDLE *)pVideoDec->hCodecHandle;
if (pH264Dec == NULL) {
ret = OMX_ErrorBadParameter;
else if (nPortIndex == OUTPUT_PORT_INDEX)
pOutbufOps->Run(hMFCHandle);
-
ret = OMX_ErrorNone;
EXIT:
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
EXYNOS_H264DEC_HANDLE *pH264Dec = NULL;
+ FunctionIn();
+
if (pOMXComponent == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
OMX_U32 inputBufferNumber = 0;
int i;
-
FunctionIn();
if ((oneFrameSize <= 0) && (pSrcInputData->nFlags & OMX_BUFFERFLAG_EOS)) {
else
pH264Dec->hMFCH264Handle.MFCOutputColorType = bufferConf.eColorFormat = VIDEO_COLORFORMAT_NV12_TILED;
#endif
+
if (pOutbufOps->Set_Geometry(hMFCHandle, &bufferConf) != VIDEO_ERROR_NONE) {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Failed to set geometry for output buffer");
ret = OMX_ErrorInsufficientResources;
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
if (pOMXComponent->pComponentPrivate == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
}
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
-
if (pComponentConfigStructure == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
if (pOMXComponent->pComponentPrivate == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
}
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
-
if (pComponentConfigStructure == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
if (Exynos_OSAL_Strcmp(cParameterName, EXYNOS_INDEX_PARAM_ENABLE_THUMBNAIL) == 0) {
EXYNOS_H264DEC_HANDLE *pH264Dec = (EXYNOS_H264DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
-
*pIndexType = OMX_IndexVendorThumbnailMode;
-
ret = OMX_ErrorNone;
} else {
ret = Exynos_OMX_VideoDecodeGetExtensionIndex(hComponent, cParameterName, pIndexType);
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = (EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle;
EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
- EXYNOS_H264DEC_HANDLE *pH264Dec = (EXYNOS_H264DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
+ EXYNOS_H264DEC_HANDLE *pH264Dec = (EXYNOS_H264DEC_HANDLE *)pVideoDec->hCodecHandle;
OMX_PTR hMFCHandle = pH264Dec->hMFCH264Handle.hMFCHandle;
ExynosVideoDecOps *pDecOps = NULL;
Exynos_OSAL_SemaphoreCreate(&pExynosInputPort->codecSemID);
Exynos_OSAL_QueueCreate(&pExynosInputPort->codecBufferQ, MAX_QUEUE_ELEMENTS);
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++) {
/*************/
/* TBD */
/*************/
pH264Dec->bSourceStart = OMX_FALSE;
if ((pExynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++) {
if (pVideoDec->pMFCDecOutputBuffer[i] != NULL) {
if (pVideoDec->pMFCDecOutputBuffer[i]->VirAddr[0] != NULL)
Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pVideoDec->pMFCDecOutputBuffer[i]->VirAddr[0]);
Exynos_OSAL_QueueTerminate(&pExynosOutputPort->codecBufferQ);
Exynos_OSAL_SemaphoreTerminate(pExynosOutputPort->codecSemID);
} else if (pExynosOutputPort->bufferProcessType == BUFFER_SHARE) {
-
-
/*************/
/* TBD */
/*************/
/* Does not require any actions. */
-
-
}
if ((pExynosInputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++) {
if (pVideoDec->pMFCDecInputBuffer[i] != NULL) {
if (pVideoDec->pMFCDecInputBuffer[i]->VirAddr != NULL)
Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pVideoDec->pMFCDecInputBuffer[i]->VirAddr);
Exynos_OSAL_QueueTerminate(&pExynosInputPort->codecBufferQ);
Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->codecSemID);
} else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) {
-
-
/*************/
/* TBD */
/*************/
/* Does not require any actions. */
-
-
}
H264CodecClose(pH264Dec);
ret = OMX_ErrorNone;
EXIT:
-
FunctionOut();
return ret;
int i = 0;
while (pSrcOutputData->buffer.singlePlaneBuffer.dataBuffer != pVideoDec->pMFCDecInputBuffer[i]->VirAddr) {
if (i >= MFC_INPUT_BUFFER_NUM_MAX) {
- ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Can not find buffer");
+ ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
goto EXIT;
}
i++;
}
-
pVideoDec->pMFCDecInputBuffer[i]->dataSize = 0;
pSrcOutputData->pPrivate = pVideoDec->pMFCDecInputBuffer[i];
}
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s : %d => ADDR: 0x%x", __FUNCTION__, __LINE__, pDstInputData->buffer.multiPlaneBuffer.dataBuffer[0]);
codecReturn = pOutbufOps->Enqueue(hMFCHandle, (unsigned char **)pDstInputData->buffer.multiPlaneBuffer.dataBuffer, (unsigned int *)&dataLen, 2, pDstInputData->bufferHeader);
if (codecReturn != VIDEO_ERROR_NONE) {
- ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s : %d", __FUNCTION__, __LINE__);
+ ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
goto EXIT;
}
H264CodecStart(pOMXComponent, OUTPUT_PORT_INDEX);
if ((displayStatus == VIDEO_FRAME_STATUS_CHANGE_RESOL) ||
((pDstOutputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)) {
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%x displayStatus:%d, nFlags0x%x", pExynosComponent, displayStatus, pDstOutputData->nFlags);
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "displayStatus:%d, nFlags0x%x", displayStatus, pDstOutputData->nFlags);
pDstOutputData->remainDataLen = 0;
} else {
pDstOutputData->remainDataLen = bufferGeometry->nFrameWidth * bufferGeometry->nFrameHeight * 3 / 2;
OSCL_EXPORT_REF OMX_ERRORTYPE Exynos_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName)
{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- OMX_COMPONENTTYPE *pOMXComponent = NULL;
+ OMX_ERRORTYPE ret = OMX_ErrorNone;
+ OMX_COMPONENTTYPE *pOMXComponent = NULL;
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = NULL;
- EXYNOS_OMX_BASEPORT *pExynosPort = NULL;
- EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
- EXYNOS_H264DEC_HANDLE *pH264Dec = NULL;
- OMX_BOOL bDRMPlayerMode = OMX_FALSE;
+ EXYNOS_OMX_BASEPORT *pExynosPort = NULL;
+ EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
+ EXYNOS_H264DEC_HANDLE *pH264Dec = NULL;
+ OMX_BOOL bDRMPlayerMode = OMX_FALSE;
int i = 0;
FunctionIn();
pVideoDec->exynos_codec_dstInputProcess = &Exynos_H264Dec_dstInputBufferProcess;
pVideoDec->exynos_codec_dstOutputProcess = &Exynos_H264Dec_dstOutputBufferProcess;
- pVideoDec->exynos_codec_start = &H264CodecStart;
- pVideoDec->exynos_codec_stop = &H264CodecStop;
+ pVideoDec->exynos_codec_start = &H264CodecStart;
+ pVideoDec->exynos_codec_stop = &H264CodecStop;
pVideoDec->exynos_codec_bufferProcessRun = &H264CodecOutputBufferProcessRun;
pVideoDec->exynos_codec_enqueueAllBuffer = &H264CodecEnQueueAllBuffer;
pVideoDec->hSharedMemory = Exynos_OSAL_SharedMemory_Open();
if (pVideoDec->hSharedMemory == NULL) {
+ Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__);
Exynos_OSAL_Free(pH264Dec);
pH264Dec = ((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle = NULL;
Exynos_OMX_VideoDecodeComponentDeinit(pOMXComponent);
OMX_ERRORTYPE Mpeg4CodecOpen(EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec)
{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
+ OMX_ERRORTYPE ret = OMX_ErrorNone;
ExynosVideoDecOps *pDecOps = NULL;
ExynosVideoDecBufferOps *pInbufOps = NULL;
ExynosVideoDecBufferOps *pOutbufOps = NULL;
goto EXIT;
}
- /* MFC Open */
/* alloc ops structure */
pDecOps = (ExynosVideoDecOps *)Exynos_OSAL_Malloc(sizeof(ExynosVideoDecOps));
pInbufOps = (ExynosVideoDecBufferOps *)Exynos_OSAL_Malloc(sizeof(ExynosVideoDecBufferOps));
pOutbufOps->nSize = sizeof(ExynosVideoDecBufferOps);
Exynos_Video_Register_Decoder(pDecOps, pInbufOps, pOutbufOps);
+
/* check mandatory functions for decoder ops */
if ((pDecOps->Init == NULL) || (pDecOps->Finalize == NULL) ||
(pDecOps->Get_ActualBufferCount == NULL) || (pDecOps->Set_FrameTag == NULL) ||
OMX_ERRORTYPE Mpeg4CodecClose(EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec)
{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
+ OMX_ERRORTYPE ret = OMX_ErrorNone;
void *hMFCHandle = NULL;
ExynosVideoDecOps *pDecOps = NULL;
ExynosVideoDecBufferOps *pInbufOps = NULL;
ExynosVideoDecBufferOps *pOutbufOps = NULL;
+ FunctionIn();
+
if (pMpeg4Dec == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
if (hMFCHandle != NULL) {
pDecOps->Finalize(hMFCHandle);
- hMFCHandle = pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle = NULL;
+ pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle = NULL;
}
if (pOutbufOps != NULL) {
Exynos_OSAL_Free(pOutbufOps);
- pOutbufOps = pMpeg4Dec->hMFCMpeg4Handle.pOutbufOps = NULL;
+ pMpeg4Dec->hMFCMpeg4Handle.pOutbufOps = NULL;
}
if (pInbufOps != NULL) {
Exynos_OSAL_Free(pInbufOps);
- pInbufOps = pMpeg4Dec->hMFCMpeg4Handle.pInbufOps = NULL;
+ pMpeg4Dec->hMFCMpeg4Handle.pInbufOps = NULL;
}
if (pDecOps != NULL) {
Exynos_OSAL_Free(pDecOps);
- pDecOps = pMpeg4Dec->hMFCMpeg4Handle.pDecOps = NULL;
+ pMpeg4Dec->hMFCMpeg4Handle.pDecOps = NULL;
}
ret = OMX_ErrorNone;
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
+ FunctionIn();
+
if (pOMXComponent == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
ret = OMX_ErrorBadParameter;
goto EXIT;
}
+
pMpeg4Dec = (EXYNOS_MPEG4DEC_HANDLE *)pVideoDec->hCodecHandle;
if (pMpeg4Dec == NULL) {
ret = OMX_ErrorBadParameter;
else if (nPortIndex == OUTPUT_PORT_INDEX)
pOutbufOps->Run(hMFCHandle);
-
ret = OMX_ErrorNone;
EXIT:
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
+ FunctionIn();
+
if (pOMXComponent == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
goto EXIT;
}
-
hMFCHandle = pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle;
pDecOps = pMpeg4Dec->hMFCMpeg4Handle.pDecOps;
pInbufOps = pMpeg4Dec->hMFCMpeg4Handle.pInbufOps;
else if (nPortIndex == OUTPUT_PORT_INDEX)
pOutbufOps->Stop(hMFCHandle);
-
ret = OMX_ErrorNone;
EXIT:
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
+ FunctionIn();
+
if (pOMXComponent == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
OMX_ERRORTYPE ret = OMX_ErrorNone;
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = (EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle;
- EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = (EXYNOS_MPEG4DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
+ EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = (EXYNOS_MPEG4DEC_HANDLE *)pVideoDec->hCodecHandle;
void *hMFCHandle = pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle;
EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
ExynosVideoDecBufferOps *pInbufOps = pMpeg4Dec->hMFCMpeg4Handle.pInbufOps;
ExynosVideoDecBufferOps *pOutbufOps = pMpeg4Dec->hMFCMpeg4Handle.pOutbufOps;
+ FunctionIn();
if ((nPortIndex == INPUT_PORT_INDEX) &&
(pMpeg4Dec->bSourceStart == OMX_TRUE)) {
Exynos_CodecBufferReset(pExynosComponent, INPUT_PORT_INDEX);
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++) {
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "pVideoDec->pMFCDecInputBuffer[%d]: 0x%x", i, pVideoDec->pMFCDecInputBuffer[i]);
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "pVideoDec->pMFCDecInputBuffer[%d]->VirAddr: 0x%x", i, pVideoDec->pMFCDecInputBuffer[i]->VirAddr);
OMX_U32 inputBufferNumber = 0;
int i;
-
FunctionIn();
if ((oneFrameSize <= 0) && (pSrcInputData->nFlags & OMX_BUFFERFLAG_EOS)) {
else
pMpeg4Dec->hMFCMpeg4Handle.MFCOutputColorType = bufferConf.eColorFormat = VIDEO_COLORFORMAT_NV12_TILED;
#endif
+
if (pOutbufOps->Set_Geometry(hMFCHandle, &bufferConf) != VIDEO_ERROR_NONE) {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Failed to set geometry for output buffer");
ret = OMX_ErrorInsufficientResources;
int i, nOutbufs;
-
FunctionIn();
/* get dpb count */
// Exynos_OSAL_UnlockANB(pExynosOutputPort->extendBufferHeader[i].OMXBufferHeader->pBuffer);
}
}
+
if (pOutbufOps->Run(hMFCHandle) != VIDEO_ERROR_NONE) {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Failed to run output buffer");
ret = OMX_ErrorInsufficientResources;
}
if (pExynosOutputPort->bufferProcessType == BUFFER_SHARE) {
- Mpeg4CodecStop (pOMXComponent, OUTPUT_PORT_INDEX);
+ Mpeg4CodecStop(pOMXComponent, OUTPUT_PORT_INDEX);
}
pMpeg4Dec->hMFCMpeg4Handle.bConfiguredMFCDst = OMX_TRUE;
{
OMX_VIDEO_PARAM_MPEG4TYPE *pDstMpeg4Param = (OMX_VIDEO_PARAM_MPEG4TYPE *)pComponentParameterStructure;
OMX_VIDEO_PARAM_MPEG4TYPE *pSrcMpeg4Param = NULL;
- EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
+ EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
ret = Exynos_OMX_Check_SizeVersion(pDstMpeg4Param, sizeof(OMX_VIDEO_PARAM_MPEG4TYPE));
if (ret != OMX_ErrorNone) {
break;
case OMX_IndexParamVideoH263:
{
- OMX_VIDEO_PARAM_H263TYPE *pDstH263Param = (OMX_VIDEO_PARAM_H263TYPE *)pComponentParameterStructure;
- OMX_VIDEO_PARAM_H263TYPE *pSrcH263Param = NULL;
- EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
+ OMX_VIDEO_PARAM_H263TYPE *pDstH263Param = (OMX_VIDEO_PARAM_H263TYPE *)pComponentParameterStructure;
+ OMX_VIDEO_PARAM_H263TYPE *pSrcH263Param = NULL;
+ EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
ret = Exynos_OMX_Check_SizeVersion(pDstH263Param, sizeof(OMX_VIDEO_PARAM_H263TYPE));
if (ret != OMX_ErrorNone) {
OMX_VIDEO_PARAM_PROFILELEVELTYPE *pDstProfileLevel = (OMX_VIDEO_PARAM_PROFILELEVELTYPE *)pComponentParameterStructure;
OMX_VIDEO_PARAM_MPEG4TYPE *pSrcMpeg4Param = NULL;
OMX_VIDEO_PARAM_H263TYPE *pSrcH263Param = NULL;
- EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
+ EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
OMX_S32 codecType;
ret = Exynos_OMX_Check_SizeVersion(pDstProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE));
{
OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pDstErrorCorrectionType = (OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *)pComponentParameterStructure;
OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE *pSrcErrorCorrectionType = NULL;
- EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
+ EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
ret = Exynos_OMX_Check_SizeVersion(pDstErrorCorrectionType, sizeof(OMX_VIDEO_PARAM_ERRORCORRECTIONTYPE));
if (ret != OMX_ErrorNone) {
OMX_S32 codecType;
ret = Exynos_OMX_Check_SizeVersion(pSrcProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE));
- if (ret != OMX_ErrorNone) {
+ if (ret != OMX_ErrorNone)
goto EXIT;
- }
if (pSrcProfileLevel->nPortIndex >= ALL_PORT_NUM) {
ret = OMX_ErrorBadPortIndex;
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
if (pExynosComponent->currentState == OMX_StateInvalid) {
ret = OMX_ErrorInvalidState;
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
if (pExynosComponent->currentState == OMX_StateInvalid) {
ret = OMX_ErrorInvalidState;
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
if (pOMXComponent->pComponentPrivate == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
}
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
-
if ((cParameterName == NULL) || (pIndexType == NULL)) {
ret = OMX_ErrorBadParameter;
goto EXIT;
if (Exynos_OSAL_Strcmp(cParameterName, EXYNOS_INDEX_PARAM_ENABLE_THUMBNAIL) == 0) {
EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = (EXYNOS_MPEG4DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
-
*pIndexType = OMX_IndexVendorThumbnailMode;
-
ret = OMX_ErrorNone;
} else {
ret = Exynos_OMX_VideoDecodeGetExtensionIndex(hComponent, cParameterName, pIndexType);
/* MFC Init */
OMX_ERRORTYPE Exynos_Mpeg4Dec_Init(OMX_COMPONENTTYPE *pOMXComponent)
{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
- EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = (EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle;
- EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
- EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
- EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = (EXYNOS_MPEG4DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
- OMX_PTR hMFCHandle = pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle;
+ OMX_ERRORTYPE ret = OMX_ErrorNone;
+ EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
+ EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = (EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle;
+ EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
+ EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
+ EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = (EXYNOS_MPEG4DEC_HANDLE *)pVideoDec->hCodecHandle;
+ OMX_PTR hMFCHandle = pMpeg4Dec->hMFCMpeg4Handle.hMFCHandle;
ExynosVideoDecOps *pDecOps = NULL;
ExynosVideoDecBufferOps *pInbufOps = NULL;
ExynosVideoDecBufferOps *pOutbufOps = NULL;
CSC_METHOD csc_method = CSC_METHOD_SW;
-
int i = 0;
+ FunctionIn();
+
pMpeg4Dec->hMFCMpeg4Handle.bConfiguredMFCSrc = OMX_FALSE;
pMpeg4Dec->hMFCMpeg4Handle.bConfiguredMFCDst = OMX_FALSE;
pExynosComponent->bUseFlagEOF = OMX_TRUE;
Exynos_OSAL_SemaphoreCreate(&pExynosInputPort->codecSemID);
Exynos_OSAL_QueueCreate(&pExynosInputPort->codecBufferQ, MAX_QUEUE_ELEMENTS);
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++) {
/*************/
/* TBD */
/*************/
Exynos_CodecBufferEnQueue(pExynosComponent, INPUT_PORT_INDEX, pVideoDec->pMFCDecInputBuffer[i]);
}
} else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) {
-
-
/*************/
/* TBD */
/*************/
/* Does not require any actions. */
-
}
if ((pExynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
pVideoDec->csc_handle = NULL;
}
-// pInbufOps->Stop(hMFCHandle);
-// pOutbufOps->Stop(hMFCHandle);
-
Exynos_OSAL_SignalTerminate(pMpeg4Dec->hDestinationStartEvent);
pMpeg4Dec->hDestinationStartEvent = NULL;
pMpeg4Dec->bDestinationStart = OMX_FALSE;
pMpeg4Dec->bSourceStart = OMX_FALSE;
if ((pExynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++) {
if (pVideoDec->pMFCDecOutputBuffer[i] != NULL) {
if (pVideoDec->pMFCDecOutputBuffer[i]->VirAddr[0] != NULL)
Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pVideoDec->pMFCDecOutputBuffer[i]->VirAddr[0]);
Exynos_OSAL_QueueTerminate(&pExynosOutputPort->codecBufferQ);
Exynos_OSAL_SemaphoreTerminate(pExynosOutputPort->codecSemID);
} else if (pExynosOutputPort->bufferProcessType == BUFFER_SHARE) {
-
-
/*************/
/* TBD */
/*************/
/* Does not require any actions. */
-
-
}
if ((pExynosInputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++) {
if (pVideoDec->pMFCDecInputBuffer[i] != NULL) {
if (pVideoDec->pMFCDecInputBuffer[i]->VirAddr != NULL)
- Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pVideoDec->pMFCDecInputBuffer[i]->VirAddr);
- Exynos_OSAL_Free(pVideoDec->pMFCDecInputBuffer[i]);
- pVideoDec->pMFCDecInputBuffer[i] = NULL;
- }
+ Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pVideoDec->pMFCDecInputBuffer[i]->VirAddr);
+ Exynos_OSAL_Free(pVideoDec->pMFCDecInputBuffer[i]);
+ pVideoDec->pMFCDecInputBuffer[i] = NULL;
+ }
}
Exynos_OSAL_QueueTerminate(&pExynosInputPort->codecBufferQ);
Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->codecSemID);
} else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) {
-
-
/*************/
/* TBD */
/*************/
/* Does not require any actions. */
-
-
}
Mpeg4CodecClose(pMpeg4Dec);
}
if ((Check_Stream_StartCode(pSrcInputData->buffer.singlePlaneBuffer.dataBuffer, oneFrameSize, pMpeg4Dec->hMFCMpeg4Handle.codecType) == OMX_TRUE) ||
- ((pSrcInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)){
+ ((pSrcInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)) {
pExynosComponent->timeStamp[pMpeg4Dec->hMFCMpeg4Handle.indexTimestamp] = pSrcInputData->timeStamp;
pExynosComponent->nFlags[pMpeg4Dec->hMFCMpeg4Handle.indexTimestamp] = pSrcInputData->nFlags;
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "input timestamp %lld us (%.2f secs), Tag: %d, nFlags: 0x%x", pSrcInputData->timeStamp, pSrcInputData->timeStamp / 1E6, pMpeg4Dec->hMFCMpeg4Handle.indexTimestamp, pSrcInputData->nFlags);
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s : %d", __FUNCTION__, __LINE__);
goto EXIT;
}
-
Mpeg4CodecStart(pOMXComponent, INPUT_PORT_INDEX);
if (pMpeg4Dec->bSourceStart == OMX_FALSE) {
pMpeg4Dec->bSourceStart = OMX_TRUE;
ret = OMX_ErrorNone;
EXIT:
-
FunctionOut();
return ret;
int i = 0;
while (pSrcOutputData->buffer.singlePlaneBuffer.dataBuffer != pVideoDec->pMFCDecInputBuffer[i]->VirAddr) {
if (i >= MFC_INPUT_BUFFER_NUM_MAX) {
- ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Can not find buffer");
+ ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
goto EXIT;
}
i++;
}
-
pVideoDec->pMFCDecInputBuffer[i]->dataSize = 0;
pSrcOutputData->pPrivate = pVideoDec->pMFCDecInputBuffer[i];
-
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "i: %d, out dataBuffer: 0x%x", i, pSrcOutputData->buffer.singlePlaneBuffer.dataBuffer);
}
/* For Share Buffer */
codecReturn = pOutbufOps->Enqueue(hMFCHandle, (unsigned char **)pDstInputData->buffer.multiPlaneBuffer.dataBuffer, (unsigned int *)&dataLen, 2, pDstInputData->bufferHeader);
if (codecReturn != VIDEO_ERROR_NONE) {
- ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s : %d", __FUNCTION__, __LINE__);
+ ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
goto EXIT;
}
Mpeg4CodecStart(pOMXComponent, OUTPUT_PORT_INDEX);
break;
}
}
-/*
- if ((CHECK_PORT_BEING_FLUSHED(pExynosOutputPort)) &&
- (pVideoBuffer != NULL)) {
- ret = OMX_ErrorNone;
- break;
- }
-*/
-#if 0
- else if (displayStatus == VIDEO_FRAME_STATUS_DECODING_ONLY) {
- if (pVideoBuffer != NULL) {
- /* Just Flush Case */
- ret = OMX_ErrorNone;
- break;
- }
- }
-#endif
}
if (ret != OMX_ErrorNone)
}
indexTimestamp = pDecOps->Get_FrameTag(hMFCHandle);
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%x indexTimestamp: %d", pExynosComponent, indexTimestamp);
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "out indexTimestamp: %d", indexTimestamp);
if ((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)) {
if ((pExynosComponent->checkTimeStamp.needSetStartTimeStamp != OMX_TRUE) &&
(pExynosComponent->checkTimeStamp.needCheckStartTimeStamp != OMX_TRUE)) {
pDstOutputData->timeStamp = pExynosComponent->timeStamp[pMpeg4Dec->hMFCMpeg4Handle.outputIndexTimestamp];
pDstOutputData->nFlags = pExynosComponent->nFlags[pMpeg4Dec->hMFCMpeg4Handle.outputIndexTimestamp];
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "indexTimestamp: %d", indexTimestamp);
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
} else {
pDstOutputData->timeStamp = 0x00;
pDstOutputData->nFlags = 0x00;
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = (EXYNOS_MPEG4DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
-// EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
FunctionIn();
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = (EXYNOS_MPEG4DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
-// EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
FunctionIn();
OMX_ERRORTYPE ret = OMX_ErrorNone;
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = (EXYNOS_MPEG4DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
-// EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
FunctionIn();
ret = OMX_ErrorNone;
goto EXIT;
}
-
if (pExynosOutputPort->bufferProcessType == BUFFER_SHARE) {
if ((pMpeg4Dec->bDestinationStart == OMX_FALSE) &&
(!CHECK_PORT_BEING_FLUSHED(pExynosOutputPort))) {
OMX_ERRORTYPE ret = OMX_ErrorNone;
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = (EXYNOS_MPEG4DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
-// EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
FunctionIn();
Exynos_OSAL_SignalReset(pMpeg4Dec->hDestinationStartEvent);
}
}
-
ret = Exynos_Mpeg4Dec_DstOut(pOMXComponent, pDstOutputData);
if ((ret != OMX_ErrorNone) &&
(pExynosComponent->currentState == OMX_StateExecuting)) {
OSCL_EXPORT_REF OMX_ERRORTYPE Exynos_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName)
{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- OMX_COMPONENTTYPE *pOMXComponent = NULL;
+ OMX_ERRORTYPE ret = OMX_ErrorNone;
+ OMX_COMPONENTTYPE *pOMXComponent = NULL;
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = NULL;
- EXYNOS_OMX_BASEPORT *pExynosPort = NULL;
- EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
- EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
+ EXYNOS_OMX_BASEPORT *pExynosPort = NULL;
+ EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
+ EXYNOS_MPEG4DEC_HANDLE *pMpeg4Dec = NULL;
int i = 0;
OMX_S32 codecType = -1;
pVideoDec->exynos_codec_dstInputProcess = &Exynos_Mpeg4Dec_dstInputBufferProcess;
pVideoDec->exynos_codec_dstOutputProcess = &Exynos_Mpeg4Dec_dstOutputBufferProcess;
- pVideoDec->exynos_codec_start = &Mpeg4CodecStart;
- pVideoDec->exynos_codec_stop = &Mpeg4CodecStop;
+ pVideoDec->exynos_codec_start = &Mpeg4CodecStart;
+ pVideoDec->exynos_codec_stop = &Mpeg4CodecStop;
pVideoDec->exynos_codec_bufferProcessRun = &Mpeg4CodecOutputBufferProcessRun;
pVideoDec->exynos_codec_enqueueAllBuffer = &Mpeg4CodecEnQueueAllBuffer;
pVideoDec->hSharedMemory = Exynos_OSAL_SharedMemory_Open();
if (pVideoDec->hSharedMemory == NULL) {
+ Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__);
Exynos_OSAL_Free(pMpeg4Dec);
pMpeg4Dec = ((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle = NULL;
Exynos_OMX_VideoDecodeComponentDeinit(pOMXComponent);
OMX_ERRORTYPE VP8CodecOpen(EXYNOS_VP8DEC_HANDLE *pVp8Dec)
{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
-
+ OMX_ERRORTYPE ret = OMX_ErrorNone;
ExynosVideoDecOps *pDecOps = NULL;
ExynosVideoDecBufferOps *pInbufOps = NULL;
ExynosVideoDecBufferOps *pOutbufOps = NULL;
goto EXIT;
}
- /* MFC Open */
/* alloc ops structure */
pDecOps = (ExynosVideoDecOps *)Exynos_OSAL_Malloc(sizeof(ExynosVideoDecOps));
pInbufOps = (ExynosVideoDecBufferOps *)Exynos_OSAL_Malloc(sizeof(ExynosVideoDecBufferOps));
pOutbufOps->nSize = sizeof(ExynosVideoDecBufferOps);
Exynos_Video_Register_Decoder(pDecOps, pInbufOps, pOutbufOps);
+
/* check mandatory functions for decoder ops */
if ((pDecOps->Init == NULL) || (pDecOps->Finalize == NULL) ||
(pDecOps->Get_ActualBufferCount == NULL) || (pDecOps->Set_FrameTag == NULL) ||
OMX_ERRORTYPE VP8CodecClose(EXYNOS_VP8DEC_HANDLE *pVp8Dec)
{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
+ OMX_ERRORTYPE ret = OMX_ErrorNone;
void *hMFCHandle = NULL;
ExynosVideoDecOps *pDecOps = NULL;
ExynosVideoDecBufferOps *pInbufOps = NULL;
ExynosVideoDecBufferOps *pOutbufOps = NULL;
+ FunctionIn();
+
if (pVp8Dec == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
if (hMFCHandle != NULL) {
pDecOps->Finalize(hMFCHandle);
- hMFCHandle = pVp8Dec->hMFCVp8Handle.hMFCHandle = NULL;
+ pVp8Dec->hMFCVp8Handle.hMFCHandle = NULL;
}
if (pOutbufOps != NULL) {
Exynos_OSAL_Free(pOutbufOps);
- pOutbufOps = pVp8Dec->hMFCVp8Handle.pOutbufOps = NULL;
+ pVp8Dec->hMFCVp8Handle.pOutbufOps = NULL;
}
if (pInbufOps != NULL) {
Exynos_OSAL_Free(pInbufOps);
- pInbufOps = pVp8Dec->hMFCVp8Handle.pInbufOps = NULL;
+ pVp8Dec->hMFCVp8Handle.pInbufOps = NULL;
}
if (pDecOps != NULL) {
Exynos_OSAL_Free(pDecOps);
- pDecOps = pVp8Dec->hMFCVp8Handle.pDecOps = NULL;
+ pVp8Dec->hMFCVp8Handle.pDecOps = NULL;
}
ret = OMX_ErrorNone;
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
EXYNOS_VP8DEC_HANDLE *pVp8Dec = NULL;
+ FunctionIn();
+
if (pOMXComponent == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
ret = OMX_ErrorBadParameter;
goto EXIT;
}
+
pVp8Dec = (EXYNOS_VP8DEC_HANDLE *)pVideoDec->hCodecHandle;
if (pVp8Dec == NULL) {
ret = OMX_ErrorBadParameter;
else if (nPortIndex == OUTPUT_PORT_INDEX)
pOutbufOps->Run(hMFCHandle);
-
ret = OMX_ErrorNone;
EXIT:
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
EXYNOS_VP8DEC_HANDLE *pVp8Dec = NULL;
+ FunctionIn();
+
if (pOMXComponent == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
goto EXIT;
}
-
hMFCHandle = pVp8Dec->hMFCVp8Handle.hMFCHandle;
pDecOps = pVp8Dec->hMFCVp8Handle.pDecOps;
pInbufOps = pVp8Dec->hMFCVp8Handle.pInbufOps;
else if (nPortIndex == OUTPUT_PORT_INDEX)
pOutbufOps->Stop(hMFCHandle);
-
ret = OMX_ErrorNone;
EXIT:
EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = NULL;
EXYNOS_VP8DEC_HANDLE *pVp8Dec = NULL;
+ FunctionIn();
+
if (pOMXComponent == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
ExynosVideoDecBufferOps *pInbufOps = pVp8Dec->hMFCVp8Handle.pInbufOps;
ExynosVideoDecBufferOps *pOutbufOps = pVp8Dec->hMFCVp8Handle.pOutbufOps;
+ FunctionIn();
if ((nPortIndex == INPUT_PORT_INDEX) &&
(pVp8Dec->bSourceStart == OMX_TRUE)) {
Exynos_CodecBufferReset(pExynosComponent, INPUT_PORT_INDEX);
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++) {
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "pVideoDec->pMFCDecInputBuffer[%d]: 0x%x", i, pVideoDec->pMFCDecInputBuffer[i]);
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "pVideoDec->pMFCDecInputBuffer[%d]->VirAddr: 0x%x", i, pVideoDec->pMFCDecInputBuffer[i]->VirAddr);
OMX_U32 inputBufferNumber = 0;
int i;
-
FunctionIn();
if ((oneFrameSize <= 0) && (pSrcInputData->nFlags & OMX_BUFFERFLAG_EOS)) {
else
pVp8Dec->hMFCVp8Handle.MFCOutputColorType = bufferConf.eColorFormat = VIDEO_COLORFORMAT_NV12_TILED;
#endif
+
if (pOutbufOps->Set_Geometry(hMFCHandle, &bufferConf) != VIDEO_ERROR_NONE) {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Failed to set geometry for output buffer");
ret = OMX_ErrorInsufficientResources;
}
/* input buffer enqueue for header parsing */
- Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "oneFrameSize: %d", oneFrameSize);
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "oneFrameSize: %d", oneFrameSize);
if (pInbufOps->Enqueue(hMFCHandle, (unsigned char **)&pSrcInputData->buffer.singlePlaneBuffer.dataBuffer, (unsigned int *)&oneFrameSize, 1, pSrcInputData->bufferHeader) != VIDEO_ERROR_NONE) {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Failed to enqueue input buffer for header parsing");
// ret = OMX_ErrorInsufficientResources;
int i, nOutbufs;
-
FunctionIn();
/* get dpb count */
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
if (pOMXComponent->pComponentPrivate == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
if (pComponentConfigStructure == NULL) {
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
if (pOMXComponent->pComponentPrivate == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
if (pComponentConfigStructure == NULL) {
OMX_ERRORTYPE Exynos_VP8Dec_GetExtensionIndex(
OMX_IN OMX_HANDLETYPE hComponent,
OMX_IN OMX_STRING cParameterName,
- OMX_OUT OMX_INDEXTYPE *pIndexType)
+ OMX_OUT OMX_INDEXTYPE *pIndexType)
{
OMX_ERRORTYPE ret = OMX_ErrorNone;
OMX_COMPONENTTYPE *pOMXComponent = NULL;
if (Exynos_OSAL_Strcmp(cParameterName, EXYNOS_INDEX_PARAM_ENABLE_THUMBNAIL) == 0) {
EXYNOS_VP8DEC_HANDLE *pVp8Dec = (EXYNOS_VP8DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
-
*pIndexType = OMX_IndexVendorThumbnailMode;
-
ret = OMX_ErrorNone;
} else {
ret = Exynos_OMX_VideoDecodeGetExtensionIndex(hComponent, cParameterName, pIndexType);
/* MFC Init */
OMX_ERRORTYPE Exynos_VP8Dec_Init(OMX_COMPONENTTYPE *pOMXComponent)
{
- OMX_ERRORTYPE ret = OMX_ErrorNone;
- EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
- EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = (EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle;
- EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
- EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
- EXYNOS_VP8DEC_HANDLE *pVp8Dec = (EXYNOS_VP8DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
- OMX_PTR hMFCHandle = pVp8Dec->hMFCVp8Handle.hMFCHandle;
+ OMX_ERRORTYPE ret = OMX_ErrorNone;
+ EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
+ EXYNOS_OMX_VIDEODEC_COMPONENT *pVideoDec = (EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle;
+ EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
+ EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
+ EXYNOS_VP8DEC_HANDLE *pVp8Dec = (EXYNOS_VP8DEC_HANDLE *)pVideoDec->hCodecHandle;
+ OMX_PTR hMFCHandle = pVp8Dec->hMFCVp8Handle.hMFCHandle;
ExynosVideoDecOps *pDecOps = NULL;
ExynosVideoDecBufferOps *pInbufOps = NULL;
ExynosVideoDecBufferOps *pOutbufOps = NULL;
CSC_METHOD csc_method = CSC_METHOD_SW;
-
int i = 0;
+ FunctionIn();
+
pVp8Dec->hMFCVp8Handle.bConfiguredMFCSrc = OMX_FALSE;
pVp8Dec->hMFCVp8Handle.bConfiguredMFCDst = OMX_FALSE;
pExynosComponent->bUseFlagEOF = OMX_TRUE;
Exynos_OSAL_SemaphoreCreate(&pExynosInputPort->codecSemID);
Exynos_OSAL_QueueCreate(&pExynosInputPort->codecBufferQ, MAX_QUEUE_ELEMENTS);
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++) {
/*************/
/* TBD */
/*************/
Exynos_CodecBufferEnQueue(pExynosComponent, INPUT_PORT_INDEX, pVideoDec->pMFCDecInputBuffer[i]);
}
} else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) {
-
-
/*************/
/* TBD */
/*************/
/* Does not require any actions. */
-
}
if ((pExynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
pVideoDec->csc_handle = NULL;
}
-// pInbufOps->Stop(hMFCHandle);
-// pOutbufOps->Stop(hMFCHandle);
-
Exynos_OSAL_SignalTerminate(pVp8Dec->hDestinationStartEvent);
pVp8Dec->hDestinationStartEvent = NULL;
pVp8Dec->bDestinationStart = OMX_FALSE;
pVp8Dec->bSourceStart = OMX_FALSE;
if ((pExynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++) {
if (pVideoDec->pMFCDecOutputBuffer[i] != NULL) {
if (pVideoDec->pMFCDecOutputBuffer[i]->VirAddr[0] != NULL)
Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pVideoDec->pMFCDecOutputBuffer[i]->VirAddr[0]);
Exynos_OSAL_QueueTerminate(&pExynosOutputPort->codecBufferQ);
Exynos_OSAL_SemaphoreTerminate(pExynosOutputPort->codecSemID);
} else if (pExynosOutputPort->bufferProcessType == BUFFER_SHARE) {
-
-
/*************/
/* TBD */
/*************/
/* Does not require any actions. */
-
-
}
if ((pExynosInputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++) {
if (pVideoDec->pMFCDecInputBuffer[i] != NULL) {
if (pVideoDec->pMFCDecInputBuffer[i]->VirAddr != NULL)
- Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pVideoDec->pMFCDecInputBuffer[i]->VirAddr);
- Exynos_OSAL_Free(pVideoDec->pMFCDecInputBuffer[i]);
- pVideoDec->pMFCDecInputBuffer[i] = NULL;
- }
+ Exynos_OSAL_SharedMemory_Free(pVideoDec->hSharedMemory, pVideoDec->pMFCDecInputBuffer[i]->VirAddr);
+ Exynos_OSAL_Free(pVideoDec->pMFCDecInputBuffer[i]);
+ pVideoDec->pMFCDecInputBuffer[i] = NULL;
+ }
}
Exynos_OSAL_QueueTerminate(&pExynosInputPort->codecBufferQ);
Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->codecSemID);
} else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) {
-
-
/*************/
/* TBD */
/*************/
/* Does not require any actions. */
-
-
}
VP8CodecClose(pVp8Dec);
}
if ((Check_VP8_StartCode(pSrcInputData->buffer.singlePlaneBuffer.dataBuffer, oneFrameSize) == OMX_TRUE) ||
- ((pSrcInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)){
+ ((pSrcInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)) {
pExynosComponent->timeStamp[pVp8Dec->hMFCVp8Handle.indexTimestamp] = pSrcInputData->timeStamp;
pExynosComponent->nFlags[pVp8Dec->hMFCVp8Handle.indexTimestamp] = pSrcInputData->nFlags;
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "input timestamp %lld us (%.2f secs), Tag: %d, nFlags: 0x%x", pSrcInputData->timeStamp, pSrcInputData->timeStamp / 1E6, pVp8Dec->hMFCVp8Handle.indexTimestamp, pSrcInputData->nFlags);
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s : %d", __FUNCTION__, __LINE__);
goto EXIT;
}
-
VP8CodecStart(pOMXComponent, INPUT_PORT_INDEX);
if (pVp8Dec->bSourceStart == OMX_FALSE) {
pVp8Dec->bSourceStart = OMX_TRUE;
ret = OMX_ErrorNone;
EXIT:
-
FunctionOut();
return ret;
int i = 0;
while (pSrcOutputData->buffer.singlePlaneBuffer.dataBuffer != pVideoDec->pMFCDecInputBuffer[i]->VirAddr) {
if (i >= MFC_INPUT_BUFFER_NUM_MAX) {
- ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Can not find buffer");
+ ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
goto EXIT;
}
i++;
}
-
pVideoDec->pMFCDecInputBuffer[i]->dataSize = 0;
pSrcOutputData->pPrivate = pVideoDec->pMFCDecInputBuffer[i];
codecReturn = pOutbufOps->Enqueue(hMFCHandle, (unsigned char **)pDstInputData->buffer.multiPlaneBuffer.dataBuffer, (unsigned int *)&dataLen, 2, pDstInputData->bufferHeader);
if (codecReturn != VIDEO_ERROR_NONE) {
- ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s : %d", __FUNCTION__, __LINE__);
+ ret = (OMX_ERRORTYPE)OMX_ErrorCodecDecode;
goto EXIT;
}
VP8CodecStart(pOMXComponent, OUTPUT_PORT_INDEX);
break;
}
}
-/*
- if ((CHECK_PORT_BEING_FLUSHED(pExynosOutputPort)) &&
- (pVideoBuffer != NULL)) {
- ret = OMX_ErrorNone;
- break;
- }
-*/
-#if 0
- else if (displayStatus == VIDEO_FRAME_STATUS_DECODING_ONLY) {
- if (pVideoBuffer != NULL) {
- /* Just Flush Case */
- ret = OMX_ErrorNone;
- break;
- }
- }
-#endif
}
if (ret != OMX_ErrorNone)
}
indexTimestamp = pDecOps->Get_FrameTag(hMFCHandle);
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%x indexTimestamp: %d", pExynosComponent, indexTimestamp);
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "out indexTimestamp: %d", indexTimestamp);
if ((indexTimestamp < 0) || (indexTimestamp >= MAX_TIMESTAMP)) {
if ((pExynosComponent->checkTimeStamp.needSetStartTimeStamp != OMX_TRUE) &&
(pExynosComponent->checkTimeStamp.needCheckStartTimeStamp != OMX_TRUE)) {
pDstOutputData->timeStamp = pExynosComponent->timeStamp[pVp8Dec->hMFCVp8Handle.outputIndexTimestamp];
pDstOutputData->nFlags = pExynosComponent->nFlags[pVp8Dec->hMFCVp8Handle.outputIndexTimestamp];
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "indexTimestamp: %d", indexTimestamp);
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "missing out indexTimestamp: %d", indexTimestamp);
} else {
pDstOutputData->timeStamp = 0x00;
pDstOutputData->nFlags = 0x00;
if ((displayStatus == VIDEO_FRAME_STATUS_CHANGE_RESOL) ||
((pDstOutputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS)) {
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%x displayStatus:%d, nFlags0x%x", pExynosComponent, displayStatus, pDstOutputData->nFlags);
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "displayStatus:%d, nFlags0x%x", displayStatus, pDstOutputData->nFlags);
pDstOutputData->remainDataLen = 0;
} else {
pDstOutputData->remainDataLen = bufferGeometry->nFrameWidth * bufferGeometry->nFrameHeight * 3 / 2;
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
EXYNOS_VP8DEC_HANDLE *pVp8Dec = (EXYNOS_VP8DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
-// EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
FunctionIn();
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
EXYNOS_VP8DEC_HANDLE *pVp8Dec = (EXYNOS_VP8DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
-// EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
FunctionIn();
OMX_ERRORTYPE ret = OMX_ErrorNone;
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
EXYNOS_VP8DEC_HANDLE *pVp8Dec = (EXYNOS_VP8DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
-// EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
FunctionIn();
ret = OMX_ErrorNone;
goto EXIT;
}
-
if (pExynosOutputPort->bufferProcessType == BUFFER_SHARE) {
if ((pVp8Dec->bDestinationStart == OMX_FALSE) &&
(!CHECK_PORT_BEING_FLUSHED(pExynosOutputPort))) {
OMX_ERRORTYPE ret = OMX_ErrorNone;
EXYNOS_OMX_BASECOMPONENT *pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
EXYNOS_VP8DEC_HANDLE *pVp8Dec = (EXYNOS_VP8DEC_HANDLE *)((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
-// EXYNOS_OMX_BASEPORT *pExynosInputPort = &pExynosComponent->pExynosPort[INPUT_PORT_INDEX];
EXYNOS_OMX_BASEPORT *pExynosOutputPort = &pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX];
FunctionIn();
Exynos_OSAL_SignalReset(pVp8Dec->hDestinationStartEvent);
}
}
-
ret = Exynos_VP8Dec_DstOut(pOMXComponent, pDstOutputData);
if ((ret != OMX_ErrorNone) &&
(pExynosComponent->currentState == OMX_StateExecuting)) {
pVideoDec->exynos_codec_dstInputProcess = &Exynos_VP8Dec_dstInputBufferProcess;
pVideoDec->exynos_codec_dstOutputProcess = &Exynos_VP8Dec_dstOutputBufferProcess;
- pVideoDec->exynos_codec_start = &VP8CodecStart;
- pVideoDec->exynos_codec_stop = &VP8CodecStop;
+ pVideoDec->exynos_codec_start = &VP8CodecStart;
+ pVideoDec->exynos_codec_stop = &VP8CodecStop;
pVideoDec->exynos_codec_bufferProcessRun = &VP8CodecOutputBufferProcessRun;
pVideoDec->exynos_codec_enqueueAllBuffer = &VP8CodecEnQueueAllBuffer;
pVideoDec->hSharedMemory = Exynos_OSAL_SharedMemory_Open();
if (pVideoDec->hSharedMemory == NULL) {
+ Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "OMX_ErrorInsufficientResources, Line:%d", __LINE__);
Exynos_OSAL_Free(pVp8Dec);
pVp8Dec = ((EXYNOS_OMX_VIDEODEC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle = NULL;
Exynos_OMX_VideoDecodeComponentDeinit(pOMXComponent);
(pExynosComponent->currentState == OMX_StateIdle) ||
(pExynosComponent->transientState == EXYNOS_OMX_TransStateLoadedToIdle) ||
(pExynosComponent->transientState == EXYNOS_OMX_TransStateExecutingToIdle)) &&
- (pExynosComponent->transientState != EXYNOS_OMX_TransStateIdleToLoaded)&&
-// ((!CHECK_PORT_BEING_FLUSHED(exynosOMXInputPort) && !CHECK_PORT_BEING_FLUSHED(exynosOMXOutputPort)))) {
+ (pExynosComponent->transientState != EXYNOS_OMX_TransStateIdleToLoaded) &&
(!CHECK_PORT_BEING_FLUSHED(exynosOMXPort))) {
Exynos_OSAL_SignalWait(pExynosComponent->pExynosPort[nPortIndex].pauseEvent, DEF_MAX_WAIT_TIME);
Exynos_OSAL_SignalReset(pExynosComponent->pExynosPort[nPortIndex].pauseEvent);
pExynosComponent->callbackData,
OMX_EventError, OMX_ErrorUndefined, 0, NULL);
flagEOF = OMX_FALSE;
- // We don't need data-reset? // JH Chang
}
if (((exynosInputPort->bStoreMetaData == OMX_TRUE) && (eColorFormat == OMX_COLOR_FormatAndroidOpaque)) ||
(exynosInputPort->bStoreMetaData == OMX_FALSE)) {
- Exynos_InputBufferReturn(pOMXComponent);
+ Exynos_InputBufferReturn(pOMXComponent);
} else {
inputUseBuffer->dataValid = OMX_TRUE;
}
}
if ((srcInputData->nFlags & OMX_BUFFERFLAG_EOS) == OMX_BUFFERFLAG_EOS) {
- Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "bSaveFlagEOS : OMX_TRUE");
+ Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "bSaveFlagEOS : OMX_TRUE");
srcInputData->dataLen = 0;
srcInputData->remainDataLen = 0;
pExynosComponent->bSaveFlagEOS = OMX_TRUE;
pExynosComponent->checkTimeStamp.needSetStartTimeStamp = OMX_FALSE;
pExynosComponent->checkTimeStamp.needCheckStartTimeStamp = OMX_FALSE;
} else {
- // We don't need data-reset? // JH Chang
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "drop frame after seeking");
ret = OMX_TRUE;
goto EXIT;
}
} else if (pExynosComponent->checkTimeStamp.needSetStartTimeStamp == OMX_TRUE) {
- // We don't need data-reset? // JH Chang
ret = OMX_TRUE;
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "not set check timestame after seeking");
goto EXIT;
ret = OMX_TRUE;
- // We don't need data-reset? // JH Chang
-
if ((outputUseBuffer->remainDataLen > 0) ||
(outputUseBuffer->nFlags & OMX_BUFFERFLAG_EOS)) {
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s:%d", __FUNCTION__, __LINE__);
Exynos_OutputBufferReturn(pOMXComponent);
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s:%d", __FUNCTION__, __LINE__);
}
} else {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "output buffer is smaller than encoded data size Out Length");
pExynosComponent->callbackData,
OMX_EventError, OMX_ErrorUndefined, 0, NULL);
ret = OMX_FALSE;
- // We don't need data-reset? // JH Chang
}
} else if (exynosOutputPort->bufferProcessType == BUFFER_SHARE) {
if ((outputUseBuffer->remainDataLen > 0) ||
ret = pVideoEnc->exynos_codec_srcInputProcess(pOMXComponent, pSrcInputData);
Exynos_ResetCodecData(pSrcInputData);
Exynos_OSAL_MutexUnlock(srcInputUseBuffer->bufferMutex);
-
if (ret == OMX_ErrorCodecInit)
pVideoEnc->bExitBufferProcessThread = OMX_TRUE;
}
if (codecBuffer != NULL)
Exynos_CodecBufferEnQueue(pExynosComponent, INPUT_PORT_INDEX, codecBuffer);
}
-
if (exynosInputPort->bufferProcessType == BUFFER_SHARE) {
Exynos_Shared_DataToBuffer(&srcOutputData, srcOutputUseBuffer);
Exynos_InputBufferReturn(pOMXComponent);
if ((exynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
OMX_PTR codecBuffer;
- //ENCODE_CODEC_EXTRA_BUFFERINFO *pBufferInfo = (ENCODE_CODEC_EXTRA_BUFFERINFO *)&pDstOutputData->extInfo;
codecBuffer = pDstOutputData->pPrivate;
if (codecBuffer != NULL) {
Exynos_CodecBufferEnQueue(pExynosComponent, OUTPUT_PORT_INDEX, codecBuffer);
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pOMXComponent = (OMX_COMPONENTTYPE *)threadData;
ret = Exynos_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE));
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
Exynos_OMX_SrcInputBufferProcess(pOMXComponent);
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pOMXComponent = (OMX_COMPONENTTYPE *)threadData;
ret = Exynos_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE));
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
Exynos_OMX_SrcOutputBufferProcess(pOMXComponent);
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pOMXComponent = (OMX_COMPONENTTYPE *)threadData;
ret = Exynos_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE));
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
Exynos_OMX_DstInputBufferProcess(pOMXComponent);
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pOMXComponent = (OMX_COMPONENTTYPE *)threadData;
ret = Exynos_OMX_Check_SizeVersion(pOMXComponent, sizeof(OMX_COMPONENTTYPE));
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
Exynos_OMX_DstOutputBufferProcess(pOMXComponent);
Exynos_OSAL_ThreadTerminate(pVideoEnc->hDstInputThread);
pVideoEnc->hDstInputThread = NULL;
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s:%d", __FUNCTION__, __LINE__);
pVideoEnc->exynos_codec_stop(pOMXComponent, INPUT_PORT_INDEX);
pVideoEnc->exynos_codec_bufferProcessRun(pOMXComponent, INPUT_PORT_INDEX);
Exynos_OSAL_SignalSet(pExynosComponent->pExynosPort[INPUT_PORT_INDEX].pauseEvent);
Exynos_OSAL_ThreadTerminate(pVideoEnc->hSrcOutputThread);
pVideoEnc->hSrcOutputThread = NULL;
- Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "%s:%d", __FUNCTION__, __LINE__);
pVideoEnc->exynos_codec_stop(pOMXComponent, OUTPUT_PORT_INDEX);
pVideoEnc->exynos_codec_bufferProcessRun(pOMXComponent, INPUT_PORT_INDEX);
Exynos_OSAL_SignalSet(pExynosComponent->pExynosPort[OUTPUT_PORT_INDEX].pauseEvent);
#define INPUT_PORT_SUPPORTFORMAT_NUM_MAX 5
#define OUTPUT_PORT_SUPPORTFORMAT_NUM_MAX 1
+#define MFC_INPUT_BUFFER_PLANE 2
+#define MFC_OUTPUT_BUFFER_PLANE 1
+
// The largest metadata buffer size advertised
// when metadata buffer mode is used for video encoding
#define MAX_INPUT_METADATA_BUFFER_SIZE (64)
typedef struct _EXYNOS_OMX_VIDEOENC_COMPONENT
{
OMX_HANDLETYPE hCodecHandle;
-// EXYNOS_CODEC_NBENC_THREAD NBEncThread;
OMX_BOOL bFirstFrame;
CODEC_ENC_INPUT_BUFFER *pMFCEncInputBuffer[MFC_INPUT_BUFFER_NUM_MAX];
CODEC_ENC_OUTPUT_BUFFER *pMFCEncOutputBuffer[MFC_OUTPUT_BUFFER_NUM_MAX];
nPortIndex, NULL);
}
- for (i = 0; i < pExynosPort->portDefinition.nBufferCountActual; i++) { // JH Chang for test
-// for (i = 0; i < /*pExynosPort->portDefinition.nBufferCountActual*/MAX_BUFFER_NUM; i++) {
+ for (i = 0; i < /*pExynosPort->portDefinition.nBufferCountActual*/MAX_BUFFER_NUM; i++) {
if (((pExynosPort->bufferStateAllocate[i] | BUFFER_STATE_FREE) != 0) && (pExynosPort->extendBufferHeader[i].OMXBufferHeader != NULL)) {
if (pExynosPort->extendBufferHeader[i].OMXBufferHeader->pBuffer == pBufferHdr->pBuffer) {
if (pExynosPort->bufferStateAllocate[i] & BUFFER_STATE_ALLOCATED) {
ret = OMX_ErrorUndefined;
goto EXIT;
}
-
if (message->messageType == EXYNOS_OMX_CommandFakeBuffer) {
ret = OMX_ErrorCodecFlush;
goto EXIT;
OUTPUT_PORT_INDEX,
bufferHeader->nFlags, NULL);
}
-
Exynos_OMX_OutputBufferReturn(pOMXComponent, bufferHeader);
}
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
if (pExynosComponent->currentState == OMX_StateInvalid) {
ret = OMX_ErrorInvalidState;
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
if (pExynosComponent->currentState == OMX_StateInvalid) {
ret = OMX_ErrorInvalidState;
}
Print_H264Enc_Param(pEncParam);
-
}
static void Change_H264Enc_Param(EXYNOS_OMX_BASECOMPONENT *pExynosComponent)
Set_H264Enc_Param(pExynosComponent);
}
-
OMX_ERRORTYPE GetCodecInputPrivateData(OMX_PTR codecBuffer, OMX_PTR addr[], OMX_U32 size[])
{
OMX_ERRORTYPE ret = OMX_ErrorNone;
return ret;
}
-
OMX_ERRORTYPE GetCodecOutputPrivateData(OMX_PTR codecBuffer, OMX_PTR *pVirtAddr, OMX_U32 *dataSize)
{
OMX_ERRORTYPE ret = OMX_ErrorNone;
goto EXIT;
}
- /* MFC Open */
/* alloc ops structure */
pEncOps = (ExynosVideoEncOps *)Exynos_OSAL_Malloc(sizeof(ExynosVideoEncOps));
pInbufOps = (ExynosVideoEncBufferOps *)Exynos_OSAL_Malloc(sizeof(ExynosVideoEncBufferOps));
ExynosVideoEncBufferOps *pInbufOps = NULL;
ExynosVideoEncBufferOps *pOutbufOps = NULL;
+ FunctionIn();
+
if (pH264Enc == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
if ((nPortIndex == INPUT_PORT_INDEX) &&
(pH264Enc->bSourceStart == OMX_TRUE)) {
-#if 0
- while (Exynos_OSAL_GetElemNum(&pExynosInputPort->codecBufferQ) > 0)
- Exynos_CodecBufferDeQueue(pExynosComponent, INPUT_PORT_INDEX, &pDeQ);
-#else
Exynos_CodecBufferReset(pExynosComponent, INPUT_PORT_INDEX);
-#endif
for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++) {
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "pVideoEnc->pMFCEncInputBuffer[%d]: 0x%x", i, pVideoEnc->pMFCEncInputBuffer[i]);
(pH264Enc->bDestinationStart == OMX_TRUE)) {
OMX_U32 dataLen[2] = {0, 0};
ExynosVideoBuffer *pBuffer = NULL;
-#if 0
- while (Exynos_OSAL_GetElemNum(&pExynosOutputPort->codecBufferQ) > 0)
- Exynos_CodecBufferDeQueue(pExynosComponent, OUTPUT_PORT_INDEX, &pDeQ);
-#else
- Exynos_CodecBufferReset(pExynosComponent, OUTPUT_PORT_INDEX);
-#endif
+ Exynos_CodecBufferReset(pExynosComponent, OUTPUT_PORT_INDEX);
for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++) {
pOutbufOps->Get_Buffer(hMFCHandle, i, &pBuffer);
EXYNOS_H264ENC_HANDLE *pH264Enc = NULL;
ret = Exynos_OMX_Check_SizeVersion(pSrcProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE));
- if (ret != OMX_ErrorNone) {
+ if (ret != OMX_ErrorNone)
goto EXIT;
- }
if (pSrcProfileLevel->nPortIndex >= ALL_PORT_NUM) {
ret = OMX_ErrorBadPortIndex;
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
if (pExynosComponent->currentState == OMX_StateInvalid) {
ret = OMX_ErrorInvalidState;
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
if (pExynosComponent->currentState == OMX_StateInvalid) {
ret = OMX_ErrorInvalidState;
goto EXIT;
}
- pVideoEnc = ((EXYNOS_OMX_VIDEOENC_COMPONENT *)pExynosComponent->hComponentHandle);
+ pVideoEnc = (EXYNOS_OMX_VIDEOENC_COMPONENT *)pExynosComponent->hComponentHandle;
pH264Enc = (EXYNOS_H264ENC_HANDLE *)((EXYNOS_OMX_VIDEOENC_COMPONENT *)pExynosComponent->hComponentHandle)->hCodecHandle;
switch (nIndex) {
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
if (pOMXComponent->pComponentPrivate == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
}
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
-
if ((cParameterName == NULL) || (pIndexType == NULL)) {
ret = OMX_ErrorBadParameter;
goto EXIT;
pExynosComponent->bSaveFlagEOS = OMX_FALSE;
eColorFormat = pExynosInputPort->portDefinition.format.video.eColorFormat;
-
if (pExynosInputPort->bStoreMetaData == OMX_TRUE) {
if (eColorFormat == OMX_COLOR_FormatAndroidOpaque) {
pExynosInputPort->bufferProcessType = BUFFER_COPY;
- } else {
+ } else {
pExynosInputPort->bufferProcessType = BUFFER_SHARE;
}
}
pH264Enc->bSourceStart = OMX_FALSE;
Exynos_OSAL_SignalCreate(&pH264Enc->hSourceStartEvent);
-
pH264Enc->bDestinationStart = OMX_FALSE;
Exynos_OSAL_SignalCreate(&pH264Enc->hDestinationStartEvent);
pExynosComponent->getAllDelayBuffer = OMX_FALSE;
#if 0//defined(USE_CSC_GSCALER)
- csc_method = CSC_METHOD_TRY_HW; //in case of Use ION buffer.
+ csc_method = CSC_METHOD_HW; //in case of Use ION buffer.
#endif
pVideoEnc->csc_handle = csc_init(csc_method);
if (pVideoEnc->csc_handle == NULL) {
pVideoEnc->csc_handle = NULL;
}
-// pInbufOps->Stop(hMFCHandle);
-// pOutbufOps->Stop(hMFCHandle);
-
Exynos_OSAL_SignalTerminate(pH264Enc->hDestinationStartEvent);
pH264Enc->hDestinationStartEvent = NULL;
pH264Enc->bDestinationStart = OMX_FALSE;
}
}
- Exynos_OSAL_QueueTerminate(&pExynosInputPort->codecBufferQ);
+ Exynos_OSAL_QueueTerminate(&pExynosInputPort->codecBufferQ);
Exynos_OSAL_SemaphoreTerminate(pExynosInputPort->codecSemID);
} else if (pExynosInputPort->bufferProcessType == BUFFER_SHARE) {
/*************/
}
if ((pExynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++) {
if (pVideoEnc->pMFCEncOutputBuffer[i] != NULL) {
if (pVideoEnc->pMFCEncOutputBuffer[i]->VirAddr != NULL)
Exynos_OSAL_SharedMemory_Free(pVideoEnc->hSharedMemory, pVideoEnc->pMFCEncOutputBuffer[i]->VirAddr);
pH264Enc->hMFCH264Handle.headerData.pHeaderSPS =
(OMX_PTR)pDstOutputData->buffer.singlePlaneBuffer.dataBuffer;
pH264Enc->hMFCH264Handle.headerData.SPSLen = iSpsSize;
-
+
iPpsSize = pDstOutputData->dataLen - iSpsSize;
pH264Enc->hMFCH264Handle.headerData.pHeaderPPS =
(OMX_U8 *)pDstOutputData->buffer.singlePlaneBuffer.dataBuffer + iSpsSize;
pH264Enc->hMFCH264Handle.headerData.PPSLen = iPpsSize;
-
+
pDstOutputData->timeStamp = 0;
pDstOutputData->nFlags |= OMX_BUFFERFLAG_CODECCONFIG;
pDstOutputData->nFlags |= OMX_BUFFERFLAG_ENDOFFRAME;
goto EXIT;
}
}
-
if ((pH264Enc->bSourceStart == OMX_FALSE) &&
(!CHECK_PORT_BEING_FLUSHED(pExynosInputPort))) {
Exynos_OSAL_SignalWait(pH264Enc->hSourceStartEvent, DEF_MAX_WAIT_TIME);
ret = OMX_ErrorNone;
goto EXIT;
}
-
if (pExynosOutputPort->bufferProcessType == BUFFER_SHARE) {
if ((pH264Enc->bDestinationStart == OMX_FALSE) &&
(!CHECK_PORT_BEING_FLUSHED(pExynosOutputPort))) {
Exynos_OSAL_SignalReset(pH264Enc->hDestinationStartEvent);
}
}
-
if (pH264Enc->hMFCH264Handle.bConfiguredMFCDst == OMX_TRUE) {
ret = Exynos_H264Enc_DstIn(pOMXComponent, pDstInputData);
if (ret != OMX_ErrorNone) {
Exynos_OSAL_SignalReset(pH264Enc->hDestinationStartEvent);
}
}
-
ret = Exynos_H264Enc_DstOut(pOMXComponent, pDstOutputData);
if ((ret != OMX_ErrorNone) && (pExynosComponent->currentState == OMX_StateExecuting)) {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s: %d: Failed - DstOut -> event is thrown to client", __FUNCTION__, __LINE__);
pVideoEnc->exynos_checkInputFrame = NULL;
pVideoEnc->exynos_codec_getCodecInputPrivateData = &GetCodecInputPrivateData;
pVideoEnc->exynos_codec_getCodecOutputPrivateData = &GetCodecOutputPrivateData;
-// pVideoEnc->exynos_codec_getCodecBufferNumber = &GetCodecBufferNumber;
pVideoEnc->hSharedMemory = Exynos_OSAL_SharedMemory_Open();
if (pVideoEnc->hSharedMemory == NULL) {
goto EXIT;
}
- /* MFC Open */
/* alloc ops structure */
pEncOps = (ExynosVideoEncOps *)Exynos_OSAL_Malloc(sizeof(ExynosVideoEncOps));
pInbufOps = (ExynosVideoEncBufferOps *)Exynos_OSAL_Malloc(sizeof(ExynosVideoEncBufferOps));
ExynosVideoEncBufferOps *pInbufOps = NULL;
ExynosVideoEncBufferOps *pOutbufOps = NULL;
+ FunctionIn();
+
if (pMpeg4Enc == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
if ((nPortIndex == INPUT_PORT_INDEX) &&
(pMpeg4Enc->bSourceStart == OMX_TRUE)) {
-#if 0
- while (Exynos_OSAL_GetElemNum(&pExynosInputPort->codecBufferQ) > 0)
- Exynos_CodecBufferDeQueue(pExynosComponent, INPUT_PORT_INDEX, &pDeQ);
-#else
Exynos_CodecBufferReset(pExynosComponent, INPUT_PORT_INDEX);
-#endif
for (i = 0; i < MFC_INPUT_BUFFER_NUM_MAX; i++) {
Exynos_OSAL_Log(EXYNOS_LOG_TRACE, "pVideoEnc->pMFCEncInputBuffer[%d]: 0x%x", i, pVideoEnc->pMFCEncInputBuffer[i]);
(pMpeg4Enc->bDestinationStart == OMX_TRUE)) {
OMX_U32 dataLen[2] = {0, 0};
ExynosVideoBuffer *pBuffer = NULL;
-#if 0
- while (Exynos_OSAL_GetElemNum(&pExynosOutputPort->codecBufferQ) > 0)
- Exynos_CodecBufferDeQueue(pExynosComponent, OUTPUT_PORT_INDEX, &pDeQ);
-#else
- Exynos_CodecBufferReset(pExynosComponent, OUTPUT_PORT_INDEX);
-#endif
+ Exynos_CodecBufferReset(pExynosComponent, OUTPUT_PORT_INDEX);
for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++) {
pOutbufOps->Get_Buffer(hMFCHandle, i, &pBuffer);
{
OMX_S32 codecType;
OMX_PARAM_COMPONENTROLETYPE *pComponentRole = (OMX_PARAM_COMPONENTROLETYPE *)pComponentParameterStructure;
-
ret = Exynos_OMX_Check_SizeVersion(pComponentRole, sizeof(OMX_PARAM_COMPONENTROLETYPE));
if (ret != OMX_ErrorNone) {
goto EXIT;
OMX_S32 codecType;
ret = Exynos_OMX_Check_SizeVersion(pSrcProfileLevel, sizeof(OMX_VIDEO_PARAM_PROFILELEVELTYPE));
- if (ret != OMX_ErrorNone) {
+ if (ret != OMX_ErrorNone)
goto EXIT;
- }
if (pSrcProfileLevel->nPortIndex >= ALL_PORT_NUM) {
ret = OMX_ErrorBadPortIndex;
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
if (pExynosComponent->currentState == OMX_StateInvalid) {
ret = OMX_ErrorInvalidState;
ret = OMX_ErrorBadParameter;
goto EXIT;
}
-
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
if (pExynosComponent->currentState == OMX_StateInvalid) {
ret = OMX_ErrorInvalidState;
if (ret != OMX_ErrorNone) {
goto EXIT;
}
-
if (pOMXComponent->pComponentPrivate == NULL) {
ret = OMX_ErrorBadParameter;
goto EXIT;
}
pExynosComponent = (EXYNOS_OMX_BASECOMPONENT *)pOMXComponent->pComponentPrivate;
-
if ((cParameterName == NULL) || (pIndexType == NULL)) {
ret = OMX_ErrorBadParameter;
goto EXIT;
pExynosComponent->bSaveFlagEOS = OMX_FALSE;
eColorFormat = pExynosInputPort->portDefinition.format.video.eColorFormat;
-
if (pExynosInputPort->bStoreMetaData == OMX_TRUE) {
if (eColorFormat == OMX_COLOR_FormatAndroidOpaque) {
pExynosInputPort->bufferProcessType = BUFFER_COPY;
- } else {
+ } else {
pExynosInputPort->bufferProcessType = BUFFER_SHARE;
}
}
pMpeg4Enc->bSourceStart = OMX_FALSE;
Exynos_OSAL_SignalCreate(&pMpeg4Enc->hSourceStartEvent);
-
pMpeg4Enc->bDestinationStart = OMX_FALSE;
Exynos_OSAL_SignalCreate(&pMpeg4Enc->hDestinationStartEvent);
pExynosComponent->getAllDelayBuffer = OMX_FALSE;
#if 0//defined(USE_CSC_GSCALER)
- csc_method = CSC_METHOD_TRY_HW; //in case of Use ION buffer.
+ csc_method = CSC_METHOD_HW; //in case of Use ION buffer.
#endif
pVideoEnc->csc_handle = csc_init(csc_method);
if (pVideoEnc->csc_handle == NULL) {
pVideoEnc->csc_handle = NULL;
}
-// pInbufOps->Stop(hMFCHandle);
-// pOutbufOps->Stop(hMFCHandle);
-
Exynos_OSAL_SignalTerminate(pMpeg4Enc->hDestinationStartEvent);
pMpeg4Enc->hDestinationStartEvent = NULL;
pMpeg4Enc->bDestinationStart = OMX_FALSE;
/* TBD */
/*************/
/* Does not require any actions. */
-
}
if ((pExynosOutputPort->bufferProcessType & BUFFER_COPY) == BUFFER_COPY) {
- for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++)
- {
+ for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++) {
if (pVideoEnc->pMFCEncOutputBuffer[i] != NULL) {
if (pVideoEnc->pMFCEncOutputBuffer[i]->VirAddr != NULL)
Exynos_OSAL_SharedMemory_Free(pVideoEnc->hSharedMemory, pVideoEnc->pMFCEncOutputBuffer[i]->VirAddr);
/* TBD */
/*************/
/* Does not require any actions. */
-
}
Mpeg4CodecClose(pMpeg4Enc);
goto EXIT;
}
}
-
if ((pMpeg4Enc->bSourceStart == OMX_FALSE) &&
(!CHECK_PORT_BEING_FLUSHED(pExynosInputPort))) {
Exynos_OSAL_SignalWait(pMpeg4Enc->hSourceStartEvent, DEF_MAX_WAIT_TIME);
ret = OMX_ErrorNone;
goto EXIT;
}
-
if (pExynosOutputPort->bufferProcessType == BUFFER_SHARE) {
if ((pMpeg4Enc->bDestinationStart == OMX_FALSE) &&
(!CHECK_PORT_BEING_FLUSHED(pExynosOutputPort))) {
Exynos_OSAL_SignalReset(pMpeg4Enc->hDestinationStartEvent);
}
}
-
if (pMpeg4Enc->hMFCMpeg4Handle.bConfiguredMFCDst == OMX_TRUE) {
ret = Exynos_Mpeg4Enc_DstIn(pOMXComponent, pDstInputData);
if (ret != OMX_ErrorNone) {
Exynos_OSAL_SignalReset(pMpeg4Enc->hDestinationStartEvent);
}
}
-
ret = Exynos_Mpeg4Enc_DstOut(pOMXComponent, pDstOutputData);
if ((ret != OMX_ErrorNone) && (pExynosComponent->currentState == OMX_StateExecuting)) {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s: %d: Failed - DstOut -> event is thrown to client", __FUNCTION__, __LINE__);
return ret;
}
-
-
-
-
-OSCL_EXPORT_REF OMX_ERRORTYPE Exynos_OMX_ComponentInit(
- OMX_HANDLETYPE hComponent,
- OMX_STRING componentName)
+OSCL_EXPORT_REF OMX_ERRORTYPE Exynos_OMX_ComponentInit(OMX_HANDLETYPE hComponent, OMX_STRING componentName)
{
OMX_ERRORTYPE ret = OMX_ErrorNone;
OMX_COMPONENTTYPE *pOMXComponent = NULL;
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "%s: parameters are null, ret: %X", __FUNCTION__, ret);
goto EXIT;
}
-
if (Exynos_OSAL_Strcmp(EXYNOS_OMX_COMPONENT_MPEG4_ENC, componentName) == 0) {
codecType = CODEC_TYPE_MPEG4;
} else if (Exynos_OSAL_Strcmp(EXYNOS_OMX_COMPONENT_H263_ENC, componentName) == 0) {
pVideoEnc->exynos_checkInputFrame = NULL;
pVideoEnc->exynos_codec_getCodecInputPrivateData = &GetCodecInputPrivateData;
pVideoEnc->exynos_codec_getCodecOutputPrivateData = &GetCodecOutputPrivateData;
-// pVideoEnc->exynos_codec_getCodecBufferNumber = &GetCodecBufferNumber;
pVideoEnc->hSharedMemory = Exynos_OSAL_SharedMemory_Open();
if (pVideoEnc->hSharedMemory == NULL) {