xref: /aosp_15_r20/external/libvpx/vpx/vpx_encoder.h (revision fb1b10ab9aebc7c7068eedab379b749d7e3900be)
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