PageRenderTime 29ms CodeModel.GetById 13ms app.highlight 11ms RepoModel.GetById 1ms app.codeStats 1ms

/media/libvpx/vpx/vp8.h

http://github.com/zpao/v8monkey
C Header | 130 lines | 55 code | 17 blank | 58 comment | 1 complexity | db2c2b53be12eea6a341e066df5e8f86 MD5 | raw file
  1/*
  2 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
  3 *
  4 *  Use of this source code is governed by a BSD-style license
  5 *  that can be found in the LICENSE file in the root of the source
  6 *  tree. An additional intellectual property rights grant can be found
  7 *  in the file PATENTS.  All contributing project authors may
  8 *  be found in the AUTHORS file in the root of the source tree.
  9 */
 10
 11
 12/*!\defgroup vp8 VP8
 13 * \ingroup codecs
 14 * VP8 is vpx's newest video compression algorithm that uses motion
 15 * compensated prediction, Discrete Cosine Transform (DCT) coding of the
 16 * prediction error signal and context dependent entropy coding techniques
 17 * based on arithmetic principles. It features:
 18 *  - YUV 4:2:0 image format
 19 *  - Macro-block based coding (16x16 luma plus two 8x8 chroma)
 20 *  - 1/4 (1/8) pixel accuracy motion compensated prediction
 21 *  - 4x4 DCT transform
 22 *  - 128 level linear quantizer
 23 *  - In loop deblocking filter
 24 *  - Context-based entropy coding
 25 *
 26 * @{
 27 */
 28/*!\file
 29 * \brief Provides controls common to both the VP8 encoder and decoder.
 30 */
 31#ifndef VP8_H
 32#define VP8_H
 33#include "vpx_codec_impl_top.h"
 34
 35/*!\brief Control functions
 36 *
 37 * The set of macros define the control functions of VP8 interface
 38 */
 39enum vp8_com_control_id
 40{
 41    VP8_SET_REFERENCE           = 1,    /**< pass in an external frame into decoder to be used as reference frame */
 42    VP8_COPY_REFERENCE          = 2,    /**< get a copy of reference frame from the decoder */
 43    VP8_SET_POSTPROC            = 3,    /**< set the decoder's post processing settings  */
 44    VP8_SET_DBG_COLOR_REF_FRAME = 4,    /**< set the reference frames to color for each macroblock */
 45    VP8_SET_DBG_COLOR_MB_MODES  = 5,    /**< set which macro block modes to color */
 46    VP8_SET_DBG_COLOR_B_MODES   = 6,    /**< set which blocks modes to color */
 47    VP8_SET_DBG_DISPLAY_MV      = 7,    /**< set which motion vector modes to draw */
 48    VP8_COMMON_CTRL_ID_MAX,
 49    VP8_DECODER_CTRL_ID_START   = 256
 50};
 51
 52/*!\brief post process flags
 53 *
 54 * The set of macros define VP8 decoder post processing flags
 55 */
 56enum vp8_postproc_level
 57{
 58    VP8_NOFILTERING             = 0,
 59    VP8_DEBLOCK                 = 1<<0,
 60    VP8_DEMACROBLOCK            = 1<<1,
 61    VP8_ADDNOISE                = 1<<2,
 62    VP8_DEBUG_TXT_FRAME_INFO    = 1<<3, /**< print frame information */
 63    VP8_DEBUG_TXT_MBLK_MODES    = 1<<4, /**< print macro block modes over each macro block */
 64    VP8_DEBUG_TXT_DC_DIFF       = 1<<5, /**< print dc diff for each macro block */
 65    VP8_DEBUG_TXT_RATE_INFO     = 1<<6  /**< print video rate info (encoder only) */
 66};
 67
 68/*!\brief post process flags
 69 *
 70 * This define a structure that describe the post processing settings. For
 71 * the best objective measure (using the PSNR metric) set post_proc_flag
 72 * to VP8_DEBLOCK and deblocking_level to 1.
 73 */
 74
 75typedef struct vp8_postproc_cfg
 76{
 77    int post_proc_flag;         /**< the types of post processing to be done, should be combination of "vp8_postproc_level" */
 78    int deblocking_level;       /**< the strength of deblocking, valid range [0, 16] */
 79    int noise_level;            /**< the strength of additive noise, valid range [0, 16] */
 80} vp8_postproc_cfg_t;
 81
 82/*!\brief reference frame type
 83 *
 84 * The set of macros define the type of VP8 reference frames
 85 */
 86typedef enum vpx_ref_frame_type
 87{
 88    VP8_LAST_FRAME = 1,
 89    VP8_GOLD_FRAME = 2,
 90    VP8_ALTR_FRAME = 4
 91} vpx_ref_frame_type_t;
 92
 93/*!\brief reference frame data struct
 94 *
 95 * define the data struct to access vp8 reference frames
 96 */
 97
 98typedef struct vpx_ref_frame
 99{
100    vpx_ref_frame_type_t  frame_type;   /**< which reference frame */
101    vpx_image_t           img;          /**< reference frame data in image format */
102} vpx_ref_frame_t;
103
104
105/*!\brief vp8 decoder control function parameter type
106 *
107 * defines the data type for each of VP8 decoder control function requires
108 */
109
110VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE,           vpx_ref_frame_t *)
111VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE,          vpx_ref_frame_t *)
112VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC,            vp8_postproc_cfg_t *)
113VPX_CTRL_USE_TYPE(VP8_SET_DBG_COLOR_REF_FRAME, int)
114VPX_CTRL_USE_TYPE(VP8_SET_DBG_COLOR_MB_MODES,  int)
115VPX_CTRL_USE_TYPE(VP8_SET_DBG_COLOR_B_MODES,   int)
116VPX_CTRL_USE_TYPE(VP8_SET_DBG_DISPLAY_MV,      int)
117
118
119/*! @} - end defgroup vp8 */
120
121#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
122/* The following definitions are provided for backward compatibility with
123 * the VP8 1.0.x SDK. USE IN PRODUCTION CODE IS NOT RECOMMENDED.
124 */
125
126DECLSPEC_DEPRECATED extern vpx_codec_iface_t vpx_codec_vp8_algo DEPRECATED;
127#endif
128
129#include "vpx_codec_impl_bottom.h"
130#endif