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