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