On 12/11/2024 1:23 AM, Zhao Zhili wrote:
From: Zhao Zhili <zhiliz...@tencent.com>--- libavcodec/hevc/sei.c | 30 ++++++++++++++++++++++++++++++ libavcodec/hevc/sei.h | 14 ++++++++++++++ 2 files changed, 44 insertions(+) diff --git a/libavcodec/hevc/sei.c b/libavcodec/hevc/sei.c index e11a33773c..56983fe96e 100644 --- a/libavcodec/hevc/sei.c +++ b/libavcodec/hevc/sei.c @@ -150,6 +150,34 @@ static int decode_nal_sei_timecode(HEVCSEITimeCode *s, GetBitContext *gb) return 0; }+static int decode_nal_sei_alpha_info(HEVCSEIAlphaChannelInfo *s, GetBitContext *gb)+{ + int length; + + s->has_alpha_channel_info = true; + + s->alpha_channel_cancel_flag = get_bits1(gb); + if (!s->alpha_channel_cancel_flag) {
This should trigger when alpha_channel_cancel_flag is 1.
+ s->alpha_channel_use_idc = 2; + s->alpha_channel_incr_flag = 0; + s->alpha_channel_clip_flag = 0; + + return 0; + } + + s->alpha_channel_use_idc = get_bits(gb, 3); + s->alpha_channel_bit_depth_minus8 = get_bits(gb, 3); + length = s->alpha_channel_bit_depth_minus8 + 9; + s->alpha_transparent_value = get_bits(gb, length); + s->alpha_opaque_value = get_bits(gb, length); + s->alpha_channel_incr_flag = get_bits1(gb); + s->alpha_channel_clip_flag = get_bits1(gb); + if (s->alpha_channel_clip_flag) + s->alpha_channel_clip_type_flag = get_bits1(gb); + + return 0; +} + static int decode_nal_sei_3d_reference_displays_info(HEVCSEITDRDI *s, GetBitContext *gb) { s->prec_ref_display_width = get_ue_golomb(gb); @@ -216,6 +244,8 @@ static int decode_nal_sei_prefix(GetBitContext *gb, GetByteContext *gbyte, return decode_nal_sei_active_parameter_sets(s, gb, logctx); case SEI_TYPE_TIME_CODE: return decode_nal_sei_timecode(&s->timecode, gb); + case SEI_TYPE_ALPHA_CHANNEL_INFO: + return decode_nal_sei_alpha_info(&s->alpha, gb); case SEI_TYPE_THREE_DIMENSIONAL_REFERENCE_DISPLAYS_INFO: return decode_nal_sei_3d_reference_displays_info(&s->tdrdi, gb); default: { diff --git a/libavcodec/hevc/sei.h b/libavcodec/hevc/sei.h index ee640003bc..54122c27df 100644 --- a/libavcodec/hevc/sei.h +++ b/libavcodec/hevc/sei.h @@ -21,6 +21,7 @@ #ifndef AVCODEC_HEVC_SEI_H #define AVCODEC_HEVC_SEI_H+#include <stdbool.h>
Are we using bool anywhere else? Afaik, we just use uint8_t everywhere since it's going to be a whole byte anyway.
#include <stdint.h>#include "libavutil/buffer.h"@@ -95,6 +96,18 @@ typedef struct HEVCSEITDRDI { uint8_t three_dimensional_reference_displays_extension_flag; } HEVCSEITDRDI;+typedef struct HEVCSEIAlphaChannelInfo {+ bool has_alpha_channel_info; + uint8_t alpha_channel_cancel_flag; + uint8_t alpha_channel_use_idc; + uint8_t alpha_channel_bit_depth_minus8; + uint16_t alpha_transparent_value; + uint16_t alpha_opaque_value; + uint8_t alpha_channel_incr_flag; + uint8_t alpha_channel_clip_flag; + uint8_t alpha_channel_clip_type_flag; +} HEVCSEIAlphaChannelInfo; + typedef struct HEVCSEI { H2645SEI common; HEVCSEIPictureHash picture_hash; @@ -102,6 +115,7 @@ typedef struct HEVCSEI { int active_seq_parameter_set_id; HEVCSEITimeCode timecode; HEVCSEITDRDI tdrdi; + HEVCSEIAlphaChannelInfo alpha; } HEVCSEI;struct HEVCParamSets;
OpenPGP_signature.asc
Description: OpenPGP digital signature
_______________________________________________ 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".