#ifndef PIPE_VIDEO_STATE_H
#define PIPE_VIDEO_STATE_H
-#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>
+#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" {
#endif
-struct pipe_video_rect
+/*
+ * see table 6-12 in the spec
+ */
+enum pipe_mpeg12_picture_coding_type
{
- unsigned x, y, w, h;
+ 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_picture_type
+/*
+ * see table 6-14 in the spec
+ */
+enum pipe_mpeg12_picture_structure
{
- PIPE_MPEG12_PICTURE_TYPE_FIELD_TOP,
- PIPE_MPEG12_PICTURE_TYPE_FIELD_BOTTOM,
- PIPE_MPEG12_PICTURE_TYPE_FRAME
+ 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
};
+/*
+ * flags for macroblock_type, see section 6.3.17.1 in the spec
+ */
enum pipe_mpeg12_macroblock_type
{
- PIPE_MPEG12_MACROBLOCK_TYPE_INTRA,
- PIPE_MPEG12_MACROBLOCK_TYPE_FWD,
- PIPE_MPEG12_MACROBLOCK_TYPE_BKWD,
- PIPE_MPEG12_MACROBLOCK_TYPE_BI,
-
- PIPE_MPEG12_MACROBLOCK_NUM_TYPES
+ 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
};
+/*
+ * flags for motion_type, see table 6-17 and 6-18 in the spec
+ */
enum pipe_mpeg12_motion_type
{
- PIPE_MPEG12_MOTION_TYPE_FIELD,
- PIPE_MPEG12_MOTION_TYPE_FRAME,
- PIPE_MPEG12_MOTION_TYPE_DUALPRIME,
- PIPE_MPEG12_MOTION_TYPE_16x8
+ 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
};
+/*
+ * see section 6.3.17.1 and table 6-19 in the spec
+ */
enum pipe_mpeg12_dct_type
{
- PIPE_MPEG12_DCT_TYPE_FIELD,
- PIPE_MPEG12_DCT_TYPE_FRAME
+ PIPE_MPEG12_DCT_TYPE_FRAME = 0,
+ PIPE_MPEG12_DCT_TYPE_FIELD = 1
};
-struct pipe_macroblock
+enum pipe_mpeg12_field_select
{
- enum pipe_video_codec codec;
+ PIPE_MPEG12_FS_FIRST_FORWARD = 0x01,
+ PIPE_MPEG12_FS_FIRST_BACKWARD = 0x02,
+ PIPE_MPEG12_FS_SECOND_FORWARD = 0x04,
+ PIPE_MPEG12_FS_SECOND_BACKWARD = 0x08
};
-struct pipe_mpeg12_macroblock
+struct pipe_picture_desc
{
- struct pipe_macroblock base;
+ enum pipe_video_profile profile;
+};
- unsigned mbx;
- unsigned mby;
- enum pipe_mpeg12_macroblock_type mb_type;
- enum pipe_mpeg12_motion_type mo_type;
- enum pipe_mpeg12_dct_type dct_type;
- signed pmv[2][2][2];
- bool mvfs[2][2];
- unsigned cbp;
- short *blocks;
+struct pipe_quant_matrix
+{
+ enum pipe_video_codec codec;
};
-#if 0
-struct pipe_picture_desc
+struct pipe_macroblock
{
- enum pipe_video_format format;
+ enum pipe_video_codec codec;
};
struct pipe_mpeg12_picture_desc
{
struct pipe_picture_desc base;
- /* TODO: Use bitfields where possible? */
- struct pipe_surface *forward_reference;
- struct pipe_surface *backward_reference;
unsigned picture_coding_type;
- unsigned fcode;
- unsigned intra_dc_precision;
unsigned picture_structure;
- unsigned top_field_first;
unsigned frame_pred_frame_dct;
- unsigned concealment_motion_vectors;
unsigned q_scale_type;
- unsigned intra_vlc_format;
unsigned alternate_scan;
+ unsigned intra_vlc_format;
+ unsigned concealment_motion_vectors;
+ unsigned intra_dc_precision;
+ unsigned f_code[2][2];
+ unsigned top_field_first;
unsigned full_pel_forward_vector;
unsigned full_pel_backward_vector;
- struct pipe_buffer *intra_quantizer_matrix;
- struct pipe_buffer *non_intra_quantizer_matrix;
- struct pipe_buffer *chroma_intra_quantizer_matrix;
- struct pipe_buffer *chroma_non_intra_quantizer_matrix;
+ unsigned num_slices;
+
+ const uint8_t *intra_matrix;
+ const uint8_t *non_intra_matrix;
+
+ struct pipe_video_buffer *ref[2];
+};
+
+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;
+
+ const uint8_t *intra_matrix;
+ const uint8_t *non_intra_matrix;
+
+ struct pipe_video_buffer *ref[2];
+};
+
+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;
+
+ struct pipe_video_buffer *ref[2];
+};
+
+struct pipe_h264_picture_desc
+{
+ struct pipe_picture_desc base;
+
+ uint32_t slice_count;
+ int32_t field_order_cnt[2];
+ bool is_reference;
+ uint32_t frame_num;
+ uint8_t field_pic_flag;
+ uint8_t bottom_field_flag;
+ uint8_t num_ref_frames;
+ uint8_t mb_adaptive_frame_field_flag;
+ uint8_t constrained_intra_pred_flag;
+ uint8_t weighted_pred_flag;
+ uint8_t weighted_bipred_idc;
+ uint8_t frame_mbs_only_flag;
+ uint8_t transform_8x8_mode_flag;
+ int8_t chroma_qp_index_offset;
+ int8_t second_chroma_qp_index_offset;
+ int8_t pic_init_qp_minus26;
+ uint8_t num_ref_idx_l0_active_minus1;
+ uint8_t num_ref_idx_l1_active_minus1;
+ uint8_t log2_max_frame_num_minus4;
+ uint8_t pic_order_cnt_type;
+ uint8_t log2_max_pic_order_cnt_lsb_minus4;
+ uint8_t delta_pic_order_always_zero_flag;
+ uint8_t direct_8x8_inference_flag;
+ uint8_t entropy_coding_mode_flag;
+ uint8_t pic_order_present_flag;
+ uint8_t deblocking_filter_control_present_flag;
+ uint8_t redundant_pic_cnt_present_flag;
+ uint8_t scaling_lists_4x4[6][16];
+ uint8_t scaling_lists_8x8[2][64];
+
+ bool is_long_term[16];
+ bool top_is_reference[16];
+ bool bottom_is_reference[16];
+ uint32_t field_order_cnt_list[16][2];
+ uint32_t frame_num_list[16];
+
+ struct pipe_video_buffer *ref[16];
};
-#endif
#ifdef __cplusplus
}