xref: /rockchip-linux_mpp/mpp/common/mpg4d_syntax.h (revision 437bfbeb9567cca9cd9080e3f6954aa9d6a94f18)
1*437bfbebSnyanmisaka /*
2*437bfbebSnyanmisaka  *
3*437bfbebSnyanmisaka  * Copyright 2010 Rockchip Electronics Co. LTD
4*437bfbebSnyanmisaka  *
5*437bfbebSnyanmisaka  * Licensed under the Apache License, Version 2.0 (the "License");
6*437bfbebSnyanmisaka  * you may not use this file except in compliance with the License.
7*437bfbebSnyanmisaka  * You may obtain a copy of the License at
8*437bfbebSnyanmisaka  *
9*437bfbebSnyanmisaka  *      http://www.apache.org/licenses/LICENSE-2.0
10*437bfbebSnyanmisaka  *
11*437bfbebSnyanmisaka  * Unless required by applicable law or agreed to in writing, software
12*437bfbebSnyanmisaka  * distributed under the License is distributed on an "AS IS" BASIS,
13*437bfbebSnyanmisaka  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14*437bfbebSnyanmisaka  * See the License for the specific language governing permissions and
15*437bfbebSnyanmisaka  * limitations under the License.
16*437bfbebSnyanmisaka  */
17*437bfbebSnyanmisaka 
18*437bfbebSnyanmisaka /*
19*437bfbebSnyanmisaka  * @file        mpeg4d_syntax.h
20*437bfbebSnyanmisaka  * @brief
21*437bfbebSnyanmisaka  * @author      gzl(gzl@rock-chips.com)
22*437bfbebSnyanmisaka  * @version     1.0.0
23*437bfbebSnyanmisaka  * @history
24*437bfbebSnyanmisaka  *   2016.04.06 : Create
25*437bfbebSnyanmisaka  */
26*437bfbebSnyanmisaka #ifndef __MPG4D_SYNTAX__
27*437bfbebSnyanmisaka #define __MPG4D_SYNTAX__
28*437bfbebSnyanmisaka 
29*437bfbebSnyanmisaka #include "dxva_syntax.h"
30*437bfbebSnyanmisaka 
31*437bfbebSnyanmisaka #define MPEG4_VIDOBJLAY_AR_SQUARE           1
32*437bfbebSnyanmisaka #define MPEG4_VIDOBJLAY_AR_625TYPE_43       2
33*437bfbebSnyanmisaka #define MPEG4_VIDOBJLAY_AR_525TYPE_43       3
34*437bfbebSnyanmisaka #define MPEG4_VIDOBJLAY_AR_625TYPE_169      8
35*437bfbebSnyanmisaka #define MPEG4_VIDOBJLAY_AR_525TYPE_169      9
36*437bfbebSnyanmisaka #define MPEG4_VIDOBJLAY_AR_EXTPAR           15
37*437bfbebSnyanmisaka 
38*437bfbebSnyanmisaka #define MPEG4_VIDOBJLAY_SHAPE_RECTANGULAR   0
39*437bfbebSnyanmisaka #define MPEG4_VIDOBJLAY_SHAPE_BINARY        1
40*437bfbebSnyanmisaka #define MPEG4_VIDOBJLAY_SHAPE_BINARY_ONLY   2
41*437bfbebSnyanmisaka #define MPEG4_VIDOBJLAY_SHAPE_GRAYSCALE     3
42*437bfbebSnyanmisaka 
43*437bfbebSnyanmisaka /*video sprite specific*/
44*437bfbebSnyanmisaka #define MPEG4_SPRITE_NONE                   0
45*437bfbebSnyanmisaka #define MPEG4_SPRITE_STATIC                 1
46*437bfbebSnyanmisaka #define MPEG4_SPRITE_GMC                    2
47*437bfbebSnyanmisaka 
48*437bfbebSnyanmisaka /*video vop specific*/
49*437bfbebSnyanmisaka typedef enum {
50*437bfbebSnyanmisaka     MPEG4_RESYNC_VOP    = -2,
51*437bfbebSnyanmisaka     MPEG4_INVALID_VOP   = -1,
52*437bfbebSnyanmisaka     MPEG4_I_VOP         = 0,
53*437bfbebSnyanmisaka     MPEG4_P_VOP         = 1,
54*437bfbebSnyanmisaka     MPEG4_B_VOP         = 2,
55*437bfbebSnyanmisaka     MPEG4_S_VOP         = 3,
56*437bfbebSnyanmisaka     MPEG4_N_VOP         = 4,
57*437bfbebSnyanmisaka     MPEG4_D_VOP         = 5,                /*Drop Frame*/
58*437bfbebSnyanmisaka } MPEG4VOPType;
59*437bfbebSnyanmisaka 
60*437bfbebSnyanmisaka #define MPEG4_HDR_ERR       -2
61*437bfbebSnyanmisaka #define MPEG4_DEC_ERR       -4
62*437bfbebSnyanmisaka #define MPEG4_VLD_ERR       -5
63*437bfbebSnyanmisaka #define MPEG4_FORMAT_ERR    -6
64*437bfbebSnyanmisaka #define MPEG4_DIVX_PBBI     -7
65*437bfbebSnyanmisaka #define MPEG4_INFO_CHANGE   -10
66*437bfbebSnyanmisaka 
67*437bfbebSnyanmisaka /* MPEG4PT2 Picture Parameter structure */
68*437bfbebSnyanmisaka typedef struct _DXVA_PicParams_MPEG4_PART2 {
69*437bfbebSnyanmisaka     RK_U8   short_video_header;
70*437bfbebSnyanmisaka     RK_U8   vop_coding_type;
71*437bfbebSnyanmisaka     RK_U8   vop_quant;
72*437bfbebSnyanmisaka     RK_U16  wDecodedPictureIndex;
73*437bfbebSnyanmisaka     RK_U16  wDeblockedPictureIndex;
74*437bfbebSnyanmisaka     RK_U16  wForwardRefPictureIndex;
75*437bfbebSnyanmisaka     RK_U16  wBackwardRefPictureIndex;
76*437bfbebSnyanmisaka     RK_U16  vop_time_increment_resolution;
77*437bfbebSnyanmisaka     RK_U32  TRB[2];
78*437bfbebSnyanmisaka     RK_U32  TRD[2];
79*437bfbebSnyanmisaka 
80*437bfbebSnyanmisaka     union {
81*437bfbebSnyanmisaka         struct {
82*437bfbebSnyanmisaka             RK_U16  unPicPostProc                 : 2;
83*437bfbebSnyanmisaka             RK_U16  interlaced                    : 1;
84*437bfbebSnyanmisaka             RK_U16  quant_type                    : 1;
85*437bfbebSnyanmisaka             RK_U16  quarter_sample                : 1;
86*437bfbebSnyanmisaka             RK_U16  resync_marker_disable         : 1;
87*437bfbebSnyanmisaka             RK_U16  data_partitioned              : 1;
88*437bfbebSnyanmisaka             RK_U16  reversible_vlc                : 1;
89*437bfbebSnyanmisaka             RK_U16  reduced_resolution_vop_enable : 1;
90*437bfbebSnyanmisaka             RK_U16  vop_coded                     : 1;
91*437bfbebSnyanmisaka             RK_U16  vop_rounding_type             : 1;
92*437bfbebSnyanmisaka             RK_U16  intra_dc_vlc_thr              : 3;
93*437bfbebSnyanmisaka             RK_U16  top_field_first               : 1;
94*437bfbebSnyanmisaka             RK_U16  alternate_vertical_scan_flag  : 1;
95*437bfbebSnyanmisaka         };
96*437bfbebSnyanmisaka         RK_U16 wPicFlagBitFields;
97*437bfbebSnyanmisaka     };
98*437bfbebSnyanmisaka     RK_U8   profile_and_level_indication;
99*437bfbebSnyanmisaka     RK_U8   video_object_layer_verid;
100*437bfbebSnyanmisaka     RK_U16  vop_width;
101*437bfbebSnyanmisaka     RK_U16  vop_height;
102*437bfbebSnyanmisaka     union {
103*437bfbebSnyanmisaka         struct {
104*437bfbebSnyanmisaka             RK_U16  sprite_enable               : 2;
105*437bfbebSnyanmisaka             RK_U16  no_of_sprite_warping_points : 6;
106*437bfbebSnyanmisaka             RK_U16  sprite_warping_accuracy     : 2;
107*437bfbebSnyanmisaka         };
108*437bfbebSnyanmisaka         RK_U16 wSpriteBitFields;
109*437bfbebSnyanmisaka     };
110*437bfbebSnyanmisaka     RK_S16  warping_mv[4][2];
111*437bfbebSnyanmisaka     union {
112*437bfbebSnyanmisaka         struct {
113*437bfbebSnyanmisaka             RK_U8  vop_fcode_forward   : 3;
114*437bfbebSnyanmisaka             RK_U8  vop_fcode_backward  : 3;
115*437bfbebSnyanmisaka         };
116*437bfbebSnyanmisaka         RK_U8 wFcodeBitFields;
117*437bfbebSnyanmisaka     };
118*437bfbebSnyanmisaka     RK_U16  StatusReportFeedbackNumber;
119*437bfbebSnyanmisaka     RK_U16  Reserved16BitsA;
120*437bfbebSnyanmisaka     RK_U16  Reserved16BitsB;
121*437bfbebSnyanmisaka 
122*437bfbebSnyanmisaka     // FIXME: added for rockchip hardware information
123*437bfbebSnyanmisaka     RK_U32  custorm_version;
124*437bfbebSnyanmisaka     RK_U32  prev_coding_type;
125*437bfbebSnyanmisaka     RK_U32  time_bp;
126*437bfbebSnyanmisaka     RK_U32  time_pp;
127*437bfbebSnyanmisaka     RK_U32  header_bits;
128*437bfbebSnyanmisaka } DXVA_PicParams_MPEG4_PART2, *LPDXVA_PicParams_MPEG4_PART2;
129*437bfbebSnyanmisaka 
130*437bfbebSnyanmisaka typedef struct _DXVA_QmatrixData {
131*437bfbebSnyanmisaka     RK_U8   bNewQmatrix[4]; // intra Y, inter Y, intra chroma, inter chroma
132*437bfbebSnyanmisaka     RK_U8   Qmatrix[4][64]; // NOTE: here we change U16 to U8
133*437bfbebSnyanmisaka } DXVA_QmatrixData, *LPDXVA_QmatrixData;
134*437bfbebSnyanmisaka 
135*437bfbebSnyanmisaka typedef struct mpeg4d_dxva2_picture_context {
136*437bfbebSnyanmisaka     DXVA_PicParams_MPEG4_PART2  pp;
137*437bfbebSnyanmisaka     DXVA_QmatrixData            qm;
138*437bfbebSnyanmisaka 
139*437bfbebSnyanmisaka     // pointer and storage for buffer descriptor
140*437bfbebSnyanmisaka     DXVA2_DecodeBufferDesc      *data[3];
141*437bfbebSnyanmisaka     DXVA2_DecodeBufferDesc      desc[3];
142*437bfbebSnyanmisaka 
143*437bfbebSnyanmisaka     RK_U32                      frame_count;
144*437bfbebSnyanmisaka     const RK_U8                 *bitstream;
145*437bfbebSnyanmisaka     RK_U32                      bitstream_size;
146*437bfbebSnyanmisaka } mpeg4d_dxva2_picture_context_t;
147*437bfbebSnyanmisaka 
148*437bfbebSnyanmisaka #endif /*__MPG4D_SYNTAX__*/
149