vp9_onyx.h 7.59 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
#ifndef VP9_COMMON_VP9_ONYX_H_
#define VP9_COMMON_VP9_ONYX_H_
John Koleszar's avatar
John Koleszar committed
13
14
15
16
17
18

#ifdef __cplusplus
extern "C"
{
#endif

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

John Koleszar's avatar
John Koleszar committed
25
  /* Create/destroy static data structures. */
John Koleszar's avatar
John Koleszar committed
26

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

John Koleszar's avatar
John Koleszar committed
33
  } VPX_SCALING;
John Koleszar's avatar
John Koleszar committed
34

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


John Koleszar's avatar
John Koleszar committed
42
43
44
45
46
  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
47
48


John Koleszar's avatar
John Koleszar committed
49
50
51
52
53
54
55
  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
56

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


#include <assert.h>
John Koleszar's avatar
John Koleszar committed
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
  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
88
    }
John Koleszar's avatar
John Koleszar committed
89
90
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
  }

  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

162
163
164
165
166
167
    /* Bitfield defining the error resiliency features to enable.
     * Can provide decodable frames after losses in previous
     * frames and decodable partitions after losses in the same frame.
     */
    unsigned int error_resilient_mode;

168
169
170
171
172
173
    /* Bitfield defining the parallel decoding mode where the
     * decoding in successive frames may be conducted in parallel
     * just by decoding the frame headers.
     */
    unsigned int frame_parallel_decoding_mode;

John Koleszar's avatar
John Koleszar committed
174
175
176
177
178
179
180
181
    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;
182
  } VP9_CONFIG;
John Koleszar's avatar
John Koleszar committed
183
184


185
  void vp9_initialize_enc();
John Koleszar's avatar
John Koleszar committed
186

187
  VP9_PTR vp9_create_compressor(VP9_CONFIG *oxcf);
188
  void vp9_remove_compressor(VP9_PTR *comp);
John Koleszar's avatar
John Koleszar committed
189

190
  void vp9_change_config(VP9_PTR onyx, VP9_CONFIG *oxcf);
John Koleszar's avatar
John Koleszar committed
191
192
193

// 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..
194
  int vp9_receive_raw_frame(VP9_PTR comp, unsigned int frame_flags,
195
196
197
                            YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
                            int64_t end_time_stamp);

198
  int vp9_get_compressed_data(VP9_PTR comp, unsigned int *frame_flags,
199
200
201
202
                              unsigned long *size, unsigned char *dest,
                              int64_t *time_stamp, int64_t *time_end,
                              int flush);

203
  int vp9_get_preview_raw_frame(VP9_PTR comp, YV12_BUFFER_CONFIG *dest,
204
                                vp9_ppflags_t *flags);
205

206
  int vp9_use_as_reference(VP9_PTR comp, int ref_frame_flags);
207

208
  int vp9_update_reference(VP9_PTR comp, int ref_frame_flags);
209

210
  int vp9_get_reference_enc(VP9_PTR comp, VP9_REFFRAME ref_frame_flag,
211
212
                            YV12_BUFFER_CONFIG *sd);

213
  int vp9_set_reference_enc(VP9_PTR comp, VP9_REFFRAME ref_frame_flag,
214
215
                            YV12_BUFFER_CONFIG *sd);

216
  int vp9_update_entropy(VP9_PTR comp, int update);
217

218
  int vp9_set_roimap(VP9_PTR comp, unsigned char *map,
219
220
221
222
                     unsigned int rows, unsigned int cols,
                     int delta_q[4], int delta_lf[4],
                     unsigned int threshold[4]);

223
  int vp9_set_active_map(VP9_PTR comp, unsigned char *map,
224
225
                         unsigned int rows, unsigned int cols);

226
  int vp9_set_internal_size(VP9_PTR comp,
227
228
                            VPX_SCALING horiz_mode, VPX_SCALING vert_mode);

229
  int vp9_get_quantizer(VP9_PTR c);
John Koleszar's avatar
John Koleszar committed
230
231
232
233
234

#ifdef __cplusplus
}
#endif

235
#endif  // VP9_COMMON_VP9_ONYX_H_