singe/thirdparty/rockchip-mpp/mpp/common/mpg4d_syntax.h
2026-09-10 20:17:28 -05:00

148 lines
4.6 KiB
C

/*
*
* 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_H
#define MPG4D_SYNTAX_H
#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_H */