[FFmpeg-devel] [PATCH 2/4 v2] libavcodec/h2645_sei: export raw LCEVC metadata
James Almer
jamrial at gmail.com
Mon Jul 22 03:14:02 EEST 2024
On 7/21/2024 9:02 PM, Lynne via ffmpeg-devel wrote:
> On 22/07/2024 00:53, James Almer wrote:
>> Signed-off-by: James Almer <jamrial at gmail.com>
>> ---
>> libavcodec/h2645_sei.c | 37 +++++++++++++++++++++++++++++++++++++
>> libavcodec/h2645_sei.h | 5 +++++
>> libavcodec/itut35.h | 2 ++
>> 3 files changed, 44 insertions(+)
>>
>> diff --git a/libavcodec/h2645_sei.c b/libavcodec/h2645_sei.c
>> index 7c83747cd0..61d18e14b3 100644
>> --- a/libavcodec/h2645_sei.c
>> +++ b/libavcodec/h2645_sei.c
>> @@ -99,6 +99,20 @@ static int
>> decode_registered_user_data_dynamic_hdr_vivid(HEVCSEIDynamicHDRVivid
>> }
>> #endif
>> +static int decode_registered_user_data_lcevc(HEVCSEILCEVC *s,
>> + GetByteContext *gb)
>> +{
>> + int size = bytestream2_get_bytes_left(gb);
>> +
>> + av_buffer_unref(&s->info);
>> + s->info = av_buffer_alloc(size);
>> + if (!s->info)
>> + return AVERROR(ENOMEM);
>> +
>> + bytestream2_get_bufferu(gb, s->info->data, size);
>> + return 0;
>> +}
>> +
>> static int decode_registered_user_data_afd(H2645SEIAFD *h,
>> GetByteContext *gb)
>> {
>> int flag;
>> @@ -142,6 +156,7 @@ static int decode_registered_user_data(H2645SEI
>> *h, GetByteContext *gb,
>> }
>> if (country_code != ITU_T_T35_COUNTRY_CODE_US &&
>> + country_code != ITU_T_T35_COUNTRY_CODE_UK &&
>> country_code != ITU_T_T35_COUNTRY_CODE_CN) {
>
> Unrelated change?
The samples i have use this code.
>
>> av_log(logctx, AV_LOG_VERBOSE,
>> "Unsupported User Data Registered ITU-T T35 SEI
>> message (country_code = %d)\n",
>> @@ -173,6 +188,13 @@ static int decode_registered_user_data(H2645SEI
>> *h, GetByteContext *gb,
>> }
>> break;
>> }
>> + case ITU_T_T35_PROVIDER_CODE_LCEVC: {
>> + if (bytestream2_get_bytes_left(gb) < 2)
>> + return AVERROR_INVALIDDATA;
>> +
>> + bytestream2_skipu(gb, 1); // user_data_type_code
>> + return decode_registered_user_data_lcevc(&h->lcevc, gb);
>> + }
>> #if CONFIG_HEVC_SEI
>> case ITU_T_T35_PROVIDER_CODE_CUVA: {
>> const uint16_t cuva_provider_oriented_code = 0x0005;
>> @@ -501,6 +523,11 @@ int ff_h2645_sei_ctx_replace(H2645SEI *dst, const
>> H2645SEI *src)
>> av_buffer_unref(&dst->unregistered.buf_ref[i]);
>> dst->unregistered.nb_buf_ref = 0;
>> + ret = av_buffer_replace(&dst->lcevc.info,
>> + src->lcevc.info);
>> + if (ret < 0)
>> + return ret;
>> +
>> if (src->unregistered.nb_buf_ref) {
>> ret = av_reallocp_array(&dst->unregistered.buf_ref,
>> src->unregistered.nb_buf_ref,
>> @@ -666,6 +693,15 @@ static int h2645_sei_to_side_data(AVCodecContext
>> *avctx, H2645SEI *sei,
>> }
>> }
>> + if (sei->lcevc.info) {
>> + HEVCSEILCEVC *lcevc = &sei->lcevc;
>> + AVFrameSideData *entry = av_frame_side_data_add(sd, nb_sd,
>> AV_FRAME_DATA_LCEVC,
>> + &lcevc->info,
>> 0);
>> + if (!entry)
>> + av_buffer_unref(&lcevc->info);
>> + lcevc->info = NULL;
>> + }
>> +
>> return 0;
>> }
>> @@ -875,6 +911,7 @@ void ff_h2645_sei_reset(H2645SEI *s)
>> av_freep(&s->unregistered.buf_ref);
>> av_buffer_unref(&s->dynamic_hdr_plus.info);
>> av_buffer_unref(&s->dynamic_hdr_vivid.info);
>> + av_buffer_unref(&s->lcevc.info);
>> s->ambient_viewing_environment.present = 0;
>> s->mastering_display.present = 0;
>> diff --git a/libavcodec/h2645_sei.h b/libavcodec/h2645_sei.h
>> index 488dbcad7e..598f78b585 100644
>> --- a/libavcodec/h2645_sei.h
>> +++ b/libavcodec/h2645_sei.h
>> @@ -50,6 +50,10 @@ typedef struct HEVCSEIDynamicHDRVivid {
>> AVBufferRef *info;
>> } HEVCSEIDynamicHDRVivid;
>> +typedef struct HEVCSEILCEVC {
>> + AVBufferRef *info;
>> +} HEVCSEILCEVC;
>> +
>> typedef struct H2645SEIUnregistered {
>> AVBufferRef **buf_ref;
>> unsigned nb_buf_ref;
>> @@ -126,6 +130,7 @@ typedef struct H2645SEI {
>> H2645SEIAFD afd;
>> HEVCSEIDynamicHDRPlus dynamic_hdr_plus; //< HEVC only
>> HEVCSEIDynamicHDRVivid dynamic_hdr_vivid; //< HEVC only
>> + HEVCSEILCEVC lcevc;
>> H2645SEIUnregistered unregistered;
>> H2645SEIFramePacking frame_packing;
>> H2645SEIDisplayOrientation display_orientation;
>> diff --git a/libavcodec/itut35.h b/libavcodec/itut35.h
>> index ffa7024981..a75ef37929 100644
>> --- a/libavcodec/itut35.h
>> +++ b/libavcodec/itut35.h
>> @@ -20,11 +20,13 @@
>> #define AVCODEC_ITUT35_H
>> #define ITU_T_T35_COUNTRY_CODE_CN 0x26
>> +#define ITU_T_T35_COUNTRY_CODE_UK 0xB4
>> #define ITU_T_T35_COUNTRY_CODE_US 0xB5
>> #define ITU_T_T35_PROVIDER_CODE_ATSC 0x31
>> #define ITU_T_T35_PROVIDER_CODE_CUVA 0x04
>> #define ITU_T_T35_PROVIDER_CODE_DOLBY 0x3B
>> +#define ITU_T_T35_PROVIDER_CODE_LCEVC 0x50
>> #define ITU_T_T35_PROVIDER_CODE_SMTPE 0x3C
>> #endif /* AVCODEC_ITUT35_H */
>
> _______________________________________________
> ffmpeg-devel mailing list
> ffmpeg-devel at ffmpeg.org
> https://ffmpeg.org/mailman/listinfo/ffmpeg-devel
>
> To unsubscribe, visit link above, or email
> ffmpeg-devel-request at ffmpeg.org with subject "unsubscribe".
More information about the ffmpeg-devel
mailing list