[FFmpeg-devel] [PATCH 2/4 v2] libavcodec/h2645_sei: export raw LCEVC metadata
Lynne
dev at lynne.ee
Mon Jul 22 03:02:09 EEST 2024
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?
> 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 */
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_0xA2FEA5F03F034464.asc
Type: application/pgp-keys
Size: 624 bytes
Desc: OpenPGP public key
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20240722/9a8d1618/attachment.key>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: OpenPGP_signature.asc
Type: application/pgp-signature
Size: 236 bytes
Desc: OpenPGP digital signature
URL: <https://ffmpeg.org/pipermail/ffmpeg-devel/attachments/20240722/9a8d1618/attachment.sig>
More information about the ffmpeg-devel
mailing list