xref: /rockchip-linux_mpp/mpp/codec/enc/h264/h264e_sps.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 __H264E_SPS_H__
18*437bfbebSnyanmisaka #define __H264E_SPS_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "mpp_packet.h"
21*437bfbebSnyanmisaka #include "mpp_enc_cfg.h"
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka #include "h264_syntax.h"
24*437bfbebSnyanmisaka 
25*437bfbebSnyanmisaka typedef struct H264eVui_t {
26*437bfbebSnyanmisaka     RK_U32      vui_en;
27*437bfbebSnyanmisaka 
28*437bfbebSnyanmisaka     RK_S32      aspect_ratio_info_present;
29*437bfbebSnyanmisaka     RK_S32      aspect_ratio_idc;
30*437bfbebSnyanmisaka     RK_S32      sar_width;
31*437bfbebSnyanmisaka     RK_S32      sar_height;
32*437bfbebSnyanmisaka 
33*437bfbebSnyanmisaka     RK_S32      overscan_info_present;
34*437bfbebSnyanmisaka     RK_S32      overscan_appropriate_flag;
35*437bfbebSnyanmisaka 
36*437bfbebSnyanmisaka     RK_S32      signal_type_present;
37*437bfbebSnyanmisaka     RK_S32      vidformat;
38*437bfbebSnyanmisaka     RK_S32      fullrange;
39*437bfbebSnyanmisaka     RK_S32      color_description_present;
40*437bfbebSnyanmisaka     RK_S32      colorprim;
41*437bfbebSnyanmisaka     RK_S32      colortrc;
42*437bfbebSnyanmisaka     RK_S32      colmatrix;
43*437bfbebSnyanmisaka 
44*437bfbebSnyanmisaka     RK_S32      chroma_loc_info_present;
45*437bfbebSnyanmisaka     RK_S32      chroma_loc_top;
46*437bfbebSnyanmisaka     RK_S32      chroma_loc_bottom;
47*437bfbebSnyanmisaka 
48*437bfbebSnyanmisaka     RK_S32      timing_info_present;
49*437bfbebSnyanmisaka     RK_U32      num_units_in_tick;
50*437bfbebSnyanmisaka     RK_U32      time_scale;
51*437bfbebSnyanmisaka     RK_S32      fixed_frame_rate;
52*437bfbebSnyanmisaka 
53*437bfbebSnyanmisaka     RK_S32      nal_hrd_parameters_present;
54*437bfbebSnyanmisaka     RK_S32      vcl_hrd_parameters_present;
55*437bfbebSnyanmisaka 
56*437bfbebSnyanmisaka     struct {
57*437bfbebSnyanmisaka         RK_S32  cpb_cnt;
58*437bfbebSnyanmisaka         RK_S32  bit_rate_scale;
59*437bfbebSnyanmisaka         RK_S32  cpb_size_scale;
60*437bfbebSnyanmisaka         RK_S32  bit_rate_value;
61*437bfbebSnyanmisaka         RK_S32  cpb_size_value;
62*437bfbebSnyanmisaka         RK_S32  bit_rate_unscaled;
63*437bfbebSnyanmisaka         RK_S32  cpb_size_unscaled;
64*437bfbebSnyanmisaka         RK_S32  cbr_hrd;
65*437bfbebSnyanmisaka 
66*437bfbebSnyanmisaka         RK_S32  initial_cpb_removal_delay_length;
67*437bfbebSnyanmisaka         RK_S32  cpb_removal_delay_length;
68*437bfbebSnyanmisaka         RK_S32  dpb_output_delay_length;
69*437bfbebSnyanmisaka         RK_S32  time_offset_length;
70*437bfbebSnyanmisaka     } hrd;
71*437bfbebSnyanmisaka 
72*437bfbebSnyanmisaka     RK_S32      pic_struct_present;
73*437bfbebSnyanmisaka     RK_S32      bitstream_restriction;
74*437bfbebSnyanmisaka     RK_S32      motion_vectors_over_pic_boundaries;
75*437bfbebSnyanmisaka     RK_S32      max_bytes_per_pic_denom;
76*437bfbebSnyanmisaka     RK_S32      max_bits_per_mb_denom;
77*437bfbebSnyanmisaka     RK_S32      log2_max_mv_length_horizontal;
78*437bfbebSnyanmisaka     RK_S32      log2_max_mv_length_vertical;
79*437bfbebSnyanmisaka     RK_S32      num_reorder_frames;
80*437bfbebSnyanmisaka     RK_S32      max_dec_frame_buffering;
81*437bfbebSnyanmisaka } H264eVui;
82*437bfbebSnyanmisaka 
83*437bfbebSnyanmisaka typedef struct H264eSps_t {
84*437bfbebSnyanmisaka     RK_S32      profile_idc;
85*437bfbebSnyanmisaka 
86*437bfbebSnyanmisaka     RK_S32      constraint_set0;
87*437bfbebSnyanmisaka     RK_S32      constraint_set1;
88*437bfbebSnyanmisaka     RK_S32      constraint_set2;
89*437bfbebSnyanmisaka     RK_S32      constraint_set3;
90*437bfbebSnyanmisaka     RK_S32      constraint_set4;
91*437bfbebSnyanmisaka     RK_S32      constraint_set5;
92*437bfbebSnyanmisaka 
93*437bfbebSnyanmisaka     RK_S32      level_idc;
94*437bfbebSnyanmisaka     RK_U32      sps_id;
95*437bfbebSnyanmisaka 
96*437bfbebSnyanmisaka     RK_S32      chroma_format_idc;
97*437bfbebSnyanmisaka     /* scaling list is in pps */
98*437bfbebSnyanmisaka 
99*437bfbebSnyanmisaka     RK_S32      log2_max_frame_num_minus4;
100*437bfbebSnyanmisaka     RK_S32      pic_order_cnt_type;
101*437bfbebSnyanmisaka     /* poc type 0 */
102*437bfbebSnyanmisaka     RK_S32      log2_max_poc_lsb_minus4;
103*437bfbebSnyanmisaka 
104*437bfbebSnyanmisaka     RK_S32      num_ref_frames;
105*437bfbebSnyanmisaka     RK_S32      gaps_in_frame_num_value_allowed;
106*437bfbebSnyanmisaka     RK_S32      pic_width_in_mbs;
107*437bfbebSnyanmisaka     RK_S32      pic_height_in_mbs;
108*437bfbebSnyanmisaka 
109*437bfbebSnyanmisaka     // alway frame encoding
110*437bfbebSnyanmisaka     RK_S32      frame_mbs_only;
111*437bfbebSnyanmisaka     RK_S32      direct8x8_inference;
112*437bfbebSnyanmisaka 
113*437bfbebSnyanmisaka     RK_S32      cropping;
114*437bfbebSnyanmisaka     struct {
115*437bfbebSnyanmisaka         RK_S32  left;
116*437bfbebSnyanmisaka         RK_S32  right;
117*437bfbebSnyanmisaka         RK_S32  top;
118*437bfbebSnyanmisaka         RK_S32  bottom;
119*437bfbebSnyanmisaka     } crop;
120*437bfbebSnyanmisaka 
121*437bfbebSnyanmisaka     H264eVui    vui;
122*437bfbebSnyanmisaka } H264eSps;
123*437bfbebSnyanmisaka 
124*437bfbebSnyanmisaka #ifdef __cplusplus
125*437bfbebSnyanmisaka extern "C" {
126*437bfbebSnyanmisaka #endif
127*437bfbebSnyanmisaka 
128*437bfbebSnyanmisaka MPP_RET h264e_sps_update(H264eSps *sps, MppEncCfgSet *cfg);
129*437bfbebSnyanmisaka MPP_RET h264e_sps_to_packet(H264eSps *sps, MppPacket packet, RK_S32 *offset,
130*437bfbebSnyanmisaka                             RK_S32 *len, MppEncCfgSet *cfg);
131*437bfbebSnyanmisaka MPP_RET h264e_sps_dump(H264eSps *sps);
132*437bfbebSnyanmisaka 
133*437bfbebSnyanmisaka #ifdef __cplusplus
134*437bfbebSnyanmisaka }
135*437bfbebSnyanmisaka #endif
136*437bfbebSnyanmisaka 
137*437bfbebSnyanmisaka #endif /* __H264E_SPS_H__ */
138