[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