This is an automated email from the git hooks/post-receive script.

Git pushed a commit to branch master
in repository ffmpeg.

commit e40dd45f0dd74aaab526fadc08078c85d573ba8f
Author:     James Almer <[email protected]>
AuthorDate: Fri May 29 12:13:25 2026 -0300
Commit:     James Almer <[email protected]>
CommitDate: Tue Jun 2 19:50:39 2026 -0300

    avcodec/libdav1d: use the ITU-T T35 parsing helpers
    
    Signed-off-by: James Almer <[email protected]>
---
 configure             |   2 +-
 libavcodec/libdav1d.c | 133 ++++----------------------------------------------
 2 files changed, 10 insertions(+), 125 deletions(-)

diff --git a/configure b/configure
index fa170f6056..4ac57f299a 100755
--- a/configure
+++ b/configure
@@ -3829,7 +3829,7 @@ libaribcaption_decoder_deps="libaribcaption"
 libcodec2_decoder_deps="libcodec2"
 libcodec2_encoder_deps="libcodec2"
 libdav1d_decoder_deps="libdav1d"
-libdav1d_decoder_select="atsc_a53 dovi_rpudec"
+libdav1d_decoder_select="itut_t35"
 libdavs2_decoder_deps="libdavs2"
 libdavs2_decoder_select="avs2_parser"
 libfdk_aac_decoder_deps="libfdk_aac"
diff --git a/libavcodec/libdav1d.c b/libavcodec/libdav1d.c
index 2eaeefc71a..77b4c5521b 100644
--- a/libavcodec/libdav1d.c
+++ b/libavcodec/libdav1d.c
@@ -364,134 +364,19 @@ static int 
libdav1d_receive_frame_internal(AVCodecContext *c, Dav1dPicture *p)
 static int parse_itut_t35_metadata(Libdav1dContext *dav1d, Dav1dPicture *p,
                                    const Dav1dITUTT35 *itut_t35, 
AVCodecContext *c,
                                    AVFrame *frame) {
-    GetByteContext gb;
-    int provider_code, country_code;
+    FFITUTT35 itut35 = { .country_code = itut_t35->country_code };
+    FFITUTT35Aux aux = { .dovi = &dav1d->dovi };
     int res;
 
-    bytestream2_init(&gb, itut_t35->payload, itut_t35->payload_size);
-
-    country_code = itut_t35->country_code;
-    switch (country_code) {
-    case ITU_T_T35_COUNTRY_CODE_US:
-        if (bytestream2_get_bytes_left(&gb) < 2)
-            return AVERROR_INVALIDDATA;
-        provider_code = bytestream2_get_be16u(&gb);
-
-        switch (provider_code) {
-        case ITU_T_T35_PROVIDER_CODE_ATSC: {
-            uint32_t user_identifier = bytestream2_get_be32(&gb);
-            switch (user_identifier) {
-            case MKBETAG('G', 'A', '9', '4'): { // closed captions
-                AVBufferRef *buf = NULL;
-
-                res = ff_parse_a53_cc(&buf, gb.buffer, 
bytestream2_get_bytes_left(&gb));
-                if (res < 0)
-                    return res;
-                if (!res)
-                    return 0;  // no cc found, ignore
-
-                res = ff_frame_new_side_data_from_buf(c, frame, 
AV_FRAME_DATA_A53_CC, &buf);
-                if (res < 0)
-                    return res;
-
-#if FF_API_CODEC_PROPS
-FF_DISABLE_DEPRECATION_WARNINGS
-                c->properties |= FF_CODEC_PROPERTY_CLOSED_CAPTIONS;
-FF_ENABLE_DEPRECATION_WARNINGS
-#endif
-                break;
-            }
-            default: // ignore unsupported identifiers
-                break;
-            }
-            break;
-        }
-        case ITU_T_T35_PROVIDER_CODE_SAMSUNG: {
-            AVDynamicHDRPlus *hdrplus;
-            int provider_oriented_code = bytestream2_get_be16(&gb);
-            int application_identifier = bytestream2_get_byte(&gb);
-
-            if (provider_oriented_code != 1 || application_identifier != 4)
-                return 0; // ignore
-
-            hdrplus = av_dynamic_hdr_plus_create_side_data(frame);
-            if (!hdrplus)
-                return AVERROR(ENOMEM);
-
-            res = av_dynamic_hdr_plus_from_t35(hdrplus, gb.buffer,
-                                                
bytestream2_get_bytes_left(&gb));
-            if (res < 0)
-                return res;
-            break;
-        }
-        case ITU_T_T35_PROVIDER_CODE_DOLBY: {
-            int provider_oriented_code = bytestream2_get_be32(&gb);
-            if (provider_oriented_code != 0x800)
-                return 0; // ignore
-
-            res = ff_dovi_rpu_parse(&dav1d->dovi, gb.buffer, 
bytestream2_get_bytes_left(&gb),
-                                    c->err_recognition);
-            if (res < 0) {
-                av_log(c, AV_LOG_WARNING, "Error parsing DOVI OBU.\n");
-                return 0; // ignore
-            }
-
-            res = ff_dovi_attach_side_data(&dav1d->dovi, frame);
-            if (res < 0)
-                return res;
-            break;
-        }
-        case ITU_T_T35_PROVIDER_CODE_SMPTE: {
-            AVDynamicHDRSmpte2094App5 *hdr_smpte2094_app5;
-            int provider_oriented_code = bytestream2_get_be16(&gb);
-            if (provider_oriented_code != 1)
-                return 0; // ignore
-
-            hdr_smpte2094_app5 = 
av_dynamic_hdr_smpte2094_app5_create_side_data(frame);
-            if (!hdr_smpte2094_app5)
-                return AVERROR(ENOMEM);
-
-            res = av_dynamic_hdr_smpte2094_app5_from_t35(hdr_smpte2094_app5, 
gb.buffer,
-                                                         
bytestream2_get_bytes_left(&gb));
-            if (res < 0)
-                return res;
-            break;
-        }
-        default:
-            break;
-        }
-        break;
-    case ITU_T_T35_COUNTRY_CODE_UK:
-        bytestream2_skipu(&gb, 1); // t35_uk_country_code_second_octet
-        if (bytestream2_get_bytes_left(&gb) < 2)
-            return AVERROR_INVALIDDATA;
-
-        provider_code = bytestream2_get_be16u(&gb);
-        switch (provider_code) {
-        case ITU_T_T35_PROVIDER_CODE_VNOVA: {
-            AVFrameSideData *sd;
-            if (bytestream2_get_bytes_left(&gb) < 2)
-                return AVERROR_INVALIDDATA;
-
-            res = ff_frame_new_side_data(c, frame, AV_FRAME_DATA_LCEVC,
-                                         bytestream2_get_bytes_left(&gb), &sd);
-            if (res < 0)
-                return res;
-            if (!sd)
-                break;
+    res = ff_itut_t35_parse_buffer(&itut35, itut_t35->payload, 
itut_t35->payload_size,
+                                   FF_ITUT_T35_FLAG_COUNTRY_CODE);
+    if (res <= 0)
+        return res;
 
-            bytestream2_get_bufferu(&gb, sd->data, sd->size);
-            break;
-        }
-        default:
-            break;
-        }
-        break;
+    res = ff_itut_t35_parse_payload_to_frame(&itut35, &aux, c, frame);
+    if (res < 0)
+        return res;
 
-    default:
-        // ignore unsupported provider codes
-        break;
-    }
     return 0;
 }
 

_______________________________________________
ffmpeg-cvslog mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to