Based on code from h264_sei.c Signed-off-by: James Almer <jamr...@gmail.com> --- configure | 2 +- libavcodec/libdav1d.c | 49 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-)
diff --git a/configure b/configure index 8569a60bf8..2961118682 100755 --- a/configure +++ b/configure @@ -6295,7 +6295,7 @@ enabled libcelt && require libcelt celt/celt.h celt_decode -lcelt0 && die "ERROR: libcelt must be installed and version must be >= 0.11.0."; } enabled libcaca && require_pkg_config libcaca caca caca.h caca_create_canvas enabled libcodec2 && require libcodec2 codec2/codec2.h codec2_create -lcodec2 -enabled libdav1d && require_pkg_config libdav1d "dav1d >= 0.4.0" "dav1d/dav1d.h" dav1d_version +enabled libdav1d && require_pkg_config libdav1d "dav1d >= 0.5.0" "dav1d/dav1d.h" dav1d_version enabled libdavs2 && require_pkg_config libdavs2 "davs2 >= 1.6.0" davs2.h davs2_decoder_open enabled libdc1394 && require_pkg_config libdc1394 libdc1394-2 dc1394/dc1394.h dc1394_new enabled libdrm && require_pkg_config libdrm libdrm xf86drm.h drmGetVersion diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c index bbb3ec1e6c..e8010655d0 100644 --- a/libavcodec/libdav1d.c +++ b/libavcodec/libdav1d.c @@ -28,6 +28,7 @@ #include "avcodec.h" #include "decode.h" +#include "get_bits.h" #include "internal.h" typedef struct Libdav1dContext { @@ -364,6 +365,54 @@ FF_ENABLE_DEPRECATION_WARNINGS light->MaxCLL = p->content_light->max_content_light_level; light->MaxFALL = p->content_light->max_frame_average_light_level; } + if (p->itut_t35) { + GetBitContext gb; + unsigned int user_identifier; + + res = init_get_bits8(&gb, p->itut_t35->payload, p->itut_t35->payload_size); + if (res < 0) + return res; + + skip_bits(&gb, 8); // terminal provider code + skip_bits(&gb, 8); // terminal provider oriented code + user_identifier = get_bits_long(&gb, 32); + switch (user_identifier) { + case MKBETAG('G', 'A', '9', '4'): // closed captions + if (get_bits(&gb, 8) == 0x3) { // user_data_type_code + int flag; + + skip_bits(&gb, 1); // reserved + flag = get_bits(&gb, 1); // process_cc_data_flag + if (flag) { + int size, cc_count; + + skip_bits(&gb, 1); // zero bit + cc_count = get_bits(&gb, 5); + skip_bits(&gb, 8); // reserved + + size = cc_count * 3; + if (cc_count && (get_bits_left(&gb) >> 3) >= size + 1) { + AVFrameSideData *sd = av_frame_new_side_data(frame, AV_FRAME_DATA_A53_CC, size); + if (!sd) { + res = AVERROR(ENOMEM); + goto fail; + } + + for (int i = 0, j = 0; i < cc_count; i++) { + sd->data[j++] = get_bits(&gb, 8); + sd->data[j++] = get_bits(&gb, 8); + sd->data[j++] = get_bits(&gb, 8); + } + + skip_bits(&gb, 8); // marker_bits + } + } + } + break; + default: // ignore unsupported identifiers + break; + } + } res = 0; fail: -- 2.26.2 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-requ...@ffmpeg.org with subject "unsubscribe".