Line data Source code
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 VP8_COMMON_ONYX_H_
12 : #define VP8_COMMON_ONYX_H_
13 :
14 : #ifdef __cplusplus
15 : extern "C" {
16 : #endif
17 :
18 : #include "vpx_config.h"
19 : #include "vpx/internal/vpx_codec_internal.h"
20 : #include "vpx/vp8cx.h"
21 : #include "vpx/vpx_encoder.h"
22 : #include "vpx_scale/yv12config.h"
23 : #include "ppflags.h"
24 :
25 : struct VP8_COMP;
26 :
27 : /* Create/destroy static data structures. */
28 :
29 : typedef enum {
30 : NORMAL = 0,
31 : FOURFIVE = 1,
32 : THREEFIVE = 2,
33 : ONETWO = 3
34 : } VPX_SCALING;
35 :
36 : typedef enum {
37 : USAGE_LOCAL_FILE_PLAYBACK = 0x0,
38 : USAGE_STREAM_FROM_SERVER = 0x1,
39 : USAGE_CONSTRAINED_QUALITY = 0x2,
40 : USAGE_CONSTANT_QUALITY = 0x3
41 : } END_USAGE;
42 :
43 : typedef enum {
44 : MODE_REALTIME = 0x0,
45 : MODE_GOODQUALITY = 0x1,
46 : MODE_BESTQUALITY = 0x2,
47 : MODE_FIRSTPASS = 0x3,
48 : MODE_SECONDPASS = 0x4,
49 : MODE_SECONDPASS_BEST = 0x5
50 : } MODE;
51 :
52 : typedef enum {
53 : FRAMEFLAGS_KEY = 1,
54 : FRAMEFLAGS_GOLDEN = 2,
55 : FRAMEFLAGS_ALTREF = 4
56 : } FRAMETYPE_FLAGS;
57 :
58 : #include <assert.h>
59 0 : static INLINE void Scale2Ratio(int mode, int *hr, int *hs) {
60 0 : switch (mode) {
61 : case NORMAL:
62 0 : *hr = 1;
63 0 : *hs = 1;
64 0 : break;
65 : case FOURFIVE:
66 0 : *hr = 4;
67 0 : *hs = 5;
68 0 : break;
69 : case THREEFIVE:
70 0 : *hr = 3;
71 0 : *hs = 5;
72 0 : break;
73 : case ONETWO:
74 0 : *hr = 1;
75 0 : *hs = 2;
76 0 : break;
77 : default:
78 0 : *hr = 1;
79 0 : *hs = 1;
80 0 : assert(0);
81 : break;
82 : }
83 0 : }
84 :
85 : typedef struct {
86 : /* 4 versions of bitstream defined:
87 : * 0 best quality/slowest decode, 3 lowest quality/fastest decode
88 : */
89 : int Version;
90 : int Width;
91 : int Height;
92 : struct vpx_rational timebase;
93 : unsigned int target_bandwidth; /* kilobits per second */
94 :
95 : /* Parameter used for applying denoiser.
96 : * For temporal denoiser: noise_sensitivity = 0 means off,
97 : * noise_sensitivity = 1 means temporal denoiser on for Y channel only,
98 : * noise_sensitivity = 2 means temporal denoiser on for all channels.
99 : * noise_sensitivity = 3 means aggressive denoising mode.
100 : * noise_sensitivity >= 4 means adaptive denoising mode.
101 : * Temporal denoiser is enabled via the configuration option:
102 : * CONFIG_TEMPORAL_DENOISING.
103 : * For spatial denoiser: noise_sensitivity controls the amount of
104 : * pre-processing blur: noise_sensitivity = 0 means off.
105 : * Spatial denoiser invoked under !CONFIG_TEMPORAL_DENOISING.
106 : */
107 : int noise_sensitivity;
108 :
109 : /* parameter used for sharpening output: recommendation 0: */
110 : int Sharpness;
111 : int cpu_used;
112 : unsigned int rc_max_intra_bitrate_pct;
113 : /* percent of rate boost for golden frame in CBR mode. */
114 : unsigned int gf_cbr_boost_pct;
115 : unsigned int screen_content_mode;
116 :
117 : /* mode ->
118 : *(0)=Realtime/Live Encoding. This mode is optimized for realtim
119 : * encoding (for example, capturing a television signal or feed
120 : * from a live camera). ( speed setting controls how fast )
121 : *(1)=Good Quality Fast Encoding. The encoder balances quality with
122 : * the amount of time it takes to encode the output. ( speed
123 : * setting controls how fast )
124 : *(2)=One Pass - Best Quality. The encoder places priority on the
125 : * quality of the output over encoding speed. The output is
126 : * compressed at the highest possible quality. This option takes
127 : * the longest amount of time to encode. ( speed setting ignored
128 : * )
129 : *(3)=Two Pass - First Pass. The encoder generates a file of
130 : * statistics for use in the second encoding pass. ( speed
131 : * setting controls how fast )
132 : *(4)=Two Pass - Second Pass. The encoder uses the statistics that
133 : * were generated in the first encoding pass to create the
134 : * compressed output. ( speed setting controls how fast )
135 : *(5)=Two Pass - Second Pass Best. The encoder uses the statistics
136 : * that were generated in the first encoding pass to create the
137 : * compressed output using the highest possible quality, and
138 : * taking a longer amount of time to encode.. ( speed setting
139 : * ignored )
140 : */
141 : int Mode;
142 :
143 : /* Key Framing Operations */
144 : int auto_key; /* automatically detect cut scenes */
145 : int key_freq; /* maximum distance to key frame. */
146 :
147 : /* lagged compression (if allow_lag == 0 lag_in_frames is ignored) */
148 : int allow_lag;
149 : int lag_in_frames; /* how many frames lag before we start encoding */
150 :
151 : /*
152 : * DATARATE CONTROL OPTIONS
153 : */
154 :
155 : int end_usage; /* vbr or cbr */
156 :
157 : /* buffer targeting aggressiveness */
158 : int under_shoot_pct;
159 : int over_shoot_pct;
160 :
161 : /* buffering parameters */
162 : int64_t starting_buffer_level;
163 : int64_t optimal_buffer_level;
164 : int64_t maximum_buffer_size;
165 :
166 : int64_t starting_buffer_level_in_ms;
167 : int64_t optimal_buffer_level_in_ms;
168 : int64_t maximum_buffer_size_in_ms;
169 :
170 : /* controlling quality */
171 : int fixed_q;
172 : int worst_allowed_q;
173 : int best_allowed_q;
174 : int cq_level;
175 :
176 : /* allow internal resizing */
177 : int allow_spatial_resampling;
178 : int resample_down_water_mark;
179 : int resample_up_water_mark;
180 :
181 : /* allow internal frame rate alterations */
182 : int allow_df;
183 : int drop_frames_water_mark;
184 :
185 : /* two pass datarate control */
186 : int two_pass_vbrbias;
187 : int two_pass_vbrmin_section;
188 : int two_pass_vbrmax_section;
189 :
190 : /*
191 : * END DATARATE CONTROL OPTIONS
192 : */
193 :
194 : /* these parameters aren't to be used in final build don't use!!! */
195 : int play_alternate;
196 : int alt_freq;
197 : int alt_q;
198 : int key_q;
199 : int gold_q;
200 :
201 : int multi_threaded; /* how many threads to run the encoder on */
202 : int token_partitions; /* how many token partitions to create */
203 :
204 : /* early breakout threshold: for video conf recommend 800 */
205 : int encode_breakout;
206 :
207 : /* Bitfield defining the error resiliency features to enable.
208 : * Can provide decodable frames after losses in previous
209 : * frames and decodable partitions after losses in the same frame.
210 : */
211 : unsigned int error_resilient_mode;
212 :
213 : int arnr_max_frames;
214 : int arnr_strength;
215 : int arnr_type;
216 :
217 : vpx_fixed_buf_t two_pass_stats_in;
218 : struct vpx_codec_pkt_list *output_pkt_list;
219 :
220 : vp8e_tuning tuning;
221 :
222 : /* Temporal scaling parameters */
223 : unsigned int number_of_layers;
224 : unsigned int target_bitrate[VPX_TS_MAX_PERIODICITY];
225 : unsigned int rate_decimator[VPX_TS_MAX_PERIODICITY];
226 : unsigned int periodicity;
227 : unsigned int layer_id[VPX_TS_MAX_PERIODICITY];
228 :
229 : #if CONFIG_MULTI_RES_ENCODING
230 : /* Number of total resolutions encoded */
231 : unsigned int mr_total_resolutions;
232 :
233 : /* Current encoder ID */
234 : unsigned int mr_encoder_id;
235 :
236 : /* Down-sampling factor */
237 : vpx_rational_t mr_down_sampling_factor;
238 :
239 : /* Memory location to store low-resolution encoder's mode info */
240 : void *mr_low_res_mode_info;
241 : #endif
242 : } VP8_CONFIG;
243 :
244 : void vp8_initialize();
245 :
246 : struct VP8_COMP *vp8_create_compressor(VP8_CONFIG *oxcf);
247 : void vp8_remove_compressor(struct VP8_COMP **comp);
248 :
249 : void vp8_init_config(struct VP8_COMP *onyx, VP8_CONFIG *oxcf);
250 : void vp8_change_config(struct VP8_COMP *onyx, VP8_CONFIG *oxcf);
251 :
252 : int vp8_receive_raw_frame(struct VP8_COMP *comp, unsigned int frame_flags,
253 : YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
254 : int64_t end_time_stamp);
255 : int vp8_get_compressed_data(struct VP8_COMP *comp, unsigned int *frame_flags,
256 : size_t *size, unsigned char *dest,
257 : unsigned char *dest_end, int64_t *time_stamp,
258 : int64_t *time_end, int flush);
259 : int vp8_get_preview_raw_frame(struct VP8_COMP *comp, YV12_BUFFER_CONFIG *dest,
260 : vp8_ppflags_t *flags);
261 :
262 : int vp8_use_as_reference(struct VP8_COMP *comp, int ref_frame_flags);
263 : int vp8_update_reference(struct VP8_COMP *comp, int ref_frame_flags);
264 : int vp8_get_reference(struct VP8_COMP *comp,
265 : enum vpx_ref_frame_type ref_frame_flag,
266 : YV12_BUFFER_CONFIG *sd);
267 : int vp8_set_reference(struct VP8_COMP *comp,
268 : enum vpx_ref_frame_type ref_frame_flag,
269 : YV12_BUFFER_CONFIG *sd);
270 : int vp8_update_entropy(struct VP8_COMP *comp, int update);
271 : int vp8_set_roimap(struct VP8_COMP *comp, unsigned char *map, unsigned int rows,
272 : unsigned int cols, int delta_q[4], int delta_lf[4],
273 : unsigned int threshold[4]);
274 : int vp8_set_active_map(struct VP8_COMP *comp, unsigned char *map,
275 : unsigned int rows, unsigned int cols);
276 : int vp8_set_internal_size(struct VP8_COMP *comp, VPX_SCALING horiz_mode,
277 : VPX_SCALING vert_mode);
278 : int vp8_get_quantizer(struct VP8_COMP *c);
279 :
280 : #ifdef __cplusplus
281 : }
282 : #endif
283 :
284 : #endif // VP8_COMMON_ONYX_H_
|