vp9_onyx.h 7.16 KB
Newer Older
John Koleszar's avatar
John Koleszar committed
1
/*
2
 *  Copyright (c) 2010 The WebM project authors. All Rights Reserved.
John Koleszar's avatar
John Koleszar committed
3
 *
4
 *  Use of this source code is governed by a BSD-style license
5 6
 *  that can be found in the LICENSE file in the root of the source
 *  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.
John Koleszar's avatar
John Koleszar committed
9 10 11
 */


12 13
#ifndef VP9_COMMON_VP9_ONYX_H_
#define VP9_COMMON_VP9_ONYX_H_
John Koleszar's avatar
John Koleszar committed
14 15 16 17 18 19

#ifdef __cplusplus
extern "C"
{
#endif

20
#include "vpx/internal/vpx_codec_internal.h"
John Koleszar's avatar
John Koleszar committed
21
#include "vpx/vp8cx.h"
John Koleszar's avatar
John Koleszar committed
22
#include "vpx_scale/yv12config.h"
23 24
#include "vp9/common/vp9_type_aliases.h"
#include "vp9/common/vp9_ppflags.h"
25
  typedef int *VP9_PTR;
John Koleszar's avatar
John Koleszar committed
26

John Koleszar's avatar
John Koleszar committed
27
  /* Create/destroy static data structures. */
John Koleszar's avatar
John Koleszar committed
28

John Koleszar's avatar
John Koleszar committed
29 30 31 32 33
  typedef enum {
    NORMAL      = 0,
    FOURFIVE    = 1,
    THREEFIVE   = 2,
    ONETWO      = 3
John Koleszar's avatar
John Koleszar committed
34

John Koleszar's avatar
John Koleszar committed
35
  } VPX_SCALING;
John Koleszar's avatar
John Koleszar committed
36

John Koleszar's avatar
John Koleszar committed
37
  typedef enum {
38 39 40 41
    VP9_LAST_FLAG = 1,
    VP9_GOLD_FLAG = 2,
    VP9_ALT_FLAG = 4
  } VP9_REFFRAME;
John Koleszar's avatar
John Koleszar committed
42 43


John Koleszar's avatar
John Koleszar committed
44 45 46 47 48
  typedef enum {
    USAGE_STREAM_FROM_SERVER    = 0x0,
    USAGE_LOCAL_FILE_PLAYBACK   = 0x1,
    USAGE_CONSTRAINED_QUALITY   = 0x2
  } END_USAGE;
John Koleszar's avatar
John Koleszar committed
49 50


John Koleszar's avatar
John Koleszar committed
51 52 53 54 55 56 57
  typedef enum {
    MODE_GOODQUALITY    = 0x1,
    MODE_BESTQUALITY    = 0x2,
    MODE_FIRSTPASS      = 0x3,
    MODE_SECONDPASS     = 0x4,
    MODE_SECONDPASS_BEST = 0x5,
  } MODE;
John Koleszar's avatar
John Koleszar committed
58

John Koleszar's avatar
John Koleszar committed
59 60 61 62 63
  typedef enum {
    FRAMEFLAGS_KEY    = 1,
    FRAMEFLAGS_GOLDEN = 2,
    FRAMEFLAGS_ALTREF = 4,
  } FRAMETYPE_FLAGS;
John Koleszar's avatar
John Koleszar committed
64 65 66


#include <assert.h>
John Koleszar's avatar
John Koleszar committed
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89
  static __inline void Scale2Ratio(int mode, int *hr, int *hs) {
    switch (mode) {
      case    NORMAL:
        *hr = 1;
        *hs = 1;
        break;
      case    FOURFIVE:
        *hr = 4;
        *hs = 5;
        break;
      case    THREEFIVE:
        *hr = 3;
        *hs = 5;
        break;
      case    ONETWO:
        *hr = 1;
        *hs = 2;
        break;
      default:
        *hr = 1;
        *hs = 1;
        assert(0);
        break;
John Koleszar's avatar
John Koleszar committed
90
    }
John Koleszar's avatar
John Koleszar committed
91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171
  }

  typedef struct {
    int Version;            // 4 versions of bitstream defined 0 best quality/slowest decode, 3 lowest quality/fastest decode
    int Width;              // width of data passed to the compressor
    int Height;             // height of data passed to the compressor
    double frame_rate;       // set to passed in framerate
    int target_bandwidth;    // bandwidth to be used in kilobits per second

    int noise_sensitivity;   // parameter used for applying pre processing blur: recommendation 0
    int Sharpness;          // parameter used for sharpening output: recommendation 0:
    int cpu_used;
    unsigned int rc_max_intra_bitrate_pct;

    // mode ->
    // (0)=Realtime/Live Encoding. This mode is optimized for realtim encoding (for example, capturing
    //    a television signal or feed from a live camera). ( speed setting controls how fast )
    // (1)=Good Quality Fast Encoding. The encoder balances quality with the amount of time it takes to
    //    encode the output. ( speed setting controls how fast )
    // (2)=One Pass - Best Quality. The encoder places priority on the quality of the output over encoding
    //    speed. The output is compressed at the highest possible quality. This option takes the longest
    //    amount of time to encode. ( speed setting ignored )
    // (3)=Two Pass - First Pass. The encoder generates a file of statistics for use in the second encoding
    //    pass. ( speed setting controls how fast )
    // (4)=Two Pass - Second Pass. The encoder uses the statistics that were generated in the first encoding
    //    pass to create the compressed output. ( speed setting controls how fast )
    // (5)=Two Pass - Second Pass Best.  The encoder uses the statistics that were generated in the first
    //    encoding pass to create the compressed output using the highest possible quality, and taking a
    //    longer amount of time to encode.. ( speed setting ignored )
    int Mode;               //

    // Key Framing Operations
    int auto_key;            // automatically detect cut scenes and set the keyframes
    int key_freq;            // maximum distance to key frame.

    int allow_lag;           // allow lagged compression (if 0 lagin frames is ignored)
    int lag_in_frames;        // how many frames lag before we start encoding

    // ----------------------------------------------------------------
    // DATARATE CONTROL OPTIONS

    int end_usage; // vbr or cbr

    // buffer targeting aggressiveness
    int under_shoot_pct;
    int over_shoot_pct;

    // buffering parameters
    int starting_buffer_level;  // in seconds
    int optimal_buffer_level;
    int maximum_buffer_size;

    // controlling quality
    int fixed_q;
    int worst_allowed_q;
    int best_allowed_q;
    int cq_level;
    int lossless;

    // two pass datarate control
    int two_pass_vbrbias;        // two pass datarate control tweaks
    int two_pass_vbrmin_section;
    int two_pass_vbrmax_section;
    // END DATARATE CONTROL OPTIONS
    // ----------------------------------------------------------------


    // these parameters aren't to be used in final build don't use!!!
    int play_alternate;
    int alt_freq;

    int encode_breakout;  // early breakout encode threshold : for video conf recommend 800

    int arnr_max_frames;
    int arnr_strength;
    int arnr_type;

    struct vpx_fixed_buf         two_pass_stats_in;
    struct vpx_codec_pkt_list  *output_pkt_list;

    vp8e_tuning tuning;
172
  } VP9_CONFIG;
John Koleszar's avatar
John Koleszar committed
173 174


175
  void vp9_initialize_enc();
John Koleszar's avatar
John Koleszar committed
176

177
  VP9_PTR vp9_create_compressor(VP9_CONFIG *oxcf);
178
  void vp9_remove_compressor(VP9_PTR *comp);
John Koleszar's avatar
John Koleszar committed
179

180
  void vp9_change_config(VP9_PTR onyx, VP9_CONFIG *oxcf);
John Koleszar's avatar
John Koleszar committed
181 182 183

// receive a frames worth of data caller can assume that a copy of this frame is made
// and not just a copy of the pointer..
184
  int vp9_receive_raw_frame(VP9_PTR comp, unsigned int frame_flags,
185 186 187
                            YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
                            int64_t end_time_stamp);

188
  int vp9_get_compressed_data(VP9_PTR comp, unsigned int *frame_flags,
189 190 191 192
                              unsigned long *size, unsigned char *dest,
                              int64_t *time_stamp, int64_t *time_end,
                              int flush);

193
  int vp9_get_preview_raw_frame(VP9_PTR comp, YV12_BUFFER_CONFIG *dest,
194
                                vp9_ppflags_t *flags);
195

196
  int vp9_use_as_reference(VP9_PTR comp, int ref_frame_flags);
197

198
  int vp9_update_reference(VP9_PTR comp, int ref_frame_flags);
199

200
  int vp9_get_reference_enc(VP9_PTR comp, VP9_REFFRAME ref_frame_flag,
201 202
                            YV12_BUFFER_CONFIG *sd);

203
  int vp9_set_reference_enc(VP9_PTR comp, VP9_REFFRAME ref_frame_flag,
204 205
                            YV12_BUFFER_CONFIG *sd);

206
  int vp9_update_entropy(VP9_PTR comp, int update);
207

208
  int vp9_set_roimap(VP9_PTR comp, unsigned char *map,
209 210 211 212
                     unsigned int rows, unsigned int cols,
                     int delta_q[4], int delta_lf[4],
                     unsigned int threshold[4]);

213
  int vp9_set_active_map(VP9_PTR comp, unsigned char *map,
214 215
                         unsigned int rows, unsigned int cols);

216
  int vp9_set_internal_size(VP9_PTR comp,
217 218
                            VPX_SCALING horiz_mode, VPX_SCALING vert_mode);

219
  int vp9_get_quantizer(VP9_PTR c);
John Koleszar's avatar
John Koleszar committed
220 221 222 223 224

#ifdef __cplusplus
}
#endif

225
#endif  // __INC_ONYX_H