Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

[media] s5p-mfc: Skip incomplete frame

Currently, when incomplete frame is received in the middle of
decoding, driver treats it as an error, so src/dst queue and
clock are cleaned. Although it is obviously error case, it is
needed to maintain video decoding in case of necessity. This
patch supports skip incomplete frame to next.

Signed-off-by: Donghwa Lee <dh09.lee@samsung.com>
Signed-off-by: Seung-Woo Kim <sw0312.kim@samsung.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
Signed-off-by: Sylwester Nawrocki <s.nawrocki@samsung.com>
Signed-off-by: Mauro Carvalho Chehab <mchehab@s-opensource.com>

authored by

Donghwa Lee and committed by
Mauro Carvalho Chehab
5d1ec731 dd62b8f1

+8 -2
+3
drivers/media/platform/s5p-mfc/regs-mfc.h
··· 393 393 #define S5P_FIMV_REG_CLEAR_COUNT 0 394 394 395 395 /* Error handling defines */ 396 + #define S5P_FIMV_ERR_NO_VALID_SEQ_HDR 67 397 + #define S5P_FIMV_ERR_INCOMPLETE_FRAME 124 398 + #define S5P_FIMV_ERR_TIMEOUT 140 396 399 #define S5P_FIMV_ERR_WARNINGS_START 145 397 400 #define S5P_FIMV_ERR_DEC_MASK 0xFFFF 398 401 #define S5P_FIMV_ERR_DEC_SHIFT 0
+5 -2
drivers/media/platform/s5p-mfc/s5p_mfc.c
··· 641 641 case S5P_MFC_R2H_CMD_ERR_RET: 642 642 /* An error has occurred */ 643 643 if (ctx->state == MFCINST_RUNNING && 644 - s5p_mfc_hw_call(dev->mfc_ops, err_dec, err) >= 645 - dev->warn_start) 644 + (s5p_mfc_hw_call(dev->mfc_ops, err_dec, err) >= 645 + dev->warn_start || 646 + err == S5P_FIMV_ERR_NO_VALID_SEQ_HDR || 647 + err == S5P_FIMV_ERR_INCOMPLETE_FRAME || 648 + err == S5P_FIMV_ERR_TIMEOUT)) 646 649 s5p_mfc_handle_frame(ctx, reason, err); 647 650 else 648 651 s5p_mfc_handle_error(dev, ctx, reason, err);