1cabdff1aSopenharmony_ci/* 2cabdff1aSopenharmony_ci * HEVC Supplementary Enhancement Information messages 3cabdff1aSopenharmony_ci * 4cabdff1aSopenharmony_ci * This file is part of FFmpeg. 5cabdff1aSopenharmony_ci * 6cabdff1aSopenharmony_ci * FFmpeg is free software; you can redistribute it and/or 7cabdff1aSopenharmony_ci * modify it under the terms of the GNU Lesser General Public 8cabdff1aSopenharmony_ci * License as published by the Free Software Foundation; either 9cabdff1aSopenharmony_ci * version 2.1 of the License, or (at your option) any later version. 10cabdff1aSopenharmony_ci * 11cabdff1aSopenharmony_ci * FFmpeg is distributed in the hope that it will be useful, 12cabdff1aSopenharmony_ci * but WITHOUT ANY WARRANTY; without even the implied warranty of 13cabdff1aSopenharmony_ci * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU 14cabdff1aSopenharmony_ci * Lesser General Public License for more details. 15cabdff1aSopenharmony_ci * 16cabdff1aSopenharmony_ci * You should have received a copy of the GNU Lesser General Public 17cabdff1aSopenharmony_ci * License along with FFmpeg; if not, write to the Free Software 18cabdff1aSopenharmony_ci * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA 19cabdff1aSopenharmony_ci */ 20cabdff1aSopenharmony_ci 21cabdff1aSopenharmony_ci#ifndef AVCODEC_HEVC_SEI_H 22cabdff1aSopenharmony_ci#define AVCODEC_HEVC_SEI_H 23cabdff1aSopenharmony_ci 24cabdff1aSopenharmony_ci#include <stdint.h> 25cabdff1aSopenharmony_ci 26cabdff1aSopenharmony_ci#include "libavutil/buffer.h" 27cabdff1aSopenharmony_ci 28cabdff1aSopenharmony_ci#include "get_bits.h" 29cabdff1aSopenharmony_ci#include "hevc.h" 30cabdff1aSopenharmony_ci#include "sei.h" 31cabdff1aSopenharmony_ci 32cabdff1aSopenharmony_ci 33cabdff1aSopenharmony_citypedef enum { 34cabdff1aSopenharmony_ci HEVC_SEI_PIC_STRUCT_FRAME_DOUBLING = 7, 35cabdff1aSopenharmony_ci HEVC_SEI_PIC_STRUCT_FRAME_TRIPLING = 8 36cabdff1aSopenharmony_ci} HEVC_SEI_PicStructType; 37cabdff1aSopenharmony_ci 38cabdff1aSopenharmony_citypedef struct HEVCSEIPictureHash { 39cabdff1aSopenharmony_ci uint8_t md5[3][16]; 40cabdff1aSopenharmony_ci uint8_t is_md5; 41cabdff1aSopenharmony_ci} HEVCSEIPictureHash; 42cabdff1aSopenharmony_ci 43cabdff1aSopenharmony_citypedef struct HEVCSEIFramePacking { 44cabdff1aSopenharmony_ci int present; 45cabdff1aSopenharmony_ci int arrangement_type; 46cabdff1aSopenharmony_ci int content_interpretation_type; 47cabdff1aSopenharmony_ci int quincunx_subsampling; 48cabdff1aSopenharmony_ci int current_frame_is_frame0_flag; 49cabdff1aSopenharmony_ci} HEVCSEIFramePacking; 50cabdff1aSopenharmony_ci 51cabdff1aSopenharmony_citypedef struct HEVCSEIDisplayOrientation { 52cabdff1aSopenharmony_ci int present; 53cabdff1aSopenharmony_ci int anticlockwise_rotation; 54cabdff1aSopenharmony_ci int hflip, vflip; 55cabdff1aSopenharmony_ci} HEVCSEIDisplayOrientation; 56cabdff1aSopenharmony_ci 57cabdff1aSopenharmony_citypedef struct HEVCSEIPictureTiming { 58cabdff1aSopenharmony_ci int picture_struct; 59cabdff1aSopenharmony_ci} HEVCSEIPictureTiming; 60cabdff1aSopenharmony_ci 61cabdff1aSopenharmony_citypedef struct HEVCSEIA53Caption { 62cabdff1aSopenharmony_ci AVBufferRef *buf_ref; 63cabdff1aSopenharmony_ci} HEVCSEIA53Caption; 64cabdff1aSopenharmony_ci 65cabdff1aSopenharmony_citypedef struct HEVCSEIUnregistered { 66cabdff1aSopenharmony_ci AVBufferRef **buf_ref; 67cabdff1aSopenharmony_ci int nb_buf_ref; 68cabdff1aSopenharmony_ci} HEVCSEIUnregistered; 69cabdff1aSopenharmony_ci 70cabdff1aSopenharmony_citypedef struct HEVCSEIMasteringDisplay { 71cabdff1aSopenharmony_ci int present; 72cabdff1aSopenharmony_ci uint16_t display_primaries[3][2]; 73cabdff1aSopenharmony_ci uint16_t white_point[2]; 74cabdff1aSopenharmony_ci uint32_t max_luminance; 75cabdff1aSopenharmony_ci uint32_t min_luminance; 76cabdff1aSopenharmony_ci} HEVCSEIMasteringDisplay; 77cabdff1aSopenharmony_ci 78cabdff1aSopenharmony_citypedef struct HEVCSEIDynamicHDRPlus { 79cabdff1aSopenharmony_ci AVBufferRef *info; 80cabdff1aSopenharmony_ci} HEVCSEIDynamicHDRPlus; 81cabdff1aSopenharmony_ci 82cabdff1aSopenharmony_citypedef struct HEVCSEIDynamicHDRVivid { 83cabdff1aSopenharmony_ci AVBufferRef *info; 84cabdff1aSopenharmony_ci} HEVCSEIDynamicHDRVivid; 85cabdff1aSopenharmony_ci 86cabdff1aSopenharmony_citypedef struct HEVCSEIContentLight { 87cabdff1aSopenharmony_ci int present; 88cabdff1aSopenharmony_ci uint16_t max_content_light_level; 89cabdff1aSopenharmony_ci uint16_t max_pic_average_light_level; 90cabdff1aSopenharmony_ci} HEVCSEIContentLight; 91cabdff1aSopenharmony_ci 92cabdff1aSopenharmony_citypedef struct HEVCSEIAlternativeTransfer { 93cabdff1aSopenharmony_ci int present; 94cabdff1aSopenharmony_ci int preferred_transfer_characteristics; 95cabdff1aSopenharmony_ci} HEVCSEIAlternativeTransfer; 96cabdff1aSopenharmony_ci 97cabdff1aSopenharmony_citypedef struct HEVCSEITimeCode { 98cabdff1aSopenharmony_ci int present; 99cabdff1aSopenharmony_ci uint8_t num_clock_ts; 100cabdff1aSopenharmony_ci uint8_t clock_timestamp_flag[3]; 101cabdff1aSopenharmony_ci uint8_t units_field_based_flag[3]; 102cabdff1aSopenharmony_ci uint8_t counting_type[3]; 103cabdff1aSopenharmony_ci uint8_t full_timestamp_flag[3]; 104cabdff1aSopenharmony_ci uint8_t discontinuity_flag[3]; 105cabdff1aSopenharmony_ci uint8_t cnt_dropped_flag[3]; 106cabdff1aSopenharmony_ci uint16_t n_frames[3]; 107cabdff1aSopenharmony_ci uint8_t seconds_value[3]; 108cabdff1aSopenharmony_ci uint8_t minutes_value[3]; 109cabdff1aSopenharmony_ci uint8_t hours_value[3]; 110cabdff1aSopenharmony_ci uint8_t seconds_flag[3]; 111cabdff1aSopenharmony_ci uint8_t minutes_flag[3]; 112cabdff1aSopenharmony_ci uint8_t hours_flag[3]; 113cabdff1aSopenharmony_ci uint8_t time_offset_length[3]; 114cabdff1aSopenharmony_ci int32_t time_offset_value[3]; 115cabdff1aSopenharmony_ci} HEVCSEITimeCode; 116cabdff1aSopenharmony_ci 117cabdff1aSopenharmony_citypedef struct HEVCSEIFilmGrainCharacteristics { 118cabdff1aSopenharmony_ci int present; 119cabdff1aSopenharmony_ci int model_id; 120cabdff1aSopenharmony_ci int separate_colour_description_present_flag; 121cabdff1aSopenharmony_ci int bit_depth_luma; 122cabdff1aSopenharmony_ci int bit_depth_chroma; 123cabdff1aSopenharmony_ci int full_range; 124cabdff1aSopenharmony_ci int color_primaries; 125cabdff1aSopenharmony_ci int transfer_characteristics; 126cabdff1aSopenharmony_ci int matrix_coeffs; 127cabdff1aSopenharmony_ci int blending_mode_id; 128cabdff1aSopenharmony_ci int log2_scale_factor; 129cabdff1aSopenharmony_ci int comp_model_present_flag[3]; 130cabdff1aSopenharmony_ci uint16_t num_intensity_intervals[3]; 131cabdff1aSopenharmony_ci uint8_t num_model_values[3]; 132cabdff1aSopenharmony_ci uint8_t intensity_interval_lower_bound[3][256]; 133cabdff1aSopenharmony_ci uint8_t intensity_interval_upper_bound[3][256]; 134cabdff1aSopenharmony_ci int16_t comp_model_value[3][256][6]; 135cabdff1aSopenharmony_ci int persistence_flag; 136cabdff1aSopenharmony_ci} HEVCSEIFilmGrainCharacteristics; 137cabdff1aSopenharmony_ci 138cabdff1aSopenharmony_citypedef struct HEVCSEI { 139cabdff1aSopenharmony_ci HEVCSEIPictureHash picture_hash; 140cabdff1aSopenharmony_ci HEVCSEIFramePacking frame_packing; 141cabdff1aSopenharmony_ci HEVCSEIDisplayOrientation display_orientation; 142cabdff1aSopenharmony_ci HEVCSEIPictureTiming picture_timing; 143cabdff1aSopenharmony_ci HEVCSEIA53Caption a53_caption; 144cabdff1aSopenharmony_ci HEVCSEIUnregistered unregistered; 145cabdff1aSopenharmony_ci HEVCSEIMasteringDisplay mastering_display; 146cabdff1aSopenharmony_ci HEVCSEIDynamicHDRPlus dynamic_hdr_plus; 147cabdff1aSopenharmony_ci HEVCSEIDynamicHDRVivid dynamic_hdr_vivid; 148cabdff1aSopenharmony_ci HEVCSEIContentLight content_light; 149cabdff1aSopenharmony_ci int active_seq_parameter_set_id; 150cabdff1aSopenharmony_ci HEVCSEIAlternativeTransfer alternative_transfer; 151cabdff1aSopenharmony_ci HEVCSEITimeCode timecode; 152cabdff1aSopenharmony_ci HEVCSEIFilmGrainCharacteristics film_grain_characteristics; 153cabdff1aSopenharmony_ci} HEVCSEI; 154cabdff1aSopenharmony_ci 155cabdff1aSopenharmony_cistruct HEVCParamSets; 156cabdff1aSopenharmony_ci 157cabdff1aSopenharmony_ciint ff_hevc_decode_nal_sei(GetBitContext *gb, void *logctx, HEVCSEI *s, 158cabdff1aSopenharmony_ci const struct HEVCParamSets *ps, enum HEVCNALUnitType type); 159cabdff1aSopenharmony_ci 160cabdff1aSopenharmony_ci/** 161cabdff1aSopenharmony_ci * Reset SEI values that are stored on the Context. 162cabdff1aSopenharmony_ci * e.g. Caption data that was extracted during NAL 163cabdff1aSopenharmony_ci * parsing. 164cabdff1aSopenharmony_ci * 165cabdff1aSopenharmony_ci * @param s HEVCContext. 166cabdff1aSopenharmony_ci */ 167cabdff1aSopenharmony_civoid ff_hevc_reset_sei(HEVCSEI *s); 168cabdff1aSopenharmony_ci 169cabdff1aSopenharmony_ci#endif /* AVCODEC_HEVC_SEI_H */ 170