Home | History | Annotate | Download | only in common
      1 /*
      2  *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
      3  *
      4  *  Use of this source code is governed by a BSD-style license
      5  *  that can be found in the LICENSE file in the root of the source
      6  *  tree. An additional intellectual property rights grant can be found
      7  *  in the file PATENTS.  All contributing project authors may
      8  *  be found in the AUTHORS file in the root of the source tree.
      9  */
     10 
     11 #ifndef VP9_COMMON_VP9_ONYX_H_
     12 #define VP9_COMMON_VP9_ONYX_H_
     13 
     14 #ifdef __cplusplus
     15 extern "C"
     16 {
     17 #endif
     18 
     19 #include "./vpx_config.h"
     20 #include "vpx/internal/vpx_codec_internal.h"
     21 #include "vpx/vp8cx.h"
     22 #include "vpx_scale/yv12config.h"
     23 #include "vp9/common/vp9_ppflags.h"
     24 
     25 #define MAX_SEGMENTS 8
     26 
     27   typedef int *VP9_PTR;
     28 
     29   /* Create/destroy static data structures. */
     30 
     31   typedef enum {
     32     NORMAL      = 0,
     33     FOURFIVE    = 1,
     34     THREEFIVE   = 2,
     35     ONETWO      = 3
     36 
     37   } VPX_SCALING;
     38 
     39   typedef enum {
     40     VP9_LAST_FLAG = 1,
     41     VP9_GOLD_FLAG = 2,
     42     VP9_ALT_FLAG = 4
     43   } VP9_REFFRAME;
     44 
     45 
     46   typedef enum {
     47     USAGE_STREAM_FROM_SERVER    = 0x0,
     48     USAGE_LOCAL_FILE_PLAYBACK   = 0x1,
     49     USAGE_CONSTRAINED_QUALITY   = 0x2,
     50     USAGE_CONSTANT_QUALITY      = 0x3,
     51   } END_USAGE;
     52 
     53 
     54   typedef enum {
     55     MODE_GOODQUALITY    = 0x1,
     56     MODE_BESTQUALITY    = 0x2,
     57     MODE_FIRSTPASS      = 0x3,
     58     MODE_SECONDPASS     = 0x4,
     59     MODE_SECONDPASS_BEST = 0x5,
     60   } MODE;
     61 
     62   typedef enum {
     63     FRAMEFLAGS_KEY    = 1,
     64     FRAMEFLAGS_GOLDEN = 2,
     65     FRAMEFLAGS_ALTREF = 4,
     66   } FRAMETYPE_FLAGS;
     67 
     68   typedef struct {
     69     int version;  // 4 versions of bitstream defined:
     70                   //   0 - best quality/slowest decode,
     71                   //   3 - lowest quality/fastest decode
     72     int width;  // width of data passed to the compressor
     73     int height;  // height of data passed to the compressor
     74     double framerate;       // set to passed in framerate
     75     int64_t target_bandwidth;    // bandwidth to be used in kilobits per second
     76 
     77     int noise_sensitivity;   // parameter used for applying pre processing blur: recommendation 0
     78     int Sharpness;          // parameter used for sharpening output: recommendation 0:
     79     int cpu_used;
     80     unsigned int rc_max_intra_bitrate_pct;
     81 
     82     // mode ->
     83     // (0)=Realtime/Live Encoding. This mode is optimized for realtim encoding (for example, capturing
     84     //    a television signal or feed from a live camera). ( speed setting controls how fast )
     85     // (1)=Good Quality Fast Encoding. The encoder balances quality with the amount of time it takes to
     86     //    encode the output. ( speed setting controls how fast )
     87     // (2)=One Pass - Best Quality. The encoder places priority on the quality of the output over encoding
     88     //    speed. The output is compressed at the highest possible quality. This option takes the longest
     89     //    amount of time to encode. ( speed setting ignored )
     90     // (3)=Two Pass - First Pass. The encoder generates a file of statistics for use in the second encoding
     91     //    pass. ( speed setting controls how fast )
     92     // (4)=Two Pass - Second Pass. The encoder uses the statistics that were generated in the first encoding
     93     //    pass to create the compressed output. ( speed setting controls how fast )
     94     // (5)=Two Pass - Second Pass Best.  The encoder uses the statistics that were generated in the first
     95     //    encoding pass to create the compressed output using the highest possible quality, and taking a
     96     //    longer amount of time to encode.. ( speed setting ignored )
     97     int Mode;               //
     98 
     99     // Key Framing Operations
    100     int auto_key;            // automatically detect cut scenes and set the keyframes
    101     int key_freq;            // maximum distance to key frame.
    102 
    103     int allow_lag;           // allow lagged compression (if 0 lagin frames is ignored)
    104     int lag_in_frames;        // how many frames lag before we start encoding
    105 
    106     // ----------------------------------------------------------------
    107     // DATARATE CONTROL OPTIONS
    108 
    109     int end_usage; // vbr or cbr
    110 
    111     // buffer targeting aggressiveness
    112     int under_shoot_pct;
    113     int over_shoot_pct;
    114 
    115     // buffering parameters
    116     int64_t starting_buffer_level;  // in seconds
    117     int64_t optimal_buffer_level;
    118     int64_t maximum_buffer_size;
    119 
    120     // controlling quality
    121     int fixed_q;
    122     int worst_allowed_q;
    123     int best_allowed_q;
    124     int cq_level;
    125     int lossless;
    126 
    127     // two pass datarate control
    128     int two_pass_vbrbias;        // two pass datarate control tweaks
    129     int two_pass_vbrmin_section;
    130     int two_pass_vbrmax_section;
    131     // END DATARATE CONTROL OPTIONS
    132     // ----------------------------------------------------------------
    133 
    134     // Spatial scalability
    135     int ss_number_layers;
    136 
    137     // these parameters aren't to be used in final build don't use!!!
    138     int play_alternate;
    139     int alt_freq;
    140 
    141     int encode_breakout;  // early breakout encode threshold : for video conf recommend 800
    142 
    143     /* Bitfield defining the error resiliency features to enable.
    144      * Can provide decodable frames after losses in previous
    145      * frames and decodable partitions after losses in the same frame.
    146      */
    147     unsigned int error_resilient_mode;
    148 
    149     /* Bitfield defining the parallel decoding mode where the
    150      * decoding in successive frames may be conducted in parallel
    151      * just by decoding the frame headers.
    152      */
    153     unsigned int frame_parallel_decoding_mode;
    154 
    155     int arnr_max_frames;
    156     int arnr_strength;
    157     int arnr_type;
    158 
    159     int tile_columns;
    160     int tile_rows;
    161 
    162     struct vpx_fixed_buf         two_pass_stats_in;
    163     struct vpx_codec_pkt_list  *output_pkt_list;
    164 
    165     vp8e_tuning tuning;
    166   } VP9_CONFIG;
    167 
    168 
    169   void vp9_initialize_enc();
    170 
    171   VP9_PTR vp9_create_compressor(VP9_CONFIG *oxcf);
    172   void vp9_remove_compressor(VP9_PTR *comp);
    173 
    174   void vp9_change_config(VP9_PTR onyx, VP9_CONFIG *oxcf);
    175 
    176 // receive a frames worth of data caller can assume that a copy of this frame is made
    177 // and not just a copy of the pointer..
    178   int vp9_receive_raw_frame(VP9_PTR comp, unsigned int frame_flags,
    179                             YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
    180                             int64_t end_time_stamp);
    181 
    182   int vp9_get_compressed_data(VP9_PTR comp, unsigned int *frame_flags,
    183                               unsigned long *size, unsigned char *dest,
    184                               int64_t *time_stamp, int64_t *time_end,
    185                               int flush);
    186 
    187   int vp9_get_preview_raw_frame(VP9_PTR comp, YV12_BUFFER_CONFIG *dest,
    188                                 vp9_ppflags_t *flags);
    189 
    190   int vp9_use_as_reference(VP9_PTR comp, int ref_frame_flags);
    191 
    192   int vp9_update_reference(VP9_PTR comp, int ref_frame_flags);
    193 
    194   int vp9_copy_reference_enc(VP9_PTR comp, VP9_REFFRAME ref_frame_flag,
    195                              YV12_BUFFER_CONFIG *sd);
    196 
    197   int vp9_get_reference_enc(VP9_PTR ptr, int index, YV12_BUFFER_CONFIG **fb);
    198 
    199   int vp9_set_reference_enc(VP9_PTR comp, VP9_REFFRAME ref_frame_flag,
    200                             YV12_BUFFER_CONFIG *sd);
    201 
    202   int vp9_update_entropy(VP9_PTR comp, int update);
    203 
    204   int vp9_set_roimap(VP9_PTR comp, unsigned char *map,
    205                      unsigned int rows, unsigned int cols,
    206                      int delta_q[MAX_SEGMENTS],
    207                      int delta_lf[MAX_SEGMENTS],
    208                      unsigned int threshold[MAX_SEGMENTS]);
    209 
    210   int vp9_set_active_map(VP9_PTR comp, unsigned char *map,
    211                          unsigned int rows, unsigned int cols);
    212 
    213   int vp9_set_internal_size(VP9_PTR comp,
    214                             VPX_SCALING horiz_mode, VPX_SCALING vert_mode);
    215 
    216   int vp9_set_size_literal(VP9_PTR comp, unsigned int width,
    217                            unsigned int height);
    218 
    219   int vp9_switch_layer(VP9_PTR comp, int layer);
    220 
    221   void vp9_set_svc(VP9_PTR comp, int use_svc);
    222 
    223   int vp9_get_quantizer(VP9_PTR c);
    224 
    225 #ifdef __cplusplus
    226 }
    227 #endif
    228 
    229 #endif  // VP9_COMMON_VP9_ONYX_H_
    230