]> git.karo-electronics.de Git - linux-beck.git/commitdiff
[media] s5p-mfc: Skip incomplete frame
authorDonghwa Lee <dh09.lee@samsung.com>
Thu, 10 Nov 2016 10:31:22 +0000 (08:31 -0200)
committerMauro Carvalho Chehab <mchehab@s-opensource.com>
Wed, 16 Nov 2016 18:39:35 +0000 (16:39 -0200)
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>
drivers/media/platform/s5p-mfc/regs-mfc.h
drivers/media/platform/s5p-mfc/s5p_mfc.c

index 6ccc3f8c122add705d7338d0656ac744331823fb..57b7e0be0596fecedc5b5a8c6264c6eef51cd107 100644 (file)
 #define S5P_FIMV_REG_CLEAR_COUNT               0
 
 /* Error handling defines */
+#define S5P_FIMV_ERR_NO_VALID_SEQ_HDR          67
+#define S5P_FIMV_ERR_INCOMPLETE_FRAME          124
+#define S5P_FIMV_ERR_TIMEOUT                   140
 #define S5P_FIMV_ERR_WARNINGS_START            145
 #define S5P_FIMV_ERR_DEC_MASK                  0xFFFF
 #define S5P_FIMV_ERR_DEC_SHIFT                 0
index 3436eda5885599f56842315fdd3650a0fc0cc951..9f73ba1cc9c358311bc633505832a50120a623fc 100644 (file)
@@ -641,8 +641,11 @@ static irqreturn_t s5p_mfc_irq(int irq, void *priv)
        case S5P_MFC_R2H_CMD_ERR_RET:
                /* An error has occurred */
                if (ctx->state == MFCINST_RUNNING &&
-                       s5p_mfc_hw_call(dev->mfc_ops, err_dec, err) >=
-                               dev->warn_start)
+                       (s5p_mfc_hw_call(dev->mfc_ops, err_dec, err) >=
+                               dev->warn_start ||
+                               err == S5P_FIMV_ERR_NO_VALID_SEQ_HDR ||
+                               err == S5P_FIMV_ERR_INCOMPLETE_FRAME ||
+                               err == S5P_FIMV_ERR_TIMEOUT))
                        s5p_mfc_handle_frame(ctx, reason, err);
                else
                        s5p_mfc_handle_error(dev, ctx, reason, err);