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_encoder WebM VP8 Encoder 13 * \ingroup vp8 14 * 15 * @{ 16 */ 17 #include "vp8.h" 18 19 /*!\file vp8cx.h 20 * \brief Provides definitions for using the VP8 encoder algorithm within the 21 * vpx Codec Interface. 22 */ 23 #ifndef VP8CX_H 24 #define VP8CX_H 25 #include "vpx/vpx_codec_impl_top.h" 26 27 /*!\brief Algorithm interface for VP8 28 * 29 * This interface provides the capability to encode raw VP8 streams, as would 30 * be found in AVI files. 31 */ 32 extern vpx_codec_iface_t vpx_codec_vp8_cx_algo; 33 extern vpx_codec_iface_t* vpx_codec_vp8_cx(void); 34 35 36 /* 37 * Algorithm Flags 38 */ 39 40 /*!\brief Don't reference the last frame 41 * 42 * When this flag is set, the encoder will not use the last frame as a 43 * predictor. When not set, the encoder will choose whether to use the 44 * last frame or not automatically. 45 */ 46 #define VP8_EFLAG_NO_REF_LAST (1<<16) 47 48 49 /*!\brief Don't reference the golden frame 50 * 51 * When this flag is set, the encoder will not use the golden frame as a 52 * predictor. When not set, the encoder will choose whether to use the 53 * golden frame or not automatically. 54 */ 55 #define VP8_EFLAG_NO_REF_GF (1<<17) 56 57 58 /*!\brief Don't reference the alternate reference frame 59 * 60 * When this flag is set, the encoder will not use the alt ref frame as a 61 * predictor. When not set, the encoder will choose whether to use the 62 * alt ref frame or not automatically. 63 */ 64 #define VP8_EFLAG_NO_REF_ARF (1<<21) 65 66 67 /*!\brief Don't update the last frame 68 * 69 * When this flag is set, the encoder will not update the last frame with 70 * the contents of the current frame. 71 */ 72 #define VP8_EFLAG_NO_UPD_LAST (1<<18) 73 74 75 /*!\brief Don't update the golden frame 76 * 77 * When this flag is set, the encoder will not update the golden frame with 78 * the contents of the current frame. 79 */ 80 #define VP8_EFLAG_NO_UPD_GF (1<<22) 81 82 83 /*!\brief Don't update the alternate reference frame 84 * 85 * When this flag is set, the encoder will not update the alt ref frame with 86 * the contents of the current frame. 87 */ 88 #define VP8_EFLAG_NO_UPD_ARF (1<<23) 89 90 91 /*!\brief Force golden frame update 92 * 93 * When this flag is set, the encoder copy the contents of the current frame 94 * to the golden frame buffer. 95 */ 96 #define VP8_EFLAG_FORCE_GF (1<<19) 97 98 99 /*!\brief Force alternate reference frame update 100 * 101 * When this flag is set, the encoder copy the contents of the current frame 102 * to the alternate reference frame buffer. 103 */ 104 #define VP8_EFLAG_FORCE_ARF (1<<24) 105 106 107 /*!\brief Disable entropy update 108 * 109 * When this flag is set, the encoder will not update its internal entropy 110 * model based on the entropy of this frame. 111 */ 112 #define VP8_EFLAG_NO_UPD_ENTROPY (1<<20) 113 114 115 /*!\brief VP8 encoder control functions 116 * 117 * The set of macros define the control functions of VP8 encoder interface 118 */ 119 enum vp8e_enc_control_id 120 { 121 VP8E_UPD_ENTROPY = 5, /**< control function to set mode of entropy update in encoder */ 122 VP8E_UPD_REFERENCE, /**< control function to set reference update mode in encoder */ 123 VP8E_USE_REFERENCE, /**< control function to set which reference frame encoder can use */ 124 VP8E_SET_ROI_MAP, /**< control function to pass an ROI map to encoder */ 125 VP8E_SET_ACTIVEMAP, /**< control function to pass an Active map to encoder */ 126 VP8E_SET_SCALEMODE = 11, /**< control function to set encoder scaling mode */ 127 VP8E_SET_CPUUSED = 13, /**< control function to set vp8 encoder cpuused */ 128 VP8E_SET_ENABLEAUTOALTREF, /**< control function to enable vp8 to automatic set and use altref frame */ 129 VP8E_SET_NOISE_SENSITIVITY, /**< control function to set noise sensitivity */ 130 VP8E_SET_SHARPNESS, /**< control function to set sharpness */ 131 VP8E_SET_STATIC_THRESHOLD, /**< control function to set the threshold for macroblocks treated static */ 132 VP8E_SET_TOKEN_PARTITIONS, /**< control function to set the number of token partitions */ 133 VP8E_GET_LAST_QUANTIZER, /**< return the quantizer chosen by the 134 encoder for the last frame using the internal 135 scale */ 136 VP8E_GET_LAST_QUANTIZER_64, /**< return the quantizer chosen by the 137 encoder for the last frame, using the 0..63 138 scale as used by the rc_*_quantizer config 139 parameters */ 140 VP8E_SET_ARNR_MAXFRAMES, /**< control function to set the max number of frames blurred creating arf*/ 141 VP8E_SET_ARNR_STRENGTH , /**< control function to set the filter strength for the arf */ 142 VP8E_SET_ARNR_TYPE , /**< control function to set the type of filter to use for the arf*/ 143 } ; 144 145 /*!\brief vpx 1-D scaling mode 146 * 147 * This set of constants define 1-D vpx scaling modes 148 */ 149 typedef enum vpx_scaling_mode_1d 150 { 151 VP8E_NORMAL = 0, 152 VP8E_FOURFIVE = 1, 153 VP8E_THREEFIVE = 2, 154 VP8E_ONETWO = 3 155 } VPX_SCALING_MODE; 156 157 158 /*!\brief vpx region of interest map 159 * 160 * These defines the data structures for the region of interest map 161 * 162 */ 163 164 typedef struct vpx_roi_map 165 { 166 unsigned char *roi_map; /**< specify an id between 0 and 3 for each 16x16 region within a frame */ 167 unsigned int rows; /**< number of rows */ 168 unsigned int cols; /**< number of cols */ 169 int delta_q[4]; /**< quantizer delta [-64, 64] off baseline for regions with id between 0 and 3*/ 170 int delta_lf[4]; /**< loop filter strength delta [-32, 32] for regions with id between 0 and 3 */ 171 unsigned int static_threshold[4];/**< threshold for region to be treated as static */ 172 } vpx_roi_map_t; 173 174 /*!\brief vpx active region map 175 * 176 * These defines the data structures for active region map 177 * 178 */ 179 180 181 typedef struct vpx_active_map 182 { 183 unsigned char *active_map; /**< specify an on (1) or off (0) each 16x16 region within a frame */ 184 unsigned int rows; /**< number of rows */ 185 unsigned int cols; /**< number of cols */ 186 } vpx_active_map_t; 187 188 /*!\brief vpx image scaling mode 189 * 190 * This defines the data structure for image scaling mode 191 * 192 */ 193 typedef struct vpx_scaling_mode 194 { 195 VPX_SCALING_MODE h_scaling_mode; /**< horizontal scaling mode */ 196 VPX_SCALING_MODE v_scaling_mode; /**< vertical scaling mode */ 197 } vpx_scaling_mode_t; 198 199 /*!\brief VP8 encoding mode 200 * 201 * This defines VP8 encoding mode 202 * 203 */ 204 typedef enum 205 { 206 VP8_BEST_QUALITY_ENCODING, 207 VP8_GOOD_QUALITY_ENCODING, 208 VP8_REAL_TIME_ENCODING 209 } vp8e_encoding_mode; 210 211 /*!\brief VP8 token partition mode 212 * 213 * This defines VP8 partitioning mode for compressed data, i.e., the number of 214 * sub-streams in the bitstream. Used for parallelized decoding. 215 * 216 */ 217 218 typedef enum 219 { 220 VP8_ONE_TOKENPARTITION = 0, 221 VP8_TWO_TOKENPARTITION = 1, 222 VP8_FOUR_TOKENPARTITION = 2, 223 VP8_EIGHT_TOKENPARTITION = 3, 224 } vp8e_token_partitions; 225 226 227 /*!\brief VP8 encoder control function parameter type 228 * 229 * Defines the data types that VP8E control functions take. Note that 230 * additional common controls are defined in vp8.h 231 * 232 */ 233 234 235 /* These controls have been deprecated in favor of the flags parameter to 236 * vpx_codec_encode(). See the definition of VP8_EFLAG_* above. 237 */ 238 VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_UPD_ENTROPY, int) 239 VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_UPD_REFERENCE, int) 240 VPX_CTRL_USE_TYPE_DEPRECATED(VP8E_USE_REFERENCE, int) 241 242 VPX_CTRL_USE_TYPE(VP8E_SET_ROI_MAP, vpx_roi_map_t *) 243 VPX_CTRL_USE_TYPE(VP8E_SET_ACTIVEMAP, vpx_active_map_t *) 244 VPX_CTRL_USE_TYPE(VP8E_SET_SCALEMODE, vpx_scaling_mode_t *) 245 246 VPX_CTRL_USE_TYPE(VP8E_SET_CPUUSED, int) 247 VPX_CTRL_USE_TYPE(VP8E_SET_ENABLEAUTOALTREF, unsigned int) 248 VPX_CTRL_USE_TYPE(VP8E_SET_NOISE_SENSITIVITY, unsigned int) 249 VPX_CTRL_USE_TYPE(VP8E_SET_SHARPNESS, unsigned int) 250 VPX_CTRL_USE_TYPE(VP8E_SET_STATIC_THRESHOLD, unsigned int) 251 VPX_CTRL_USE_TYPE(VP8E_SET_TOKEN_PARTITIONS, vp8e_token_partitions) 252 253 VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_MAXFRAMES, unsigned int) 254 VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_STRENGTH , unsigned int) 255 VPX_CTRL_USE_TYPE(VP8E_SET_ARNR_TYPE , unsigned int) 256 257 258 VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER, int *) 259 VPX_CTRL_USE_TYPE(VP8E_GET_LAST_QUANTIZER_64, int *) 260 261 /*! @} - end defgroup vp8_encoder */ 262 #include "vpx/vpx_codec_impl_bottom.h" 263 #endif 264