vp8.h 4.54 KB
Newer Older
John Koleszar's avatar
John Koleszar committed
1
/*
2
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
John Koleszar's avatar
John Koleszar committed
3
 *
4
 *  Use of this source code is governed by a BSD-style license
5
6
 *  that can be found in the LICENSE file in the root of the source
 *  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.
John Koleszar's avatar
John Koleszar committed
9
10
11
12
13
14
15
16
 */


/*!\defgroup vp8 VP8
 * \ingroup codecs
 * VP8 is vpx's newest video compression algorithm that uses motion
 * compensated prediction, Discrete Cosine Transform (DCT) coding of the
 * prediction error signal and context dependent entropy coding techniques
James Zern's avatar
James Zern committed
17
 * based on arithmetic principles. It features:
John Koleszar's avatar
John Koleszar committed
18
19
20
21
22
23
24
25
26
27
 *  - YUV 4:2:0 image format
 *  - Macro-block based coding (16x16 luma plus two 8x8 chroma)
 *  - 1/4 (1/8) pixel accuracy motion compensated prediction
 *  - 4x4 DCT transform
 *  - 128 level linear quantizer
 *  - In loop deblocking filter
 *  - Context-based entropy coding
 *
 * @{
 */
James Zern's avatar
James Zern committed
28
/*!\file
John Koleszar's avatar
John Koleszar committed
29
30
31
32
 * \brief Provides controls common to both the VP8 encoder and decoder.
 */
#ifndef VP8_H
#define VP8_H
33
#include "vpx/vpx_codec_impl_top.h"
John Koleszar's avatar
John Koleszar committed
34
35
36
37
38
39
40

/*!\brief Control functions
 *
 * The set of macros define the control functions of VP8 interface
 */
enum vp8_dec_control_id
{
41
42
43
44
45
46
47
    VP8_SET_REFERENCE           = 1,    /**< pass in an external frame into decoder to be used as reference frame */
    VP8_COPY_REFERENCE          = 2,    /**< get a copy of reference frame from the decoder */
    VP8_SET_POSTPROC            = 3,    /**< set the decoder's post processing settings  */
    VP8_SET_DBG_COLOR_REF_FRAME = 4,    /**< set the reference frames to color for each macroblock */
    VP8_SET_DBG_COLOR_MB_MODES  = 5,    /**< set which macro block modes to color */
    VP8_SET_DBG_COLOR_B_MODES   = 6,    /**< set which blocks modes to color */
    VP8_SET_DBG_DISPLAY_MV      = 7,    /**< set which motion vector modes to draw */
John Koleszar's avatar
John Koleszar committed
48
49
50
51
52
53
54
55
56
    VP8_COMMON_CTRL_ID_MAX
};

/*!\brief post process flags
 *
 * The set of macros define VP8 decoder post processing flags
 */
enum vp8_postproc_level
{
57
58
59
60
61
62
63
64
    VP8_NOFILTERING             = 0,
    VP8_DEBLOCK                 = 1<<0,
    VP8_DEMACROBLOCK            = 1<<1,
    VP8_ADDNOISE                = 1<<2,
    VP8_DEBUG_TXT_FRAME_INFO    = 1<<3, /**< print frame information */
    VP8_DEBUG_TXT_MBLK_MODES    = 1<<4, /**< print macro block modes over each macro block */
    VP8_DEBUG_TXT_DC_DIFF       = 1<<5, /**< print dc diff for each macro block */
    VP8_DEBUG_TXT_RATE_INFO     = 1<<6, /**< print video rate info (encoder only) */
John Koleszar's avatar
John Koleszar committed
65
66
67
68
69
};

/*!\brief post process flags
 *
 * This define a structure that describe the post processing settings. For
James Zern's avatar
James Zern committed
70
 * the best objective measure (using the PSNR metric) set post_proc_flag
John Koleszar's avatar
John Koleszar committed
71
72
73
74
75
 * to VP8_DEBLOCK and deblocking_level to 1.
 */

typedef struct vp8_postproc_cfg
{
76
77
78
    int post_proc_flag;         /**< the types of post processing to be done, should be combination of "vp8_postproc_level" */
    int deblocking_level;       /**< the strength of deblocking, valid range [0, 16] */
    int noise_level;            /**< the strength of additive noise, valid range [0, 16] */
John Koleszar's avatar
John Koleszar committed
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
} vp8_postproc_cfg_t;

/*!\brief reference frame type
 *
 * The set of macros define the type of VP8 reference frames
 */
typedef enum vpx_ref_frame_type
{
    VP8_LAST_FRAME = 1,
    VP8_GOLD_FRAME = 2,
    VP8_ALTR_FRAME = 4
} vpx_ref_frame_type_t;

/*!\brief reference frame data struct
 *
 * define the data struct to access vp8 reference frames
 */

typedef struct vpx_ref_frame
{
    vpx_ref_frame_type_t  frame_type;   /**< which reference frame */
    vpx_image_t           img;          /**< reference frame data in image format */
} vpx_ref_frame_t;


James Zern's avatar
James Zern committed
104
/*!\brief vp8 decoder control function parameter type
John Koleszar's avatar
John Koleszar committed
105
 *
106
 * defines the data type for each of VP8 decoder control function requires
John Koleszar's avatar
John Koleszar committed
107
108
109
110
111
 */

VPX_CTRL_USE_TYPE(VP8_SET_REFERENCE,           vpx_ref_frame_t *)
VPX_CTRL_USE_TYPE(VP8_COPY_REFERENCE,          vpx_ref_frame_t *)
VPX_CTRL_USE_TYPE(VP8_SET_POSTPROC,            vp8_postproc_cfg_t *)
112
113
114
115
VPX_CTRL_USE_TYPE(VP8_SET_DBG_COLOR_REF_FRAME, int)
VPX_CTRL_USE_TYPE(VP8_SET_DBG_COLOR_MB_MODES,  int)
VPX_CTRL_USE_TYPE(VP8_SET_DBG_COLOR_B_MODES,   int)
VPX_CTRL_USE_TYPE(VP8_SET_DBG_DISPLAY_MV,      int)
John Koleszar's avatar
John Koleszar committed
116
117
118
119
120
121
122
123
124
125
126
127


/*! @} - end defgroup vp8 */

#if !defined(VPX_CODEC_DISABLE_COMPAT) || !VPX_CODEC_DISABLE_COMPAT
/* The following definitions are provided for backward compatibility with
 * the VP8 1.0.x SDK. USE IN PRODUCTION CODE IS NOT RECOMMENDED.
 */

DECLSPEC_DEPRECATED extern vpx_codec_iface_t vpx_codec_vp8_algo DEPRECATED;
#endif

128
#include "vpx/vpx_codec_impl_bottom.h"
John Koleszar's avatar
John Koleszar committed
129
#endif