1*437bfbebSnyanmisaka /* 2*437bfbebSnyanmisaka * Copyright 2015 Rockchip Electronics Co. LTD 3*437bfbebSnyanmisaka * 4*437bfbebSnyanmisaka * Licensed under the Apache License, Version 2.0 (the "License"); 5*437bfbebSnyanmisaka * you may not use this file except in compliance with the License. 6*437bfbebSnyanmisaka * You may obtain a copy of the License at 7*437bfbebSnyanmisaka * 8*437bfbebSnyanmisaka * http://www.apache.org/licenses/LICENSE-2.0 9*437bfbebSnyanmisaka * 10*437bfbebSnyanmisaka * Unless required by applicable law or agreed to in writing, software 11*437bfbebSnyanmisaka * distributed under the License is distributed on an "AS IS" BASIS, 12*437bfbebSnyanmisaka * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*437bfbebSnyanmisaka * See the License for the specific language governing permissions and 14*437bfbebSnyanmisaka * limitations under the License. 15*437bfbebSnyanmisaka */ 16*437bfbebSnyanmisaka 17*437bfbebSnyanmisaka #ifndef __H265E_HEADER_GEN_H__ 18*437bfbebSnyanmisaka #define __H265E_HEADER_GEN_H__ 19*437bfbebSnyanmisaka 20*437bfbebSnyanmisaka #include "h265e_stream.h" 21*437bfbebSnyanmisaka #define H265E_UUID_LENGTH 16 22*437bfbebSnyanmisaka 23*437bfbebSnyanmisaka typedef enum H265eNalIdx_t { 24*437bfbebSnyanmisaka H265E_NAL_IDX_VPS, 25*437bfbebSnyanmisaka H265E_NAL_IDX_SPS, 26*437bfbebSnyanmisaka H265E_NAL_IDX_PPS, 27*437bfbebSnyanmisaka H265E_NAL_IDX_SEI, 28*437bfbebSnyanmisaka H265E_NAL_IDX_BUTT, 29*437bfbebSnyanmisaka } H265eNalIdx; 30*437bfbebSnyanmisaka 31*437bfbebSnyanmisaka typedef enum H265SeiType_e { 32*437bfbebSnyanmisaka H265_SEI_BUFFERING_PERIOD = 0, 33*437bfbebSnyanmisaka H265_SEI_PICTURE_TIMING = 1, 34*437bfbebSnyanmisaka H265_SEI_PAN_SCAN_RECT = 2, 35*437bfbebSnyanmisaka H265_SEI_FILLER_PAYLOAD = 3, 36*437bfbebSnyanmisaka H265_SEI_USER_DATA_REGISTERED_ITU_T_T35 = 4, 37*437bfbebSnyanmisaka H265_SEI_USER_DATA_UNREGISTERED = 5, 38*437bfbebSnyanmisaka H265_SEI_RECOVERY_POINT = 6, 39*437bfbebSnyanmisaka H265_SEI_SCENE_INFO = 9, 40*437bfbebSnyanmisaka H265_SEI_FULL_FRAME_SNAPSHOT = 15, 41*437bfbebSnyanmisaka H265_SEI_PROGRESSIVE_REFINEMENT_SEGMENT_START = 16, 42*437bfbebSnyanmisaka H265_SEI_PROGRESSIVE_REFINEMENT_SEGMENT_END = 17, 43*437bfbebSnyanmisaka H265_SEI_FILM_GRAIN_CHARACTERISTICS = 19, 44*437bfbebSnyanmisaka H265_SEI_POST_FILTER_HINT = 22, 45*437bfbebSnyanmisaka H265_SEI_TONE_MAPPING_INFO = 23, 46*437bfbebSnyanmisaka H265_SEI_FRAME_PACKING = 45, 47*437bfbebSnyanmisaka H265_SEI_DISPLAY_ORIENTATION = 47, 48*437bfbebSnyanmisaka H265_SEI_SOP_DESCRIPTION = 128, 49*437bfbebSnyanmisaka H265_SEI_ACTIVE_PARAMETER_SETS = 129, 50*437bfbebSnyanmisaka H265_SEI_DECODING_UNIT_INFO = 130, 51*437bfbebSnyanmisaka H265_SEI_TEMPORAL_LEVEL0_INDEX = 131, 52*437bfbebSnyanmisaka H265_SEI_DECODED_PICTURE_HASH = 132, 53*437bfbebSnyanmisaka H265_SEI_SCALABLE_NESTING = 133, 54*437bfbebSnyanmisaka H265_SEI_REGION_REFRESH_INFO = 134, 55*437bfbebSnyanmisaka H265_SEI_MAX_ELEMENTS = 255, //!< number of maximum syntax elements 56*437bfbebSnyanmisaka } H265SeiType; 57*437bfbebSnyanmisaka 58*437bfbebSnyanmisaka typedef struct H265eNal_t { 59*437bfbebSnyanmisaka RK_S32 i_ref_idc; /* nal_priority_e */ 60*437bfbebSnyanmisaka RK_S32 i_type; /* nal_unit_type_e */ 61*437bfbebSnyanmisaka RK_S32 b_long_startcode; 62*437bfbebSnyanmisaka RK_S32 i_first_mb; /* If this NAL is a slice, the index of the first MB in the slice. */ 63*437bfbebSnyanmisaka RK_S32 i_last_mb; /* If this NAL is a slice, the index of the last MB in the slice. */ 64*437bfbebSnyanmisaka 65*437bfbebSnyanmisaka /* Size of payload (including any padding) in bytes. */ 66*437bfbebSnyanmisaka RK_S32 i_payload; 67*437bfbebSnyanmisaka /* If param->b_annexb is set, Annex-B bytestream with startcode. 68*437bfbebSnyanmisaka * Otherwise, startcode is replaced with a 4-byte size. 69*437bfbebSnyanmisaka * This size is the size used in mp4/similar muxing; it is equal to i_payload-4 */ 70*437bfbebSnyanmisaka RK_U8 *p_payload; 71*437bfbebSnyanmisaka 72*437bfbebSnyanmisaka /* Size of padding in bytes. */ 73*437bfbebSnyanmisaka RK_S32 i_padding; 74*437bfbebSnyanmisaka RK_S32 sh_head_len; 75*437bfbebSnyanmisaka RK_S32 temporal_id; 76*437bfbebSnyanmisaka } H265eNal; 77*437bfbebSnyanmisaka 78*437bfbebSnyanmisaka typedef struct H265eExtraInfo_t { 79*437bfbebSnyanmisaka RK_S32 nal_num; 80*437bfbebSnyanmisaka H265eNal nal[H265E_NAL_IDX_BUTT]; 81*437bfbebSnyanmisaka RK_U8 *nal_buf; 82*437bfbebSnyanmisaka RK_U8 *sei_buf; 83*437bfbebSnyanmisaka RK_U32 sei_change_flg; 84*437bfbebSnyanmisaka H265eStream stream; 85*437bfbebSnyanmisaka // H265eSei sei; 86*437bfbebSnyanmisaka RK_S32 temporal_id; 87*437bfbebSnyanmisaka } H265eExtraInfo; 88*437bfbebSnyanmisaka 89*437bfbebSnyanmisaka #ifdef __cplusplus 90*437bfbebSnyanmisaka extern "C" { 91*437bfbebSnyanmisaka #endif 92*437bfbebSnyanmisaka 93*437bfbebSnyanmisaka MPP_RET h265e_init_extra_info(void *extra_info); 94*437bfbebSnyanmisaka MPP_RET h265e_deinit_extra_info(void *extra_info); 95*437bfbebSnyanmisaka void h265e_rkv_nal_start(H265eExtraInfo *out, RK_S32 i_type, 96*437bfbebSnyanmisaka RK_S32 i_ref_idc); 97*437bfbebSnyanmisaka 98*437bfbebSnyanmisaka void h265e_nal_end(H265eExtraInfo *out); 99*437bfbebSnyanmisaka 100*437bfbebSnyanmisaka RK_U32 h265e_data_to_sei(void *dst, RK_U8 uuid[16], const void *payload, RK_S32 size); 101*437bfbebSnyanmisaka MPP_RET h265e_sei_recovery_point(void *dst, RK_U8 uuid[16], const void *payload, 102*437bfbebSnyanmisaka RK_S32 size); 103*437bfbebSnyanmisaka 104*437bfbebSnyanmisaka MPP_RET h265e_set_extra_info(H265eCtx *ctx); 105*437bfbebSnyanmisaka MPP_RET h265e_get_extra_info(H265eCtx *ctx, MppPacket pkt_out); 106*437bfbebSnyanmisaka 107*437bfbebSnyanmisaka #ifdef __cplusplus 108*437bfbebSnyanmisaka } 109*437bfbebSnyanmisaka #endif 110*437bfbebSnyanmisaka 111*437bfbebSnyanmisaka #endif /*__H265E_HEADER_GEN_H__ */ 112