mirror of https://git.ffmpeg.org/ffmpeg.git
avcodec/mpeg12dec: parse A53 caption data embedded in SCTE-20 user data
Signed-off-by: Michael Niedermayer <michael@niedermayer.cc>
This commit is contained in:
parent
f399172d6e
commit
3f1a540204
|
@ -2240,6 +2240,45 @@ static int mpeg_decode_a53_cc(AVCodecContext *avctx,
|
||||||
avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
|
avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
|
||||||
}
|
}
|
||||||
return 1;
|
return 1;
|
||||||
|
} else if (buf_size >= 2 &&
|
||||||
|
p[0] == 0x03 && (p[1]&0x7f) == 0x01) {
|
||||||
|
/* extract SCTE-20 CC data */
|
||||||
|
GetBitContext gb;
|
||||||
|
int cc_count = 0;
|
||||||
|
int i;
|
||||||
|
|
||||||
|
init_get_bits(&gb, p + 2, buf_size - 2);
|
||||||
|
cc_count = get_bits(&gb, 5);
|
||||||
|
if (cc_count > 0) {
|
||||||
|
av_freep(&s1->a53_caption);
|
||||||
|
s1->a53_caption_size = cc_count * 3;
|
||||||
|
s1->a53_caption = av_mallocz(s1->a53_caption_size);
|
||||||
|
if (s1->a53_caption) {
|
||||||
|
uint8_t field, cc1, cc2;
|
||||||
|
uint8_t *cap = s1->a53_caption;
|
||||||
|
for (i = 0; i < cc_count && get_bits_left(&gb) >= 26; i++) {
|
||||||
|
skip_bits(&gb, 2); // priority
|
||||||
|
field = get_bits(&gb, 2);
|
||||||
|
skip_bits(&gb, 5); // line_offset
|
||||||
|
cc1 = get_bits(&gb, 8);
|
||||||
|
cc2 = get_bits(&gb, 8);
|
||||||
|
skip_bits(&gb, 1); // marker
|
||||||
|
|
||||||
|
if (!field) { // forbidden
|
||||||
|
cap[0] = cap[1] = cap[2] = 0x00;
|
||||||
|
} else {
|
||||||
|
field = (field == 2 ? 1 : 0);
|
||||||
|
if (!s1->mpeg_enc_ctx.top_field_first) field = !field;
|
||||||
|
cap[0] = 0x04 | field;
|
||||||
|
cap[1] = ff_reverse[cc1];
|
||||||
|
cap[2] = ff_reverse[cc2];
|
||||||
|
}
|
||||||
|
cap += 3;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
avctx->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
} else if (buf_size >= 11 &&
|
} else if (buf_size >= 11 &&
|
||||||
p[0] == 'C' && p[1] == 'C' && p[2] == 0x01 && p[3] == 0xf8) {
|
p[0] == 'C' && p[1] == 'C' && p[2] == 0x01 && p[3] == 0xf8) {
|
||||||
/* extract DVD CC data
|
/* extract DVD CC data
|
||||||
|
|
|
@ -7,6 +7,9 @@ fate-sub-cc: CMD = fmtstdout ass -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/Closed
|
||||||
FATE_SUBTITLES_ASS-$(call ALLYES, AVDEVICE LAVFI_INDEV CCAPTION_DECODER MOVIE_FILTER MPEGTS_DEMUXER) += fate-sub-cc-realtime
|
FATE_SUBTITLES_ASS-$(call ALLYES, AVDEVICE LAVFI_INDEV CCAPTION_DECODER MOVIE_FILTER MPEGTS_DEMUXER) += fate-sub-cc-realtime
|
||||||
fate-sub-cc-realtime: CMD = fmtstdout ass -real_time 1 -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/Closedcaption_rollup.m2v[out0+subcc]"
|
fate-sub-cc-realtime: CMD = fmtstdout ass -real_time 1 -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/Closedcaption_rollup.m2v[out0+subcc]"
|
||||||
|
|
||||||
|
FATE_SUBTITLES_ASS-$(call ALLYES, AVDEVICE LAVFI_INDEV CCAPTION_DECODER MOVIE_FILTER MPEGTS_DEMUXER) += fate-sub-cc-scte20
|
||||||
|
fate-sub-cc-scte20: CMD = fmtstdout ass -f lavfi -i "movie=$(TARGET_SAMPLES)/sub/scte20.ts[out0+subcc]"
|
||||||
|
|
||||||
FATE_SUBTITLES_ASS-$(call DEMDEC, ASS, ASS) += fate-sub-ass-to-ass-transcode
|
FATE_SUBTITLES_ASS-$(call DEMDEC, ASS, ASS) += fate-sub-ass-to-ass-transcode
|
||||||
fate-sub-ass-to-ass-transcode: CMD = fmtstdout ass -i $(TARGET_SAMPLES)/sub/1ededcbd7b.ass
|
fate-sub-ass-to-ass-transcode: CMD = fmtstdout ass -i $(TARGET_SAMPLES)/sub/1ededcbd7b.ass
|
||||||
|
|
||||||
|
|
|
@ -0,0 +1,15 @@
|
||||||
|
[Script Info]
|
||||||
|
; Script generated by FFmpeg/Lavc
|
||||||
|
ScriptType: v4.00+
|
||||||
|
PlayResX: 384
|
||||||
|
PlayResY: 288
|
||||||
|
|
||||||
|
[V4+ Styles]
|
||||||
|
Format: Name, Fontname, Fontsize, PrimaryColour, SecondaryColour, OutlineColour, BackColour, Bold, Italic, Underline, StrikeOut, ScaleX, ScaleY, Spacing, Angle, BorderStyle, Outline, Shadow, Alignment, MarginL, MarginR, MarginV, Encoding
|
||||||
|
Style: Default,Monospace,16,&Hffffff,&Hffffff,&H0,&H0,0,0,0,0,100,100,0,0,3,1,0,2,10,10,10,0
|
||||||
|
|
||||||
|
[Events]
|
||||||
|
Format: Layer, Start, End, Style, Name, MarginL, MarginR, MarginV, Effect, Text
|
||||||
|
Dialogue: 0,0:00:00.00,0:00:01.44,Default,,0,0,0,,{\an7}{\pos(48,182)}BESIDES THE
|
||||||
|
Dialogue: 0,0:00:01.43,0:00:03.93,Default,,0,0,0,,{\an7}{\pos(38,166)}\hBESIDES THE \N{\an7}{\pos(38,197)}SPENDING AND THIS, IS THAT CAR
|
||||||
|
Dialogue: 0,0:00:03.94,0:00:06.31,Default,,0,0,0,,{\an7}{\pos(38,182)}SPENDING AND THIS, IS THAT CAR \N{\an7}{\pos(38,197)}MANUFACTURERS ARE ABOUT AS
|
Loading…
Reference in New Issue