From: lance.lmwang@gmail.com To: ffmpeg-devel@ffmpeg.org Cc: Limin Wang <lance.lmwang@gmail.com> Subject: [FFmpeg-devel] [PATCH v3 2/5] avcodec: add support for hevc ambient viewing environment SEI message Date: Tue, 5 Apr 2022 21:47:04 +0800 Message-ID: <1649166427-9667-2-git-send-email-lance.lmwang@gmail.com> (raw) In-Reply-To: <1649166427-9667-1-git-send-email-lance.lmwang@gmail.com> From: Limin Wang <lance.lmwang@gmail.com> Signed-off-by: Limin Wang <lance.lmwang@gmail.com> --- libavcodec/hevc_sei.c | 19 +++++++++++++++++++ libavcodec/hevc_sei.h | 8 ++++++++ libavcodec/hevcdec.c | 10 ++++++++++ tests/ref/fate/hevc-dv-rpu | 6 ++++++ 4 files changed, 43 insertions(+) diff --git a/libavcodec/hevc_sei.c b/libavcodec/hevc_sei.c index ec3036f..8c6daf5 100644 --- a/libavcodec/hevc_sei.c +++ b/libavcodec/hevc_sei.c @@ -497,6 +497,23 @@ static int decode_film_grain_characteristics(HEVCSEIFilmGrainCharacteristics *h, return 0; } +static int decode_ambient_viewing_env(HEVCSEIAmbientViewingEnvironment *s, GetBitContext *gb, int size) +{ + if (size < 8) + return AVERROR_INVALIDDATA; + + s->ambient_illuminance = get_bits_long(gb, 32); + s->ambient_light_x = get_bits(gb, 16); + s->ambient_light_y = get_bits(gb, 16); + size -= 8; + + s->present = 1; + + skip_bits_long(gb, 8 * size); + return 0; +} + + static int decode_nal_sei_prefix(GetBitContext *gb, void *logctx, HEVCSEI *s, const HEVCParamSets *ps, int type, int size) { @@ -525,6 +542,8 @@ static int decode_nal_sei_prefix(GetBitContext *gb, void *logctx, HEVCSEI *s, return decode_nal_sei_timecode(&s->timecode, gb); case SEI_TYPE_FILM_GRAIN_CHARACTERISTICS: return decode_film_grain_characteristics(&s->film_grain_characteristics, gb); + case SEI_TYPE_AMBIENT_VIEWING_ENVIRONMENT: + return decode_ambient_viewing_env(&s->ambient_viewing_env, gb, size); default: av_log(logctx, AV_LOG_DEBUG, "Skipped PREFIX SEI %d\n", type); skip_bits_long(gb, 8 * size); diff --git a/libavcodec/hevc_sei.h b/libavcodec/hevc_sei.h index f198402..c7623f5 100644 --- a/libavcodec/hevc_sei.h +++ b/libavcodec/hevc_sei.h @@ -134,6 +134,13 @@ typedef struct HEVCSEIFilmGrainCharacteristics { int persistence_flag; } HEVCSEIFilmGrainCharacteristics; +typedef struct HEVCSEIAmbientViewingEnvironment { + int present; + uint32_t ambient_illuminance; + uint16_t ambient_light_x; + uint16_t ambient_light_y; +} HEVCSEIAmbientViewingEnvironment; + typedef struct HEVCSEI { HEVCSEIPictureHash picture_hash; HEVCSEIFramePacking frame_packing; @@ -149,6 +156,7 @@ typedef struct HEVCSEI { HEVCSEIAlternativeTransfer alternative_transfer; HEVCSEITimeCode timecode; HEVCSEIFilmGrainCharacteristics film_grain_characteristics; + HEVCSEIAmbientViewingEnvironment ambient_viewing_env; } HEVCSEI; struct HEVCParamSets; diff --git a/libavcodec/hevcdec.c b/libavcodec/hevcdec.c index 09c07ac..21ed579 100644 --- a/libavcodec/hevcdec.c +++ b/libavcodec/hevcdec.c @@ -2998,6 +2998,15 @@ static int set_side_data(HEVCContext *s) } } + if (s->sei.ambient_viewing_env.present > 0) { + AVAmbientViewingEnv *metadata = av_ambient_viewing_env_create_side_data(out); + if (!metadata) + return AVERROR(ENOMEM); + metadata->ambient_illuminance = s->sei.ambient_viewing_env.ambient_illuminance; + metadata->ambient_light_x = s->sei.ambient_viewing_env.ambient_light_x; + metadata->ambient_light_y = s->sei.ambient_viewing_env.ambient_light_y; + } + return 0; } @@ -3800,6 +3809,7 @@ static int hevc_update_thread_context(AVCodecContext *dst, s->sei.mastering_display = s0->sei.mastering_display; s->sei.content_light = s0->sei.content_light; s->sei.alternative_transfer = s0->sei.alternative_transfer; + s->sei.ambient_viewing_env = s0->sei.ambient_viewing_env; ret = export_stream_params_from_sei(s); if (ret < 0) diff --git a/tests/ref/fate/hevc-dv-rpu b/tests/ref/fate/hevc-dv-rpu index 1980ab1..6879f71 100644 --- a/tests/ref/fate/hevc-dv-rpu +++ b/tests/ref/fate/hevc-dv-rpu @@ -117,6 +117,9 @@ source_min_pq=0 source_max_pq=3079 source_diagonal=42 [/SIDE_DATA] +[SIDE_DATA] +side_data_type=Ambient Viewing Environment +[/SIDE_DATA] [/FRAME] [FRAME] [SIDE_DATA] @@ -234,4 +237,7 @@ source_min_pq=0 source_max_pq=3079 source_diagonal=42 [/SIDE_DATA] +[SIDE_DATA] +side_data_type=Ambient Viewing Environment +[/SIDE_DATA] [/FRAME] -- 1.8.3.1 _______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org https://ffmpeg.org/mailman/listinfo/ffmpeg-devel To unsubscribe, visit link above, or email ffmpeg-devel-request@ffmpeg.org with subject "unsubscribe".
next prev parent reply other threads:[~2022-04-05 13:47 UTC|newest] Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top 2022-03-27 23:25 [FFmpeg-devel] [PATCH 1/4] avutil: add ambient viewing environment metadata side data lance.lmwang 2022-03-27 23:25 ` [FFmpeg-devel] [PATCH 2/4] avcodec: add support for hevc ambient viewing environment SEI message lance.lmwang 2022-03-27 23:25 ` [FFmpeg-devel] [PATCH 3/4] avfilter/vf_showinfo: add support for ambient viewing environment metadata lance.lmwang 2022-03-27 23:25 ` [FFmpeg-devel] [PATCH 4/4] fftools/ffprobe: " lance.lmwang 2022-03-27 23:30 ` [FFmpeg-devel] [PATCH 1/4] avutil: add ambient viewing environment metadata side data James Almer 2022-03-28 1:28 ` lance.lmwang 2022-03-28 12:41 ` [FFmpeg-devel] [PATCH v2 " lance.lmwang 2022-03-28 12:41 ` [FFmpeg-devel] [PATCH v2 2/4] avcodec: add support for hevc ambient viewing environment SEI message lance.lmwang 2022-03-28 14:30 ` Michael Niedermayer 2022-03-28 23:09 ` lance.lmwang 2022-03-28 12:41 ` [FFmpeg-devel] [PATCH v2 3/4] avfilter/vf_showinfo: add support for ambient viewing environment metadata lance.lmwang 2022-03-28 12:41 ` [FFmpeg-devel] [PATCH v2 4/4] fftools/ffprobe: " lance.lmwang 2022-04-05 6:40 ` [FFmpeg-devel] [PATCH v2 1/4] avutil: add ambient viewing environment metadata side data lance.lmwang 2022-04-05 9:13 ` Anton Khirnov 2022-04-05 9:24 ` lance.lmwang 2022-04-05 13:47 ` [FFmpeg-devel] [PATCH v3 1/5] " lance.lmwang 2022-04-05 13:47 ` lance.lmwang [this message] 2022-04-05 13:47 ` [FFmpeg-devel] [PATCH v3 3/5] avfilter/vf_showinfo: add support for ambient viewing environment metadata lance.lmwang 2022-04-05 13:47 ` [FFmpeg-devel] [PATCH v3 4/5] fftools/ffprobe: " lance.lmwang 2022-04-05 13:47 ` [FFmpeg-devel] [PATCH v3 5/5] avfilter/vf_showinfo: fix unknown side data type for DOVI_RPU_BUFFER lance.lmwang 2022-04-05 15:32 ` [FFmpeg-devel] [PATCH v3 1/5] avutil: add ambient viewing environment metadata side data Andreas Rheinhardt 2022-04-05 19:00 ` Lynne 2022-04-05 19:13 ` Anton Khirnov 2022-04-05 19:42 ` Andreas Rheinhardt 2022-04-05 23:11 ` lance.lmwang
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1649166427-9667-2-git-send-email-lance.lmwang@gmail.com \ --to=lance.lmwang@gmail.com \ --cc=ffmpeg-devel@ffmpeg.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
Git Inbox Mirror of the ffmpeg-devel mailing list - see https://ffmpeg.org/mailman/listinfo/ffmpeg-devel This inbox may be cloned and mirrored by anyone: git clone --mirror https://master.gitmailbox.com/ffmpegdev/0 ffmpegdev/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 ffmpegdev ffmpegdev/ https://master.gitmailbox.com/ffmpegdev \ ffmpegdev@gitmailbox.com public-inbox-index ffmpegdev Example config snippet for mirrors. AGPL code for this site: git clone https://public-inbox.org/public-inbox.git