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