Subversion Repositories Kolibri OS

Rev

Blame | Last modification | View Log | RSS feed

  1. /*
  2.  * Copyright (c) 2007-2012 Intel Corporation. All Rights Reserved.
  3.  *
  4.  * Permission is hereby granted, free of charge, to any person obtaining a
  5.  * copy of this software and associated documentation files (the
  6.  * "Software"), to deal in the Software without restriction, including
  7.  * without limitation the rights to use, copy, modify, merge, publish,
  8.  * distribute, sub license, and/or sell copies of the Software, and to
  9.  * permit persons to whom the Software is furnished to do so, subject to
  10.  * the following conditions:
  11.  *
  12.  * The above copyright notice and this permission notice (including the
  13.  * next paragraph) shall be included in all copies or substantial portions
  14.  * of the Software.
  15.  *
  16.  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  17.  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
  18.  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT.
  19.  * IN NO EVENT SHALL INTEL AND/OR ITS SUPPLIERS BE LIABLE FOR
  20.  * ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT,
  21.  * TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE
  22.  * SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  23.  */
  24.  
  25. /**
  26.  * \file va_dec_vp.h
  27.  * \brief VP8 decoding API
  28.  *
  29.  * This file contains the \ref api_dec_vp8 "VP8 decoding API".
  30.  */
  31.  
  32. #ifndef VA_DEC_VP8_H
  33. #define VA_DEC_VP8_H
  34.  
  35. #ifdef __cplusplus
  36. extern "C" {
  37. #endif
  38.  
  39. /**
  40.  * \defgroup api_dec_vp8 VP8 decoding API
  41.  *
  42.  * @{
  43.  */
  44.  
  45. /**
  46.  * \brief VPX Bool Coder Context structure
  47.  *
  48.  * This common structure is defined for potential sharing by other VP formats
  49.  *
  50.  */
  51. typedef struct _VABoolCoderContextVPX
  52. {
  53.     /* partition 0 "range" */
  54.     unsigned char range;
  55.     /* partition 0 "value" */
  56.     unsigned char value;
  57.     /*
  58.      * 'partition 0 number of shifts before an output byte is available'
  59.      * it is the number of remaining bits in 'value' for decoding, range [0, 7].
  60.      */
  61.  
  62.     unsigned char count;
  63. } VABoolCoderContextVPX;
  64.  
  65. /**
  66.  * \brief VP8 Decoding Picture Parameter Buffer Structure
  67.  *
  68.  * This structure conveys frame level parameters and should be sent once
  69.  * per frame.
  70.  *
  71.  */
  72. typedef struct  _VAPictureParameterBufferVP8
  73. {
  74.     /* frame width in pixels */
  75.     unsigned int frame_width;
  76.     /* frame height in pixels */
  77.     unsigned int frame_height;
  78.  
  79.     /* specifies the "last" reference frame */
  80.     VASurfaceID last_ref_frame;
  81.     /* specifies the "golden" reference frame */
  82.     VASurfaceID golden_ref_frame;
  83.     /* specifies the "alternate" referrence frame */
  84.     VASurfaceID alt_ref_frame;
  85.     /* specifies the out-of-loop deblocked frame, not used currently */
  86.     VASurfaceID out_of_loop_frame;
  87.  
  88.     union {
  89.         struct {
  90.             /* same as key_frame in bitstream syntax, 0 means a key frame */
  91.             unsigned int key_frame                      : 1;
  92.             /* same as version in bitstream syntax */
  93.             unsigned int version                        : 3;
  94.             /* same as segmentation_enabled in bitstream syntax */
  95.             unsigned int segmentation_enabled           : 1;
  96.             /* same as update_mb_segmentation_map in bitstream syntax */
  97.             unsigned int update_mb_segmentation_map     : 1;
  98.             /* same as update_segment_feature_data in bitstream syntax */
  99.             unsigned int update_segment_feature_data    : 1;
  100.             /* same as filter_type in bitstream syntax */
  101.             unsigned int filter_type                    : 1;
  102.             /* same as sharpness_level in bitstream syntax */
  103.             unsigned int sharpness_level                : 3;
  104.             /* same as loop_filter_adj_enable in bitstream syntax */
  105.             unsigned int loop_filter_adj_enable         : 1;
  106.             /* same as mode_ref_lf_delta_update in bitstream syntax */
  107.             unsigned int mode_ref_lf_delta_update       : 1;
  108.             /* same as sign_bias_golden in bitstream syntax */
  109.             unsigned int sign_bias_golden               : 1;
  110.             /* same as sign_bias_alternate in bitstream syntax */
  111.             unsigned int sign_bias_alternate            : 1;
  112.             /* same as mb_no_coeff_skip in bitstream syntax */
  113.             unsigned int mb_no_coeff_skip               : 1;
  114.             /* flag to indicate that loop filter should be disabled */
  115.             unsigned int loop_filter_disable            : 1;
  116.         } bits;
  117.         unsigned int value;
  118.     } pic_fields;
  119.  
  120.     /*
  121.      * probabilities of the segment_id decoding tree and same as
  122.      * mb_segment_tree_probs in the spec.
  123.      */
  124.     unsigned char mb_segment_tree_probs[3];
  125.  
  126.     /* Post-adjustment loop filter levels for the 4 segments */
  127.     unsigned char loop_filter_level[4];
  128.     /* loop filter deltas for reference frame based MB level adjustment */
  129.     char loop_filter_deltas_ref_frame[4];
  130.     /* loop filter deltas for coding mode based MB level adjustment */
  131.     char loop_filter_deltas_mode[4];
  132.  
  133.     /* same as prob_skip_false in bitstream syntax */
  134.     unsigned char prob_skip_false;
  135.     /* same as prob_intra in bitstream syntax */
  136.     unsigned char prob_intra;
  137.     /* same as prob_last in bitstream syntax */
  138.     unsigned char prob_last;
  139.     /* same as prob_gf in bitstream syntax */
  140.     unsigned char prob_gf;
  141.  
  142.     /*
  143.      * list of 4 probabilities of the luma intra prediction mode decoding
  144.      * tree and same as y_mode_probs in frame header
  145.      */
  146.     unsigned char y_mode_probs[4];
  147.     /*
  148.      * list of 3 probabilities of the chroma intra prediction mode decoding
  149.      * tree and same as uv_mode_probs in frame header
  150.      */
  151.     unsigned char uv_mode_probs[3];
  152.     /*
  153.      * updated mv decoding probabilities and same as mv_probs in
  154.      * frame header
  155.      */
  156.     unsigned char mv_probs[2][19];
  157.  
  158.     VABoolCoderContextVPX bool_coder_ctx;
  159.  
  160. } VAPictureParameterBufferVP8;
  161.  
  162. /**
  163.  * \brief VP8 Slice Parameter Buffer Structure
  164.  *
  165.  * This structure conveys parameters related to data partitions and should be
  166.  * sent once per frame. Slice data buffer of VASliceDataBufferType is used
  167.  * to send the partition data.
  168.  *
  169.  */
  170. typedef struct  _VASliceParameterBufferVP8
  171. {
  172.     /*
  173.      * number of bytes in the slice data buffer for the partitions
  174.      */
  175.     unsigned int slice_data_size;
  176.     /*
  177.      * offset to the first byte of partition data (control partition)
  178.      */
  179.     unsigned int slice_data_offset;
  180.     /*
  181.      * see VA_SLICE_DATA_FLAG_XXX definitions
  182.      */
  183.     unsigned int slice_data_flag;
  184.     /*
  185.      * offset to the first bit of MB from the first byte of partition data(slice_data_offset)
  186.      */
  187.     unsigned int macroblock_offset;
  188.  
  189.     /*
  190.      * Partitions
  191.      * (1<<log2_nbr_of_dct_partitions)+1, count both control partition (frame header) and toke partition
  192.      */
  193.     unsigned char num_of_partitions;
  194.     /*
  195.      * partition_size[0] is remaining bytes of control partition after parsed by application.
  196.      * exclude current byte for the remaining bits in bool_coder_ctx.
  197.      * exclude the uncompress data chunk since first_part_size 'excluding the uncompressed data chunk'
  198.      */
  199.     unsigned int partition_size[9];
  200. } VASliceParameterBufferVP8;
  201.  
  202. /**
  203.  * \brief VP8 Coefficient Probability Data Buffer Structure
  204.  *
  205.  * Contains the contents of the token probability table, which may be
  206.  * incrementally modified in the frame header. There are four dimensions to
  207.  * the token probability array. The outermost dimension is indexed by the
  208.  * type of plane being decoded; the next dimension is selected by the
  209.  * position of the coefficient being decoded; the third dimension, * roughly
  210.  * speaking, measures the "local complexity" or extent to which nearby
  211.  * coefficients are non-zero; the fourth, and final, dimension of the token
  212.  * probability array is indexed by the position in the token tree structure,
  213.  * as are all tree probability arrays. This structure is sent once per frame.
  214.  *
  215.  */
  216. typedef struct _VAProbabilityDataBufferVP8
  217. {
  218.     unsigned char dct_coeff_probs[4][8][3][11];
  219. } VAProbabilityDataBufferVP8;
  220.  
  221. /**
  222.  * \brief VP8 Inverse Quantization Matrix Buffer Structure
  223.  *
  224.  * Contains quantization indices for yac(0),ydc(1),y2dc(2),y2ac(3),uvdc(4),
  225.  * uvac(5) for each segment (0-3). When segmentation is disabled, only  
  226.  * quantization_index[0][] will be used. This structure is sent once per frame.
  227.  */
  228. typedef struct _VAIQMatrixBufferVP8
  229. {
  230.     /*
  231.      * array first dimensional is segment and 2nd dimensional is Q index
  232.      * all Q indexs should be clipped to be range [0, 127]
  233.      */
  234.     unsigned short quantization_index[4][6];
  235. } VAIQMatrixBufferVP8;
  236.  
  237. /**@}*/
  238.  
  239. #ifdef __cplusplus
  240. }
  241. #endif
  242.  
  243. #endif /* VA_DEC_VP8_H */
  244.