X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Finclude%2Fpipe%2Fp_video_state.h;h=1940bf12ba1c8a8fdaf6436b5a56f1aaabdcf02c;hb=eadbcb221db16af96aa6c3f40d48896d23d9eebc;hp=4d8a24116a0ff488985603bd7d5db6f59d87aafc;hpb=b4fa7db65639322ae8dea19a23c9cc8234a3d7e1;p=mesa.git diff --git a/src/gallium/include/pipe/p_video_state.h b/src/gallium/include/pipe/p_video_state.h index 4d8a24116a0..1940bf12ba1 100644 --- a/src/gallium/include/pipe/p_video_state.h +++ b/src/gallium/include/pipe/p_video_state.h @@ -28,11 +28,11 @@ #ifndef PIPE_VIDEO_STATE_H #define PIPE_VIDEO_STATE_H -#include -#include -#include -#include -#include +#include "pipe/p_defines.h" +#include "pipe/p_format.h" +#include "pipe/p_state.h" +#include "pipe/p_screen.h" +#include "util/u_inlines.h" #ifdef __cplusplus extern "C" { @@ -43,65 +43,82 @@ struct pipe_video_rect unsigned x, y, w, h; }; -enum pipe_mpeg12_picture_type +/* + * see table 6-12 in the spec + */ +enum pipe_mpeg12_picture_coding_type { - PIPE_MPEG12_PICTURE_TYPE_FIELD_TOP, - PIPE_MPEG12_PICTURE_TYPE_FIELD_BOTTOM, - PIPE_MPEG12_PICTURE_TYPE_FRAME + PIPE_MPEG12_PICTURE_CODING_TYPE_I = 0x01, + PIPE_MPEG12_PICTURE_CODING_TYPE_P = 0x02, + PIPE_MPEG12_PICTURE_CODING_TYPE_B = 0x03, + PIPE_MPEG12_PICTURE_CODING_TYPE_D = 0x04 }; -enum pipe_mpeg12_dct_intra +/* + * see table 6-14 in the spec + */ +enum pipe_mpeg12_picture_structure { - PIPE_MPEG12_DCT_DELTA = 0, - PIPE_MPEG12_DCT_INTRA = 1 + PIPE_MPEG12_PICTURE_STRUCTURE_RESERVED = 0x00, + PIPE_MPEG12_PICTURE_STRUCTURE_FIELD_TOP = 0x01, + PIPE_MPEG12_PICTURE_STRUCTURE_FIELD_BOTTOM = 0x02, + PIPE_MPEG12_PICTURE_STRUCTURE_FRAME = 0x03 }; -enum pipe_mpeg12_dct_type +/* + * flags for macroblock_type, see section 6.3.17.1 in the spec + */ +enum pipe_mpeg12_macroblock_type { - PIPE_MPEG12_DCT_TYPE_FRAME = 0, - PIPE_MPEG12_DCT_TYPE_FIELD = 1 + PIPE_MPEG12_MB_TYPE_QUANT = 0x01, + PIPE_MPEG12_MB_TYPE_MOTION_FORWARD = 0x02, + PIPE_MPEG12_MB_TYPE_MOTION_BACKWARD = 0x04, + PIPE_MPEG12_MB_TYPE_PATTERN = 0x08, + PIPE_MPEG12_MB_TYPE_INTRA = 0x10 }; -enum pipe_video_field_select +/* + * flags for motion_type, see table 6-17 and 6-18 in the spec + */ +enum pipe_mpeg12_motion_type { - PIPE_VIDEO_FRAME = 0, - PIPE_VIDEO_TOP_FIELD = 1, - PIPE_VIDEO_BOTTOM_FIELD = 3, + PIPE_MPEG12_MO_TYPE_RESERVED = 0x00, + PIPE_MPEG12_MO_TYPE_FIELD = 0x01, + PIPE_MPEG12_MO_TYPE_FRAME = 0x02, + PIPE_MPEG12_MO_TYPE_16x8 = 0x02, + PIPE_MPEG12_MO_TYPE_DUAL_PRIME = 0x03 +}; - /* TODO - PIPE_VIDEO_DUALPRIME - PIPE_VIDEO_16x8 - */ +/* + * see section 6.3.17.1 and table 6-19 in the spec + */ +enum pipe_mpeg12_dct_type +{ + PIPE_MPEG12_DCT_TYPE_FRAME = 0, + PIPE_MPEG12_DCT_TYPE_FIELD = 1 }; -enum pipe_video_mv_weight +enum pipe_mpeg12_field_select { - PIPE_VIDEO_MV_WEIGHT_MIN = 0, - PIPE_VIDEO_MV_WEIGHT_HALF = 128, - PIPE_VIDEO_MV_WEIGHT_MAX = 256 + PIPE_MPEG12_FS_FIRST_FORWARD = 0x01, + PIPE_MPEG12_FS_FIRST_BACKWARD = 0x02, + PIPE_MPEG12_FS_SECOND_FORWARD = 0x04, + PIPE_MPEG12_FS_SECOND_BACKWARD = 0x08 }; -/* bitfields because this is used as a vertex buffer element */ -struct pipe_motionvector +struct pipe_picture_desc { - struct { - signed x:16, y:16; - enum pipe_video_field_select field_select:16; - enum pipe_video_mv_weight weight:16; - } top, bottom; + enum pipe_video_profile profile; }; -/* bitfields because this is used as a vertex buffer element */ -struct pipe_ycbcr_block +struct pipe_quant_matrix { - unsigned x:8, y:8; - enum pipe_mpeg12_dct_intra intra:8; - enum pipe_mpeg12_dct_type coding:8; + enum pipe_video_codec codec; }; -struct pipe_picture_desc +struct pipe_macroblock { - enum pipe_video_profile profile; + enum pipe_video_codec codec; }; struct pipe_mpeg12_picture_desc @@ -115,7 +132,118 @@ struct pipe_mpeg12_picture_desc unsigned alternate_scan; unsigned intra_vlc_format; unsigned concealment_motion_vectors; + unsigned intra_dc_precision; unsigned f_code[2][2]; + unsigned num_slices; +}; + +struct pipe_mpeg12_quant_matrix +{ + struct pipe_quant_matrix base; + + const uint8_t *intra_matrix; + const uint8_t *non_intra_matrix; +}; + +struct pipe_mpeg12_macroblock +{ + struct pipe_macroblock base; + + /* see section 6.3.17 in the spec */ + unsigned short x, y; + + /* see section 6.3.17.1 in the spec */ + unsigned char macroblock_type; + + union { + struct { + /* see table 6-17 in the spec */ + unsigned int frame_motion_type:2; + + /* see table 6-18 in the spec */ + unsigned int field_motion_type:2; + + /* see table 6-19 in the spec */ + unsigned int dct_type:1; + } bits; + unsigned int value; + } macroblock_modes; + + /* see section 6.3.17.2 in the spec */ + unsigned char motion_vertical_field_select; + + /* see Table 7-7 in the spec */ + short PMV[2][2][2]; + + /* see figure 6.10-12 in the spec */ + unsigned short coded_block_pattern; + + /* see figure 6.10-12 in the spec */ + short *blocks; + + /* Number of skipped macroblocks after this macroblock */ + unsigned short num_skipped_macroblocks; +}; + +struct pipe_mpeg4_picture_desc +{ + struct pipe_picture_desc base; + int32_t trd[2]; + int32_t trb[2]; + uint16_t vop_time_increment_resolution; + uint8_t vop_coding_type; + uint8_t vop_fcode_forward; + uint8_t vop_fcode_backward; + uint8_t resync_marker_disable; + uint8_t interlaced; + uint8_t quant_type; + uint8_t quarter_sample; + uint8_t short_video_header; + uint8_t rounding_control; + uint8_t alternate_vertical_scan_flag; + uint8_t top_field_first; +}; + +struct pipe_mpeg4_quant_matrix +{ + struct pipe_quant_matrix base; + + const uint8_t *intra_matrix; + const uint8_t *non_intra_matrix; +}; + +struct pipe_vc1_picture_desc +{ + struct pipe_picture_desc base; + uint32_t slice_count; + uint8_t picture_type; + uint8_t frame_coding_mode; + uint8_t postprocflag; + uint8_t pulldown; + uint8_t interlace; + uint8_t tfcntrflag; + uint8_t finterpflag; + uint8_t psf; + uint8_t dquant; + uint8_t panscan_flag; + uint8_t refdist_flag; + uint8_t quantizer; + uint8_t extended_mv; + uint8_t extended_dmv; + uint8_t overlap; + uint8_t vstransform; + uint8_t loopfilter; + uint8_t fastuvmc; + uint8_t range_mapy_flag; + uint8_t range_mapy; + uint8_t range_mapuv_flag; + uint8_t range_mapuv; + uint8_t multires; + uint8_t syncmarker; + uint8_t rangered; + uint8_t maxbframes; + uint8_t deblockEnable; + uint8_t pquant; }; #ifdef __cplusplus