openmax: Dequeue API changes for I/O error handling
authorSeungBeom Kim <sbcrux.kim@samsung.com>
Wed, 6 Mar 2013 00:31:30 +0000 (09:31 +0900)
committerSeungBeom Kim <sbcrux.kim@samsung.com>
Wed, 6 Mar 2013 00:31:30 +0000 (09:31 +0900)
Change output buffer dequeue I/O error handling in decode component.

Change-Id: If35efe23b781072fb540310952bfa57965529b68
Signed-off-by: Jinsung Yang <jsgood.yang@samsung.com>
Signed-off-by: SeungBeom Kim <sbcrux.kim@samsung.com>
component/video/dec/h264/Exynos_OMX_H264dec.c
component/video/dec/mpeg2/Exynos_OMX_Mpeg2dec.c
component/video/dec/mpeg4/Exynos_OMX_Mpeg4dec.c
component/video/dec/vc1/Exynos_OMX_Wmvdec.c
component/video/dec/vp8/Exynos_OMX_Vp8dec.c

index 4d7e1f3f975e9574bb9c14f2b9a8e45b6733d1dc..4afc1dec1e48b022edd07d744d2b79a9c2723d9c 100644 (file)
@@ -2004,7 +2004,14 @@ OMX_ERRORTYPE Exynos_H264Dec_DstOut(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX
     }
 
     while (1) {
-        if ((pVideoBuffer = pOutbufOps->Dequeue(hMFCHandle)) == NULL) {
+        pVideoBuffer = pOutbufOps->Dequeue(hMFCHandle);
+        if (pVideoBuffer == (ExynosVideoBuffer *)VIDEO_ERROR_DQBUF_EIO) {
+            Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "HW is not available");
+            ret = OMX_ErrorHardware;
+            goto EXIT;
+        }
+
+        if (pVideoBuffer == NULL) {
             ret = OMX_ErrorNone;
             goto EXIT;
         }
index 32747ac12a9655e09096fcb05607edcd7768342c..8e5141c232641a7dd85219f934d30afdb4df9b20 100644 (file)
@@ -1617,7 +1617,14 @@ OMX_ERRORTYPE Exynos_Mpeg2Dec_DstOut(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OM
     }
 
     while (1) {
-        if ((pVideoBuffer = pOutbufOps->Dequeue(hMFCHandle)) == NULL) {
+        pVideoBuffer = pOutbufOps->Dequeue(hMFCHandle);
+        if (pVideoBuffer == (ExynosVideoBuffer *)VIDEO_ERROR_DQBUF_EIO) {
+            Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "HW is not available");
+            ret = OMX_ErrorHardware;
+            goto EXIT;
+        }
+
+        if (pVideoBuffer == NULL) {
             ret = OMX_ErrorNone;
             goto EXIT;
         }
index ce2c21731e93e769ee6e14c4a8efb85fb89d6f71..6b3b3fa956fdf22aa99d381c5de0c0c99083523a 100644 (file)
@@ -1970,7 +1970,14 @@ OMX_ERRORTYPE Exynos_Mpeg4Dec_DstOut(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OM
     }
 
     while (1) {
-        if ((pVideoBuffer = pOutbufOps->Dequeue(hMFCHandle)) == NULL) {
+        pVideoBuffer = pOutbufOps->Dequeue(hMFCHandle);
+        if (pVideoBuffer == (ExynosVideoBuffer *)VIDEO_ERROR_DQBUF_EIO) {
+            Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "HW is not available");
+            ret = OMX_ErrorHardware;
+            goto EXIT;
+        }
+
+        if (pVideoBuffer == NULL) {
             ret = OMX_ErrorNone;
             goto EXIT;
         }
index de10d892ebfd70244e10b6e7bde7818bcd6d0100..d7e7d543e8a7a97c8a2650fa092b24a47ba3787d 100644 (file)
@@ -1850,7 +1850,14 @@ OMX_ERRORTYPE Exynos_WmvDec_DstOut(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_
     }
 
     while (1) {
-        if ((pVideoBuffer = pOutbufOps->Dequeue(hMFCHandle)) == NULL) {
+        pVideoBuffer = pOutbufOps->Dequeue(hMFCHandle);
+        if (pVideoBuffer == (ExynosVideoBuffer *)VIDEO_ERROR_DQBUF_EIO) {
+            Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "HW is not available");
+            ret = OMX_ErrorHardware;
+            goto EXIT;
+        }
+
+        if (pVideoBuffer == NULL) {
             ret = OMX_ErrorNone;
             goto EXIT;
         }
index c8329f918dd996d02a2e098f87891f2f95fd18bb..5e5d1b9c6e6af9c7fb7706f3264bbf1fc0453dea 100644 (file)
@@ -1561,7 +1561,14 @@ OMX_ERRORTYPE Exynos_VP8Dec_DstOut(OMX_COMPONENTTYPE *pOMXComponent, EXYNOS_OMX_
     }
 
     while (1) {
-        if ((pVideoBuffer = pOutbufOps->Dequeue(hMFCHandle)) == NULL) {
+        pVideoBuffer = pOutbufOps->Dequeue(hMFCHandle);
+        if (pVideoBuffer == (ExynosVideoBuffer *)VIDEO_ERROR_DQBUF_EIO) {
+            Exynos_OSAL_Log(EXYNOS_LOG_ERROR, "HW is not available");
+            ret = OMX_ErrorHardware;
+            goto EXIT;
+        }
+
+        if (pVideoBuffer == NULL) {
             ret = OMX_ErrorNone;
             goto EXIT;
         }