Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(942)

Side by Side Diff: source/libvpx/vp9/encoder/vp9_onyx_int.h

Issue 232133009: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_onyx_if.c ('k') | source/libvpx/vp9/encoder/vp9_picklpf.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 /* 1 /*
2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved. 2 * Copyright (c) 2010 The WebM project authors. All Rights Reserved.
3 * 3 *
4 * Use of this source code is governed by a BSD-style license 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 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 6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may 7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree. 8 * be found in the AUTHORS file in the root of the source tree.
9 */ 9 */
10 10
11 #ifndef VP9_ENCODER_VP9_ONYX_INT_H_ 11 #ifndef VP9_ENCODER_VP9_ONYX_INT_H_
12 #define VP9_ENCODER_VP9_ONYX_INT_H_ 12 #define VP9_ENCODER_VP9_ONYX_INT_H_
13 13
14 #include <stdio.h> 14 #include <stdio.h>
15 15
16 #include "./vpx_config.h" 16 #include "./vpx_config.h"
17 #include "vpx_ports/mem.h" 17 #include "vpx_ports/mem.h"
18 #include "vpx/internal/vpx_codec_internal.h" 18 #include "vpx/internal/vpx_codec_internal.h"
19 #include "vpx/vp8cx.h"
19 20
21 #include "vp9/common/vp9_ppflags.h"
20 #include "vp9/common/vp9_entropy.h" 22 #include "vp9/common/vp9_entropy.h"
21 #include "vp9/common/vp9_entropymode.h" 23 #include "vp9/common/vp9_entropymode.h"
22 #include "vp9/common/vp9_onyx.h"
23 #include "vp9/common/vp9_onyxc_int.h" 24 #include "vp9/common/vp9_onyxc_int.h"
24 25
26 #include "vp9/encoder/vp9_aq_cyclicrefresh.h"
25 #include "vp9/encoder/vp9_encodemb.h" 27 #include "vp9/encoder/vp9_encodemb.h"
26 #include "vp9/encoder/vp9_firstpass.h" 28 #include "vp9/encoder/vp9_firstpass.h"
27 #include "vp9/encoder/vp9_lookahead.h" 29 #include "vp9/encoder/vp9_lookahead.h"
28 #include "vp9/encoder/vp9_mbgraph.h" 30 #include "vp9/encoder/vp9_mbgraph.h"
29 #include "vp9/encoder/vp9_mcomp.h" 31 #include "vp9/encoder/vp9_mcomp.h"
30 #include "vp9/encoder/vp9_quantize.h" 32 #include "vp9/encoder/vp9_quantize.h"
31 #include "vp9/encoder/vp9_ratectrl.h" 33 #include "vp9/encoder/vp9_ratectrl.h"
34 #include "vp9/encoder/vp9_speed_features.h"
35 #include "vp9/encoder/vp9_svc_layercontext.h"
32 #include "vp9/encoder/vp9_tokenize.h" 36 #include "vp9/encoder/vp9_tokenize.h"
33 #include "vp9/encoder/vp9_treewriter.h"
34 #include "vp9/encoder/vp9_variance.h" 37 #include "vp9/encoder/vp9_variance.h"
35 38
36 #ifdef __cplusplus 39 #ifdef __cplusplus
37 extern "C" { 40 extern "C" {
38 #endif 41 #endif
39 42
40 // #define MODE_TEST_HIT_STATS 43 // #define MODE_TEST_HIT_STATS
41 44
42 #if CONFIG_MULTIPLE_ARF
43 // Set MIN_GF_INTERVAL to 1 for the full decomposition.
44 #define MIN_GF_INTERVAL 2
45 #else
46 #define MIN_GF_INTERVAL 4
47 #endif
48 #define DEFAULT_GF_INTERVAL 10 45 #define DEFAULT_GF_INTERVAL 10
49 #define DEFAULT_KF_BOOST 2000
50 #define DEFAULT_GF_BOOST 2000
51
52 #define KEY_FRAME_CONTEXT 5
53 46
54 #define MAX_MODES 30 47 #define MAX_MODES 30
55 #define MAX_REFS 6 48 #define MAX_REFS 6
56 49
57 #define MIN_THRESHMULT 32
58 #define MAX_THRESHMULT 512
59
60 #define GF_ZEROMV_ZBIN_BOOST 0
61 #define LF_ZEROMV_ZBIN_BOOST 0
62 #define MV_ZBIN_BOOST 0
63 #define SPLIT_MV_ZBIN_BOOST 0
64 #define INTRA_ZBIN_BOOST 0
65
66 typedef struct { 50 typedef struct {
67 int nmvjointcost[MV_JOINTS]; 51 int nmvjointcost[MV_JOINTS];
68 int nmvcosts[2][MV_VALS]; 52 int nmvcosts[2][MV_VALS];
69 int nmvcosts_hp[2][MV_VALS]; 53 int nmvcosts_hp[2][MV_VALS];
70 54
71 vp9_prob segment_pred_probs[PREDICTION_PROBS]; 55 vp9_prob segment_pred_probs[PREDICTION_PROBS];
72 56
73 unsigned char *last_frame_seg_map_copy; 57 unsigned char *last_frame_seg_map_copy;
74 58
75 // 0 = Intra, Last, GF, ARF 59 // 0 = Intra, Last, GF, ARF
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
125 typedef enum { 109 typedef enum {
126 THR_LAST, 110 THR_LAST,
127 THR_GOLD, 111 THR_GOLD,
128 THR_ALTR, 112 THR_ALTR,
129 THR_COMP_LA, 113 THR_COMP_LA,
130 THR_COMP_GA, 114 THR_COMP_GA,
131 THR_INTRA, 115 THR_INTRA,
132 } THR_MODES_SUB8X8; 116 } THR_MODES_SUB8X8;
133 117
134 typedef enum { 118 typedef enum {
135 DIAMOND = 0,
136 NSTEP = 1,
137 HEX = 2,
138 BIGDIA = 3,
139 SQUARE = 4,
140 FAST_HEX = 5
141 } SEARCH_METHODS;
142
143 typedef enum {
144 USE_FULL_RD = 0,
145 USE_LARGESTINTRA,
146 USE_LARGESTINTRA_MODELINTER,
147 USE_LARGESTALL
148 } TX_SIZE_SEARCH_METHOD;
149
150 typedef enum {
151 NOT_IN_USE = 0,
152 RELAXED_NEIGHBORING_MIN_MAX = 1,
153 STRICT_NEIGHBORING_MIN_MAX = 2
154 } AUTO_MIN_MAX_MODE;
155
156 typedef enum {
157 // Values should be powers of 2 so that they can be selected as bits of
158 // an integer flags field
159
160 // terminate search early based on distortion so far compared to
161 // qp step, distortion in the neighborhood of the frame, etc.
162 FLAG_EARLY_TERMINATE = 1,
163
164 // skips comp inter modes if the best so far is an intra mode
165 FLAG_SKIP_COMP_BESTINTRA = 2,
166
167 // skips comp inter modes if the best single intermode so far does
168 // not have the same reference as one of the two references being
169 // tested
170 FLAG_SKIP_COMP_REFMISMATCH = 4,
171
172 // skips oblique intra modes if the best so far is an inter mode
173 FLAG_SKIP_INTRA_BESTINTER = 8,
174
175 // skips oblique intra modes at angles 27, 63, 117, 153 if the best
176 // intra so far is not one of the neighboring directions
177 FLAG_SKIP_INTRA_DIRMISMATCH = 16,
178
179 // skips intra modes other than DC_PRED if the source variance
180 // is small
181 FLAG_SKIP_INTRA_LOWVAR = 32,
182 } MODE_SEARCH_SKIP_LOGIC;
183
184 typedef enum {
185 SUBPEL_TREE = 0,
186 // Other methods to come
187 } SUBPEL_SEARCH_METHODS;
188
189 #define ALL_INTRA_MODES 0x3FF
190 #define INTRA_DC_ONLY 0x01
191 #define INTRA_DC_TM ((1 << TM_PRED) | (1 << DC_PRED))
192 #define INTRA_DC_H_V ((1 << DC_PRED) | (1 << V_PRED) | (1 << H_PRED))
193 #define INTRA_DC_TM_H_V (INTRA_DC_TM | (1 << V_PRED) | (1 << H_PRED))
194
195 typedef enum {
196 LAST_FRAME_PARTITION_OFF = 0,
197 LAST_FRAME_PARTITION_LOW_MOTION = 1,
198 LAST_FRAME_PARTITION_ALL = 2
199 } LAST_FRAME_PARTITION_METHOD;
200
201 typedef enum {
202 // No recode.
203 DISALLOW_RECODE = 0,
204 // Allow recode for KF and exceeding maximum frame bandwidth.
205 ALLOW_RECODE_KFMAXBW = 1,
206 // Allow recode only for KF/ARF/GF frames.
207 ALLOW_RECODE_KFARFGF = 2,
208 // Allow recode for all frames based on bitrate constraints.
209 ALLOW_RECODE = 3,
210 } RECODE_LOOP_TYPE;
211
212 typedef enum {
213 // encode_breakout is disabled. 119 // encode_breakout is disabled.
214 ENCODE_BREAKOUT_DISABLED = 0, 120 ENCODE_BREAKOUT_DISABLED = 0,
215 // encode_breakout is enabled. 121 // encode_breakout is enabled.
216 ENCODE_BREAKOUT_ENABLED = 1, 122 ENCODE_BREAKOUT_ENABLED = 1,
217 // encode_breakout is enabled with small max_thresh limit. 123 // encode_breakout is enabled with small max_thresh limit.
218 ENCODE_BREAKOUT_LIMITED = 2 124 ENCODE_BREAKOUT_LIMITED = 2
219 } ENCODE_BREAKOUT_TYPE; 125 } ENCODE_BREAKOUT_TYPE;
220 126
221 typedef enum { 127 typedef enum {
222 // Search partitions using RD/NONRD criterion 128 NORMAL = 0,
223 SEARCH_PARTITION = 0, 129 FOURFIVE = 1,
130 THREEFIVE = 2,
131 ONETWO = 3
132 } VPX_SCALING;
224 133
225 // Always use a fixed size partition 134 typedef enum {
226 FIXED_PARTITION = 1, 135 USAGE_LOCAL_FILE_PLAYBACK = 0,
136 USAGE_STREAM_FROM_SERVER = 1,
137 USAGE_CONSTRAINED_QUALITY = 2,
138 USAGE_CONSTANT_QUALITY = 3,
139 } END_USAGE;
227 140
228 // Use a fixed size partition in every 64X64 SB, where the size is 141 typedef enum {
229 // determined based on source variance 142 // Good Quality Fast Encoding. The encoder balances quality with the
230 VAR_BASED_FIXED_PARTITION = 2, 143 // amount of time it takes to encode the output. (speed setting
144 // controls how fast)
145 MODE_GOODQUALITY = 1,
231 146
232 // Use an arbitrary partitioning scheme based on source variance within 147 // One Pass - Best Quality. The encoder places priority on the
233 // a 64X64 SB 148 // quality of the output over encoding speed. The output is compressed
234 VAR_BASED_PARTITION 149 // at the highest possible quality. This option takes the longest
235 } PARTITION_SEARCH_TYPE; 150 // amount of time to encode. (speed setting ignored)
151 MODE_BESTQUALITY = 2,
236 152
237 typedef struct { 153 // Two Pass - First Pass. The encoder generates a file of statistics
238 // Frame level coding parameter update 154 // for use in the second encoding pass. (speed setting controls how fast)
239 int frame_parameter_update; 155 MODE_FIRSTPASS = 3,
240 156
241 // Motion search method (Diamond, NSTEP, Hex, Big Diamond, Square, etc). 157 // Two Pass - Second Pass. The encoder uses the statistics that were
242 SEARCH_METHODS search_method; 158 // generated in the first encoding pass to create the compressed
159 // output. (speed setting controls how fast)
160 MODE_SECONDPASS = 4,
243 161
244 RECODE_LOOP_TYPE recode_loop; 162 // Two Pass - Second Pass Best. The encoder uses the statistics that
163 // were generated in the first encoding pass to create the compressed
164 // output using the highest possible quality, and taking a
165 // longer amount of time to encode. (speed setting ignored)
166 MODE_SECONDPASS_BEST = 5,
245 167
246 // Subpel_search_method can only be subpel_tree which does a subpixel 168 // Realtime/Live Encoding. This mode is optimized for realtime
247 // logarithmic search that keeps stepping at 1/2 pixel units until 169 // encoding (for example, capturing a television signal or feed from
248 // you stop getting a gain, and then goes on to 1/4 and repeats 170 // a live camera). (speed setting controls how fast)
249 // the same process. Along the way it skips many diagonals. 171 MODE_REALTIME = 6,
250 SUBPEL_SEARCH_METHODS subpel_search_method; 172 } MODE;
251 173
252 // Maximum number of steps in logarithmic subpel search before giving up. 174 typedef enum {
253 int subpel_iters_per_step; 175 FRAMEFLAGS_KEY = 1 << 0,
176 FRAMEFLAGS_GOLDEN = 1 << 1,
177 FRAMEFLAGS_ALTREF = 1 << 2,
178 } FRAMETYPE_FLAGS;
254 179
255 // Control when to stop subpel search 180 typedef enum {
256 int subpel_force_stop; 181 NO_AQ = 0,
182 VARIANCE_AQ = 1,
183 COMPLEXITY_AQ = 2,
184 CYCLIC_REFRESH_AQ = 3,
185 AQ_MODE_COUNT // This should always be the last member of the enum
186 } AQ_MODE;
257 187
258 // Thresh_mult is used to set a threshold for the rd score. A higher value 188 typedef struct VP9_CONFIG {
259 // means that we will accept the best mode so far more often. This number 189 BITSTREAM_PROFILE profile;
260 // is used in combination with the current block size, and thresh_freq_fact 190 BIT_DEPTH bit_depth;
261 // to pick a threshold. 191 int width; // width of data passed to the compressor
262 int thresh_mult[MAX_MODES]; 192 int height; // height of data passed to the compressor
263 int thresh_mult_sub8x8[MAX_REFS]; 193 double framerate; // set to passed in framerate
194 int64_t target_bandwidth; // bandwidth to be used in kilobits per second
264 195
265 // This parameter controls the number of steps we'll do in a diamond 196 int noise_sensitivity; // pre processing blur: recommendation 0
266 // search. 197 int sharpness; // sharpening output: recommendation 0:
267 int max_step_search_steps; 198 int cpu_used;
199 unsigned int rc_max_intra_bitrate_pct;
268 200
269 // This parameter controls which step in the n-step process we start at. 201 MODE mode;
270 // It's changed adaptively based on circumstances.
271 int reduce_first_step_size;
272 202
273 // If this is set to 1, we limit the motion search range to 2 times the 203 // Key Framing Operations
274 // largest motion vector found in the last frame. 204 int auto_key; // autodetect cut scenes and set the keyframes
275 int auto_mv_step_size; 205 int key_freq; // maximum distance to key frame.
276 206
277 // Trellis (dynamic programming) optimization of quantized values (+1, 0). 207 int lag_in_frames; // how many frames lag before we start encoding
278 int optimize_coefficients;
279 208
280 // Always set to 0. If on it enables 0 cost background transmission 209 // ----------------------------------------------------------------
281 // (except for the initial transmission of the segmentation). The feature is 210 // DATARATE CONTROL OPTIONS
282 // disabled because the addition of very large block sizes make the
283 // backgrounds very to cheap to encode, and the segmentation we have
284 // adds overhead.
285 int static_segmentation;
286 211
287 // If 1 we iterate finding a best reference for 2 ref frames together - via 212 END_USAGE end_usage; // vbr or cbr
288 // a log search that iterates 4 times (check around mv for last for best
289 // error of combined predictor then check around mv for alt). If 0 we
290 // we just use the best motion vector found for each frame by itself.
291 int comp_inter_joint_search_thresh;
292 213
293 // This variable is used to cap the maximum number of times we skip testing a 214 // buffer targeting aggressiveness
294 // mode to be evaluated. A high value means we will be faster. 215 int under_shoot_pct;
295 int adaptive_rd_thresh; 216 int over_shoot_pct;
296 217
297 // Enables skipping the reconstruction step (idct, recon) in the 218 // buffering parameters
298 // intermediate steps assuming the last frame didn't have too many intra 219 int64_t starting_buffer_level; // in seconds
299 // blocks and the q is less than a threshold.
300 int skip_encode_sb;
301 int skip_encode_frame;
302
303 // This variable allows us to reuse the last frames partition choices
304 // (64x64 v 32x32 etc) for this frame. It can be set to only use the last
305 // frame as a starting point in low motion scenes or always use it. If set
306 // we use last partitioning_redo frequency to determine how often to redo
307 // the partitioning from scratch. Adjust_partitioning_from_last_frame
308 // enables us to adjust up or down one partitioning from the last frames
309 // partitioning.
310 LAST_FRAME_PARTITION_METHOD use_lastframe_partitioning;
311
312 // Determine which method we use to determine transform size. We can choose
313 // between options like full rd, largest for prediction size, largest
314 // for intra and model coefs for the rest.
315 TX_SIZE_SEARCH_METHOD tx_size_search_method;
316
317 // Low precision 32x32 fdct keeps everything in 16 bits and thus is less
318 // precise but significantly faster than the non lp version.
319 int use_lp32x32fdct;
320
321 // TODO(JBB): remove this as its no longer used.
322
323 // After looking at the first set of modes (set by index here), skip
324 // checking modes for reference frames that don't match the reference frame
325 // of the best so far.
326 int mode_skip_start;
327
328 // TODO(JBB): Remove this.
329 int reference_masking;
330
331 PARTITION_SEARCH_TYPE partition_search_type;
332
333 // Used if partition_search_type = FIXED_SIZE_PARTITION
334 BLOCK_SIZE always_this_block_size;
335
336 // Skip rectangular partition test when partition type none gives better
337 // rd than partition type split.
338 int less_rectangular_check;
339
340 // Disable testing non square partitions. (eg 16x32)
341 int use_square_partition_only;
342
343 // Sets min and max partition sizes for this 64x64 region based on the
344 // same 64x64 in last encoded frame, and the left and above neighbor.
345 AUTO_MIN_MAX_MODE auto_min_max_partition_size;
346
347 // Min and max partition size we enable (block_size) as per auto
348 // min max, but also used by adjust partitioning, and pick_partitioning.
349 BLOCK_SIZE min_partition_size;
350 BLOCK_SIZE max_partition_size;
351
352 // Whether or not we allow partitions one smaller or one greater than the last
353 // frame's partitioning. Only used if use_lastframe_partitioning is set.
354 int adjust_partitioning_from_last_frame;
355
356 // How frequently we re do the partitioning from scratch. Only used if
357 // use_lastframe_partitioning is set.
358 int last_partitioning_redo_frequency;
359
360 // Disables sub 8x8 blocksizes in different scenarios: Choices are to disable
361 // it always, to allow it for only Last frame and Intra, disable it for all
362 // inter modes or to enable it always.
363 int disable_split_mask;
364
365 // TODO(jingning): combine the related motion search speed features
366 // This allows us to use motion search at other sizes as a starting
367 // point for this motion search and limits the search range around it.
368 int adaptive_motion_search;
369
370 // Allows sub 8x8 modes to use the prediction filter that was determined
371 // best for 8x8 mode. If set to 0 we always re check all the filters for
372 // sizes less than 8x8, 1 means we check all filter modes if no 8x8 filter
373 // was selected, and 2 means we use 8 tap if no 8x8 filter mode was selected.
374 int adaptive_pred_interp_filter;
375
376 // Implements various heuristics to skip searching modes
377 // The heuristics selected are based on flags
378 // defined in the MODE_SEARCH_SKIP_HEURISTICS enum
379 unsigned int mode_search_skip_flags;
380
381 // A source variance threshold below which the split mode is disabled
382 unsigned int disable_split_var_thresh;
383
384 // A source variance threshold below which filter search is disabled
385 // Choose a very large value (UINT_MAX) to use 8-tap always
386 unsigned int disable_filter_search_var_thresh;
387
388 // These bit masks allow you to enable or disable intra modes for each
389 // transform size separately.
390 int intra_y_mode_mask[TX_SIZES];
391 int intra_uv_mode_mask[TX_SIZES];
392
393 // This variable enables an early break out of mode testing if the model for
394 // rd built from the prediction signal indicates a value that's much
395 // higher than the best rd we've seen so far.
396 int use_rd_breakout;
397
398 // This enables us to use an estimate for intra rd based on dc mode rather
399 // than choosing an actual uv mode in the stage of encoding before the actual
400 // final encode.
401 int use_uv_intra_rd_estimate;
402
403 // This feature controls how the loop filter level is determined:
404 // 0: Try the full image with different values.
405 // 1: Try a small portion of the image with different values.
406 // 2: Estimate the level based on quantizer and frame type
407 int use_fast_lpf_pick;
408
409 // This feature limits the number of coefficients updates we actually do
410 // by only looking at counts from 1/2 the bands.
411 int use_fast_coef_updates; // 0: 2-loop, 1: 1-loop, 2: 1-loop reduced
412
413 // This flag controls the use of non-RD mode decision.
414 int use_nonrd_pick_mode;
415
416 // This variable sets the encode_breakout threshold. Currently, it is only
417 // enabled in real time mode.
418 int encode_breakout_thresh;
419
420 // A binary mask indicating if NEARESTMV, NEARMV, ZEROMV, NEWMV
421 // modes are disabled in order from LSB to MSB for each BLOCK_SIZE.
422 int disable_inter_mode_mask[BLOCK_SIZES];
423 } SPEED_FEATURES;
424
425 typedef struct {
426 RATE_CONTROL rc;
427 int target_bandwidth;
428 int64_t starting_buffer_level;
429 int64_t optimal_buffer_level; 220 int64_t optimal_buffer_level;
430 int64_t maximum_buffer_size; 221 int64_t maximum_buffer_size;
431 double framerate; 222
432 int avg_frame_size; 223 // Frame drop threshold.
433 } LAYER_CONTEXT; 224 int drop_frames_water_mark;
225
226 // controlling quality
227 int fixed_q;
228 int worst_allowed_q;
229 int best_allowed_q;
230 int cq_level;
231 int lossless;
232 AQ_MODE aq_mode; // Adaptive Quantization mode
233
234 // Enable feature to reduce the frame quantization every x frames.
235 int frame_periodic_boost;
236
237 // two pass datarate control
238 int two_pass_vbrbias; // two pass datarate control tweaks
239 int two_pass_vbrmin_section;
240 int two_pass_vbrmax_section;
241 // END DATARATE CONTROL OPTIONS
242 // ----------------------------------------------------------------
243
244 // Spatial and temporal scalability.
245 int ss_number_layers; // Number of spatial layers.
246 int ts_number_layers; // Number of temporal layers.
247 // Bitrate allocation for spatial layers.
248 int ss_target_bitrate[VPX_SS_MAX_LAYERS];
249 // Bitrate allocation (CBR mode) and framerate factor, for temporal layers.
250 int ts_target_bitrate[VPX_TS_MAX_LAYERS];
251 int ts_rate_decimator[VPX_TS_MAX_LAYERS];
252
253 // these parameters aren't to be used in final build don't use!!!
254 int play_alternate;
255 int alt_freq;
256
257 int encode_breakout; // early breakout : for video conf recommend 800
258
259 /* Bitfield defining the error resiliency features to enable.
260 * Can provide decodable frames after losses in previous
261 * frames and decodable partitions after losses in the same frame.
262 */
263 unsigned int error_resilient_mode;
264
265 /* Bitfield defining the parallel decoding mode where the
266 * decoding in successive frames may be conducted in parallel
267 * just by decoding the frame headers.
268 */
269 unsigned int frame_parallel_decoding_mode;
270
271 int arnr_max_frames;
272 int arnr_strength;
273 int arnr_type;
274
275 int tile_columns;
276 int tile_rows;
277
278 struct vpx_fixed_buf two_pass_stats_in;
279 struct vpx_codec_pkt_list *output_pkt_list;
280
281 vp8e_tuning tuning;
282 } VP9_CONFIG;
434 283
435 typedef struct VP9_COMP { 284 typedef struct VP9_COMP {
436 DECLARE_ALIGNED(16, int16_t, y_quant[QINDEX_RANGE][8]); 285 QUANTS quants;
437 DECLARE_ALIGNED(16, int16_t, y_quant_shift[QINDEX_RANGE][8]);
438 DECLARE_ALIGNED(16, int16_t, y_zbin[QINDEX_RANGE][8]);
439 DECLARE_ALIGNED(16, int16_t, y_round[QINDEX_RANGE][8]);
440
441 DECLARE_ALIGNED(16, int16_t, uv_quant[QINDEX_RANGE][8]);
442 DECLARE_ALIGNED(16, int16_t, uv_quant_shift[QINDEX_RANGE][8]);
443 DECLARE_ALIGNED(16, int16_t, uv_zbin[QINDEX_RANGE][8]);
444 DECLARE_ALIGNED(16, int16_t, uv_round[QINDEX_RANGE][8]);
445
446 #if CONFIG_ALPHA
447 DECLARE_ALIGNED(16, int16_t, a_quant[QINDEX_RANGE][8]);
448 DECLARE_ALIGNED(16, int16_t, a_quant_shift[QINDEX_RANGE][8]);
449 DECLARE_ALIGNED(16, int16_t, a_zbin[QINDEX_RANGE][8]);
450 DECLARE_ALIGNED(16, int16_t, a_round[QINDEX_RANGE][8]);
451 #endif
452
453 MACROBLOCK mb; 286 MACROBLOCK mb;
454 VP9_COMMON common; 287 VP9_COMMON common;
455 VP9_CONFIG oxcf; 288 VP9_CONFIG oxcf;
456 struct lookahead_ctx *lookahead; 289 struct lookahead_ctx *lookahead;
457 struct lookahead_entry *source; 290 struct lookahead_entry *source;
458 #if CONFIG_MULTIPLE_ARF 291 #if CONFIG_MULTIPLE_ARF
459 struct lookahead_entry *alt_ref_source[REF_FRAMES]; 292 struct lookahead_entry *alt_ref_source[REF_FRAMES];
460 #else 293 #else
461 struct lookahead_entry *alt_ref_source; 294 struct lookahead_entry *alt_ref_source;
462 #endif 295 #endif
296 struct lookahead_entry *last_source;
463 297
464 YV12_BUFFER_CONFIG *Source; 298 YV12_BUFFER_CONFIG *Source;
299 YV12_BUFFER_CONFIG *Last_Source; // NULL for first frame and alt_ref frames
465 YV12_BUFFER_CONFIG *un_scaled_source; 300 YV12_BUFFER_CONFIG *un_scaled_source;
466 YV12_BUFFER_CONFIG scaled_source; 301 YV12_BUFFER_CONFIG scaled_source;
302 YV12_BUFFER_CONFIG *unscaled_last_source;
303 YV12_BUFFER_CONFIG scaled_last_source;
467 304
468 int key_frame_frequency; 305 int key_frame_frequency;
469 306
470 int gold_is_last; // gold same as last frame ( short circuit gold searches) 307 int gold_is_last; // gold same as last frame ( short circuit gold searches)
471 int alt_is_last; // Alt same as last ( short circuit altref search) 308 int alt_is_last; // Alt same as last ( short circuit altref search)
472 int gold_is_alt; // don't do both alt and gold search ( just do gold). 309 int gold_is_alt; // don't do both alt and gold search ( just do gold).
473 310
474 int scaled_ref_idx[3]; 311 int scaled_ref_idx[3];
475 int lst_fb_idx; 312 int lst_fb_idx;
476 int gld_fb_idx; 313 int gld_fb_idx;
(...skipping 22 matching lines...) Expand all
499 #if CONFIG_MULTIPLE_ARF 336 #if CONFIG_MULTIPLE_ARF
500 // Position within a frame coding order (including any additional ARF frames). 337 // Position within a frame coding order (including any additional ARF frames).
501 unsigned int sequence_number; 338 unsigned int sequence_number;
502 // Next frame in naturally occurring order that has not yet been coded. 339 // Next frame in naturally occurring order that has not yet been coded.
503 int next_frame_in_order; 340 int next_frame_in_order;
504 #endif 341 #endif
505 342
506 // Ambient reconstruction err target for force key frames 343 // Ambient reconstruction err target for force key frames
507 int ambient_err; 344 int ambient_err;
508 345
346 // Thresh_mult is used to set a threshold for the rd score. A higher value
347 // means that we will accept the best mode so far more often. This number
348 // is used in combination with the current block size, and thresh_freq_fact
349 // to pick a threshold.
350 int rd_thresh_mult[MAX_MODES];
351 int rd_thresh_mult_sub8x8[MAX_REFS];
352
509 int rd_threshes[MAX_SEGMENTS][BLOCK_SIZES][MAX_MODES]; 353 int rd_threshes[MAX_SEGMENTS][BLOCK_SIZES][MAX_MODES];
510 int rd_thresh_freq_fact[BLOCK_SIZES][MAX_MODES]; 354 int rd_thresh_freq_fact[BLOCK_SIZES][MAX_MODES];
511 int rd_thresh_sub8x8[MAX_SEGMENTS][BLOCK_SIZES][MAX_REFS]; 355 int rd_thresh_sub8x8[MAX_SEGMENTS][BLOCK_SIZES][MAX_REFS];
512 int rd_thresh_freq_sub8x8[BLOCK_SIZES][MAX_REFS]; 356 int rd_thresh_freq_sub8x8[BLOCK_SIZES][MAX_REFS];
513 357
514 int64_t rd_comp_pred_diff[REFERENCE_MODES]; 358 int64_t rd_comp_pred_diff[REFERENCE_MODES];
515 int64_t rd_prediction_type_threshes[4][REFERENCE_MODES]; 359 int64_t rd_prediction_type_threshes[MAX_REF_FRAMES][REFERENCE_MODES];
516 int64_t rd_tx_select_diff[TX_MODES]; 360 int64_t rd_tx_select_diff[TX_MODES];
517 // FIXME(rbultje) can this overflow? 361 // FIXME(rbultje) can this overflow?
518 int rd_tx_select_threshes[4][TX_MODES]; 362 int rd_tx_select_threshes[MAX_REF_FRAMES][TX_MODES];
519 363
520 int64_t rd_filter_diff[SWITCHABLE_FILTER_CONTEXTS]; 364 int64_t rd_filter_diff[SWITCHABLE_FILTER_CONTEXTS];
521 int64_t rd_filter_threshes[4][SWITCHABLE_FILTER_CONTEXTS]; 365 int64_t rd_filter_threshes[MAX_REF_FRAMES][SWITCHABLE_FILTER_CONTEXTS];
522 int64_t rd_filter_cache[SWITCHABLE_FILTER_CONTEXTS]; 366 int64_t rd_filter_cache[SWITCHABLE_FILTER_CONTEXTS];
523 int64_t mask_filter_rd; 367 int64_t mask_filter_rd;
524 368
525 int RDMULT; 369 int RDMULT;
526 int RDDIV; 370 int RDDIV;
527 371
528 CODING_CONTEXT coding_context; 372 CODING_CONTEXT coding_context;
529 373
530 int zbin_mode_boost; 374 int zbin_mode_boost;
531 int zbin_mode_boost_enabled; 375 int zbin_mode_boost_enabled;
532 int active_arnr_frames; // <= cpi->oxcf.arnr_max_frames 376 int active_arnr_frames; // <= cpi->oxcf.arnr_max_frames
533 int active_arnr_strength; // <= cpi->oxcf.arnr_max_strength 377 int active_arnr_strength; // <= cpi->oxcf.arnr_max_strength
534 378
535 double output_framerate; 379 double output_framerate;
536 int64_t last_time_stamp_seen; 380 int64_t last_time_stamp_seen;
537 int64_t last_end_time_stamp_seen; 381 int64_t last_end_time_stamp_seen;
538 int64_t first_time_stamp_ever; 382 int64_t first_time_stamp_ever;
539 383
540 RATE_CONTROL rc; 384 RATE_CONTROL rc;
541 385
542 int cq_target_quality; 386 int cq_target_quality;
543 387
544 vp9_coeff_count coef_counts[TX_SIZES][PLANE_TYPES]; 388 vp9_coeff_count coef_counts[TX_SIZES][PLANE_TYPES];
545 vp9_coeff_probs_model frame_coef_probs[TX_SIZES][PLANE_TYPES]; 389 vp9_coeff_probs_model frame_coef_probs[TX_SIZES][PLANE_TYPES];
546 vp9_coeff_stats frame_branch_ct[TX_SIZES][PLANE_TYPES];
547 390
548 struct vpx_codec_pkt_list *output_pkt_list; 391 struct vpx_codec_pkt_list *output_pkt_list;
549 392
550 MBGRAPH_FRAME_STATS mbgraph_stats[MAX_LAG_BUFFERS]; 393 MBGRAPH_FRAME_STATS mbgraph_stats[MAX_LAG_BUFFERS];
551 int mbgraph_n_frames; // number of frames filled in the above 394 int mbgraph_n_frames; // number of frames filled in the above
552 int static_mb_pct; // % forced skip mbs by segmentation 395 int static_mb_pct; // % forced skip mbs by segmentation
553 int seg0_progress, seg0_idx, seg0_cnt;
554 396
555 // for real time encoding 397 // for real time encoding
556 int speed; 398 int speed;
557 399
558 int cpu_used; 400 int cpu_used;
559 int pass; 401 int pass;
560 402
561 vp9_prob last_skip_false_probs[3][SKIP_CONTEXTS];
562 int last_skip_probs_q[3];
563
564 int ref_frame_flags; 403 int ref_frame_flags;
565 404
566 SPEED_FEATURES sf; 405 SPEED_FEATURES sf;
567 406
568 unsigned int max_mv_magnitude; 407 unsigned int max_mv_magnitude;
569 int mv_step_param; 408 int mv_step_param;
570 409
571 // Default value is 1. From first pass stats, encode_breakout may be disabled. 410 // Default value is 1. From first pass stats, encode_breakout may be disabled.
572 ENCODE_BREAKOUT_TYPE allow_encode_breakout; 411 ENCODE_BREAKOUT_TYPE allow_encode_breakout;
573 412
574 // Get threshold from external input. In real time mode, it can be 413 // Get threshold from external input. In real time mode, it can be
575 // overwritten according to encoding speed. 414 // overwritten according to encoding speed.
576 int encode_breakout; 415 int encode_breakout;
577 416
578 unsigned char *segmentation_map; 417 unsigned char *segmentation_map;
579 418
580 // segment threashold for encode breakout 419 // segment threashold for encode breakout
581 int segment_encode_breakout[MAX_SEGMENTS]; 420 int segment_encode_breakout[MAX_SEGMENTS];
582 421
583 unsigned char *complexity_map; 422 unsigned char *complexity_map;
584 423
585 unsigned char *active_map; 424 unsigned char *active_map;
586 unsigned int active_map_enabled; 425 unsigned int active_map_enabled;
587 426
427 CYCLIC_REFRESH *cyclic_refresh;
428
588 fractional_mv_step_fp *find_fractional_mv_step; 429 fractional_mv_step_fp *find_fractional_mv_step;
589 fractional_mv_step_comp_fp *find_fractional_mv_step_comp; 430 fractional_mv_step_comp_fp *find_fractional_mv_step_comp;
590 vp9_full_search_fn_t full_search_sad; 431 vp9_full_search_fn_t full_search_sad;
591 vp9_refining_search_fn_t refining_search_sad; 432 vp9_refining_search_fn_t refining_search_sad;
592 vp9_diamond_search_fn_t diamond_search_sad; 433 vp9_diamond_search_fn_t diamond_search_sad;
593 vp9_variance_fn_ptr_t fn_ptr[BLOCK_SIZES]; 434 vp9_variance_fn_ptr_t fn_ptr[BLOCK_SIZES];
594 uint64_t time_receive_data; 435 uint64_t time_receive_data;
595 uint64_t time_compress_data; 436 uint64_t time_compress_data;
596 uint64_t time_pick_lpf; 437 uint64_t time_pick_lpf;
597 uint64_t time_encode_sb_row; 438 uint64_t time_encode_sb_row;
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
634 double total_ssimg_all; 475 double total_ssimg_all;
635 476
636 int b_calculate_ssimg; 477 int b_calculate_ssimg;
637 #endif 478 #endif
638 int b_calculate_psnr; 479 int b_calculate_psnr;
639 480
640 // Per MB activity measurement 481 // Per MB activity measurement
641 unsigned int activity_avg; 482 unsigned int activity_avg;
642 unsigned int *mb_activity_map; 483 unsigned int *mb_activity_map;
643 int *mb_norm_activity_map; 484 int *mb_norm_activity_map;
644 int output_partition;
645
646 // Force next frame to intra when kf_auto says so.
647 int force_next_frame_intra;
648 485
649 int droppable; 486 int droppable;
650 487
651 int dummy_packing; /* flag to indicate if packing is dummy */ 488 int dummy_packing; /* flag to indicate if packing is dummy */
652 489
653 unsigned int tx_stepdown_count[TX_SIZES]; 490 unsigned int tx_stepdown_count[TX_SIZES];
654 491
655 int initial_width; 492 int initial_width;
656 int initial_height; 493 int initial_height;
657 494
658 int use_svc; 495 int use_svc;
659 496
660 struct svc { 497 SVC svc;
661 int spatial_layer_id; 498
662 int temporal_layer_id; 499 int use_large_partition_rate;
663 int number_spatial_layers;
664 int number_temporal_layers;
665 // Layer context used for rate control in CBR mode, only defined for
666 // temporal layers for now.
667 LAYER_CONTEXT layer_context[VPX_TS_MAX_LAYERS];
668 } svc;
669 500
670 #if CONFIG_MULTIPLE_ARF 501 #if CONFIG_MULTIPLE_ARF
671 // ARF tracking variables. 502 // ARF tracking variables.
672 int multi_arf_enabled; 503 int multi_arf_enabled;
673 unsigned int frame_coding_order_period; 504 unsigned int frame_coding_order_period;
674 unsigned int new_frame_coding_order_period; 505 unsigned int new_frame_coding_order_period;
675 int frame_coding_order[MAX_LAG_BUFFERS * 2]; 506 int frame_coding_order[MAX_LAG_BUFFERS * 2];
676 int arf_buffer_idx[MAX_LAG_BUFFERS * 3 / 2]; 507 int arf_buffer_idx[MAX_LAG_BUFFERS * 3 / 2];
677 int arf_weight[MAX_LAG_BUFFERS]; 508 int arf_weight[MAX_LAG_BUFFERS];
678 int arf_buffered; 509 int arf_buffered;
679 int this_frame_weight; 510 int this_frame_weight;
680 int max_arf_level; 511 int max_arf_level;
681 #endif 512 #endif
682 513
683 #ifdef ENTROPY_STATS
684 int64_t mv_ref_stats[INTER_MODE_CONTEXTS][INTER_MODES - 1][2];
685 #endif
686
687
688 #ifdef MODE_TEST_HIT_STATS 514 #ifdef MODE_TEST_HIT_STATS
689 // Debug / test stats 515 // Debug / test stats
690 int64_t mode_test_hits[BLOCK_SIZES]; 516 int64_t mode_test_hits[BLOCK_SIZES];
691 #endif 517 #endif
692
693 // Y,U,V,(A)
694 ENTROPY_CONTEXT *above_context[MAX_MB_PLANE];
695 ENTROPY_CONTEXT left_context[MAX_MB_PLANE][16];
696
697 PARTITION_CONTEXT *above_seg_context;
698 PARTITION_CONTEXT left_seg_context[8];
699 } VP9_COMP; 518 } VP9_COMP;
700 519
701 static int get_ref_frame_idx(const VP9_COMP *cpi, 520 void vp9_initialize_enc();
702 MV_REFERENCE_FRAME ref_frame) { 521
522 struct VP9_COMP *vp9_create_compressor(VP9_CONFIG *oxcf);
523 void vp9_remove_compressor(VP9_COMP *cpi);
524
525 void vp9_change_config(VP9_COMP *cpi, const VP9_CONFIG *oxcf);
526
527 // receive a frames worth of data. caller can assume that a copy of this
528 // frame is made and not just a copy of the pointer..
529 int vp9_receive_raw_frame(VP9_COMP *cpi, unsigned int frame_flags,
530 YV12_BUFFER_CONFIG *sd, int64_t time_stamp,
531 int64_t end_time_stamp);
532
533 int vp9_get_compressed_data(VP9_COMP *cpi, unsigned int *frame_flags,
534 size_t *size, uint8_t *dest,
535 int64_t *time_stamp, int64_t *time_end, int flush);
536
537 int vp9_get_preview_raw_frame(VP9_COMP *cpi, YV12_BUFFER_CONFIG *dest,
538 vp9_ppflags_t *flags);
539
540 int vp9_use_as_reference(VP9_COMP *cpi, int ref_frame_flags);
541
542 void vp9_update_reference(VP9_COMP *cpi, int ref_frame_flags);
543
544 int vp9_copy_reference_enc(VP9_COMP *cpi, VP9_REFFRAME ref_frame_flag,
545 YV12_BUFFER_CONFIG *sd);
546
547 int vp9_get_reference_enc(VP9_COMP *cpi, int index,
548 YV12_BUFFER_CONFIG **fb);
549
550 int vp9_set_reference_enc(VP9_COMP *cpi, VP9_REFFRAME ref_frame_flag,
551 YV12_BUFFER_CONFIG *sd);
552
553 int vp9_update_entropy(VP9_COMP *cpi, int update);
554
555 int vp9_set_roimap(VP9_COMP *cpi, unsigned char *map,
556 unsigned int rows, unsigned int cols,
557 int delta_q[MAX_SEGMENTS],
558 int delta_lf[MAX_SEGMENTS],
559 unsigned int threshold[MAX_SEGMENTS]);
560
561 int vp9_set_active_map(VP9_COMP *cpi, unsigned char *map,
562 unsigned int rows, unsigned int cols);
563
564 int vp9_set_internal_size(VP9_COMP *cpi,
565 VPX_SCALING horiz_mode, VPX_SCALING vert_mode);
566
567 int vp9_set_size_literal(VP9_COMP *cpi, unsigned int width,
568 unsigned int height);
569
570 void vp9_set_svc(VP9_COMP *cpi, int use_svc);
571
572 int vp9_get_quantizer(struct VP9_COMP *cpi);
573
574 static INLINE int get_ref_frame_idx(const VP9_COMP *cpi,
575 MV_REFERENCE_FRAME ref_frame) {
703 if (ref_frame == LAST_FRAME) { 576 if (ref_frame == LAST_FRAME) {
704 return cpi->lst_fb_idx; 577 return cpi->lst_fb_idx;
705 } else if (ref_frame == GOLDEN_FRAME) { 578 } else if (ref_frame == GOLDEN_FRAME) {
706 return cpi->gld_fb_idx; 579 return cpi->gld_fb_idx;
707 } else { 580 } else {
708 return cpi->alt_fb_idx; 581 return cpi->alt_fb_idx;
709 } 582 }
710 } 583 }
711 584
712 static YV12_BUFFER_CONFIG *get_ref_frame_buffer(VP9_COMP *cpi, 585 static INLINE YV12_BUFFER_CONFIG *get_ref_frame_buffer(
713 MV_REFERENCE_FRAME ref_frame) { 586 VP9_COMP *cpi, MV_REFERENCE_FRAME ref_frame) {
714 VP9_COMMON *const cm = &cpi->common; 587 VP9_COMMON * const cm = &cpi->common;
715 return &cm->frame_bufs[cm->ref_frame_map[get_ref_frame_idx(cpi, 588 return &cm->frame_bufs[cm->ref_frame_map[get_ref_frame_idx(cpi, ref_frame)]]
716 ref_frame)]].buf; 589 .buf;
717 } 590 }
718 591
719 void vp9_encode_frame(VP9_COMP *cpi); 592 // Intra only frames, golden frames (except alt ref overlays) and
593 // alt ref frames tend to be coded at a higher than ambient quality
594 static INLINE int vp9_frame_is_boosted(const VP9_COMP *cpi) {
595 return frame_is_intra_only(&cpi->common) || cpi->refresh_alt_ref_frame ||
596 (cpi->refresh_golden_frame && !cpi->rc.is_src_frame_alt_ref);
597 }
720 598
721 void vp9_set_speed_features(VP9_COMP *cpi); 599 static INLINE int get_token_alloc(int mb_rows, int mb_cols) {
600 // TODO(JBB): make this work for alpha channel and double check we can't
601 // exceed this token count if we have a 32x32 transform crossing a boundary
602 // at a multiple of 16.
603 // mb_rows, cols are in units of 16 pixels. We assume 3 planes all at full
604 // resolution. We assume up to 1 token per pixel, and then allow
605 // a head room of 4.
606 return mb_rows * mb_cols * (16 * 16 * 3 + 4);
607 }
722 608
723 int vp9_calc_ss_err(const YV12_BUFFER_CONFIG *source, 609 int vp9_get_y_sse(const YV12_BUFFER_CONFIG *a, const YV12_BUFFER_CONFIG *b);
724 const YV12_BUFFER_CONFIG *reference);
725 610
726 void vp9_alloc_compressor_data(VP9_COMP *cpi); 611 void vp9_alloc_compressor_data(VP9_COMP *cpi);
727 612
728 int vp9_compute_qdelta(const VP9_COMP *cpi, double qstart, double qtarget); 613 void vp9_scale_references(VP9_COMP *cpi);
729 614
730 static int get_token_alloc(int mb_rows, int mb_cols) { 615 void vp9_update_reference_frames(VP9_COMP *cpi);
731 return mb_rows * mb_cols * (48 * 16 + 4);
732 }
733 616
734 static void set_ref_ptrs(VP9_COMMON *cm, MACROBLOCKD *xd, 617 int64_t vp9_rescale(int64_t val, int64_t num, int denom);
735 MV_REFERENCE_FRAME ref0, MV_REFERENCE_FRAME ref1) { 618
619 static INLINE void set_ref_ptrs(VP9_COMMON *cm, MACROBLOCKD *xd,
620 MV_REFERENCE_FRAME ref0,
621 MV_REFERENCE_FRAME ref1) {
736 xd->block_refs[0] = &cm->frame_refs[ref0 >= LAST_FRAME ? ref0 - LAST_FRAME 622 xd->block_refs[0] = &cm->frame_refs[ref0 >= LAST_FRAME ? ref0 - LAST_FRAME
737 : 0]; 623 : 0];
738 xd->block_refs[1] = &cm->frame_refs[ref1 >= LAST_FRAME ? ref1 - LAST_FRAME 624 xd->block_refs[1] = &cm->frame_refs[ref1 >= LAST_FRAME ? ref1 - LAST_FRAME
739 : 0]; 625 : 0];
740 } 626 }
741 627
742 #ifdef __cplusplus 628 #ifdef __cplusplus
743 } // extern "C" 629 } // extern "C"
744 #endif 630 #endif
745 631
746 #endif // VP9_ENCODER_VP9_ONYX_INT_H_ 632 #endif // VP9_ENCODER_VP9_ONYX_INT_H_
OLDNEW
« no previous file with comments | « source/libvpx/vp9/encoder/vp9_onyx_if.c ('k') | source/libvpx/vp9/encoder/vp9_picklpf.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698