1*fb1b10abSAndroid Build Coastguard Worker /* 2*fb1b10abSAndroid Build Coastguard Worker * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 3*fb1b10abSAndroid Build Coastguard Worker * 4*fb1b10abSAndroid Build Coastguard Worker * Use of this source code is governed by a BSD-style license 5*fb1b10abSAndroid Build Coastguard Worker * that can be found in the LICENSE file in the root of the source 6*fb1b10abSAndroid Build Coastguard Worker * tree. An additional intellectual property rights grant can be found 7*fb1b10abSAndroid Build Coastguard Worker * in the file PATENTS. All contributing project authors may 8*fb1b10abSAndroid Build Coastguard Worker * be found in the AUTHORS file in the root of the source tree. 9*fb1b10abSAndroid Build Coastguard Worker */ 10*fb1b10abSAndroid Build Coastguard Worker #ifndef VPX_VPX_VPX_ENCODER_H_ 11*fb1b10abSAndroid Build Coastguard Worker #define VPX_VPX_VPX_ENCODER_H_ 12*fb1b10abSAndroid Build Coastguard Worker 13*fb1b10abSAndroid Build Coastguard Worker /*!\defgroup encoder Encoder Algorithm Interface 14*fb1b10abSAndroid Build Coastguard Worker * \ingroup codec 15*fb1b10abSAndroid Build Coastguard Worker * This abstraction allows applications using this encoder to easily support 16*fb1b10abSAndroid Build Coastguard Worker * multiple video formats with minimal code duplication. This section describes 17*fb1b10abSAndroid Build Coastguard Worker * the interface common to all encoders. 18*fb1b10abSAndroid Build Coastguard Worker * @{ 19*fb1b10abSAndroid Build Coastguard Worker */ 20*fb1b10abSAndroid Build Coastguard Worker 21*fb1b10abSAndroid Build Coastguard Worker /*!\file 22*fb1b10abSAndroid Build Coastguard Worker * \brief Describes the encoder algorithm interface to applications. 23*fb1b10abSAndroid Build Coastguard Worker * 24*fb1b10abSAndroid Build Coastguard Worker * This file describes the interface between an application and a 25*fb1b10abSAndroid Build Coastguard Worker * video encoder algorithm. 26*fb1b10abSAndroid Build Coastguard Worker * 27*fb1b10abSAndroid Build Coastguard Worker */ 28*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 29*fb1b10abSAndroid Build Coastguard Worker extern "C" { 30*fb1b10abSAndroid Build Coastguard Worker #endif 31*fb1b10abSAndroid Build Coastguard Worker 32*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_codec.h" // IWYU pragma: export 33*fb1b10abSAndroid Build Coastguard Worker #include "./vpx_ext_ratectrl.h" 34*fb1b10abSAndroid Build Coastguard Worker 35*fb1b10abSAndroid Build Coastguard Worker /*! Temporal Scalability: Maximum length of the sequence defining frame 36*fb1b10abSAndroid Build Coastguard Worker * layer membership 37*fb1b10abSAndroid Build Coastguard Worker */ 38*fb1b10abSAndroid Build Coastguard Worker #define VPX_TS_MAX_PERIODICITY 16 39*fb1b10abSAndroid Build Coastguard Worker 40*fb1b10abSAndroid Build Coastguard Worker /*! Temporal Scalability: Maximum number of coding layers */ 41*fb1b10abSAndroid Build Coastguard Worker #define VPX_TS_MAX_LAYERS 5 42*fb1b10abSAndroid Build Coastguard Worker 43*fb1b10abSAndroid Build Coastguard Worker /*! Temporal+Spatial Scalability: Maximum number of coding layers */ 44*fb1b10abSAndroid Build Coastguard Worker #define VPX_MAX_LAYERS 12 // 3 temporal + 4 spatial layers are allowed. 45*fb1b10abSAndroid Build Coastguard Worker 46*fb1b10abSAndroid Build Coastguard Worker /*! Spatial Scalability: Maximum number of coding layers */ 47*fb1b10abSAndroid Build Coastguard Worker #define VPX_SS_MAX_LAYERS 5 48*fb1b10abSAndroid Build Coastguard Worker 49*fb1b10abSAndroid Build Coastguard Worker /*! Spatial Scalability: Default number of coding layers */ 50*fb1b10abSAndroid Build Coastguard Worker #define VPX_SS_DEFAULT_LAYERS 1 51*fb1b10abSAndroid Build Coastguard Worker 52*fb1b10abSAndroid Build Coastguard Worker /*!\brief Current ABI version number 53*fb1b10abSAndroid Build Coastguard Worker * 54*fb1b10abSAndroid Build Coastguard Worker * \internal 55*fb1b10abSAndroid Build Coastguard Worker * If this file is altered in any way that changes the ABI, this value 56*fb1b10abSAndroid Build Coastguard Worker * must be bumped. Examples include, but are not limited to, changing 57*fb1b10abSAndroid Build Coastguard Worker * types, removing or reassigning enums, adding/removing/rearranging 58*fb1b10abSAndroid Build Coastguard Worker * fields to structures 59*fb1b10abSAndroid Build Coastguard Worker * 60*fb1b10abSAndroid Build Coastguard Worker * \note 61*fb1b10abSAndroid Build Coastguard Worker * VPX_ENCODER_ABI_VERSION has a VPX_EXT_RATECTRL_ABI_VERSION component 62*fb1b10abSAndroid Build Coastguard Worker * because the VP9E_SET_EXTERNAL_RATE_CONTROL codec control uses 63*fb1b10abSAndroid Build Coastguard Worker * vpx_rc_funcs_t. 64*fb1b10abSAndroid Build Coastguard Worker */ 65*fb1b10abSAndroid Build Coastguard Worker #define VPX_ENCODER_ABI_VERSION \ 66*fb1b10abSAndroid Build Coastguard Worker (18 + VPX_CODEC_ABI_VERSION + \ 67*fb1b10abSAndroid Build Coastguard Worker VPX_EXT_RATECTRL_ABI_VERSION) /**<\hideinitializer*/ 68*fb1b10abSAndroid Build Coastguard Worker 69*fb1b10abSAndroid Build Coastguard Worker /*! \brief Encoder capabilities bitfield 70*fb1b10abSAndroid Build Coastguard Worker * 71*fb1b10abSAndroid Build Coastguard Worker * Each encoder advertises the capabilities it supports as part of its 72*fb1b10abSAndroid Build Coastguard Worker * ::vpx_codec_iface_t interface structure. Capabilities are extra 73*fb1b10abSAndroid Build Coastguard Worker * interfaces or functionality, and are not required to be supported 74*fb1b10abSAndroid Build Coastguard Worker * by an encoder. 75*fb1b10abSAndroid Build Coastguard Worker * 76*fb1b10abSAndroid Build Coastguard Worker * The available flags are specified by VPX_CODEC_CAP_* defines. 77*fb1b10abSAndroid Build Coastguard Worker */ 78*fb1b10abSAndroid Build Coastguard Worker #define VPX_CODEC_CAP_PSNR 0x10000 /**< Can issue PSNR packets */ 79*fb1b10abSAndroid Build Coastguard Worker 80*fb1b10abSAndroid Build Coastguard Worker /*! Can output one partition at a time. Each partition is returned in its 81*fb1b10abSAndroid Build Coastguard Worker * own VPX_CODEC_CX_FRAME_PKT, with the FRAME_IS_FRAGMENT flag set for 82*fb1b10abSAndroid Build Coastguard Worker * every partition but the last. In this mode all frames are always 83*fb1b10abSAndroid Build Coastguard Worker * returned partition by partition. 84*fb1b10abSAndroid Build Coastguard Worker */ 85*fb1b10abSAndroid Build Coastguard Worker #define VPX_CODEC_CAP_OUTPUT_PARTITION 0x20000 86*fb1b10abSAndroid Build Coastguard Worker 87*fb1b10abSAndroid Build Coastguard Worker /*! \brief Initialization-time Feature Enabling 88*fb1b10abSAndroid Build Coastguard Worker * 89*fb1b10abSAndroid Build Coastguard Worker * Certain codec features must be known at initialization time, to allow 90*fb1b10abSAndroid Build Coastguard Worker * for proper memory allocation. 91*fb1b10abSAndroid Build Coastguard Worker * 92*fb1b10abSAndroid Build Coastguard Worker * The available flags are specified by VPX_CODEC_USE_* defines. 93*fb1b10abSAndroid Build Coastguard Worker */ 94*fb1b10abSAndroid Build Coastguard Worker #define VPX_CODEC_USE_PSNR 0x10000 /**< Calculate PSNR on each frame */ 95*fb1b10abSAndroid Build Coastguard Worker /*!\brief Make the encoder output one partition at a time. */ 96*fb1b10abSAndroid Build Coastguard Worker #define VPX_CODEC_USE_OUTPUT_PARTITION 0x20000 97*fb1b10abSAndroid Build Coastguard Worker #define VPX_CODEC_USE_HIGHBITDEPTH 0x40000 /**< Use high bitdepth */ 98*fb1b10abSAndroid Build Coastguard Worker 99*fb1b10abSAndroid Build Coastguard Worker /*!\brief Generic fixed size buffer structure 100*fb1b10abSAndroid Build Coastguard Worker * 101*fb1b10abSAndroid Build Coastguard Worker * This structure is able to hold a reference to any fixed size buffer. 102*fb1b10abSAndroid Build Coastguard Worker */ 103*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_fixed_buf { 104*fb1b10abSAndroid Build Coastguard Worker void *buf; /**< Pointer to the data */ 105*fb1b10abSAndroid Build Coastguard Worker size_t sz; /**< Length of the buffer, in chars */ 106*fb1b10abSAndroid Build Coastguard Worker } vpx_fixed_buf_t; /**< alias for struct vpx_fixed_buf */ 107*fb1b10abSAndroid Build Coastguard Worker 108*fb1b10abSAndroid Build Coastguard Worker /*!\brief Time Stamp Type 109*fb1b10abSAndroid Build Coastguard Worker * 110*fb1b10abSAndroid Build Coastguard Worker * An integer, which when multiplied by the stream's time base, provides 111*fb1b10abSAndroid Build Coastguard Worker * the absolute time of a sample. 112*fb1b10abSAndroid Build Coastguard Worker */ 113*fb1b10abSAndroid Build Coastguard Worker typedef int64_t vpx_codec_pts_t; 114*fb1b10abSAndroid Build Coastguard Worker 115*fb1b10abSAndroid Build Coastguard Worker /*!\brief Compressed Frame Flags 116*fb1b10abSAndroid Build Coastguard Worker * 117*fb1b10abSAndroid Build Coastguard Worker * This type represents a bitfield containing information about a compressed 118*fb1b10abSAndroid Build Coastguard Worker * frame that may be useful to an application. The most significant 16 bits 119*fb1b10abSAndroid Build Coastguard Worker * can be used by an algorithm to provide additional detail, for example to 120*fb1b10abSAndroid Build Coastguard Worker * support frame types that are codec specific (MPEG-1 D-frames for example) 121*fb1b10abSAndroid Build Coastguard Worker */ 122*fb1b10abSAndroid Build Coastguard Worker typedef uint32_t vpx_codec_frame_flags_t; 123*fb1b10abSAndroid Build Coastguard Worker #define VPX_FRAME_IS_KEY 0x1u /**< frame is the start of a GOP */ 124*fb1b10abSAndroid Build Coastguard Worker /*!\brief frame can be dropped without affecting the stream (no future frame 125*fb1b10abSAndroid Build Coastguard Worker * depends on this one) */ 126*fb1b10abSAndroid Build Coastguard Worker #define VPX_FRAME_IS_DROPPABLE 0x2u 127*fb1b10abSAndroid Build Coastguard Worker /*!\brief frame should be decoded but will not be shown */ 128*fb1b10abSAndroid Build Coastguard Worker #define VPX_FRAME_IS_INVISIBLE 0x4u 129*fb1b10abSAndroid Build Coastguard Worker /*!\brief this is a fragment of the encoded frame */ 130*fb1b10abSAndroid Build Coastguard Worker #define VPX_FRAME_IS_FRAGMENT 0x8u 131*fb1b10abSAndroid Build Coastguard Worker 132*fb1b10abSAndroid Build Coastguard Worker /*!\brief Error Resilient flags 133*fb1b10abSAndroid Build Coastguard Worker * 134*fb1b10abSAndroid Build Coastguard Worker * These flags define which error resilient features to enable in the 135*fb1b10abSAndroid Build Coastguard Worker * encoder. The flags are specified through the 136*fb1b10abSAndroid Build Coastguard Worker * vpx_codec_enc_cfg::g_error_resilient variable. 137*fb1b10abSAndroid Build Coastguard Worker */ 138*fb1b10abSAndroid Build Coastguard Worker typedef uint32_t vpx_codec_er_flags_t; 139*fb1b10abSAndroid Build Coastguard Worker /*!\brief Improve resiliency against losses of whole frames */ 140*fb1b10abSAndroid Build Coastguard Worker #define VPX_ERROR_RESILIENT_DEFAULT 0x1u 141*fb1b10abSAndroid Build Coastguard Worker /*!\brief The frame partitions are independently decodable by the bool decoder, 142*fb1b10abSAndroid Build Coastguard Worker * meaning that partitions can be decoded even though earlier partitions have 143*fb1b10abSAndroid Build Coastguard Worker * been lost. Note that intra prediction is still done over the partition 144*fb1b10abSAndroid Build Coastguard Worker * boundary. 145*fb1b10abSAndroid Build Coastguard Worker * \note This is only supported by VP8.*/ 146*fb1b10abSAndroid Build Coastguard Worker #define VPX_ERROR_RESILIENT_PARTITIONS 0x2u 147*fb1b10abSAndroid Build Coastguard Worker 148*fb1b10abSAndroid Build Coastguard Worker /*!\brief Encoder output packet variants 149*fb1b10abSAndroid Build Coastguard Worker * 150*fb1b10abSAndroid Build Coastguard Worker * This enumeration lists the different kinds of data packets that can be 151*fb1b10abSAndroid Build Coastguard Worker * returned by calls to vpx_codec_get_cx_data(). Algorithms \ref MAY 152*fb1b10abSAndroid Build Coastguard Worker * extend this list to provide additional functionality. 153*fb1b10abSAndroid Build Coastguard Worker */ 154*fb1b10abSAndroid Build Coastguard Worker enum vpx_codec_cx_pkt_kind { 155*fb1b10abSAndroid Build Coastguard Worker VPX_CODEC_CX_FRAME_PKT, /**< Compressed video frame */ 156*fb1b10abSAndroid Build Coastguard Worker VPX_CODEC_STATS_PKT, /**< Two-pass statistics for this frame */ 157*fb1b10abSAndroid Build Coastguard Worker VPX_CODEC_FPMB_STATS_PKT, /**< first pass mb statistics for this frame */ 158*fb1b10abSAndroid Build Coastguard Worker VPX_CODEC_PSNR_PKT, /**< PSNR statistics for this frame */ 159*fb1b10abSAndroid Build Coastguard Worker VPX_CODEC_CUSTOM_PKT = 256 /**< Algorithm extensions */ 160*fb1b10abSAndroid Build Coastguard Worker }; 161*fb1b10abSAndroid Build Coastguard Worker 162*fb1b10abSAndroid Build Coastguard Worker /*!\brief Encoder output packet 163*fb1b10abSAndroid Build Coastguard Worker * 164*fb1b10abSAndroid Build Coastguard Worker * This structure contains the different kinds of output data the encoder 165*fb1b10abSAndroid Build Coastguard Worker * may produce while compressing a frame. 166*fb1b10abSAndroid Build Coastguard Worker */ 167*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_codec_cx_pkt { 168*fb1b10abSAndroid Build Coastguard Worker enum vpx_codec_cx_pkt_kind kind; /**< packet variant */ 169*fb1b10abSAndroid Build Coastguard Worker union { 170*fb1b10abSAndroid Build Coastguard Worker struct { 171*fb1b10abSAndroid Build Coastguard Worker void *buf; /**< compressed data buffer */ 172*fb1b10abSAndroid Build Coastguard Worker size_t sz; /**< length of compressed data */ 173*fb1b10abSAndroid Build Coastguard Worker /*!\brief time stamp to show frame (in timebase units) */ 174*fb1b10abSAndroid Build Coastguard Worker vpx_codec_pts_t pts; 175*fb1b10abSAndroid Build Coastguard Worker /*!\brief duration to show frame (in timebase units) */ 176*fb1b10abSAndroid Build Coastguard Worker unsigned long duration; 177*fb1b10abSAndroid Build Coastguard Worker vpx_codec_frame_flags_t flags; /**< flags for this frame */ 178*fb1b10abSAndroid Build Coastguard Worker /*!\brief the partition id defines the decoding order of the partitions. 179*fb1b10abSAndroid Build Coastguard Worker * Only applicable when "output partition" mode is enabled. First 180*fb1b10abSAndroid Build Coastguard Worker * partition has id 0.*/ 181*fb1b10abSAndroid Build Coastguard Worker int partition_id; 182*fb1b10abSAndroid Build Coastguard Worker /*!\brief Width and height of frames in this packet. VP8 will only use the 183*fb1b10abSAndroid Build Coastguard Worker * first one.*/ 184*fb1b10abSAndroid Build Coastguard Worker unsigned int width[VPX_SS_MAX_LAYERS]; /**< frame width */ 185*fb1b10abSAndroid Build Coastguard Worker unsigned int height[VPX_SS_MAX_LAYERS]; /**< frame height */ 186*fb1b10abSAndroid Build Coastguard Worker /*!\brief Flag to indicate if spatial layer frame in this packet is 187*fb1b10abSAndroid Build Coastguard Worker * encoded or dropped. VP8 will always be set to 1.*/ 188*fb1b10abSAndroid Build Coastguard Worker uint8_t spatial_layer_encoded[VPX_SS_MAX_LAYERS]; 189*fb1b10abSAndroid Build Coastguard Worker } frame; /**< data for compressed frame packet */ 190*fb1b10abSAndroid Build Coastguard Worker vpx_fixed_buf_t twopass_stats; /**< data for two-pass packet */ 191*fb1b10abSAndroid Build Coastguard Worker vpx_fixed_buf_t firstpass_mb_stats; /**< first pass mb packet */ 192*fb1b10abSAndroid Build Coastguard Worker struct vpx_psnr_pkt { 193*fb1b10abSAndroid Build Coastguard Worker unsigned int samples[4]; /**< Number of samples, total/y/u/v */ 194*fb1b10abSAndroid Build Coastguard Worker uint64_t sse[4]; /**< sum squared error, total/y/u/v */ 195*fb1b10abSAndroid Build Coastguard Worker double psnr[4]; /**< PSNR, total/y/u/v */ 196*fb1b10abSAndroid Build Coastguard Worker } psnr; /**< data for PSNR packet */ 197*fb1b10abSAndroid Build Coastguard Worker vpx_fixed_buf_t raw; /**< data for arbitrary packets */ 198*fb1b10abSAndroid Build Coastguard Worker 199*fb1b10abSAndroid Build Coastguard Worker /* This packet size is fixed to allow codecs to extend this 200*fb1b10abSAndroid Build Coastguard Worker * interface without having to manage storage for raw packets, 201*fb1b10abSAndroid Build Coastguard Worker * i.e., if it's smaller than 128 bytes, you can store in the 202*fb1b10abSAndroid Build Coastguard Worker * packet list directly. 203*fb1b10abSAndroid Build Coastguard Worker */ 204*fb1b10abSAndroid Build Coastguard Worker char pad[128 - sizeof(enum vpx_codec_cx_pkt_kind)]; /**< fixed sz */ 205*fb1b10abSAndroid Build Coastguard Worker } data; /**< packet data */ 206*fb1b10abSAndroid Build Coastguard Worker } vpx_codec_cx_pkt_t; /**< alias for struct vpx_codec_cx_pkt */ 207*fb1b10abSAndroid Build Coastguard Worker 208*fb1b10abSAndroid Build Coastguard Worker /*!\brief Encoder return output buffer callback 209*fb1b10abSAndroid Build Coastguard Worker * 210*fb1b10abSAndroid Build Coastguard Worker * This callback function, when registered, returns with packets when each 211*fb1b10abSAndroid Build Coastguard Worker * spatial layer is encoded. 212*fb1b10abSAndroid Build Coastguard Worker */ 213*fb1b10abSAndroid Build Coastguard Worker typedef void (*vpx_codec_enc_output_cx_pkt_cb_fn_t)(vpx_codec_cx_pkt_t *pkt, 214*fb1b10abSAndroid Build Coastguard Worker void *user_data); 215*fb1b10abSAndroid Build Coastguard Worker 216*fb1b10abSAndroid Build Coastguard Worker /*!\brief Callback function pointer / user data pair storage */ 217*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_codec_enc_output_cx_cb_pair { 218*fb1b10abSAndroid Build Coastguard Worker vpx_codec_enc_output_cx_pkt_cb_fn_t output_cx_pkt; /**< Callback function */ 219*fb1b10abSAndroid Build Coastguard Worker void *user_priv; /**< Pointer to private data */ 220*fb1b10abSAndroid Build Coastguard Worker } vpx_codec_priv_output_cx_pkt_cb_pair_t; 221*fb1b10abSAndroid Build Coastguard Worker 222*fb1b10abSAndroid Build Coastguard Worker /*!\brief Rational Number 223*fb1b10abSAndroid Build Coastguard Worker * 224*fb1b10abSAndroid Build Coastguard Worker * This structure holds a fractional value. 225*fb1b10abSAndroid Build Coastguard Worker */ 226*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_rational { 227*fb1b10abSAndroid Build Coastguard Worker int num; /**< fraction numerator */ 228*fb1b10abSAndroid Build Coastguard Worker int den; /**< fraction denominator */ 229*fb1b10abSAndroid Build Coastguard Worker } vpx_rational_t; /**< alias for struct vpx_rational */ 230*fb1b10abSAndroid Build Coastguard Worker 231*fb1b10abSAndroid Build Coastguard Worker /*!\brief Multi-pass Encoding Pass */ 232*fb1b10abSAndroid Build Coastguard Worker typedef enum vpx_enc_pass { 233*fb1b10abSAndroid Build Coastguard Worker VPX_RC_ONE_PASS, /**< Single pass mode */ 234*fb1b10abSAndroid Build Coastguard Worker VPX_RC_FIRST_PASS, /**< First pass of multi-pass mode */ 235*fb1b10abSAndroid Build Coastguard Worker VPX_RC_LAST_PASS /**< Final pass of multi-pass mode */ 236*fb1b10abSAndroid Build Coastguard Worker } vpx_enc_pass; 237*fb1b10abSAndroid Build Coastguard Worker 238*fb1b10abSAndroid Build Coastguard Worker /*!\brief Rate control mode */ 239*fb1b10abSAndroid Build Coastguard Worker enum vpx_rc_mode { 240*fb1b10abSAndroid Build Coastguard Worker VPX_VBR, /**< Variable Bit Rate (VBR) mode */ 241*fb1b10abSAndroid Build Coastguard Worker VPX_CBR, /**< Constant Bit Rate (CBR) mode */ 242*fb1b10abSAndroid Build Coastguard Worker VPX_CQ, /**< Constrained Quality (CQ) mode */ 243*fb1b10abSAndroid Build Coastguard Worker VPX_Q, /**< Constant Quality (Q) mode */ 244*fb1b10abSAndroid Build Coastguard Worker }; 245*fb1b10abSAndroid Build Coastguard Worker 246*fb1b10abSAndroid Build Coastguard Worker /*!\brief Keyframe placement mode. 247*fb1b10abSAndroid Build Coastguard Worker * 248*fb1b10abSAndroid Build Coastguard Worker * This enumeration determines whether keyframes are placed automatically by 249*fb1b10abSAndroid Build Coastguard Worker * the encoder or whether this behavior is disabled. Older releases of this 250*fb1b10abSAndroid Build Coastguard Worker * SDK were implemented such that VPX_KF_FIXED meant keyframes were disabled. 251*fb1b10abSAndroid Build Coastguard Worker * This name is confusing for this behavior, so the new symbols to be used 252*fb1b10abSAndroid Build Coastguard Worker * are VPX_KF_AUTO and VPX_KF_DISABLED. 253*fb1b10abSAndroid Build Coastguard Worker */ 254*fb1b10abSAndroid Build Coastguard Worker enum vpx_kf_mode { 255*fb1b10abSAndroid Build Coastguard Worker VPX_KF_FIXED, /**< deprecated, implies VPX_KF_DISABLED */ 256*fb1b10abSAndroid Build Coastguard Worker VPX_KF_AUTO, /**< Encoder determines optimal placement automatically */ 257*fb1b10abSAndroid Build Coastguard Worker VPX_KF_DISABLED = 0 /**< Encoder does not place keyframes. */ 258*fb1b10abSAndroid Build Coastguard Worker }; 259*fb1b10abSAndroid Build Coastguard Worker 260*fb1b10abSAndroid Build Coastguard Worker /*!\brief Encoded Frame Flags 261*fb1b10abSAndroid Build Coastguard Worker * 262*fb1b10abSAndroid Build Coastguard Worker * This type indicates a bitfield to be passed to vpx_codec_encode(), defining 263*fb1b10abSAndroid Build Coastguard Worker * per-frame boolean values. By convention, bits common to all codecs will be 264*fb1b10abSAndroid Build Coastguard Worker * named VPX_EFLAG_*, and bits specific to an algorithm will be named 265*fb1b10abSAndroid Build Coastguard Worker * /algo/_eflag_*. The lower order 16 bits are reserved for common use. 266*fb1b10abSAndroid Build Coastguard Worker */ 267*fb1b10abSAndroid Build Coastguard Worker typedef long vpx_enc_frame_flags_t; 268*fb1b10abSAndroid Build Coastguard Worker #define VPX_EFLAG_FORCE_KF (1 << 0) /**< Force this frame to be a keyframe */ 269*fb1b10abSAndroid Build Coastguard Worker 270*fb1b10abSAndroid Build Coastguard Worker /*!\brief Encoder configuration structure 271*fb1b10abSAndroid Build Coastguard Worker * 272*fb1b10abSAndroid Build Coastguard Worker * This structure contains the encoder settings that have common representations 273*fb1b10abSAndroid Build Coastguard Worker * across all codecs. This doesn't imply that all codecs support all features, 274*fb1b10abSAndroid Build Coastguard Worker * however. 275*fb1b10abSAndroid Build Coastguard Worker */ 276*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_codec_enc_cfg { 277*fb1b10abSAndroid Build Coastguard Worker /* 278*fb1b10abSAndroid Build Coastguard Worker * generic settings (g) 279*fb1b10abSAndroid Build Coastguard Worker */ 280*fb1b10abSAndroid Build Coastguard Worker 281*fb1b10abSAndroid Build Coastguard Worker /*!\brief Deprecated: Algorithm specific "usage" value 282*fb1b10abSAndroid Build Coastguard Worker * 283*fb1b10abSAndroid Build Coastguard Worker * This value must be zero. 284*fb1b10abSAndroid Build Coastguard Worker */ 285*fb1b10abSAndroid Build Coastguard Worker unsigned int g_usage; 286*fb1b10abSAndroid Build Coastguard Worker 287*fb1b10abSAndroid Build Coastguard Worker /*!\brief Maximum number of threads to use 288*fb1b10abSAndroid Build Coastguard Worker * 289*fb1b10abSAndroid Build Coastguard Worker * For multi-threaded implementations, use no more than this number of 290*fb1b10abSAndroid Build Coastguard Worker * threads. The codec may use fewer threads than allowed. The value 291*fb1b10abSAndroid Build Coastguard Worker * 0 is equivalent to the value 1. 292*fb1b10abSAndroid Build Coastguard Worker */ 293*fb1b10abSAndroid Build Coastguard Worker unsigned int g_threads; 294*fb1b10abSAndroid Build Coastguard Worker 295*fb1b10abSAndroid Build Coastguard Worker /*!\brief Bitstream profile to use 296*fb1b10abSAndroid Build Coastguard Worker * 297*fb1b10abSAndroid Build Coastguard Worker * Some codecs support a notion of multiple bitstream profiles. Typically 298*fb1b10abSAndroid Build Coastguard Worker * this maps to a set of features that are turned on or off. Often the 299*fb1b10abSAndroid Build Coastguard Worker * profile to use is determined by the features of the intended decoder. 300*fb1b10abSAndroid Build Coastguard Worker * Consult the documentation for the codec to determine the valid values 301*fb1b10abSAndroid Build Coastguard Worker * for this parameter, or set to zero for a sane default. 302*fb1b10abSAndroid Build Coastguard Worker */ 303*fb1b10abSAndroid Build Coastguard Worker unsigned int g_profile; /**< profile of bitstream to use */ 304*fb1b10abSAndroid Build Coastguard Worker 305*fb1b10abSAndroid Build Coastguard Worker /*!\brief Width of the frame 306*fb1b10abSAndroid Build Coastguard Worker * 307*fb1b10abSAndroid Build Coastguard Worker * This value identifies the presentation resolution of the frame, 308*fb1b10abSAndroid Build Coastguard Worker * in pixels. Note that the frames passed as input to the encoder must 309*fb1b10abSAndroid Build Coastguard Worker * have this resolution. Frames will be presented by the decoder in this 310*fb1b10abSAndroid Build Coastguard Worker * resolution, independent of any spatial resampling the encoder may do. 311*fb1b10abSAndroid Build Coastguard Worker */ 312*fb1b10abSAndroid Build Coastguard Worker unsigned int g_w; 313*fb1b10abSAndroid Build Coastguard Worker 314*fb1b10abSAndroid Build Coastguard Worker /*!\brief Height of the frame 315*fb1b10abSAndroid Build Coastguard Worker * 316*fb1b10abSAndroid Build Coastguard Worker * This value identifies the presentation resolution of the frame, 317*fb1b10abSAndroid Build Coastguard Worker * in pixels. Note that the frames passed as input to the encoder must 318*fb1b10abSAndroid Build Coastguard Worker * have this resolution. Frames will be presented by the decoder in this 319*fb1b10abSAndroid Build Coastguard Worker * resolution, independent of any spatial resampling the encoder may do. 320*fb1b10abSAndroid Build Coastguard Worker */ 321*fb1b10abSAndroid Build Coastguard Worker unsigned int g_h; 322*fb1b10abSAndroid Build Coastguard Worker 323*fb1b10abSAndroid Build Coastguard Worker /*!\brief Bit-depth of the codec 324*fb1b10abSAndroid Build Coastguard Worker * 325*fb1b10abSAndroid Build Coastguard Worker * This value identifies the bit_depth of the codec, 326*fb1b10abSAndroid Build Coastguard Worker * Only certain bit-depths are supported as identified in the 327*fb1b10abSAndroid Build Coastguard Worker * vpx_bit_depth_t enum. 328*fb1b10abSAndroid Build Coastguard Worker */ 329*fb1b10abSAndroid Build Coastguard Worker vpx_bit_depth_t g_bit_depth; 330*fb1b10abSAndroid Build Coastguard Worker 331*fb1b10abSAndroid Build Coastguard Worker /*!\brief Bit-depth of the input frames 332*fb1b10abSAndroid Build Coastguard Worker * 333*fb1b10abSAndroid Build Coastguard Worker * This value identifies the bit_depth of the input frames in bits. 334*fb1b10abSAndroid Build Coastguard Worker * Note that the frames passed as input to the encoder must have 335*fb1b10abSAndroid Build Coastguard Worker * this bit-depth. 336*fb1b10abSAndroid Build Coastguard Worker */ 337*fb1b10abSAndroid Build Coastguard Worker unsigned int g_input_bit_depth; 338*fb1b10abSAndroid Build Coastguard Worker 339*fb1b10abSAndroid Build Coastguard Worker /*!\brief Stream timebase units 340*fb1b10abSAndroid Build Coastguard Worker * 341*fb1b10abSAndroid Build Coastguard Worker * Indicates the smallest interval of time, in seconds, used by the stream. 342*fb1b10abSAndroid Build Coastguard Worker * For fixed frame rate material, or variable frame rate material where 343*fb1b10abSAndroid Build Coastguard Worker * frames are timed at a multiple of a given clock (ex: video capture), 344*fb1b10abSAndroid Build Coastguard Worker * the \ref RECOMMENDED method is to set the timebase to the reciprocal 345*fb1b10abSAndroid Build Coastguard Worker * of the frame rate (ex: 1001/30000 for 29.970 Hz NTSC). This allows the 346*fb1b10abSAndroid Build Coastguard Worker * pts to correspond to the frame number, which can be handy. For 347*fb1b10abSAndroid Build Coastguard Worker * re-encoding video from containers with absolute time timestamps, the 348*fb1b10abSAndroid Build Coastguard Worker * \ref RECOMMENDED method is to set the timebase to that of the parent 349*fb1b10abSAndroid Build Coastguard Worker * container or multimedia framework (ex: 1/1000 for ms, as in FLV). 350*fb1b10abSAndroid Build Coastguard Worker */ 351*fb1b10abSAndroid Build Coastguard Worker struct vpx_rational g_timebase; 352*fb1b10abSAndroid Build Coastguard Worker 353*fb1b10abSAndroid Build Coastguard Worker /*!\brief Enable error resilient modes. 354*fb1b10abSAndroid Build Coastguard Worker * 355*fb1b10abSAndroid Build Coastguard Worker * The error resilient bitfield indicates to the encoder which features 356*fb1b10abSAndroid Build Coastguard Worker * it should enable to take measures for streaming over lossy or noisy 357*fb1b10abSAndroid Build Coastguard Worker * links. 358*fb1b10abSAndroid Build Coastguard Worker */ 359*fb1b10abSAndroid Build Coastguard Worker vpx_codec_er_flags_t g_error_resilient; 360*fb1b10abSAndroid Build Coastguard Worker 361*fb1b10abSAndroid Build Coastguard Worker /*!\brief Multi-pass Encoding Mode 362*fb1b10abSAndroid Build Coastguard Worker * 363*fb1b10abSAndroid Build Coastguard Worker * This value should be set to the current phase for multi-pass encoding. 364*fb1b10abSAndroid Build Coastguard Worker * For single pass, set to #VPX_RC_ONE_PASS. 365*fb1b10abSAndroid Build Coastguard Worker */ 366*fb1b10abSAndroid Build Coastguard Worker enum vpx_enc_pass g_pass; 367*fb1b10abSAndroid Build Coastguard Worker 368*fb1b10abSAndroid Build Coastguard Worker /*!\brief Allow lagged encoding 369*fb1b10abSAndroid Build Coastguard Worker * 370*fb1b10abSAndroid Build Coastguard Worker * If set, this value allows the encoder to consume a number of input 371*fb1b10abSAndroid Build Coastguard Worker * frames before producing output frames. This allows the encoder to 372*fb1b10abSAndroid Build Coastguard Worker * base decisions for the current frame on future frames. This does 373*fb1b10abSAndroid Build Coastguard Worker * increase the latency of the encoding pipeline, so it is not appropriate 374*fb1b10abSAndroid Build Coastguard Worker * in all situations (ex: realtime encoding). 375*fb1b10abSAndroid Build Coastguard Worker * 376*fb1b10abSAndroid Build Coastguard Worker * Note that this is a maximum value -- the encoder may produce frames 377*fb1b10abSAndroid Build Coastguard Worker * sooner than the given limit. Set this value to 0 to disable this 378*fb1b10abSAndroid Build Coastguard Worker * feature. 379*fb1b10abSAndroid Build Coastguard Worker */ 380*fb1b10abSAndroid Build Coastguard Worker unsigned int g_lag_in_frames; 381*fb1b10abSAndroid Build Coastguard Worker 382*fb1b10abSAndroid Build Coastguard Worker /* 383*fb1b10abSAndroid Build Coastguard Worker * rate control settings (rc) 384*fb1b10abSAndroid Build Coastguard Worker */ 385*fb1b10abSAndroid Build Coastguard Worker 386*fb1b10abSAndroid Build Coastguard Worker /*!\brief Temporal resampling configuration, if supported by the codec. 387*fb1b10abSAndroid Build Coastguard Worker * 388*fb1b10abSAndroid Build Coastguard Worker * Temporal resampling allows the codec to "drop" frames as a strategy to 389*fb1b10abSAndroid Build Coastguard Worker * meet its target data rate. This can cause temporal discontinuities in 390*fb1b10abSAndroid Build Coastguard Worker * the encoded video, which may appear as stuttering during playback. This 391*fb1b10abSAndroid Build Coastguard Worker * trade-off is often acceptable, but for many applications is not. It can 392*fb1b10abSAndroid Build Coastguard Worker * be disabled in these cases. 393*fb1b10abSAndroid Build Coastguard Worker * 394*fb1b10abSAndroid Build Coastguard Worker * This threshold is described as a percentage of the target data buffer. 395*fb1b10abSAndroid Build Coastguard Worker * When the data buffer falls below this percentage of fullness, a 396*fb1b10abSAndroid Build Coastguard Worker * dropped frame is indicated. Set the threshold to zero (0) to disable 397*fb1b10abSAndroid Build Coastguard Worker * this feature. 398*fb1b10abSAndroid Build Coastguard Worker */ 399*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_dropframe_thresh; 400*fb1b10abSAndroid Build Coastguard Worker 401*fb1b10abSAndroid Build Coastguard Worker /*!\brief Enable/disable spatial resampling, if supported by the codec. 402*fb1b10abSAndroid Build Coastguard Worker * 403*fb1b10abSAndroid Build Coastguard Worker * Spatial resampling allows the codec to compress a lower resolution 404*fb1b10abSAndroid Build Coastguard Worker * version of the frame, which is then upscaled by the encoder to the 405*fb1b10abSAndroid Build Coastguard Worker * correct presentation resolution. This increases visual quality at 406*fb1b10abSAndroid Build Coastguard Worker * low data rates, at the expense of CPU time on the encoder/decoder. 407*fb1b10abSAndroid Build Coastguard Worker */ 408*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_resize_allowed; 409*fb1b10abSAndroid Build Coastguard Worker 410*fb1b10abSAndroid Build Coastguard Worker /*!\brief Internal coded frame width. 411*fb1b10abSAndroid Build Coastguard Worker * 412*fb1b10abSAndroid Build Coastguard Worker * If spatial resampling is enabled this specifies the width of the 413*fb1b10abSAndroid Build Coastguard Worker * encoded frame. 414*fb1b10abSAndroid Build Coastguard Worker */ 415*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_scaled_width; 416*fb1b10abSAndroid Build Coastguard Worker 417*fb1b10abSAndroid Build Coastguard Worker /*!\brief Internal coded frame height. 418*fb1b10abSAndroid Build Coastguard Worker * 419*fb1b10abSAndroid Build Coastguard Worker * If spatial resampling is enabled this specifies the height of the 420*fb1b10abSAndroid Build Coastguard Worker * encoded frame. 421*fb1b10abSAndroid Build Coastguard Worker */ 422*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_scaled_height; 423*fb1b10abSAndroid Build Coastguard Worker 424*fb1b10abSAndroid Build Coastguard Worker /*!\brief Spatial resampling up watermark. 425*fb1b10abSAndroid Build Coastguard Worker * 426*fb1b10abSAndroid Build Coastguard Worker * This threshold is described as a percentage of the target data buffer. 427*fb1b10abSAndroid Build Coastguard Worker * When the data buffer rises above this percentage of fullness, the 428*fb1b10abSAndroid Build Coastguard Worker * encoder will step up to a higher resolution version of the frame. 429*fb1b10abSAndroid Build Coastguard Worker */ 430*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_resize_up_thresh; 431*fb1b10abSAndroid Build Coastguard Worker 432*fb1b10abSAndroid Build Coastguard Worker /*!\brief Spatial resampling down watermark. 433*fb1b10abSAndroid Build Coastguard Worker * 434*fb1b10abSAndroid Build Coastguard Worker * This threshold is described as a percentage of the target data buffer. 435*fb1b10abSAndroid Build Coastguard Worker * When the data buffer falls below this percentage of fullness, the 436*fb1b10abSAndroid Build Coastguard Worker * encoder will step down to a lower resolution version of the frame. 437*fb1b10abSAndroid Build Coastguard Worker */ 438*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_resize_down_thresh; 439*fb1b10abSAndroid Build Coastguard Worker 440*fb1b10abSAndroid Build Coastguard Worker /*!\brief Rate control algorithm to use. 441*fb1b10abSAndroid Build Coastguard Worker * 442*fb1b10abSAndroid Build Coastguard Worker * Indicates whether the end usage of this stream is to be streamed over 443*fb1b10abSAndroid Build Coastguard Worker * a bandwidth constrained link, indicating that Constant Bit Rate (CBR) 444*fb1b10abSAndroid Build Coastguard Worker * mode should be used, or whether it will be played back on a high 445*fb1b10abSAndroid Build Coastguard Worker * bandwidth link, as from a local disk, where higher variations in 446*fb1b10abSAndroid Build Coastguard Worker * bitrate are acceptable. 447*fb1b10abSAndroid Build Coastguard Worker */ 448*fb1b10abSAndroid Build Coastguard Worker enum vpx_rc_mode rc_end_usage; 449*fb1b10abSAndroid Build Coastguard Worker 450*fb1b10abSAndroid Build Coastguard Worker /*!\brief Two-pass stats buffer. 451*fb1b10abSAndroid Build Coastguard Worker * 452*fb1b10abSAndroid Build Coastguard Worker * A buffer containing all of the stats packets produced in the first 453*fb1b10abSAndroid Build Coastguard Worker * pass, concatenated. 454*fb1b10abSAndroid Build Coastguard Worker */ 455*fb1b10abSAndroid Build Coastguard Worker vpx_fixed_buf_t rc_twopass_stats_in; 456*fb1b10abSAndroid Build Coastguard Worker 457*fb1b10abSAndroid Build Coastguard Worker /*!\brief first pass mb stats buffer. 458*fb1b10abSAndroid Build Coastguard Worker * 459*fb1b10abSAndroid Build Coastguard Worker * A buffer containing all of the first pass mb stats packets produced 460*fb1b10abSAndroid Build Coastguard Worker * in the first pass, concatenated. 461*fb1b10abSAndroid Build Coastguard Worker */ 462*fb1b10abSAndroid Build Coastguard Worker vpx_fixed_buf_t rc_firstpass_mb_stats_in; 463*fb1b10abSAndroid Build Coastguard Worker 464*fb1b10abSAndroid Build Coastguard Worker /*!\brief Target data rate 465*fb1b10abSAndroid Build Coastguard Worker * 466*fb1b10abSAndroid Build Coastguard Worker * Target bitrate to use for this stream, in kilobits per second. 467*fb1b10abSAndroid Build Coastguard Worker * Internally capped to the smaller of the uncompressed bitrate and 468*fb1b10abSAndroid Build Coastguard Worker * 1000000 kilobits per second. 469*fb1b10abSAndroid Build Coastguard Worker */ 470*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_target_bitrate; 471*fb1b10abSAndroid Build Coastguard Worker 472*fb1b10abSAndroid Build Coastguard Worker /* 473*fb1b10abSAndroid Build Coastguard Worker * quantizer settings 474*fb1b10abSAndroid Build Coastguard Worker */ 475*fb1b10abSAndroid Build Coastguard Worker 476*fb1b10abSAndroid Build Coastguard Worker /*!\brief Minimum (Best Quality) Quantizer 477*fb1b10abSAndroid Build Coastguard Worker * 478*fb1b10abSAndroid Build Coastguard Worker * The quantizer is the most direct control over the quality of the 479*fb1b10abSAndroid Build Coastguard Worker * encoded image. The range of valid values for the quantizer is codec 480*fb1b10abSAndroid Build Coastguard Worker * specific. Consult the documentation for the codec to determine the 481*fb1b10abSAndroid Build Coastguard Worker * values to use. 482*fb1b10abSAndroid Build Coastguard Worker */ 483*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_min_quantizer; 484*fb1b10abSAndroid Build Coastguard Worker 485*fb1b10abSAndroid Build Coastguard Worker /*!\brief Maximum (Worst Quality) Quantizer 486*fb1b10abSAndroid Build Coastguard Worker * 487*fb1b10abSAndroid Build Coastguard Worker * The quantizer is the most direct control over the quality of the 488*fb1b10abSAndroid Build Coastguard Worker * encoded image. The range of valid values for the quantizer is codec 489*fb1b10abSAndroid Build Coastguard Worker * specific. Consult the documentation for the codec to determine the 490*fb1b10abSAndroid Build Coastguard Worker * values to use. 491*fb1b10abSAndroid Build Coastguard Worker */ 492*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_max_quantizer; 493*fb1b10abSAndroid Build Coastguard Worker 494*fb1b10abSAndroid Build Coastguard Worker /* 495*fb1b10abSAndroid Build Coastguard Worker * bitrate tolerance 496*fb1b10abSAndroid Build Coastguard Worker */ 497*fb1b10abSAndroid Build Coastguard Worker 498*fb1b10abSAndroid Build Coastguard Worker /*!\brief Rate control adaptation undershoot control 499*fb1b10abSAndroid Build Coastguard Worker * 500*fb1b10abSAndroid Build Coastguard Worker * VP8: Expressed as a percentage of the target bitrate, 501*fb1b10abSAndroid Build Coastguard Worker * controls the maximum allowed adaptation speed of the codec. 502*fb1b10abSAndroid Build Coastguard Worker * This factor controls the maximum amount of bits that can 503*fb1b10abSAndroid Build Coastguard Worker * be subtracted from the target bitrate in order to compensate 504*fb1b10abSAndroid Build Coastguard Worker * for prior overshoot. 505*fb1b10abSAndroid Build Coastguard Worker * VP9: Expressed as a percentage of the target bitrate, a threshold 506*fb1b10abSAndroid Build Coastguard Worker * undershoot level (current rate vs target) beyond which more aggressive 507*fb1b10abSAndroid Build Coastguard Worker * corrective measures are taken. 508*fb1b10abSAndroid Build Coastguard Worker * * 509*fb1b10abSAndroid Build Coastguard Worker * Valid values in the range VP8:0-100 VP9: 0-100. 510*fb1b10abSAndroid Build Coastguard Worker */ 511*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_undershoot_pct; 512*fb1b10abSAndroid Build Coastguard Worker 513*fb1b10abSAndroid Build Coastguard Worker /*!\brief Rate control adaptation overshoot control 514*fb1b10abSAndroid Build Coastguard Worker * 515*fb1b10abSAndroid Build Coastguard Worker * VP8: Expressed as a percentage of the target bitrate, 516*fb1b10abSAndroid Build Coastguard Worker * controls the maximum allowed adaptation speed of the codec. 517*fb1b10abSAndroid Build Coastguard Worker * This factor controls the maximum amount of bits that can 518*fb1b10abSAndroid Build Coastguard Worker * be added to the target bitrate in order to compensate for 519*fb1b10abSAndroid Build Coastguard Worker * prior undershoot. 520*fb1b10abSAndroid Build Coastguard Worker * VP9: Expressed as a percentage of the target bitrate, a threshold 521*fb1b10abSAndroid Build Coastguard Worker * overshoot level (current rate vs target) beyond which more aggressive 522*fb1b10abSAndroid Build Coastguard Worker * corrective measures are taken. 523*fb1b10abSAndroid Build Coastguard Worker * 524*fb1b10abSAndroid Build Coastguard Worker * Valid values in the range VP8:0-100 VP9: 0-100. 525*fb1b10abSAndroid Build Coastguard Worker */ 526*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_overshoot_pct; 527*fb1b10abSAndroid Build Coastguard Worker 528*fb1b10abSAndroid Build Coastguard Worker /* 529*fb1b10abSAndroid Build Coastguard Worker * decoder buffer model parameters 530*fb1b10abSAndroid Build Coastguard Worker */ 531*fb1b10abSAndroid Build Coastguard Worker 532*fb1b10abSAndroid Build Coastguard Worker /*!\brief Decoder Buffer Size 533*fb1b10abSAndroid Build Coastguard Worker * 534*fb1b10abSAndroid Build Coastguard Worker * This value indicates the amount of data that may be buffered by the 535*fb1b10abSAndroid Build Coastguard Worker * decoding application. Note that this value is expressed in units of 536*fb1b10abSAndroid Build Coastguard Worker * time (milliseconds). For example, a value of 5000 indicates that the 537*fb1b10abSAndroid Build Coastguard Worker * client will buffer (at least) 5000ms worth of encoded data. Use the 538*fb1b10abSAndroid Build Coastguard Worker * target bitrate (#rc_target_bitrate) to convert to bits/bytes, if 539*fb1b10abSAndroid Build Coastguard Worker * necessary. 540*fb1b10abSAndroid Build Coastguard Worker */ 541*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_buf_sz; 542*fb1b10abSAndroid Build Coastguard Worker 543*fb1b10abSAndroid Build Coastguard Worker /*!\brief Decoder Buffer Initial Size 544*fb1b10abSAndroid Build Coastguard Worker * 545*fb1b10abSAndroid Build Coastguard Worker * This value indicates the amount of data that will be buffered by the 546*fb1b10abSAndroid Build Coastguard Worker * decoding application prior to beginning playback. This value is 547*fb1b10abSAndroid Build Coastguard Worker * expressed in units of time (milliseconds). Use the target bitrate 548*fb1b10abSAndroid Build Coastguard Worker * (#rc_target_bitrate) to convert to bits/bytes, if necessary. 549*fb1b10abSAndroid Build Coastguard Worker */ 550*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_buf_initial_sz; 551*fb1b10abSAndroid Build Coastguard Worker 552*fb1b10abSAndroid Build Coastguard Worker /*!\brief Decoder Buffer Optimal Size 553*fb1b10abSAndroid Build Coastguard Worker * 554*fb1b10abSAndroid Build Coastguard Worker * This value indicates the amount of data that the encoder should try 555*fb1b10abSAndroid Build Coastguard Worker * to maintain in the decoder's buffer. This value is expressed in units 556*fb1b10abSAndroid Build Coastguard Worker * of time (milliseconds). Use the target bitrate (#rc_target_bitrate) 557*fb1b10abSAndroid Build Coastguard Worker * to convert to bits/bytes, if necessary. 558*fb1b10abSAndroid Build Coastguard Worker */ 559*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_buf_optimal_sz; 560*fb1b10abSAndroid Build Coastguard Worker 561*fb1b10abSAndroid Build Coastguard Worker /* 562*fb1b10abSAndroid Build Coastguard Worker * 2 pass rate control parameters 563*fb1b10abSAndroid Build Coastguard Worker */ 564*fb1b10abSAndroid Build Coastguard Worker 565*fb1b10abSAndroid Build Coastguard Worker /*!\brief Two-pass mode CBR/VBR bias 566*fb1b10abSAndroid Build Coastguard Worker * 567*fb1b10abSAndroid Build Coastguard Worker * Bias, expressed on a scale of 0 to 100, for determining target size 568*fb1b10abSAndroid Build Coastguard Worker * for the current frame. The value 0 indicates the optimal CBR mode 569*fb1b10abSAndroid Build Coastguard Worker * value should be used. The value 100 indicates the optimal VBR mode 570*fb1b10abSAndroid Build Coastguard Worker * value should be used. Values in between indicate which way the 571*fb1b10abSAndroid Build Coastguard Worker * encoder should "lean." 572*fb1b10abSAndroid Build Coastguard Worker */ 573*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_2pass_vbr_bias_pct; 574*fb1b10abSAndroid Build Coastguard Worker 575*fb1b10abSAndroid Build Coastguard Worker /*!\brief Two-pass mode per-GOP minimum bitrate 576*fb1b10abSAndroid Build Coastguard Worker * 577*fb1b10abSAndroid Build Coastguard Worker * This value, expressed as a percentage of the target bitrate, indicates 578*fb1b10abSAndroid Build Coastguard Worker * the minimum bitrate to be used for a single GOP (aka "section") 579*fb1b10abSAndroid Build Coastguard Worker */ 580*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_2pass_vbr_minsection_pct; 581*fb1b10abSAndroid Build Coastguard Worker 582*fb1b10abSAndroid Build Coastguard Worker /*!\brief Two-pass mode per-GOP maximum bitrate 583*fb1b10abSAndroid Build Coastguard Worker * 584*fb1b10abSAndroid Build Coastguard Worker * This value, expressed as a percentage of the target bitrate, indicates 585*fb1b10abSAndroid Build Coastguard Worker * the maximum bitrate to be used for a single GOP (aka "section") 586*fb1b10abSAndroid Build Coastguard Worker */ 587*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_2pass_vbr_maxsection_pct; 588*fb1b10abSAndroid Build Coastguard Worker 589*fb1b10abSAndroid Build Coastguard Worker /*!\brief Two-pass corpus vbr mode complexity control 590*fb1b10abSAndroid Build Coastguard Worker * Used only in VP9: A value representing the corpus midpoint complexity 591*fb1b10abSAndroid Build Coastguard Worker * for corpus vbr mode. This value defaults to 0 which disables corpus vbr 592*fb1b10abSAndroid Build Coastguard Worker * mode in favour of normal vbr mode. 593*fb1b10abSAndroid Build Coastguard Worker */ 594*fb1b10abSAndroid Build Coastguard Worker unsigned int rc_2pass_vbr_corpus_complexity; 595*fb1b10abSAndroid Build Coastguard Worker 596*fb1b10abSAndroid Build Coastguard Worker /* 597*fb1b10abSAndroid Build Coastguard Worker * keyframing settings (kf) 598*fb1b10abSAndroid Build Coastguard Worker */ 599*fb1b10abSAndroid Build Coastguard Worker 600*fb1b10abSAndroid Build Coastguard Worker /*!\brief Keyframe placement mode 601*fb1b10abSAndroid Build Coastguard Worker * 602*fb1b10abSAndroid Build Coastguard Worker * This value indicates whether the encoder should place keyframes at a 603*fb1b10abSAndroid Build Coastguard Worker * fixed interval, or determine the optimal placement automatically 604*fb1b10abSAndroid Build Coastguard Worker * (as governed by the #kf_min_dist and #kf_max_dist parameters) 605*fb1b10abSAndroid Build Coastguard Worker */ 606*fb1b10abSAndroid Build Coastguard Worker enum vpx_kf_mode kf_mode; 607*fb1b10abSAndroid Build Coastguard Worker 608*fb1b10abSAndroid Build Coastguard Worker /*!\brief Keyframe minimum interval 609*fb1b10abSAndroid Build Coastguard Worker * 610*fb1b10abSAndroid Build Coastguard Worker * This value, expressed as a number of frames, prevents the encoder from 611*fb1b10abSAndroid Build Coastguard Worker * placing a keyframe nearer than kf_min_dist to the previous keyframe. At 612*fb1b10abSAndroid Build Coastguard Worker * least kf_min_dist frames non-keyframes will be coded before the next 613*fb1b10abSAndroid Build Coastguard Worker * keyframe. Set kf_min_dist equal to kf_max_dist for a fixed interval. 614*fb1b10abSAndroid Build Coastguard Worker */ 615*fb1b10abSAndroid Build Coastguard Worker unsigned int kf_min_dist; 616*fb1b10abSAndroid Build Coastguard Worker 617*fb1b10abSAndroid Build Coastguard Worker /*!\brief Keyframe maximum interval 618*fb1b10abSAndroid Build Coastguard Worker * 619*fb1b10abSAndroid Build Coastguard Worker * This value, expressed as a number of frames, forces the encoder to code 620*fb1b10abSAndroid Build Coastguard Worker * a keyframe if one has not been coded in the last kf_max_dist frames. 621*fb1b10abSAndroid Build Coastguard Worker * A value of 0 implies all frames will be keyframes. Set kf_min_dist 622*fb1b10abSAndroid Build Coastguard Worker * equal to kf_max_dist for a fixed interval. 623*fb1b10abSAndroid Build Coastguard Worker */ 624*fb1b10abSAndroid Build Coastguard Worker unsigned int kf_max_dist; 625*fb1b10abSAndroid Build Coastguard Worker 626*fb1b10abSAndroid Build Coastguard Worker /* 627*fb1b10abSAndroid Build Coastguard Worker * Spatial scalability settings (ss) 628*fb1b10abSAndroid Build Coastguard Worker */ 629*fb1b10abSAndroid Build Coastguard Worker 630*fb1b10abSAndroid Build Coastguard Worker /*!\brief Number of spatial coding layers. 631*fb1b10abSAndroid Build Coastguard Worker * 632*fb1b10abSAndroid Build Coastguard Worker * This value specifies the number of spatial coding layers to be used. 633*fb1b10abSAndroid Build Coastguard Worker */ 634*fb1b10abSAndroid Build Coastguard Worker unsigned int ss_number_layers; 635*fb1b10abSAndroid Build Coastguard Worker 636*fb1b10abSAndroid Build Coastguard Worker /*!\brief Enable auto alt reference flags for each spatial layer. 637*fb1b10abSAndroid Build Coastguard Worker * 638*fb1b10abSAndroid Build Coastguard Worker * These values specify if auto alt reference frame is enabled for each 639*fb1b10abSAndroid Build Coastguard Worker * spatial layer. 640*fb1b10abSAndroid Build Coastguard Worker */ 641*fb1b10abSAndroid Build Coastguard Worker int ss_enable_auto_alt_ref[VPX_SS_MAX_LAYERS]; 642*fb1b10abSAndroid Build Coastguard Worker 643*fb1b10abSAndroid Build Coastguard Worker /*!\brief Target bitrate for each spatial layer. 644*fb1b10abSAndroid Build Coastguard Worker * 645*fb1b10abSAndroid Build Coastguard Worker * These values specify the target coding bitrate to be used for each 646*fb1b10abSAndroid Build Coastguard Worker * spatial layer. (in kbps) 647*fb1b10abSAndroid Build Coastguard Worker */ 648*fb1b10abSAndroid Build Coastguard Worker unsigned int ss_target_bitrate[VPX_SS_MAX_LAYERS]; 649*fb1b10abSAndroid Build Coastguard Worker 650*fb1b10abSAndroid Build Coastguard Worker /*!\brief Number of temporal coding layers. 651*fb1b10abSAndroid Build Coastguard Worker * 652*fb1b10abSAndroid Build Coastguard Worker * This value specifies the number of temporal layers to be used. 653*fb1b10abSAndroid Build Coastguard Worker */ 654*fb1b10abSAndroid Build Coastguard Worker unsigned int ts_number_layers; 655*fb1b10abSAndroid Build Coastguard Worker 656*fb1b10abSAndroid Build Coastguard Worker /*!\brief Target bitrate for each temporal layer. 657*fb1b10abSAndroid Build Coastguard Worker * 658*fb1b10abSAndroid Build Coastguard Worker * These values specify the target coding bitrate to be used for each 659*fb1b10abSAndroid Build Coastguard Worker * temporal layer. (in kbps) 660*fb1b10abSAndroid Build Coastguard Worker */ 661*fb1b10abSAndroid Build Coastguard Worker unsigned int ts_target_bitrate[VPX_TS_MAX_LAYERS]; 662*fb1b10abSAndroid Build Coastguard Worker 663*fb1b10abSAndroid Build Coastguard Worker /*!\brief Frame rate decimation factor for each temporal layer. 664*fb1b10abSAndroid Build Coastguard Worker * 665*fb1b10abSAndroid Build Coastguard Worker * These values specify the frame rate decimation factors to apply 666*fb1b10abSAndroid Build Coastguard Worker * to each temporal layer. 667*fb1b10abSAndroid Build Coastguard Worker */ 668*fb1b10abSAndroid Build Coastguard Worker unsigned int ts_rate_decimator[VPX_TS_MAX_LAYERS]; 669*fb1b10abSAndroid Build Coastguard Worker 670*fb1b10abSAndroid Build Coastguard Worker /*!\brief Length of the sequence defining frame temporal layer membership. 671*fb1b10abSAndroid Build Coastguard Worker * 672*fb1b10abSAndroid Build Coastguard Worker * This value specifies the length of the sequence that defines the 673*fb1b10abSAndroid Build Coastguard Worker * membership of frames to temporal layers. For example, if the 674*fb1b10abSAndroid Build Coastguard Worker * ts_periodicity = 8, then the frames are assigned to coding layers with a 675*fb1b10abSAndroid Build Coastguard Worker * repeated sequence of length 8. 676*fb1b10abSAndroid Build Coastguard Worker */ 677*fb1b10abSAndroid Build Coastguard Worker unsigned int ts_periodicity; 678*fb1b10abSAndroid Build Coastguard Worker 679*fb1b10abSAndroid Build Coastguard Worker /*!\brief Template defining the membership of frames to temporal layers. 680*fb1b10abSAndroid Build Coastguard Worker * 681*fb1b10abSAndroid Build Coastguard Worker * This array defines the membership of frames to temporal coding layers. 682*fb1b10abSAndroid Build Coastguard Worker * For a 2-layer encoding that assigns even numbered frames to one temporal 683*fb1b10abSAndroid Build Coastguard Worker * layer (0) and odd numbered frames to a second temporal layer (1) with 684*fb1b10abSAndroid Build Coastguard Worker * ts_periodicity=8, then ts_layer_id = (0,1,0,1,0,1,0,1). 685*fb1b10abSAndroid Build Coastguard Worker */ 686*fb1b10abSAndroid Build Coastguard Worker unsigned int ts_layer_id[VPX_TS_MAX_PERIODICITY]; 687*fb1b10abSAndroid Build Coastguard Worker 688*fb1b10abSAndroid Build Coastguard Worker /*!\brief Target bitrate for each spatial/temporal layer. 689*fb1b10abSAndroid Build Coastguard Worker * 690*fb1b10abSAndroid Build Coastguard Worker * These values specify the target coding bitrate to be used for each 691*fb1b10abSAndroid Build Coastguard Worker * spatial/temporal layer. (in kbps) 692*fb1b10abSAndroid Build Coastguard Worker * 693*fb1b10abSAndroid Build Coastguard Worker */ 694*fb1b10abSAndroid Build Coastguard Worker unsigned int layer_target_bitrate[VPX_MAX_LAYERS]; 695*fb1b10abSAndroid Build Coastguard Worker 696*fb1b10abSAndroid Build Coastguard Worker /*!\brief Temporal layering mode indicating which temporal layering scheme to 697*fb1b10abSAndroid Build Coastguard Worker * use. 698*fb1b10abSAndroid Build Coastguard Worker * 699*fb1b10abSAndroid Build Coastguard Worker * The value (refer to VP9E_TEMPORAL_LAYERING_MODE) specifies the 700*fb1b10abSAndroid Build Coastguard Worker * temporal layering mode to use. 701*fb1b10abSAndroid Build Coastguard Worker * 702*fb1b10abSAndroid Build Coastguard Worker */ 703*fb1b10abSAndroid Build Coastguard Worker int temporal_layering_mode; 704*fb1b10abSAndroid Build Coastguard Worker 705*fb1b10abSAndroid Build Coastguard Worker /*!\brief A flag indicating whether to use external rate control parameters. 706*fb1b10abSAndroid Build Coastguard Worker * By default is 0. If set to 1, the following parameters will be used in the 707*fb1b10abSAndroid Build Coastguard Worker * rate control system. 708*fb1b10abSAndroid Build Coastguard Worker */ 709*fb1b10abSAndroid Build Coastguard Worker int use_vizier_rc_params; 710*fb1b10abSAndroid Build Coastguard Worker 711*fb1b10abSAndroid Build Coastguard Worker /*!\brief Active worst quality factor. 712*fb1b10abSAndroid Build Coastguard Worker * 713*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 714*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 715*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 716*fb1b10abSAndroid Build Coastguard Worker * 717*fb1b10abSAndroid Build Coastguard Worker */ 718*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t active_wq_factor; 719*fb1b10abSAndroid Build Coastguard Worker 720*fb1b10abSAndroid Build Coastguard Worker /*!\brief Error per macroblock adjustment factor. 721*fb1b10abSAndroid Build Coastguard Worker * 722*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 723*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 724*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 725*fb1b10abSAndroid Build Coastguard Worker * 726*fb1b10abSAndroid Build Coastguard Worker */ 727*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t err_per_mb_factor; 728*fb1b10abSAndroid Build Coastguard Worker 729*fb1b10abSAndroid Build Coastguard Worker /*!\brief Second reference default decay limit. 730*fb1b10abSAndroid Build Coastguard Worker * 731*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 732*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 733*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 734*fb1b10abSAndroid Build Coastguard Worker * 735*fb1b10abSAndroid Build Coastguard Worker */ 736*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t sr_default_decay_limit; 737*fb1b10abSAndroid Build Coastguard Worker 738*fb1b10abSAndroid Build Coastguard Worker /*!\brief Second reference difference factor. 739*fb1b10abSAndroid Build Coastguard Worker * 740*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 741*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 742*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 743*fb1b10abSAndroid Build Coastguard Worker * 744*fb1b10abSAndroid Build Coastguard Worker */ 745*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t sr_diff_factor; 746*fb1b10abSAndroid Build Coastguard Worker 747*fb1b10abSAndroid Build Coastguard Worker /*!\brief Keyframe error per macroblock adjustment factor. 748*fb1b10abSAndroid Build Coastguard Worker * 749*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 750*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 751*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 752*fb1b10abSAndroid Build Coastguard Worker * 753*fb1b10abSAndroid Build Coastguard Worker */ 754*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t kf_err_per_mb_factor; 755*fb1b10abSAndroid Build Coastguard Worker 756*fb1b10abSAndroid Build Coastguard Worker /*!\brief Keyframe minimum boost adjustment factor. 757*fb1b10abSAndroid Build Coastguard Worker * 758*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 759*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 760*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 761*fb1b10abSAndroid Build Coastguard Worker * 762*fb1b10abSAndroid Build Coastguard Worker */ 763*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t kf_frame_min_boost_factor; 764*fb1b10abSAndroid Build Coastguard Worker 765*fb1b10abSAndroid Build Coastguard Worker /*!\brief Keyframe maximum boost adjustment factor, for the first keyframe 766*fb1b10abSAndroid Build Coastguard Worker * in a chunk. 767*fb1b10abSAndroid Build Coastguard Worker * 768*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 769*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 770*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 771*fb1b10abSAndroid Build Coastguard Worker * 772*fb1b10abSAndroid Build Coastguard Worker */ 773*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t kf_frame_max_boost_first_factor; 774*fb1b10abSAndroid Build Coastguard Worker 775*fb1b10abSAndroid Build Coastguard Worker /*!\brief Keyframe maximum boost adjustment factor, for subsequent keyframes. 776*fb1b10abSAndroid Build Coastguard Worker * 777*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 778*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 779*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 780*fb1b10abSAndroid Build Coastguard Worker * 781*fb1b10abSAndroid Build Coastguard Worker */ 782*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t kf_frame_max_boost_subs_factor; 783*fb1b10abSAndroid Build Coastguard Worker 784*fb1b10abSAndroid Build Coastguard Worker /*!\brief Keyframe maximum total boost adjustment factor. 785*fb1b10abSAndroid Build Coastguard Worker * 786*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 787*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 788*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 789*fb1b10abSAndroid Build Coastguard Worker * 790*fb1b10abSAndroid Build Coastguard Worker */ 791*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t kf_max_total_boost_factor; 792*fb1b10abSAndroid Build Coastguard Worker 793*fb1b10abSAndroid Build Coastguard Worker /*!\brief Golden frame maximum total boost adjustment factor. 794*fb1b10abSAndroid Build Coastguard Worker * 795*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 796*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 797*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 798*fb1b10abSAndroid Build Coastguard Worker * 799*fb1b10abSAndroid Build Coastguard Worker */ 800*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t gf_max_total_boost_factor; 801*fb1b10abSAndroid Build Coastguard Worker 802*fb1b10abSAndroid Build Coastguard Worker /*!\brief Golden frame maximum boost adjustment factor. 803*fb1b10abSAndroid Build Coastguard Worker * 804*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 805*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 806*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 807*fb1b10abSAndroid Build Coastguard Worker * 808*fb1b10abSAndroid Build Coastguard Worker */ 809*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t gf_frame_max_boost_factor; 810*fb1b10abSAndroid Build Coastguard Worker 811*fb1b10abSAndroid Build Coastguard Worker /*!\brief Zero motion power factor. 812*fb1b10abSAndroid Build Coastguard Worker * 813*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, set from external experiment results. 814*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 815*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 816*fb1b10abSAndroid Build Coastguard Worker * 817*fb1b10abSAndroid Build Coastguard Worker */ 818*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t zm_factor; 819*fb1b10abSAndroid Build Coastguard Worker 820*fb1b10abSAndroid Build Coastguard Worker /*!\brief Rate-distortion multiplier for inter frames. 821*fb1b10abSAndroid Build Coastguard Worker * The multiplier is a crucial parameter in the calculation of rate distortion 822*fb1b10abSAndroid Build Coastguard Worker * cost. It is often related to the qp (qindex) value. 823*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, could be set from external experiment results. 824*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 825*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 826*fb1b10abSAndroid Build Coastguard Worker * 827*fb1b10abSAndroid Build Coastguard Worker */ 828*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t rd_mult_inter_qp_fac; 829*fb1b10abSAndroid Build Coastguard Worker 830*fb1b10abSAndroid Build Coastguard Worker /*!\brief Rate-distortion multiplier for alt-ref frames. 831*fb1b10abSAndroid Build Coastguard Worker * The multiplier is a crucial parameter in the calculation of rate distortion 832*fb1b10abSAndroid Build Coastguard Worker * cost. It is often related to the qp (qindex) value. 833*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, could be set from external experiment results. 834*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 835*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 836*fb1b10abSAndroid Build Coastguard Worker * 837*fb1b10abSAndroid Build Coastguard Worker */ 838*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t rd_mult_arf_qp_fac; 839*fb1b10abSAndroid Build Coastguard Worker 840*fb1b10abSAndroid Build Coastguard Worker /*!\brief Rate-distortion multiplier for key frames. 841*fb1b10abSAndroid Build Coastguard Worker * The multiplier is a crucial parameter in the calculation of rate distortion 842*fb1b10abSAndroid Build Coastguard Worker * cost. It is often related to the qp (qindex) value. 843*fb1b10abSAndroid Build Coastguard Worker * Rate control parameters, could be set from external experiment results. 844*fb1b10abSAndroid Build Coastguard Worker * Only when |use_vizier_rc_params| is set to 1, the pass in value will be 845*fb1b10abSAndroid Build Coastguard Worker * used. Otherwise, the default value is used. 846*fb1b10abSAndroid Build Coastguard Worker * 847*fb1b10abSAndroid Build Coastguard Worker */ 848*fb1b10abSAndroid Build Coastguard Worker vpx_rational_t rd_mult_key_qp_fac; 849*fb1b10abSAndroid Build Coastguard Worker } vpx_codec_enc_cfg_t; /**< alias for struct vpx_codec_enc_cfg */ 850*fb1b10abSAndroid Build Coastguard Worker 851*fb1b10abSAndroid Build Coastguard Worker /*!\brief vp9 svc extra configure parameters 852*fb1b10abSAndroid Build Coastguard Worker * 853*fb1b10abSAndroid Build Coastguard Worker * This defines max/min quantizers and scale factors for each layer 854*fb1b10abSAndroid Build Coastguard Worker * 855*fb1b10abSAndroid Build Coastguard Worker */ 856*fb1b10abSAndroid Build Coastguard Worker typedef struct vpx_svc_parameters { 857*fb1b10abSAndroid Build Coastguard Worker int max_quantizers[VPX_MAX_LAYERS]; /**< Max Q for each layer */ 858*fb1b10abSAndroid Build Coastguard Worker int min_quantizers[VPX_MAX_LAYERS]; /**< Min Q for each layer */ 859*fb1b10abSAndroid Build Coastguard Worker int scaling_factor_num[VPX_MAX_LAYERS]; /**< Scaling factor-numerator */ 860*fb1b10abSAndroid Build Coastguard Worker int scaling_factor_den[VPX_MAX_LAYERS]; /**< Scaling factor-denominator */ 861*fb1b10abSAndroid Build Coastguard Worker int speed_per_layer[VPX_MAX_LAYERS]; /**< Speed setting for each sl */ 862*fb1b10abSAndroid Build Coastguard Worker int temporal_layering_mode; /**< Temporal layering mode */ 863*fb1b10abSAndroid Build Coastguard Worker int loopfilter_ctrl[VPX_MAX_LAYERS]; /**< Loopfilter ctrl for each sl */ 864*fb1b10abSAndroid Build Coastguard Worker } vpx_svc_extra_cfg_t; 865*fb1b10abSAndroid Build Coastguard Worker 866*fb1b10abSAndroid Build Coastguard Worker /*!\brief Initialize an encoder instance 867*fb1b10abSAndroid Build Coastguard Worker * 868*fb1b10abSAndroid Build Coastguard Worker * Initializes an encoder context using the given interface. Applications 869*fb1b10abSAndroid Build Coastguard Worker * should call the vpx_codec_enc_init convenience macro instead of this 870*fb1b10abSAndroid Build Coastguard Worker * function directly, to ensure that the ABI version number parameter 871*fb1b10abSAndroid Build Coastguard Worker * is properly initialized. 872*fb1b10abSAndroid Build Coastguard Worker * 873*fb1b10abSAndroid Build Coastguard Worker * If the library was configured with --disable-multithread, this call 874*fb1b10abSAndroid Build Coastguard Worker * is not thread safe and should be guarded with a lock if being used 875*fb1b10abSAndroid Build Coastguard Worker * in a multithreaded context. 876*fb1b10abSAndroid Build Coastguard Worker * 877*fb1b10abSAndroid Build Coastguard Worker * If vpx_codec_enc_init_ver() fails, it is not necessary to call 878*fb1b10abSAndroid Build Coastguard Worker * vpx_codec_destroy() on the encoder context. 879*fb1b10abSAndroid Build Coastguard Worker * 880*fb1b10abSAndroid Build Coastguard Worker * \param[in] ctx Pointer to this instance's context. 881*fb1b10abSAndroid Build Coastguard Worker * \param[in] iface Pointer to the algorithm interface to use. 882*fb1b10abSAndroid Build Coastguard Worker * \param[in] cfg Configuration to use, if known. May be NULL. 883*fb1b10abSAndroid Build Coastguard Worker * \param[in] flags Bitfield of VPX_CODEC_USE_* flags 884*fb1b10abSAndroid Build Coastguard Worker * \param[in] ver ABI version number. Must be set to 885*fb1b10abSAndroid Build Coastguard Worker * VPX_ENCODER_ABI_VERSION 886*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_OK 887*fb1b10abSAndroid Build Coastguard Worker * The decoder algorithm initialized. 888*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_MEM_ERROR 889*fb1b10abSAndroid Build Coastguard Worker * Memory allocation failed. 890*fb1b10abSAndroid Build Coastguard Worker */ 891*fb1b10abSAndroid Build Coastguard Worker vpx_codec_err_t vpx_codec_enc_init_ver(vpx_codec_ctx_t *ctx, 892*fb1b10abSAndroid Build Coastguard Worker vpx_codec_iface_t *iface, 893*fb1b10abSAndroid Build Coastguard Worker const vpx_codec_enc_cfg_t *cfg, 894*fb1b10abSAndroid Build Coastguard Worker vpx_codec_flags_t flags, int ver); 895*fb1b10abSAndroid Build Coastguard Worker 896*fb1b10abSAndroid Build Coastguard Worker /*!\brief Convenience macro for vpx_codec_enc_init_ver() 897*fb1b10abSAndroid Build Coastguard Worker * 898*fb1b10abSAndroid Build Coastguard Worker * Ensures the ABI version parameter is properly set. 899*fb1b10abSAndroid Build Coastguard Worker */ 900*fb1b10abSAndroid Build Coastguard Worker #define vpx_codec_enc_init(ctx, iface, cfg, flags) \ 901*fb1b10abSAndroid Build Coastguard Worker vpx_codec_enc_init_ver(ctx, iface, cfg, flags, VPX_ENCODER_ABI_VERSION) 902*fb1b10abSAndroid Build Coastguard Worker 903*fb1b10abSAndroid Build Coastguard Worker /*!\brief Initialize multi-encoder instance 904*fb1b10abSAndroid Build Coastguard Worker * 905*fb1b10abSAndroid Build Coastguard Worker * Initializes multi-encoder context using the given interface. 906*fb1b10abSAndroid Build Coastguard Worker * Applications should call the vpx_codec_enc_init_multi convenience macro 907*fb1b10abSAndroid Build Coastguard Worker * instead of this function directly, to ensure that the ABI version number 908*fb1b10abSAndroid Build Coastguard Worker * parameter is properly initialized. 909*fb1b10abSAndroid Build Coastguard Worker * 910*fb1b10abSAndroid Build Coastguard Worker * \param[in] ctx Pointer to this instance's context. 911*fb1b10abSAndroid Build Coastguard Worker * \param[in] iface Pointer to the algorithm interface to use. 912*fb1b10abSAndroid Build Coastguard Worker * \param[in] cfg Configuration to use, if known. May be NULL. 913*fb1b10abSAndroid Build Coastguard Worker * \param[in] num_enc Total number of encoders. 914*fb1b10abSAndroid Build Coastguard Worker * \param[in] flags Bitfield of VPX_CODEC_USE_* flags 915*fb1b10abSAndroid Build Coastguard Worker * \param[in] dsf Pointer to down-sampling factors. 916*fb1b10abSAndroid Build Coastguard Worker * \param[in] ver ABI version number. Must be set to 917*fb1b10abSAndroid Build Coastguard Worker * VPX_ENCODER_ABI_VERSION 918*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_OK 919*fb1b10abSAndroid Build Coastguard Worker * The encoder algorithm has been initialized. 920*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_MEM_ERROR 921*fb1b10abSAndroid Build Coastguard Worker * Memory allocation failed. 922*fb1b10abSAndroid Build Coastguard Worker */ 923*fb1b10abSAndroid Build Coastguard Worker vpx_codec_err_t vpx_codec_enc_init_multi_ver( 924*fb1b10abSAndroid Build Coastguard Worker vpx_codec_ctx_t *ctx, vpx_codec_iface_t *iface, vpx_codec_enc_cfg_t *cfg, 925*fb1b10abSAndroid Build Coastguard Worker int num_enc, vpx_codec_flags_t flags, vpx_rational_t *dsf, int ver); 926*fb1b10abSAndroid Build Coastguard Worker 927*fb1b10abSAndroid Build Coastguard Worker /*!\brief Convenience macro for vpx_codec_enc_init_multi_ver() 928*fb1b10abSAndroid Build Coastguard Worker * 929*fb1b10abSAndroid Build Coastguard Worker * Ensures the ABI version parameter is properly set. 930*fb1b10abSAndroid Build Coastguard Worker */ 931*fb1b10abSAndroid Build Coastguard Worker #define vpx_codec_enc_init_multi(ctx, iface, cfg, num_enc, flags, dsf) \ 932*fb1b10abSAndroid Build Coastguard Worker vpx_codec_enc_init_multi_ver(ctx, iface, cfg, num_enc, flags, dsf, \ 933*fb1b10abSAndroid Build Coastguard Worker VPX_ENCODER_ABI_VERSION) 934*fb1b10abSAndroid Build Coastguard Worker 935*fb1b10abSAndroid Build Coastguard Worker /*!\brief Get a default configuration 936*fb1b10abSAndroid Build Coastguard Worker * 937*fb1b10abSAndroid Build Coastguard Worker * Initializes a encoder configuration structure with default values. Supports 938*fb1b10abSAndroid Build Coastguard Worker * the notion of "usages" so that an algorithm may offer different default 939*fb1b10abSAndroid Build Coastguard Worker * settings depending on the user's intended goal. This function \ref SHOULD 940*fb1b10abSAndroid Build Coastguard Worker * be called by all applications to initialize the configuration structure 941*fb1b10abSAndroid Build Coastguard Worker * before specializing the configuration with application specific values. 942*fb1b10abSAndroid Build Coastguard Worker * 943*fb1b10abSAndroid Build Coastguard Worker * \param[in] iface Pointer to the algorithm interface to use. 944*fb1b10abSAndroid Build Coastguard Worker * \param[out] cfg Configuration buffer to populate. 945*fb1b10abSAndroid Build Coastguard Worker * \param[in] usage Must be set to 0. 946*fb1b10abSAndroid Build Coastguard Worker * 947*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_OK 948*fb1b10abSAndroid Build Coastguard Worker * The configuration was populated. 949*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_INCAPABLE 950*fb1b10abSAndroid Build Coastguard Worker * Interface is not an encoder interface. 951*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_INVALID_PARAM 952*fb1b10abSAndroid Build Coastguard Worker * A parameter was NULL, or the usage value was not recognized. 953*fb1b10abSAndroid Build Coastguard Worker */ 954*fb1b10abSAndroid Build Coastguard Worker vpx_codec_err_t vpx_codec_enc_config_default(vpx_codec_iface_t *iface, 955*fb1b10abSAndroid Build Coastguard Worker vpx_codec_enc_cfg_t *cfg, 956*fb1b10abSAndroid Build Coastguard Worker unsigned int usage); 957*fb1b10abSAndroid Build Coastguard Worker 958*fb1b10abSAndroid Build Coastguard Worker /*!\brief Set or change configuration 959*fb1b10abSAndroid Build Coastguard Worker * 960*fb1b10abSAndroid Build Coastguard Worker * Reconfigures an encoder instance according to the given configuration. 961*fb1b10abSAndroid Build Coastguard Worker * 962*fb1b10abSAndroid Build Coastguard Worker * \param[in] ctx Pointer to this instance's context 963*fb1b10abSAndroid Build Coastguard Worker * \param[in] cfg Configuration buffer to use 964*fb1b10abSAndroid Build Coastguard Worker * 965*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_OK 966*fb1b10abSAndroid Build Coastguard Worker * The configuration was populated. 967*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_INCAPABLE 968*fb1b10abSAndroid Build Coastguard Worker * Interface is not an encoder interface. 969*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_INVALID_PARAM 970*fb1b10abSAndroid Build Coastguard Worker * A parameter was NULL, or the usage value was not recognized. 971*fb1b10abSAndroid Build Coastguard Worker */ 972*fb1b10abSAndroid Build Coastguard Worker vpx_codec_err_t vpx_codec_enc_config_set(vpx_codec_ctx_t *ctx, 973*fb1b10abSAndroid Build Coastguard Worker const vpx_codec_enc_cfg_t *cfg); 974*fb1b10abSAndroid Build Coastguard Worker 975*fb1b10abSAndroid Build Coastguard Worker /*!\brief Get global stream headers 976*fb1b10abSAndroid Build Coastguard Worker * 977*fb1b10abSAndroid Build Coastguard Worker * Retrieves a stream level global header packet, if supported by the codec. 978*fb1b10abSAndroid Build Coastguard Worker * 979*fb1b10abSAndroid Build Coastguard Worker * \li VP8: Unsupported 980*fb1b10abSAndroid Build Coastguard Worker * \li VP9: Returns a buffer of <tt>ID (1 byte)|Length (1 byte)|Length 981*fb1b10abSAndroid Build Coastguard Worker * bytes</tt> values. The function should be called after encoding to retrieve 982*fb1b10abSAndroid Build Coastguard Worker * the most accurate information. 983*fb1b10abSAndroid Build Coastguard Worker * 984*fb1b10abSAndroid Build Coastguard Worker * \param[in] ctx Pointer to this instance's context 985*fb1b10abSAndroid Build Coastguard Worker * 986*fb1b10abSAndroid Build Coastguard Worker * \retval NULL 987*fb1b10abSAndroid Build Coastguard Worker * Encoder does not support global header 988*fb1b10abSAndroid Build Coastguard Worker * \retval Non-NULL 989*fb1b10abSAndroid Build Coastguard Worker * Pointer to buffer containing global header packet. The buffer pointer 990*fb1b10abSAndroid Build Coastguard Worker * and its contents are only valid for the lifetime of \a ctx. The contents 991*fb1b10abSAndroid Build Coastguard Worker * may change in subsequent calls to the function. 992*fb1b10abSAndroid Build Coastguard Worker * \sa 993*fb1b10abSAndroid Build Coastguard Worker * https://www.webmproject.org/docs/container/#vp9-codec-feature-metadata-codecprivate 994*fb1b10abSAndroid Build Coastguard Worker */ 995*fb1b10abSAndroid Build Coastguard Worker vpx_fixed_buf_t *vpx_codec_get_global_headers(vpx_codec_ctx_t *ctx); 996*fb1b10abSAndroid Build Coastguard Worker 997*fb1b10abSAndroid Build Coastguard Worker /*!\brief Encode Deadline 998*fb1b10abSAndroid Build Coastguard Worker * 999*fb1b10abSAndroid Build Coastguard Worker * This type indicates a deadline, in microseconds, to be passed to 1000*fb1b10abSAndroid Build Coastguard Worker * vpx_codec_encode(). 1001*fb1b10abSAndroid Build Coastguard Worker */ 1002*fb1b10abSAndroid Build Coastguard Worker typedef unsigned long vpx_enc_deadline_t; 1003*fb1b10abSAndroid Build Coastguard Worker /*!\brief deadline parameter analogous to VPx REALTIME mode. */ 1004*fb1b10abSAndroid Build Coastguard Worker #define VPX_DL_REALTIME 1ul 1005*fb1b10abSAndroid Build Coastguard Worker /*!\brief deadline parameter analogous to VPx GOOD QUALITY mode. */ 1006*fb1b10abSAndroid Build Coastguard Worker #define VPX_DL_GOOD_QUALITY 1000000ul 1007*fb1b10abSAndroid Build Coastguard Worker /*!\brief deadline parameter analogous to VPx BEST QUALITY mode. */ 1008*fb1b10abSAndroid Build Coastguard Worker #define VPX_DL_BEST_QUALITY 0ul 1009*fb1b10abSAndroid Build Coastguard Worker /*!\brief Encode a frame 1010*fb1b10abSAndroid Build Coastguard Worker * 1011*fb1b10abSAndroid Build Coastguard Worker * Encodes a video frame at the given "presentation time." The presentation 1012*fb1b10abSAndroid Build Coastguard Worker * time stamp (PTS) \ref MUST be strictly increasing. 1013*fb1b10abSAndroid Build Coastguard Worker * 1014*fb1b10abSAndroid Build Coastguard Worker * The encoder supports the notion of a soft real-time deadline. Given a 1015*fb1b10abSAndroid Build Coastguard Worker * non-zero value to the deadline parameter, the encoder will make a "best 1016*fb1b10abSAndroid Build Coastguard Worker * effort" guarantee to return before the given time slice expires. It is 1017*fb1b10abSAndroid Build Coastguard Worker * implicit that limiting the available time to encode will degrade the 1018*fb1b10abSAndroid Build Coastguard Worker * output quality. The encoder can be given an unlimited time to produce the 1019*fb1b10abSAndroid Build Coastguard Worker * best possible frame by specifying a deadline of '0'. This deadline 1020*fb1b10abSAndroid Build Coastguard Worker * supersedes the VPx notion of "best quality, good quality, realtime". 1021*fb1b10abSAndroid Build Coastguard Worker * Applications that wish to map these former settings to the new deadline 1022*fb1b10abSAndroid Build Coastguard Worker * based system can use the symbols #VPX_DL_REALTIME, #VPX_DL_GOOD_QUALITY, 1023*fb1b10abSAndroid Build Coastguard Worker * and #VPX_DL_BEST_QUALITY. 1024*fb1b10abSAndroid Build Coastguard Worker * 1025*fb1b10abSAndroid Build Coastguard Worker * When the last frame has been passed to the encoder, this function should 1026*fb1b10abSAndroid Build Coastguard Worker * continue to be called, with the img parameter set to NULL. This will 1027*fb1b10abSAndroid Build Coastguard Worker * signal the end-of-stream condition to the encoder and allow it to encode 1028*fb1b10abSAndroid Build Coastguard Worker * any held buffers. Encoding is complete when vpx_codec_encode() is called 1029*fb1b10abSAndroid Build Coastguard Worker * and vpx_codec_get_cx_data() returns no data. 1030*fb1b10abSAndroid Build Coastguard Worker * 1031*fb1b10abSAndroid Build Coastguard Worker * \param[in] ctx Pointer to this instance's context 1032*fb1b10abSAndroid Build Coastguard Worker * \param[in] img Image data to encode, NULL to flush. 1033*fb1b10abSAndroid Build Coastguard Worker * Encoding sample values outside the range 1034*fb1b10abSAndroid Build Coastguard Worker * [0..(1<<img->bit_depth)-1] is undefined behavior. 1035*fb1b10abSAndroid Build Coastguard Worker * \param[in] pts Presentation time stamp, in timebase units. 1036*fb1b10abSAndroid Build Coastguard Worker * \param[in] duration Duration to show frame, in timebase units. 1037*fb1b10abSAndroid Build Coastguard Worker * \param[in] flags Flags to use for encoding this frame. 1038*fb1b10abSAndroid Build Coastguard Worker * \param[in] deadline Time to spend encoding, in microseconds. (0=infinite) 1039*fb1b10abSAndroid Build Coastguard Worker * 1040*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_OK 1041*fb1b10abSAndroid Build Coastguard Worker * The configuration was populated. 1042*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_INCAPABLE 1043*fb1b10abSAndroid Build Coastguard Worker * Interface is not an encoder interface. 1044*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_INVALID_PARAM 1045*fb1b10abSAndroid Build Coastguard Worker * A parameter was NULL, the image format is unsupported, etc. 1046*fb1b10abSAndroid Build Coastguard Worker */ 1047*fb1b10abSAndroid Build Coastguard Worker vpx_codec_err_t vpx_codec_encode(vpx_codec_ctx_t *ctx, const vpx_image_t *img, 1048*fb1b10abSAndroid Build Coastguard Worker vpx_codec_pts_t pts, unsigned long duration, 1049*fb1b10abSAndroid Build Coastguard Worker vpx_enc_frame_flags_t flags, 1050*fb1b10abSAndroid Build Coastguard Worker vpx_enc_deadline_t deadline); 1051*fb1b10abSAndroid Build Coastguard Worker 1052*fb1b10abSAndroid Build Coastguard Worker /*!\brief Set compressed data output buffer 1053*fb1b10abSAndroid Build Coastguard Worker * 1054*fb1b10abSAndroid Build Coastguard Worker * Sets the buffer that the codec should output the compressed data 1055*fb1b10abSAndroid Build Coastguard Worker * into. This call effectively sets the buffer pointer returned in the 1056*fb1b10abSAndroid Build Coastguard Worker * next VPX_CODEC_CX_FRAME_PKT packet. Subsequent packets will be 1057*fb1b10abSAndroid Build Coastguard Worker * appended into this buffer. The buffer is preserved across frames, 1058*fb1b10abSAndroid Build Coastguard Worker * so applications must periodically call this function after flushing 1059*fb1b10abSAndroid Build Coastguard Worker * the accumulated compressed data to disk or to the network to reset 1060*fb1b10abSAndroid Build Coastguard Worker * the pointer to the buffer's head. 1061*fb1b10abSAndroid Build Coastguard Worker * 1062*fb1b10abSAndroid Build Coastguard Worker * `pad_before` bytes will be skipped before writing the compressed 1063*fb1b10abSAndroid Build Coastguard Worker * data, and `pad_after` bytes will be appended to the packet. The size 1064*fb1b10abSAndroid Build Coastguard Worker * of the packet will be the sum of the size of the actual compressed 1065*fb1b10abSAndroid Build Coastguard Worker * data, pad_before, and pad_after. The padding bytes will be preserved 1066*fb1b10abSAndroid Build Coastguard Worker * (not overwritten). 1067*fb1b10abSAndroid Build Coastguard Worker * 1068*fb1b10abSAndroid Build Coastguard Worker * Note that calling this function does not guarantee that the returned 1069*fb1b10abSAndroid Build Coastguard Worker * compressed data will be placed into the specified buffer. In the 1070*fb1b10abSAndroid Build Coastguard Worker * event that the encoded data will not fit into the buffer provided, 1071*fb1b10abSAndroid Build Coastguard Worker * the returned packet \ref MAY point to an internal buffer, as it would 1072*fb1b10abSAndroid Build Coastguard Worker * if this call were never used. In this event, the output packet will 1073*fb1b10abSAndroid Build Coastguard Worker * NOT have any padding, and the application must free space and copy it 1074*fb1b10abSAndroid Build Coastguard Worker * to the proper place. This is of particular note in configurations 1075*fb1b10abSAndroid Build Coastguard Worker * that may output multiple packets for a single encoded frame (e.g., lagged 1076*fb1b10abSAndroid Build Coastguard Worker * encoding) or if the application does not reset the buffer periodically. 1077*fb1b10abSAndroid Build Coastguard Worker * 1078*fb1b10abSAndroid Build Coastguard Worker * Applications may restore the default behavior of the codec providing 1079*fb1b10abSAndroid Build Coastguard Worker * the compressed data buffer by calling this function with a NULL 1080*fb1b10abSAndroid Build Coastguard Worker * buffer. 1081*fb1b10abSAndroid Build Coastguard Worker * 1082*fb1b10abSAndroid Build Coastguard Worker * Applications \ref MUSTNOT call this function during iteration of 1083*fb1b10abSAndroid Build Coastguard Worker * vpx_codec_get_cx_data(). 1084*fb1b10abSAndroid Build Coastguard Worker * 1085*fb1b10abSAndroid Build Coastguard Worker * \param[in] ctx Pointer to this instance's context 1086*fb1b10abSAndroid Build Coastguard Worker * \param[in] buf Buffer to store compressed data into 1087*fb1b10abSAndroid Build Coastguard Worker * \param[in] pad_before Bytes to skip before writing compressed data 1088*fb1b10abSAndroid Build Coastguard Worker * \param[in] pad_after Bytes to skip after writing compressed data 1089*fb1b10abSAndroid Build Coastguard Worker * 1090*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_OK 1091*fb1b10abSAndroid Build Coastguard Worker * The buffer was set successfully. 1092*fb1b10abSAndroid Build Coastguard Worker * \retval #VPX_CODEC_INVALID_PARAM 1093*fb1b10abSAndroid Build Coastguard Worker * A parameter was NULL, the image format is unsupported, etc. 1094*fb1b10abSAndroid Build Coastguard Worker * 1095*fb1b10abSAndroid Build Coastguard Worker * \note 1096*fb1b10abSAndroid Build Coastguard Worker * `duration` and `deadline` are of the unsigned long type, which can be 32 1097*fb1b10abSAndroid Build Coastguard Worker * or 64 bits. `duration` and `deadline` must be less than or equal to 1098*fb1b10abSAndroid Build Coastguard Worker * UINT32_MAX so that their ranges are independent of the size of unsigned 1099*fb1b10abSAndroid Build Coastguard Worker * long. 1100*fb1b10abSAndroid Build Coastguard Worker */ 1101*fb1b10abSAndroid Build Coastguard Worker vpx_codec_err_t vpx_codec_set_cx_data_buf(vpx_codec_ctx_t *ctx, 1102*fb1b10abSAndroid Build Coastguard Worker const vpx_fixed_buf_t *buf, 1103*fb1b10abSAndroid Build Coastguard Worker unsigned int pad_before, 1104*fb1b10abSAndroid Build Coastguard Worker unsigned int pad_after); 1105*fb1b10abSAndroid Build Coastguard Worker 1106*fb1b10abSAndroid Build Coastguard Worker /*!\brief Encoded data iterator 1107*fb1b10abSAndroid Build Coastguard Worker * 1108*fb1b10abSAndroid Build Coastguard Worker * Iterates over a list of data packets to be passed from the encoder to the 1109*fb1b10abSAndroid Build Coastguard Worker * application. The different kinds of packets available are enumerated in 1110*fb1b10abSAndroid Build Coastguard Worker * #vpx_codec_cx_pkt_kind. 1111*fb1b10abSAndroid Build Coastguard Worker * 1112*fb1b10abSAndroid Build Coastguard Worker * #VPX_CODEC_CX_FRAME_PKT packets should be passed to the application's 1113*fb1b10abSAndroid Build Coastguard Worker * muxer. Multiple compressed frames may be in the list. 1114*fb1b10abSAndroid Build Coastguard Worker * #VPX_CODEC_STATS_PKT packets should be appended to a global buffer. 1115*fb1b10abSAndroid Build Coastguard Worker * 1116*fb1b10abSAndroid Build Coastguard Worker * The application \ref MUST silently ignore any packet kinds that it does 1117*fb1b10abSAndroid Build Coastguard Worker * not recognize or support. 1118*fb1b10abSAndroid Build Coastguard Worker * 1119*fb1b10abSAndroid Build Coastguard Worker * The data buffers returned from this function are only guaranteed to be 1120*fb1b10abSAndroid Build Coastguard Worker * valid until the application makes another call to any vpx_codec_* function. 1121*fb1b10abSAndroid Build Coastguard Worker * 1122*fb1b10abSAndroid Build Coastguard Worker * \param[in] ctx Pointer to this instance's context 1123*fb1b10abSAndroid Build Coastguard Worker * \param[in,out] iter Iterator storage, initialized to NULL 1124*fb1b10abSAndroid Build Coastguard Worker * 1125*fb1b10abSAndroid Build Coastguard Worker * \return Returns a pointer to an output data packet (compressed frame data, 1126*fb1b10abSAndroid Build Coastguard Worker * two-pass statistics, etc.) or NULL to signal end-of-list. 1127*fb1b10abSAndroid Build Coastguard Worker * 1128*fb1b10abSAndroid Build Coastguard Worker */ 1129*fb1b10abSAndroid Build Coastguard Worker const vpx_codec_cx_pkt_t *vpx_codec_get_cx_data(vpx_codec_ctx_t *ctx, 1130*fb1b10abSAndroid Build Coastguard Worker vpx_codec_iter_t *iter); 1131*fb1b10abSAndroid Build Coastguard Worker 1132*fb1b10abSAndroid Build Coastguard Worker /*!\brief Get Preview Frame 1133*fb1b10abSAndroid Build Coastguard Worker * 1134*fb1b10abSAndroid Build Coastguard Worker * Returns an image that can be used as a preview. Shows the image as it would 1135*fb1b10abSAndroid Build Coastguard Worker * exist at the decompressor. The application \ref MUST NOT write into this 1136*fb1b10abSAndroid Build Coastguard Worker * image buffer. 1137*fb1b10abSAndroid Build Coastguard Worker * 1138*fb1b10abSAndroid Build Coastguard Worker * \param[in] ctx Pointer to this instance's context 1139*fb1b10abSAndroid Build Coastguard Worker * 1140*fb1b10abSAndroid Build Coastguard Worker * \return Returns a pointer to a preview image, or NULL if no image is 1141*fb1b10abSAndroid Build Coastguard Worker * available. 1142*fb1b10abSAndroid Build Coastguard Worker * 1143*fb1b10abSAndroid Build Coastguard Worker */ 1144*fb1b10abSAndroid Build Coastguard Worker const vpx_image_t *vpx_codec_get_preview_frame(vpx_codec_ctx_t *ctx); 1145*fb1b10abSAndroid Build Coastguard Worker 1146*fb1b10abSAndroid Build Coastguard Worker /*!@} - end defgroup encoder*/ 1147*fb1b10abSAndroid Build Coastguard Worker #ifdef __cplusplus 1148*fb1b10abSAndroid Build Coastguard Worker } 1149*fb1b10abSAndroid Build Coastguard Worker #endif 1150*fb1b10abSAndroid Build Coastguard Worker #endif // VPX_VPX_VPX_ENCODER_H_ 1151