xref: /rockchip-linux_mpp/mpp/codec/enc/h265/h265e_header_gen.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
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