/*
|
*
|
* Copyright 2010 Rockchip Electronics Co. LTD
|
*
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
* you may not use this file except in compliance with the License.
|
* You may obtain a copy of the License at
|
*
|
* http://www.apache.org/licenses/LICENSE-2.0
|
*
|
* Unless required by applicable law or agreed to in writing, software
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
* See the License for the specific language governing permissions and
|
* limitations under the License.
|
*/
|
|
/*
|
* @file mpeg4d_syntax.h
|
* @brief
|
* @author gzl(gzl@rock-chips.com)
|
* @version 1.0.0
|
* @history
|
* 2016.04.06 : Create
|
*/
|
#ifndef __MPG4D_SYNTAX__
|
#define __MPG4D_SYNTAX__
|
|
#include "dxva_syntax.h"
|
|
#define MPEG4_VIDOBJLAY_AR_SQUARE 1
|
#define MPEG4_VIDOBJLAY_AR_625TYPE_43 2
|
#define MPEG4_VIDOBJLAY_AR_525TYPE_43 3
|
#define MPEG4_VIDOBJLAY_AR_625TYPE_169 8
|
#define MPEG4_VIDOBJLAY_AR_525TYPE_169 9
|
#define MPEG4_VIDOBJLAY_AR_EXTPAR 15
|
|
#define MPEG4_VIDOBJLAY_SHAPE_RECTANGULAR 0
|
#define MPEG4_VIDOBJLAY_SHAPE_BINARY 1
|
#define MPEG4_VIDOBJLAY_SHAPE_BINARY_ONLY 2
|
#define MPEG4_VIDOBJLAY_SHAPE_GRAYSCALE 3
|
|
/*video sprite specific*/
|
#define MPEG4_SPRITE_NONE 0
|
#define MPEG4_SPRITE_STATIC 1
|
#define MPEG4_SPRITE_GMC 2
|
|
/*video vop specific*/
|
typedef enum {
|
MPEG4_RESYNC_VOP = -2,
|
MPEG4_INVALID_VOP = -1,
|
MPEG4_I_VOP = 0,
|
MPEG4_P_VOP = 1,
|
MPEG4_B_VOP = 2,
|
MPEG4_S_VOP = 3,
|
MPEG4_N_VOP = 4,
|
MPEG4_D_VOP = 5, /*Drop Frame*/
|
} MPEG4VOPType;
|
|
#define MPEG4_HDR_ERR -2
|
#define MPEG4_DEC_ERR -4
|
#define MPEG4_VLD_ERR -5
|
#define MPEG4_FORMAT_ERR -6
|
#define MPEG4_DIVX_PBBI -7
|
#define MPEG4_INFO_CHANGE -10
|
|
/* MPEG4PT2 Picture Parameter structure */
|
typedef struct _DXVA_PicParams_MPEG4_PART2 {
|
RK_U8 short_video_header;
|
RK_U8 vop_coding_type;
|
RK_U8 vop_quant;
|
RK_U16 wDecodedPictureIndex;
|
RK_U16 wDeblockedPictureIndex;
|
RK_U16 wForwardRefPictureIndex;
|
RK_U16 wBackwardRefPictureIndex;
|
RK_U16 vop_time_increment_resolution;
|
RK_U32 TRB[2];
|
RK_U32 TRD[2];
|
|
union {
|
struct {
|
RK_U16 unPicPostProc : 2;
|
RK_U16 interlaced : 1;
|
RK_U16 quant_type : 1;
|
RK_U16 quarter_sample : 1;
|
RK_U16 resync_marker_disable : 1;
|
RK_U16 data_partitioned : 1;
|
RK_U16 reversible_vlc : 1;
|
RK_U16 reduced_resolution_vop_enable : 1;
|
RK_U16 vop_coded : 1;
|
RK_U16 vop_rounding_type : 1;
|
RK_U16 intra_dc_vlc_thr : 3;
|
RK_U16 top_field_first : 1;
|
RK_U16 alternate_vertical_scan_flag : 1;
|
};
|
RK_U16 wPicFlagBitFields;
|
};
|
RK_U8 profile_and_level_indication;
|
RK_U8 video_object_layer_verid;
|
RK_U16 vop_width;
|
RK_U16 vop_height;
|
union {
|
struct {
|
RK_U16 sprite_enable : 2;
|
RK_U16 no_of_sprite_warping_points : 6;
|
RK_U16 sprite_warping_accuracy : 2;
|
};
|
RK_U16 wSpriteBitFields;
|
};
|
RK_S16 warping_mv[4][2];
|
union {
|
struct {
|
RK_U8 vop_fcode_forward : 3;
|
RK_U8 vop_fcode_backward : 3;
|
};
|
RK_U8 wFcodeBitFields;
|
};
|
RK_U16 StatusReportFeedbackNumber;
|
RK_U16 Reserved16BitsA;
|
RK_U16 Reserved16BitsB;
|
|
// FIXME: added for rockchip hardware information
|
RK_U32 custorm_version;
|
RK_U32 prev_coding_type;
|
RK_U32 time_bp;
|
RK_U32 time_pp;
|
RK_U32 header_bits;
|
} DXVA_PicParams_MPEG4_PART2, *LPDXVA_PicParams_MPEG4_PART2;
|
|
typedef struct _DXVA_QmatrixData {
|
RK_U8 bNewQmatrix[4]; // intra Y, inter Y, intra chroma, inter chroma
|
RK_U8 Qmatrix[4][64]; // NOTE: here we change U16 to U8
|
} DXVA_QmatrixData, *LPDXVA_QmatrixData;
|
|
typedef struct mpeg4d_dxva2_picture_context {
|
DXVA_PicParams_MPEG4_PART2 pp;
|
DXVA_QmatrixData qm;
|
|
// pointer and storage for buffer descriptor
|
DXVA2_DecodeBufferDesc *data[3];
|
DXVA2_DecodeBufferDesc desc[3];
|
|
RK_U32 frame_count;
|
const RK_U8 *bitstream;
|
RK_U32 bitstream_size;
|
} mpeg4d_dxva2_picture_context_t;
|
|
#endif /*__MPG4D_SYNTAX__*/
|