From e2f7ac211d72d81364376847373ed79947062f7b Mon Sep 17 00:00:00 2001 From: Ricardo Cerqueira Date: Mon, 6 Jan 2014 18:21:01 +0000 Subject: [PATCH] mfcdec: Compensate race condition in video thumbnail generation Calling the decoder immediately after encoding a video often trips on the ongoing mfc buffer flushes from the encoder that has just shut down, and fails due to the unavailability of any buffer of sufficient size. If MFC_DEC_INIT fails, give it 100msec and try again. This resolves the blank thumbs when switching to the gallery in the same session that a recording was made. Change-Id: I13b1be8757b314e1c903a0570f9b053550164616 --- .../codecs/video/exynos4/mfc/dec/src/SsbSipMfcDecAPI.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/exynos/multimedia/codecs/video/exynos4/mfc/dec/src/SsbSipMfcDecAPI.c b/exynos/multimedia/codecs/video/exynos4/mfc/dec/src/SsbSipMfcDecAPI.c index 8f954395..03073b86 100644 --- a/exynos/multimedia/codecs/video/exynos4/mfc/dec/src/SsbSipMfcDecAPI.c +++ b/exynos/multimedia/codecs/video/exynos4/mfc/dec/src/SsbSipMfcDecAPI.c @@ -243,6 +243,7 @@ SSBSIP_MFC_ERROR_CODE SsbSipMfcDecInit (void *openHandle, SSBSIP_MFC_CODEC_TYPE int packedPB = 0; struct mfc_common_args DecArg; _MFCLIB *pCTX; + int retries = 3; if (openHandle == NULL) { ALOGE("SsbSipMfcDecInit] openHandle is NULL"); @@ -298,8 +299,14 @@ SSBSIP_MFC_ERROR_CODE SsbSipMfcDecInit (void *openHandle, SSBSIP_MFC_CODEC_TYPE /* sequence start args */ /* no needs */ +retry: r = ioctl(pCTX->hMFC, IOCTL_MFC_DEC_INIT, &DecArg); if (DecArg.ret_code != MFC_OK) { + if (retries) { + retries--; + usleep(100000); + goto retry; + } ALOGE("SsbSipMfcDecInit] IOCTL_MFC_DEC_INIT failed"); return MFC_RET_DEC_INIT_FAIL; }