static void *MFC_Decoder_Init(int nMemoryType)
{
ExynosVideoDecContext *pCtx = NULL;
- pthread_mutex_t *pMutex = NULL;
/* int needCaps = (V4L2_CAP_VIDEO_CAPTURE | V4L2_CAP_VIDEO_OUTPUT | V4L2_CAP_STREAMING);*/
int needCaps = (V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_VIDEO_OUTPUT_MPLANE | V4L2_CAP_VIDEO_M2M_MPLANE |V4L2_CAP_STREAMING);
/* XU3 fix for capabilities */
pCtx->nMemoryType = nMemoryType;
- pMutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
- if (pMutex == NULL) {
+ pCtx->pInMutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
+ if (pCtx->pInMutex == NULL) {
ALOGE("%s: Failed to allocate mutex about input buffer", __func__);
goto EXIT_QUERYCAP_FAIL;
}
- if (pthread_mutex_init(pMutex, NULL) != 0) {
- free(pMutex);
+ if (pthread_mutex_init(pCtx->pInMutex, NULL) != 0) {
goto EXIT_QUERYCAP_FAIL;
}
- pCtx->pInMutex = (void*)pMutex;
- pMutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
- if (pMutex == NULL) {
+ pCtx->pOutMutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
+ if (pCtx->pOutMutex == NULL) {
ALOGE("%s: Failed to allocate mutex about output buffer", __func__);
goto EXIT_QUERYCAP_FAIL;
}
- if (pthread_mutex_init(pMutex, NULL) != 0) {
- free(pMutex);
+ if (pthread_mutex_init(pCtx->pOutMutex, NULL) != 0) {
goto EXIT_QUERYCAP_FAIL;
}
- pCtx->pOutMutex = (void*)pMutex;
return (void *)pCtx;
static void *MFC_Encoder_Init(int nMemoryType)
{
ExynosVideoEncContext *pCtx = NULL;
- pthread_mutex_t *pMutex = NULL;
int needCaps = (V4L2_CAP_VIDEO_CAPTURE_MPLANE | V4L2_CAP_VIDEO_OUTPUT_MPLANE | V4L2_CAP_STREAMING);
/* XU3 fix for capabilities */
pCtx->nMemoryType = nMemoryType;
- pMutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
- if (pMutex == NULL) {
+ pCtx->pInMutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
+ if (pCtx->pInMutex == NULL) {
ALOGE("%s: Failed to allocate mutex about input buffer", __func__);
goto EXIT_QUERYCAP_FAIL;
}
- if (pthread_mutex_init(pMutex, NULL) != 0) {
- free(pMutex);
+ if (pthread_mutex_init(pCtx->pInMutex, NULL) != 0) {
goto EXIT_QUERYCAP_FAIL;
}
- pCtx->pInMutex = (void*)pMutex;
- pMutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
- if (pMutex == NULL) {
+ pCtx->pOutMutex = (pthread_mutex_t *)malloc(sizeof(pthread_mutex_t));
+ if (pCtx->pOutMutex == NULL) {
ALOGE("%s: Failed to allocate mutex about output buffer", __func__);
goto EXIT_QUERYCAP_FAIL;
}
- if (pthread_mutex_init(pMutex, NULL) != 0) {
- free(pMutex);
+ if (pthread_mutex_init(pCtx->pOutMutex, NULL) != 0) {
goto EXIT_QUERYCAP_FAIL;
}
- pCtx->pOutMutex = (void*)pMutex;
return (void *)pCtx;
pVideoEnc->pMFCEncOutputBuffer[i] = (CODEC_ENC_BUFFER *)Exynos_OSAL_Malloc(sizeof(CODEC_ENC_BUFFER));
+ if (!pVideoEnc->pMFCEncOutputBuffer[i]) {
+ ret = OMX_ErrorInsufficientResources;
+ goto ALLOC_FAILED;
+ }
+
if (pOutbufOps->Get_Buffer) {
if (pOutbufOps->Get_Buffer(pH264Enc->hMFCH264Handle.hMFCHandle, i, &pBuffer) != VIDEO_ERROR_NONE) {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Failed to get Output buffer info");
EXIT:
FunctionOut();
+ return ret;
+
+ALLOC_FAILED:
+ for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++) {
+ if (pVideoEnc->pMFCEncOutputBuffer[i])
+ Exynos_OSAL_Free(pVideoEnc->pMFCEncOutputBuffer[i]);
+ }
+ Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Failed to allocate buffers");
+ FunctionOut();
+
return ret;
}
pVideoEnc->pMFCEncOutputBuffer[i] = (CODEC_ENC_BUFFER *)Exynos_OSAL_Malloc(sizeof(CODEC_ENC_BUFFER));
+ if (!pVideoEnc->pMFCEncOutputBuffer[i]) {
+ ret = OMX_ErrorInsufficientResources;
+ goto ALLOC_FAILED;
+ }
+
if (pOutbufOps->Get_Buffer) {
if (pOutbufOps->Get_Buffer(pMpeg4Enc->hMFCMpeg4Handle.hMFCHandle, i, &pBuffer) != VIDEO_ERROR_NONE) {
Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Failed to get Output buffer info");
FunctionOut();
return ret;
+
+ALLOC_FAILED:
+ for (i = 0; i < MFC_OUTPUT_BUFFER_NUM_MAX; i++) {
+ if (pVideoEnc->pMFCEncOutputBuffer[i])
+ Exynos_OSAL_Free(pVideoEnc->pMFCEncOutputBuffer[i]);
+ }
+ Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "Failed to allocate buffers");
+
+ FunctionOut();
+ return ret;
}
OMX_ERRORTYPE Exynos_Mpeg4Enc_GetParameter(