xref: /rockchip-linux_mpp/mpp/common/h264e_syntax.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_SYNTAX_H__
18*437bfbebSnyanmisaka #define __H264E_SYNTAX_H__
19*437bfbebSnyanmisaka 
20*437bfbebSnyanmisaka #include "mpp_rc_api.h"
21*437bfbebSnyanmisaka #include "h264_syntax.h"
22*437bfbebSnyanmisaka 
23*437bfbebSnyanmisaka typedef enum H264eSyntaxType_e {
24*437bfbebSnyanmisaka     H264E_SYN_CFG,
25*437bfbebSnyanmisaka     H264E_SYN_SPS,
26*437bfbebSnyanmisaka     H264E_SYN_PPS,
27*437bfbebSnyanmisaka     H264E_SYN_DPB,
28*437bfbebSnyanmisaka     H264E_SYN_SLICE,
29*437bfbebSnyanmisaka     H264E_SYN_FRAME,
30*437bfbebSnyanmisaka     H264E_SYN_PREFIX,
31*437bfbebSnyanmisaka     H264E_SYN_RC_RET,
32*437bfbebSnyanmisaka     H264E_SYN_BUTT,
33*437bfbebSnyanmisaka } H264eSyntaxType;
34*437bfbebSnyanmisaka 
35*437bfbebSnyanmisaka #define SYN_TYPE_FLAG(type)         (1 << (type))
36*437bfbebSnyanmisaka 
37*437bfbebSnyanmisaka typedef struct H264eSyntaxDesc_t {
38*437bfbebSnyanmisaka     H264eSyntaxType     type;
39*437bfbebSnyanmisaka     void                *p;
40*437bfbebSnyanmisaka } H264eSyntaxDesc;
41*437bfbebSnyanmisaka 
42*437bfbebSnyanmisaka typedef struct H264ePrefixNal_t {
43*437bfbebSnyanmisaka     RK_S32      nal_ref_idc;
44*437bfbebSnyanmisaka 
45*437bfbebSnyanmisaka     /* svc extension header */
46*437bfbebSnyanmisaka     RK_S32      idr_flag;
47*437bfbebSnyanmisaka     RK_S32      priority_id;
48*437bfbebSnyanmisaka     RK_S32      no_inter_layer_pred_flag;
49*437bfbebSnyanmisaka     RK_S32      dependency_id;
50*437bfbebSnyanmisaka     RK_S32      quality_id;
51*437bfbebSnyanmisaka     RK_S32      temporal_id;
52*437bfbebSnyanmisaka     RK_S32      use_ref_base_pic_flag;
53*437bfbebSnyanmisaka     RK_S32      discardable_flag;
54*437bfbebSnyanmisaka     RK_S32      output_flag;
55*437bfbebSnyanmisaka } H264ePrefixNal;
56*437bfbebSnyanmisaka 
57*437bfbebSnyanmisaka typedef struct H264eReorderInfo_t   H264eReorderInfo;
58*437bfbebSnyanmisaka typedef struct H264eMarkingInfo_t   H264eMarkingInfo;
59*437bfbebSnyanmisaka typedef struct H264eDpbFrm_t        H264eDpbFrm;
60*437bfbebSnyanmisaka 
61*437bfbebSnyanmisaka /*
62*437bfbebSnyanmisaka  * Split reference frame configure to two parts
63*437bfbebSnyanmisaka  * The first part is slice depended info like poc / frame_num, and frame
64*437bfbebSnyanmisaka  * type and flags.
65*437bfbebSnyanmisaka  * The other part is gop structure depended info like gop index, ref_status
66*437bfbebSnyanmisaka  * and ref_frm_index. This part is inited from dpb gop hierarchy info.
67*437bfbebSnyanmisaka  */
68*437bfbebSnyanmisaka typedef struct H264eFrmInfo_s {
69*437bfbebSnyanmisaka     RK_S32      seq_idx;
70*437bfbebSnyanmisaka 
71*437bfbebSnyanmisaka     RK_S32      curr_idx;
72*437bfbebSnyanmisaka     RK_S32      refr_idx;
73*437bfbebSnyanmisaka 
74*437bfbebSnyanmisaka     RK_S32      usage[H264E_MAX_REFS_CNT + 1];
75*437bfbebSnyanmisaka } H264eFrmInfo;
76*437bfbebSnyanmisaka 
77*437bfbebSnyanmisaka /* macro to add syntax to description array */
78*437bfbebSnyanmisaka #define H264E_ADD_SYNTAX(desc, number, syn_type, syn_ptr) \
79*437bfbebSnyanmisaka     do { \
80*437bfbebSnyanmisaka         desc[number].type  = syn_type; \
81*437bfbebSnyanmisaka         desc[number].p     = syn_ptr; \
82*437bfbebSnyanmisaka         number++; \
83*437bfbebSnyanmisaka     } while (0)
84*437bfbebSnyanmisaka 
85*437bfbebSnyanmisaka #endif /* __H264E_SYNTAX_H__ */
86