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