OSDN Git Service

[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 6ccc3f8..57b7e0b 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 3436eda..9f73ba1 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);