Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | Download | RSS feed

  1. /**************************************************************************
  2.  *
  3.  * Copyright 2009 Younes Manton.
  4.  * All Rights Reserved.
  5.  *
  6.  * Permission is hereby granted, free of charge, to any person obtaining a
  7.  * copy of this software and associated documentation files (the
  8.  * "Software"), to deal in the Software without restriction, including
  9.  * without limitation the rights to use, copy, modify, merge, publish,
  10.  * distribute, sub license, and/or sell copies of the Software, and to
  11.  * permit persons to whom the Software is furnished to do so, subject to
  12.  * the following conditions:
  13.  *
  14.  * The above copyright notice and this permission notice (including the
  15.  * next paragraph) shall be included in all copies or substantial portions
  16.  * of the Software.
  17.  *
  18.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  19.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  20.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  21.  * IN NO EVENT SHALL TUNGSTEN GRAPHICS AND/OR ITS SUPPLIERS BE LIABLE FOR
  22.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  23.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  24.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  25.  *
  26.  **************************************************************************/
  27.  
  28. #ifndef PIPE_VIDEO_STATE_H
  29. #define PIPE_VIDEO_STATE_H
  30.  
  31. #include "pipe/p_defines.h"
  32. #include "pipe/p_format.h"
  33. #include "pipe/p_state.h"
  34. #include "pipe/p_screen.h"
  35. #include "util/u_inlines.h"
  36.  
  37. #ifdef __cplusplus
  38. extern "C" {
  39. #endif
  40.  
  41. /*
  42.  * see table 6-12 in the spec
  43.  */
  44. enum pipe_mpeg12_picture_coding_type
  45. {
  46.    PIPE_MPEG12_PICTURE_CODING_TYPE_I = 0x01,
  47.    PIPE_MPEG12_PICTURE_CODING_TYPE_P = 0x02,
  48.    PIPE_MPEG12_PICTURE_CODING_TYPE_B = 0x03,
  49.    PIPE_MPEG12_PICTURE_CODING_TYPE_D = 0x04
  50. };
  51.  
  52. /*
  53.  * see table 6-14 in the spec
  54.  */
  55. enum pipe_mpeg12_picture_structure
  56. {
  57.    PIPE_MPEG12_PICTURE_STRUCTURE_RESERVED = 0x00,
  58.    PIPE_MPEG12_PICTURE_STRUCTURE_FIELD_TOP = 0x01,
  59.    PIPE_MPEG12_PICTURE_STRUCTURE_FIELD_BOTTOM = 0x02,
  60.    PIPE_MPEG12_PICTURE_STRUCTURE_FRAME = 0x03
  61. };
  62.  
  63. /*
  64.  * flags for macroblock_type, see section 6.3.17.1 in the spec
  65.  */
  66. enum pipe_mpeg12_macroblock_type
  67. {
  68.    PIPE_MPEG12_MB_TYPE_QUANT = 0x01,
  69.    PIPE_MPEG12_MB_TYPE_MOTION_FORWARD = 0x02,
  70.    PIPE_MPEG12_MB_TYPE_MOTION_BACKWARD = 0x04,
  71.    PIPE_MPEG12_MB_TYPE_PATTERN = 0x08,
  72.    PIPE_MPEG12_MB_TYPE_INTRA = 0x10
  73. };
  74.  
  75. /*
  76.  * flags for motion_type, see table 6-17 and 6-18 in the spec
  77.  */
  78. enum pipe_mpeg12_motion_type
  79. {
  80.    PIPE_MPEG12_MO_TYPE_RESERVED = 0x00,
  81.    PIPE_MPEG12_MO_TYPE_FIELD = 0x01,
  82.    PIPE_MPEG12_MO_TYPE_FRAME = 0x02,
  83.    PIPE_MPEG12_MO_TYPE_16x8 = 0x02,
  84.    PIPE_MPEG12_MO_TYPE_DUAL_PRIME = 0x03
  85. };
  86.  
  87. /*
  88.  * see section 6.3.17.1 and table 6-19 in the spec
  89.  */
  90. enum pipe_mpeg12_dct_type
  91. {
  92.    PIPE_MPEG12_DCT_TYPE_FRAME = 0,
  93.    PIPE_MPEG12_DCT_TYPE_FIELD = 1
  94. };
  95.  
  96. enum pipe_mpeg12_field_select
  97. {
  98.    PIPE_MPEG12_FS_FIRST_FORWARD = 0x01,
  99.    PIPE_MPEG12_FS_FIRST_BACKWARD = 0x02,
  100.    PIPE_MPEG12_FS_SECOND_FORWARD = 0x04,
  101.    PIPE_MPEG12_FS_SECOND_BACKWARD = 0x08
  102. };
  103.  
  104. struct pipe_picture_desc
  105. {
  106.    enum pipe_video_profile profile;
  107. };
  108.  
  109. struct pipe_quant_matrix
  110. {
  111.    enum pipe_video_codec codec;
  112. };
  113.  
  114. struct pipe_macroblock
  115. {
  116.    enum pipe_video_codec codec;
  117. };
  118.  
  119. struct pipe_mpeg12_picture_desc
  120. {
  121.    struct pipe_picture_desc base;
  122.  
  123.    unsigned picture_coding_type;
  124.    unsigned picture_structure;
  125.    unsigned frame_pred_frame_dct;
  126.    unsigned q_scale_type;
  127.    unsigned alternate_scan;
  128.    unsigned intra_vlc_format;
  129.    unsigned concealment_motion_vectors;
  130.    unsigned intra_dc_precision;
  131.    unsigned f_code[2][2];
  132.    unsigned top_field_first;
  133.    unsigned full_pel_forward_vector;
  134.    unsigned full_pel_backward_vector;
  135.    unsigned num_slices;
  136.  
  137.    const uint8_t *intra_matrix;
  138.    const uint8_t *non_intra_matrix;
  139.  
  140.    struct pipe_video_buffer *ref[2];
  141. };
  142.  
  143. struct pipe_mpeg12_macroblock
  144. {
  145.    struct pipe_macroblock base;
  146.  
  147.    /* see section 6.3.17 in the spec */
  148.    unsigned short x, y;
  149.  
  150.    /* see section 6.3.17.1 in the spec */
  151.    unsigned char macroblock_type;
  152.  
  153.    union {
  154.       struct {
  155.          /* see table 6-17 in the spec */
  156.          unsigned int frame_motion_type:2;
  157.  
  158.          /* see table 6-18 in the spec */
  159.          unsigned int field_motion_type:2;
  160.  
  161.          /* see table 6-19 in the spec */
  162.          unsigned int dct_type:1;
  163.       } bits;
  164.       unsigned int value;
  165.    } macroblock_modes;
  166.  
  167.     /* see section 6.3.17.2 in the spec */
  168.    unsigned char motion_vertical_field_select;
  169.  
  170.    /* see Table 7-7 in the spec */
  171.    short PMV[2][2][2];
  172.  
  173.    /* see figure 6.10-12 in the spec */
  174.    unsigned short coded_block_pattern;
  175.  
  176.    /* see figure 6.10-12 in the spec */
  177.    short *blocks;
  178.  
  179.    /* Number of skipped macroblocks after this macroblock */
  180.    unsigned short num_skipped_macroblocks;
  181. };
  182.  
  183. struct pipe_mpeg4_picture_desc
  184. {
  185.    struct pipe_picture_desc base;
  186.  
  187.    int32_t trd[2];
  188.    int32_t trb[2];
  189.    uint16_t vop_time_increment_resolution;
  190.    uint8_t vop_coding_type;
  191.    uint8_t vop_fcode_forward;
  192.    uint8_t vop_fcode_backward;
  193.    uint8_t resync_marker_disable;
  194.    uint8_t interlaced;
  195.    uint8_t quant_type;
  196.    uint8_t quarter_sample;
  197.    uint8_t short_video_header;
  198.    uint8_t rounding_control;
  199.    uint8_t alternate_vertical_scan_flag;
  200.    uint8_t top_field_first;
  201.  
  202.    const uint8_t *intra_matrix;
  203.    const uint8_t *non_intra_matrix;
  204.  
  205.    struct pipe_video_buffer *ref[2];
  206. };
  207.  
  208. struct pipe_vc1_picture_desc
  209. {
  210.    struct pipe_picture_desc base;
  211.  
  212.    uint32_t slice_count;
  213.    uint8_t picture_type;
  214.    uint8_t frame_coding_mode;
  215.    uint8_t postprocflag;
  216.    uint8_t pulldown;
  217.    uint8_t interlace;
  218.    uint8_t tfcntrflag;
  219.    uint8_t finterpflag;
  220.    uint8_t psf;
  221.    uint8_t dquant;
  222.    uint8_t panscan_flag;
  223.    uint8_t refdist_flag;
  224.    uint8_t quantizer;
  225.    uint8_t extended_mv;
  226.    uint8_t extended_dmv;
  227.    uint8_t overlap;
  228.    uint8_t vstransform;
  229.    uint8_t loopfilter;
  230.    uint8_t fastuvmc;
  231.    uint8_t range_mapy_flag;
  232.    uint8_t range_mapy;
  233.    uint8_t range_mapuv_flag;
  234.    uint8_t range_mapuv;
  235.    uint8_t multires;
  236.    uint8_t syncmarker;
  237.    uint8_t rangered;
  238.    uint8_t maxbframes;
  239.    uint8_t deblockEnable;
  240.    uint8_t pquant;
  241.  
  242.    struct pipe_video_buffer *ref[2];
  243. };
  244.  
  245. struct pipe_h264_picture_desc
  246. {
  247.    struct pipe_picture_desc base;
  248.  
  249.    uint32_t slice_count;
  250.    int32_t  field_order_cnt[2];
  251.    bool     is_reference;
  252.    uint32_t frame_num;
  253.    uint8_t  field_pic_flag;
  254.    uint8_t  bottom_field_flag;
  255.    uint8_t  num_ref_frames;
  256.    uint8_t  mb_adaptive_frame_field_flag;
  257.    uint8_t  constrained_intra_pred_flag;
  258.    uint8_t  weighted_pred_flag;
  259.    uint8_t  weighted_bipred_idc;
  260.    uint8_t  frame_mbs_only_flag;
  261.    uint8_t  transform_8x8_mode_flag;
  262.    int8_t   chroma_qp_index_offset;
  263.    int8_t   second_chroma_qp_index_offset;
  264.    int8_t   pic_init_qp_minus26;
  265.    uint8_t  num_ref_idx_l0_active_minus1;
  266.    uint8_t  num_ref_idx_l1_active_minus1;
  267.    uint8_t  log2_max_frame_num_minus4;
  268.    uint8_t  pic_order_cnt_type;
  269.    uint8_t  log2_max_pic_order_cnt_lsb_minus4;
  270.    uint8_t  delta_pic_order_always_zero_flag;
  271.    uint8_t  direct_8x8_inference_flag;
  272.    uint8_t  entropy_coding_mode_flag;
  273.    uint8_t  pic_order_present_flag;
  274.    uint8_t  deblocking_filter_control_present_flag;
  275.    uint8_t  redundant_pic_cnt_present_flag;
  276.    uint8_t  scaling_lists_4x4[6][16];
  277.    uint8_t  scaling_lists_8x8[2][64];
  278.  
  279.    bool     is_long_term[16];
  280.    bool     top_is_reference[16];
  281.    bool     bottom_is_reference[16];
  282.    uint32_t field_order_cnt_list[16][2];
  283.    uint32_t frame_num_list[16];
  284.  
  285.    struct pipe_video_buffer *ref[16];
  286. };
  287.  
  288. #ifdef __cplusplus
  289. }
  290. #endif
  291.  
  292. #endif /* PIPE_VIDEO_STATE_H */
  293.