[FFmpeg-devel] [PATCH] avcodec/mpeg12dec: ignore scte20 captions when a53 data is also present

Aman Gupta ffmpeg at tmm1.net
Wed Mar 7 00:25:12 EET 2018


From: Aman Gupta <aman at tmm1.net>

Some streams include both a53 and scte20 data. Before this commit,
the scte20 data would be used instead of the a53 data.

See https://s3.amazonaws.com/tmm1/ccaptions/scte20plusa53.ts,
which produced garbage captions since 3f1a540204a8c187f77b3805d.
---
 libavcodec/mpeg12dec.c | 5 ++++-
 1 file changed, 4 insertions(+), 1 deletion(-)

diff --git a/libavcodec/mpeg12dec.c b/libavcodec/mpeg12dec.c
index 9e076e89da..45d0a9d737 100644
--- a/libavcodec/mpeg12dec.c
+++ b/libavcodec/mpeg12dec.c
@@ -59,6 +59,7 @@ typedef struct Mpeg1Context {
     int has_stereo3d;
     uint8_t *a53_caption;
     int a53_caption_size;
+    int ignore_scte20;
     uint8_t afd;
     int has_afd;
     int slice_count;
@@ -2241,6 +2242,7 @@ static int mpeg_decode_a53_cc(AVCodecContext *avctx,
         /* extract A53 Part 4 CC data */
         int cc_count = p[5] & 0x1f;
         if (cc_count > 0 && buf_size >= 7 + cc_count * 3) {
+            s1->ignore_scte20 = 1;
             av_freep(&s1->a53_caption);
             s1->a53_caption_size = cc_count * 3;
             s1->a53_caption      = av_malloc(s1->a53_caption_size);
@@ -2253,7 +2255,8 @@ static int mpeg_decode_a53_cc(AVCodecContext *avctx,
         }
         return 1;
     } else if (buf_size >= 2 &&
-               p[0] == 0x03 && (p[1]&0x7f) == 0x01) {
+               p[0] == 0x03 && (p[1]&0x7f) == 0x01 &&
+               !s1->ignore_scte20) {
         /* extract SCTE-20 CC data */
         GetBitContext gb;
         int cc_count = 0;
-- 
2.14.2



More information about the ffmpeg-devel mailing list