| OLD | NEW |
| 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 | |
| 12 #ifndef VP9_ENCODER_VP9_ONYX_INT_H_ | 11 #ifndef VP9_ENCODER_VP9_ONYX_INT_H_ |
| 13 #define VP9_ENCODER_VP9_ONYX_INT_H_ | 12 #define VP9_ENCODER_VP9_ONYX_INT_H_ |
| 14 | 13 |
| 15 #include <stdio.h> | 14 #include <stdio.h> |
| 15 |
| 16 #include "./vpx_config.h" | 16 #include "./vpx_config.h" |
| 17 #include "vp9/common/vp9_onyx.h" | 17 #include "vpx_ports/mem.h" |
| 18 #include "vp9/encoder/vp9_treewriter.h" | 18 #include "vpx/internal/vpx_codec_internal.h" |
| 19 #include "vp9/encoder/vp9_tokenize.h" | 19 |
| 20 #include "vp9/common/vp9_onyxc_int.h" | |
| 21 #include "vp9/encoder/vp9_variance.h" | |
| 22 #include "vp9/encoder/vp9_encodemb.h" | |
| 23 #include "vp9/encoder/vp9_quantize.h" | |
| 24 #include "vp9/common/vp9_entropy.h" | 20 #include "vp9/common/vp9_entropy.h" |
| 25 #include "vp9/common/vp9_entropymode.h" | 21 #include "vp9/common/vp9_entropymode.h" |
| 26 #include "vpx_ports/mem.h" | 22 #include "vp9/common/vp9_onyx.h" |
| 27 #include "vpx/internal/vpx_codec_internal.h" | 23 #include "vp9/common/vp9_onyxc_int.h" |
| 24 |
| 25 #include "vp9/encoder/vp9_encodemb.h" |
| 26 #include "vp9/encoder/vp9_firstpass.h" |
| 27 #include "vp9/encoder/vp9_lookahead.h" |
| 28 #include "vp9/encoder/vp9_mbgraph.h" |
| 28 #include "vp9/encoder/vp9_mcomp.h" | 29 #include "vp9/encoder/vp9_mcomp.h" |
| 29 #include "vp9/encoder/vp9_lookahead.h" | 30 #include "vp9/encoder/vp9_quantize.h" |
| 31 #include "vp9/encoder/vp9_ratectrl.h" |
| 32 #include "vp9/encoder/vp9_tokenize.h" |
| 33 #include "vp9/encoder/vp9_treewriter.h" |
| 34 #include "vp9/encoder/vp9_variance.h" |
| 30 | 35 |
| 31 #ifdef __cplusplus | 36 #ifdef __cplusplus |
| 32 extern "C" { | 37 extern "C" { |
| 33 #endif | 38 #endif |
| 34 | 39 |
| 35 #define DISABLE_RC_LONG_TERM_MEM 0 | |
| 36 // #define MODE_TEST_HIT_STATS | 40 // #define MODE_TEST_HIT_STATS |
| 37 | 41 |
| 38 // #define SPEEDSTATS 1 | |
| 39 #if CONFIG_MULTIPLE_ARF | 42 #if CONFIG_MULTIPLE_ARF |
| 40 // Set MIN_GF_INTERVAL to 1 for the full decomposition. | 43 // Set MIN_GF_INTERVAL to 1 for the full decomposition. |
| 41 #define MIN_GF_INTERVAL 2 | 44 #define MIN_GF_INTERVAL 2 |
| 42 #else | 45 #else |
| 43 #define MIN_GF_INTERVAL 4 | 46 #define MIN_GF_INTERVAL 4 |
| 44 #endif | 47 #endif |
| 45 #define DEFAULT_GF_INTERVAL 7 | 48 #define DEFAULT_GF_INTERVAL 10 |
| 49 #define DEFAULT_KF_BOOST 2000 |
| 50 #define DEFAULT_GF_BOOST 2000 |
| 46 | 51 |
| 47 #define KEY_FRAME_CONTEXT 5 | 52 #define KEY_FRAME_CONTEXT 5 |
| 48 | 53 |
| 49 #define MAX_MODES 30 | 54 #define MAX_MODES 30 |
| 50 #define MAX_REFS 6 | 55 #define MAX_REFS 6 |
| 51 | 56 |
| 52 #define MIN_THRESHMULT 32 | 57 #define MIN_THRESHMULT 32 |
| 53 #define MAX_THRESHMULT 512 | 58 #define MAX_THRESHMULT 512 |
| 54 | 59 |
| 55 #define GF_ZEROMV_ZBIN_BOOST 0 | 60 #define GF_ZEROMV_ZBIN_BOOST 0 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 68 unsigned char *last_frame_seg_map_copy; | 73 unsigned char *last_frame_seg_map_copy; |
| 69 | 74 |
| 70 // 0 = Intra, Last, GF, ARF | 75 // 0 = Intra, Last, GF, ARF |
| 71 signed char last_ref_lf_deltas[MAX_REF_LF_DELTAS]; | 76 signed char last_ref_lf_deltas[MAX_REF_LF_DELTAS]; |
| 72 // 0 = ZERO_MV, MV | 77 // 0 = ZERO_MV, MV |
| 73 signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS]; | 78 signed char last_mode_lf_deltas[MAX_MODE_LF_DELTAS]; |
| 74 | 79 |
| 75 FRAME_CONTEXT fc; | 80 FRAME_CONTEXT fc; |
| 76 } CODING_CONTEXT; | 81 } CODING_CONTEXT; |
| 77 | 82 |
| 78 typedef struct { | |
| 79 double frame; | |
| 80 double intra_error; | |
| 81 double coded_error; | |
| 82 double sr_coded_error; | |
| 83 double ssim_weighted_pred_err; | |
| 84 double pcnt_inter; | |
| 85 double pcnt_motion; | |
| 86 double pcnt_second_ref; | |
| 87 double pcnt_neutral; | |
| 88 double MVr; | |
| 89 double mvr_abs; | |
| 90 double MVc; | |
| 91 double mvc_abs; | |
| 92 double MVrv; | |
| 93 double MVcv; | |
| 94 double mv_in_out_count; | |
| 95 double new_mv_count; | |
| 96 double duration; | |
| 97 double count; | |
| 98 } FIRSTPASS_STATS; | |
| 99 | |
| 100 typedef struct { | |
| 101 int frames_so_far; | |
| 102 double frame_intra_error; | |
| 103 double frame_coded_error; | |
| 104 double frame_pcnt_inter; | |
| 105 double frame_pcnt_motion; | |
| 106 double frame_mvr; | |
| 107 double frame_mvr_abs; | |
| 108 double frame_mvc; | |
| 109 double frame_mvc_abs; | |
| 110 } ONEPASS_FRAMESTATS; | |
| 111 | |
| 112 typedef struct { | |
| 113 struct { | |
| 114 int err; | |
| 115 union { | |
| 116 int_mv mv; | |
| 117 MB_PREDICTION_MODE mode; | |
| 118 } m; | |
| 119 } ref[MAX_REF_FRAMES]; | |
| 120 } MBGRAPH_MB_STATS; | |
| 121 | |
| 122 typedef struct { | |
| 123 MBGRAPH_MB_STATS *mb_stats; | |
| 124 } MBGRAPH_FRAME_STATS; | |
| 125 | |
| 126 // This enumerator type needs to be kept aligned with the mode order in | 83 // This enumerator type needs to be kept aligned with the mode order in |
| 127 // const MODE_DEFINITION vp9_mode_order[MAX_MODES] used in the rd code. | 84 // const MODE_DEFINITION vp9_mode_order[MAX_MODES] used in the rd code. |
| 128 typedef enum { | 85 typedef enum { |
| 129 THR_NEARESTMV, | 86 THR_NEARESTMV, |
| 130 THR_NEARESTA, | 87 THR_NEARESTA, |
| 131 THR_NEARESTG, | 88 THR_NEARESTG, |
| 132 | 89 |
| 133 THR_DC, | 90 THR_DC, |
| 134 | 91 |
| 135 THR_NEWMV, | 92 THR_NEWMV, |
| (...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 183 } SEARCH_METHODS; | 140 } SEARCH_METHODS; |
| 184 | 141 |
| 185 typedef enum { | 142 typedef enum { |
| 186 USE_FULL_RD = 0, | 143 USE_FULL_RD = 0, |
| 187 USE_LARGESTINTRA, | 144 USE_LARGESTINTRA, |
| 188 USE_LARGESTINTRA_MODELINTER, | 145 USE_LARGESTINTRA_MODELINTER, |
| 189 USE_LARGESTALL | 146 USE_LARGESTALL |
| 190 } TX_SIZE_SEARCH_METHOD; | 147 } TX_SIZE_SEARCH_METHOD; |
| 191 | 148 |
| 192 typedef enum { | 149 typedef enum { |
| 150 NOT_IN_USE = 0, |
| 151 RELAXED_NEIGHBORING_MIN_MAX = 1, |
| 152 STRICT_NEIGHBORING_MIN_MAX = 2 |
| 153 } AUTO_MIN_MAX_MODE; |
| 154 |
| 155 typedef enum { |
| 193 // Values should be powers of 2 so that they can be selected as bits of | 156 // Values should be powers of 2 so that they can be selected as bits of |
| 194 // an integer flags field | 157 // an integer flags field |
| 195 | 158 |
| 196 // terminate search early based on distortion so far compared to | 159 // terminate search early based on distortion so far compared to |
| 197 // qp step, distortion in the neighborhood of the frame, etc. | 160 // qp step, distortion in the neighborhood of the frame, etc. |
| 198 FLAG_EARLY_TERMINATE = 1, | 161 FLAG_EARLY_TERMINATE = 1, |
| 199 | 162 |
| 200 // skips comp inter modes if the best so far is an intra mode | 163 // skips comp inter modes if the best so far is an intra mode |
| 201 FLAG_SKIP_COMP_BESTINTRA = 2, | 164 FLAG_SKIP_COMP_BESTINTRA = 2, |
| 202 | 165 |
| (...skipping 24 matching lines...) Expand all Loading... |
| 227 #define INTRA_DC_TM ((1 << TM_PRED) | (1 << DC_PRED)) | 190 #define INTRA_DC_TM ((1 << TM_PRED) | (1 << DC_PRED)) |
| 228 #define INTRA_DC_H_V ((1 << DC_PRED) | (1 << V_PRED) | (1 << H_PRED)) | 191 #define INTRA_DC_H_V ((1 << DC_PRED) | (1 << V_PRED) | (1 << H_PRED)) |
| 229 #define INTRA_DC_TM_H_V (INTRA_DC_TM | (1 << V_PRED) | (1 << H_PRED)) | 192 #define INTRA_DC_TM_H_V (INTRA_DC_TM | (1 << V_PRED) | (1 << H_PRED)) |
| 230 | 193 |
| 231 typedef enum { | 194 typedef enum { |
| 232 LAST_FRAME_PARTITION_OFF = 0, | 195 LAST_FRAME_PARTITION_OFF = 0, |
| 233 LAST_FRAME_PARTITION_LOW_MOTION = 1, | 196 LAST_FRAME_PARTITION_LOW_MOTION = 1, |
| 234 LAST_FRAME_PARTITION_ALL = 2 | 197 LAST_FRAME_PARTITION_ALL = 2 |
| 235 } LAST_FRAME_PARTITION_METHOD; | 198 } LAST_FRAME_PARTITION_METHOD; |
| 236 | 199 |
| 200 typedef enum { |
| 201 // No recode. |
| 202 DISALLOW_RECODE = 0, |
| 203 // Allow recode for KF and exceeding maximum frame bandwidth. |
| 204 ALLOW_RECODE_KFMAXBW = 1, |
| 205 // Allow recode only for KF/ARF/GF frames. |
| 206 ALLOW_RECODE_KFARFGF = 2, |
| 207 // Allow recode for all frames based on bitrate constraints. |
| 208 ALLOW_RECODE = 3, |
| 209 } RECODE_LOOP_TYPE; |
| 210 |
| 211 typedef enum { |
| 212 // encode_breakout is disabled. |
| 213 ENCODE_BREAKOUT_DISABLED = 0, |
| 214 // encode_breakout is enabled. |
| 215 ENCODE_BREAKOUT_ENABLED = 1, |
| 216 // encode_breakout is enabled with small max_thresh limit. |
| 217 ENCODE_BREAKOUT_LIMITED = 2 |
| 218 } ENCODE_BREAKOUT_TYPE; |
| 219 |
| 237 typedef struct { | 220 typedef struct { |
| 238 // This flag refers to whether or not to perform rd optimization. | 221 // Frame level coding parameter update |
| 239 int RD; | 222 int frame_parameter_update; |
| 240 | 223 |
| 241 // Motion search method (Diamond, NSTEP, Hex, Big Diamond, Square, etc). | 224 // Motion search method (Diamond, NSTEP, Hex, Big Diamond, Square, etc). |
| 242 SEARCH_METHODS search_method; | 225 SEARCH_METHODS search_method; |
| 243 | 226 |
| 244 // Recode_loop can be: | 227 RECODE_LOOP_TYPE recode_loop; |
| 245 // 0 means we only encode a frame once | |
| 246 // 1 means we can re-encode based on bitrate constraints on any frame | |
| 247 // 2 means we can only recode gold, alt, and key frames. | |
| 248 int recode_loop; | |
| 249 | 228 |
| 250 // Subpel_search_method can only be subpel_tree which does a subpixel | 229 // Subpel_search_method can only be subpel_tree which does a subpixel |
| 251 // logarithmic search that keeps stepping at 1/2 pixel units until | 230 // logarithmic search that keeps stepping at 1/2 pixel units until |
| 252 // you stop getting a gain, and then goes on to 1/4 and repeats | 231 // you stop getting a gain, and then goes on to 1/4 and repeats |
| 253 // the same process. Along the way it skips many diagonals. | 232 // the same process. Along the way it skips many diagonals. |
| 254 SUBPEL_SEARCH_METHODS subpel_search_method; | 233 SUBPEL_SEARCH_METHODS subpel_search_method; |
| 255 | 234 |
| 256 // Maximum number of steps in logarithmic subpel search before giving up. | 235 // Maximum number of steps in logarithmic subpel search before giving up. |
| 257 int subpel_iters_per_step; | 236 int subpel_iters_per_step; |
| 258 | 237 |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 339 // of the best so far. | 318 // of the best so far. |
| 340 int mode_skip_start; | 319 int mode_skip_start; |
| 341 | 320 |
| 342 // TODO(JBB): Remove this. | 321 // TODO(JBB): Remove this. |
| 343 int reference_masking; | 322 int reference_masking; |
| 344 | 323 |
| 345 // Used in conjunction with use_one_partition_size_always. | 324 // Used in conjunction with use_one_partition_size_always. |
| 346 BLOCK_SIZE always_this_block_size; | 325 BLOCK_SIZE always_this_block_size; |
| 347 | 326 |
| 348 // Sets min and max partition sizes for this 64x64 region based on the | 327 // Sets min and max partition sizes for this 64x64 region based on the |
| 349 // same superblock in last encoded frame, and the left and above neighbor | 328 // same 64x64 in last encoded frame, and the left and above neighbor. |
| 350 // in this block. | 329 AUTO_MIN_MAX_MODE auto_min_max_partition_size; |
| 351 int auto_min_max_partition_size; | |
| 352 | 330 |
| 353 // Min and max partition size we enable (block_size) as per auto | 331 // Min and max partition size we enable (block_size) as per auto |
| 354 // min max, but also used by adjust partitioning, and pick_partitioning. | 332 // min max, but also used by adjust partitioning, and pick_partitioning. |
| 355 BLOCK_SIZE min_partition_size; | 333 BLOCK_SIZE min_partition_size; |
| 356 BLOCK_SIZE max_partition_size; | 334 BLOCK_SIZE max_partition_size; |
| 357 | 335 |
| 358 // Whether or not we allow partitions one smaller or one greater than the last | 336 // Whether or not we allow partitions one smaller or one greater than the last |
| 359 // frame's partitioning. Only used if use_lastframe_partitioning is set. | 337 // frame's partitioning. Only used if use_lastframe_partitioning is set. |
| 360 int adjust_partitioning_from_last_frame; | 338 int adjust_partitioning_from_last_frame; |
| 361 | 339 |
| 362 // How frequently we re do the partitioning from scratch. Only used if | 340 // How frequently we re do the partitioning from scratch. Only used if |
| 363 // use_lastframe_partitioning is set. | 341 // use_lastframe_partitioning is set. |
| 364 int last_partitioning_redo_frequency; | 342 int last_partitioning_redo_frequency; |
| 365 | 343 |
| 366 // Disables sub 8x8 blocksizes in different scenarios: Choices are to disable | 344 // Disables sub 8x8 blocksizes in different scenarios: Choices are to disable |
| 367 // it always, to allow it for only Last frame and Intra, disable it for all | 345 // it always, to allow it for only Last frame and Intra, disable it for all |
| 368 // inter modes or to enable it always. | 346 // inter modes or to enable it always. |
| 369 int disable_split_mask; | 347 int disable_split_mask; |
| 370 | 348 |
| 371 // TODO(jbb): Remove this and everything that uses it. It's only valid if | |
| 372 // we were doing small to large partition checks. We currently do the | |
| 373 // reverse. | |
| 374 int using_small_partition_info; | |
| 375 | |
| 376 // TODO(jingning): combine the related motion search speed features | 349 // TODO(jingning): combine the related motion search speed features |
| 377 // This allows us to use motion search at other sizes as a starting | 350 // This allows us to use motion search at other sizes as a starting |
| 378 // point for this motion search and limits the search range around it. | 351 // point for this motion search and limits the search range around it. |
| 379 int adaptive_motion_search; | 352 int adaptive_motion_search; |
| 380 | 353 |
| 381 // Allows sub 8x8 modes to use the prediction filter that was determined | 354 // Allows sub 8x8 modes to use the prediction filter that was determined |
| 382 // best for 8x8 mode. If set to 0 we always re check all the filters for | 355 // best for 8x8 mode. If set to 0 we always re check all the filters for |
| 383 // sizes less than 8x8, 1 means we check all filter modes if no 8x8 filter | 356 // sizes less than 8x8, 1 means we check all filter modes if no 8x8 filter |
| 384 // was selected, and 2 means we use 8 tap if no 8x8 filter mode was selected. | 357 // was selected, and 2 means we use 8 tap if no 8x8 filter mode was selected. |
| 385 int adaptive_pred_interp_filter; | 358 int adaptive_pred_interp_filter; |
| (...skipping 27 matching lines...) Expand all Loading... |
| 413 | 386 |
| 414 // This feature controls how the loop filter level is determined: | 387 // This feature controls how the loop filter level is determined: |
| 415 // 0: Try the full image with different values. | 388 // 0: Try the full image with different values. |
| 416 // 1: Try a small portion of the image with different values. | 389 // 1: Try a small portion of the image with different values. |
| 417 // 2: Estimate the level based on quantizer and frame type | 390 // 2: Estimate the level based on quantizer and frame type |
| 418 int use_fast_lpf_pick; | 391 int use_fast_lpf_pick; |
| 419 | 392 |
| 420 // This feature limits the number of coefficients updates we actually do | 393 // This feature limits the number of coefficients updates we actually do |
| 421 // by only looking at counts from 1/2 the bands. | 394 // by only looking at counts from 1/2 the bands. |
| 422 int use_fast_coef_updates; // 0: 2-loop, 1: 1-loop, 2: 1-loop reduced | 395 int use_fast_coef_updates; // 0: 2-loop, 1: 1-loop, 2: 1-loop reduced |
| 396 |
| 397 // This flag controls the use of non-RD mode decision. |
| 398 int use_pick_mode; |
| 399 |
| 400 // This variable sets the encode_breakout threshold. Currently, it is only |
| 401 // enabled in real time mode. |
| 402 int encode_breakout_thresh; |
| 423 } SPEED_FEATURES; | 403 } SPEED_FEATURES; |
| 424 | 404 |
| 425 typedef struct { | 405 typedef struct { |
| 426 // Rate targetting variables | 406 RATE_CONTROL rc; |
| 427 int this_frame_target; | 407 int target_bandwidth; |
| 428 int projected_frame_size; | 408 int64_t starting_buffer_level; |
| 429 int sb64_target_rate; | 409 int64_t optimal_buffer_level; |
| 430 int last_q[3]; // Separate values for Intra/Inter/ARF-GF | 410 int64_t maximum_buffer_size; |
| 431 int last_boosted_qindex; // Last boosted GF/KF/ARF q | 411 double framerate; |
| 432 | 412 int avg_frame_size; |
| 433 int gfu_boost; | 413 } LAYER_CONTEXT; |
| 434 int last_boost; | |
| 435 int kf_boost; | |
| 436 | |
| 437 double rate_correction_factor; | |
| 438 double key_frame_rate_correction_factor; | |
| 439 double gf_rate_correction_factor; | |
| 440 | |
| 441 unsigned int frames_since_golden; | |
| 442 unsigned int frames_till_gf_update_due; // Count down till next GF | |
| 443 unsigned int max_gf_interval; | |
| 444 unsigned int baseline_gf_interval; | |
| 445 unsigned int frames_to_key; | |
| 446 unsigned int frames_since_key; | |
| 447 unsigned int this_key_frame_forced; | |
| 448 unsigned int next_key_frame_forced; | |
| 449 unsigned int source_alt_ref_pending; | |
| 450 unsigned int source_alt_ref_active; | |
| 451 unsigned int is_src_frame_alt_ref; | |
| 452 | |
| 453 int per_frame_bandwidth; // Current section per frame bandwidth target | |
| 454 int av_per_frame_bandwidth; // Average frame size target for clip | |
| 455 int min_frame_bandwidth; // Minimum allocation used for any frame | |
| 456 int max_frame_bandwidth; // Maximum burst rate allowed for a frame. | |
| 457 | |
| 458 int ni_av_qi; | |
| 459 int ni_tot_qi; | |
| 460 int ni_frames; | |
| 461 int avg_frame_qindex[3]; // 0 - KEY, 1 - INTER, 2 - ARF/GF | |
| 462 double tot_q; | |
| 463 double avg_q; | |
| 464 | |
| 465 int buffer_level; | |
| 466 int bits_off_target; | |
| 467 | |
| 468 int decimation_factor; | |
| 469 int decimation_count; | |
| 470 | |
| 471 int rolling_target_bits; | |
| 472 int rolling_actual_bits; | |
| 473 | |
| 474 int long_rolling_target_bits; | |
| 475 int long_rolling_actual_bits; | |
| 476 | |
| 477 int64_t total_actual_bits; | |
| 478 int total_target_vs_actual; // debug stats | |
| 479 | |
| 480 int worst_quality; | |
| 481 int active_worst_quality; | |
| 482 int best_quality; | |
| 483 // int active_best_quality; | |
| 484 } RATE_CONTROL; | |
| 485 | 414 |
| 486 typedef struct VP9_COMP { | 415 typedef struct VP9_COMP { |
| 487 DECLARE_ALIGNED(16, int16_t, y_quant[QINDEX_RANGE][8]); | 416 DECLARE_ALIGNED(16, int16_t, y_quant[QINDEX_RANGE][8]); |
| 488 DECLARE_ALIGNED(16, int16_t, y_quant_shift[QINDEX_RANGE][8]); | 417 DECLARE_ALIGNED(16, int16_t, y_quant_shift[QINDEX_RANGE][8]); |
| 489 DECLARE_ALIGNED(16, int16_t, y_zbin[QINDEX_RANGE][8]); | 418 DECLARE_ALIGNED(16, int16_t, y_zbin[QINDEX_RANGE][8]); |
| 490 DECLARE_ALIGNED(16, int16_t, y_round[QINDEX_RANGE][8]); | 419 DECLARE_ALIGNED(16, int16_t, y_round[QINDEX_RANGE][8]); |
| 491 | 420 |
| 492 DECLARE_ALIGNED(16, int16_t, uv_quant[QINDEX_RANGE][8]); | 421 DECLARE_ALIGNED(16, int16_t, uv_quant[QINDEX_RANGE][8]); |
| 493 DECLARE_ALIGNED(16, int16_t, uv_quant_shift[QINDEX_RANGE][8]); | 422 DECLARE_ALIGNED(16, int16_t, uv_quant_shift[QINDEX_RANGE][8]); |
| 494 DECLARE_ALIGNED(16, int16_t, uv_zbin[QINDEX_RANGE][8]); | 423 DECLARE_ALIGNED(16, int16_t, uv_zbin[QINDEX_RANGE][8]); |
| 495 DECLARE_ALIGNED(16, int16_t, uv_round[QINDEX_RANGE][8]); | 424 DECLARE_ALIGNED(16, int16_t, uv_round[QINDEX_RANGE][8]); |
| 496 | 425 |
| 497 #if CONFIG_ALPHA | 426 #if CONFIG_ALPHA |
| 498 DECLARE_ALIGNED(16, int16_t, a_quant[QINDEX_RANGE][8]); | 427 DECLARE_ALIGNED(16, int16_t, a_quant[QINDEX_RANGE][8]); |
| 499 DECLARE_ALIGNED(16, int16_t, a_quant_shift[QINDEX_RANGE][8]); | 428 DECLARE_ALIGNED(16, int16_t, a_quant_shift[QINDEX_RANGE][8]); |
| 500 DECLARE_ALIGNED(16, int16_t, a_zbin[QINDEX_RANGE][8]); | 429 DECLARE_ALIGNED(16, int16_t, a_zbin[QINDEX_RANGE][8]); |
| 501 DECLARE_ALIGNED(16, int16_t, a_round[QINDEX_RANGE][8]); | 430 DECLARE_ALIGNED(16, int16_t, a_round[QINDEX_RANGE][8]); |
| 502 #endif | 431 #endif |
| 503 | 432 |
| 504 MACROBLOCK mb; | 433 MACROBLOCK mb; |
| 505 VP9_COMMON common; | 434 VP9_COMMON common; |
| 506 VP9_CONFIG oxcf; | 435 VP9_CONFIG oxcf; |
| 507 struct rdcost_block_args rdcost_stack; | |
| 508 struct lookahead_ctx *lookahead; | 436 struct lookahead_ctx *lookahead; |
| 509 struct lookahead_entry *source; | 437 struct lookahead_entry *source; |
| 510 #if CONFIG_MULTIPLE_ARF | 438 #if CONFIG_MULTIPLE_ARF |
| 511 struct lookahead_entry *alt_ref_source[REF_FRAMES]; | 439 struct lookahead_entry *alt_ref_source[REF_FRAMES]; |
| 512 #else | 440 #else |
| 513 struct lookahead_entry *alt_ref_source; | 441 struct lookahead_entry *alt_ref_source; |
| 514 #endif | 442 #endif |
| 515 | 443 |
| 516 YV12_BUFFER_CONFIG *Source; | 444 YV12_BUFFER_CONFIG *Source; |
| 517 YV12_BUFFER_CONFIG *un_scaled_source; | 445 YV12_BUFFER_CONFIG *un_scaled_source; |
| 518 YV12_BUFFER_CONFIG scaled_source; | 446 YV12_BUFFER_CONFIG scaled_source; |
| 519 | 447 |
| 520 unsigned int key_frame_frequency; | 448 unsigned int key_frame_frequency; |
| 521 | 449 |
| 522 int gold_is_last; // gold same as last frame ( short circuit gold searches) | 450 int gold_is_last; // gold same as last frame ( short circuit gold searches) |
| 523 int alt_is_last; // Alt same as last ( short circuit altref search) | 451 int alt_is_last; // Alt same as last ( short circuit altref search) |
| 524 int gold_is_alt; // don't do both alt and gold search ( just do gold). | 452 int gold_is_alt; // don't do both alt and gold search ( just do gold). |
| 525 | 453 |
| 526 int scaled_ref_idx[3]; | 454 int scaled_ref_idx[3]; |
| 527 int lst_fb_idx; | 455 int lst_fb_idx; |
| 528 int gld_fb_idx; | 456 int gld_fb_idx; |
| 529 int alt_fb_idx; | 457 int alt_fb_idx; |
| 530 | 458 |
| 531 int current_layer; | |
| 532 int use_svc; | |
| 533 | |
| 534 #if CONFIG_MULTIPLE_ARF | 459 #if CONFIG_MULTIPLE_ARF |
| 535 int alt_ref_fb_idx[REF_FRAMES - 3]; | 460 int alt_ref_fb_idx[REF_FRAMES - 3]; |
| 536 #endif | 461 #endif |
| 537 int refresh_last_frame; | 462 int refresh_last_frame; |
| 538 int refresh_golden_frame; | 463 int refresh_golden_frame; |
| 539 int refresh_alt_ref_frame; | 464 int refresh_alt_ref_frame; |
| 540 | 465 |
| 541 int ext_refresh_frame_flags_pending; | 466 int ext_refresh_frame_flags_pending; |
| 542 int ext_refresh_last_frame; | 467 int ext_refresh_last_frame; |
| 543 int ext_refresh_golden_frame; | 468 int ext_refresh_golden_frame; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 599 int64_t first_time_stamp_ever; | 524 int64_t first_time_stamp_ever; |
| 600 | 525 |
| 601 RATE_CONTROL rc; | 526 RATE_CONTROL rc; |
| 602 | 527 |
| 603 int cq_target_quality; | 528 int cq_target_quality; |
| 604 | 529 |
| 605 vp9_coeff_count coef_counts[TX_SIZES][PLANE_TYPES]; | 530 vp9_coeff_count coef_counts[TX_SIZES][PLANE_TYPES]; |
| 606 vp9_coeff_probs_model frame_coef_probs[TX_SIZES][PLANE_TYPES]; | 531 vp9_coeff_probs_model frame_coef_probs[TX_SIZES][PLANE_TYPES]; |
| 607 vp9_coeff_stats frame_branch_ct[TX_SIZES][PLANE_TYPES]; | 532 vp9_coeff_stats frame_branch_ct[TX_SIZES][PLANE_TYPES]; |
| 608 | 533 |
| 609 int64_t target_bandwidth; | |
| 610 struct vpx_codec_pkt_list *output_pkt_list; | 534 struct vpx_codec_pkt_list *output_pkt_list; |
| 611 | 535 |
| 612 #if 0 | |
| 613 // Experimental code for lagged and one pass | |
| 614 ONEPASS_FRAMESTATS one_pass_frame_stats[MAX_LAG_BUFFERS]; | |
| 615 int one_pass_frame_index; | |
| 616 #endif | |
| 617 MBGRAPH_FRAME_STATS mbgraph_stats[MAX_LAG_BUFFERS]; | 536 MBGRAPH_FRAME_STATS mbgraph_stats[MAX_LAG_BUFFERS]; |
| 618 int mbgraph_n_frames; // number of frames filled in the above | 537 int mbgraph_n_frames; // number of frames filled in the above |
| 619 int static_mb_pct; // % forced skip mbs by segmentation | 538 int static_mb_pct; // % forced skip mbs by segmentation |
| 620 int seg0_progress, seg0_idx, seg0_cnt; | 539 int seg0_progress, seg0_idx, seg0_cnt; |
| 621 | 540 |
| 622 // for real time encoding | 541 // for real time encoding |
| 623 int speed; | 542 int speed; |
| 624 int compressor_speed; | |
| 625 | 543 |
| 626 int cpu_used; | 544 int cpu_used; |
| 627 int pass; | 545 int pass; |
| 628 | 546 |
| 629 vp9_prob last_skip_false_probs[3][MBSKIP_CONTEXTS]; | 547 vp9_prob last_skip_false_probs[3][SKIP_CONTEXTS]; |
| 630 int last_skip_probs_q[3]; | 548 int last_skip_probs_q[3]; |
| 631 | 549 |
| 632 int ref_frame_flags; | 550 int ref_frame_flags; |
| 633 | 551 |
| 634 SPEED_FEATURES sf; | 552 SPEED_FEATURES sf; |
| 635 | 553 |
| 636 unsigned int max_mv_magnitude; | 554 unsigned int max_mv_magnitude; |
| 637 int mv_step_param; | 555 int mv_step_param; |
| 638 | 556 |
| 557 // Default value is 1. From first pass stats, encode_breakout may be disabled. |
| 558 ENCODE_BREAKOUT_TYPE allow_encode_breakout; |
| 559 |
| 560 // Get threshold from external input. In real time mode, it can be |
| 561 // overwritten according to encoding speed. |
| 562 int encode_breakout; |
| 563 |
| 639 unsigned char *segmentation_map; | 564 unsigned char *segmentation_map; |
| 640 | 565 |
| 641 // segment threashold for encode breakout | 566 // segment threashold for encode breakout |
| 642 int segment_encode_breakout[MAX_SEGMENTS]; | 567 int segment_encode_breakout[MAX_SEGMENTS]; |
| 643 | 568 |
| 644 unsigned char *complexity_map; | 569 unsigned char *complexity_map; |
| 645 | 570 |
| 646 unsigned char *active_map; | 571 unsigned char *active_map; |
| 647 unsigned int active_map_enabled; | 572 unsigned int active_map_enabled; |
| 648 | 573 |
| 649 fractional_mv_step_fp *find_fractional_mv_step; | 574 fractional_mv_step_fp *find_fractional_mv_step; |
| 650 fractional_mv_step_comp_fp *find_fractional_mv_step_comp; | 575 fractional_mv_step_comp_fp *find_fractional_mv_step_comp; |
| 651 vp9_full_search_fn_t full_search_sad; | 576 vp9_full_search_fn_t full_search_sad; |
| 652 vp9_refining_search_fn_t refining_search_sad; | 577 vp9_refining_search_fn_t refining_search_sad; |
| 653 vp9_diamond_search_fn_t diamond_search_sad; | 578 vp9_diamond_search_fn_t diamond_search_sad; |
| 654 vp9_variance_fn_ptr_t fn_ptr[BLOCK_SIZES]; | 579 vp9_variance_fn_ptr_t fn_ptr[BLOCK_SIZES]; |
| 655 uint64_t time_receive_data; | 580 uint64_t time_receive_data; |
| 656 uint64_t time_compress_data; | 581 uint64_t time_compress_data; |
| 657 uint64_t time_pick_lpf; | 582 uint64_t time_pick_lpf; |
| 658 uint64_t time_encode_sb_row; | 583 uint64_t time_encode_sb_row; |
| 659 | 584 |
| 660 struct twopass_rc { | 585 struct twopass_rc twopass; |
| 661 unsigned int section_intra_rating; | |
| 662 unsigned int next_iiratio; | |
| 663 unsigned int this_iiratio; | |
| 664 FIRSTPASS_STATS total_stats; | |
| 665 FIRSTPASS_STATS this_frame_stats; | |
| 666 FIRSTPASS_STATS *stats_in, *stats_in_end, *stats_in_start; | |
| 667 FIRSTPASS_STATS total_left_stats; | |
| 668 int first_pass_done; | |
| 669 int64_t bits_left; | |
| 670 int64_t clip_bits_total; | |
| 671 double avg_iiratio; | |
| 672 double modified_error_min; | |
| 673 double modified_error_max; | |
| 674 double modified_error_total; | |
| 675 double modified_error_left; | |
| 676 double kf_intra_err_min; | |
| 677 double gf_intra_err_min; | |
| 678 int static_scene_max_gf_interval; | |
| 679 int kf_bits; | |
| 680 // Remaining error from uncoded frames in a gf group. Two pass use only | |
| 681 int64_t gf_group_error_left; | |
| 682 | |
| 683 // Projected total bits available for a key frame group of frames | |
| 684 int64_t kf_group_bits; | |
| 685 | |
| 686 // Error score of frames still to be coded in kf group | |
| 687 int64_t kf_group_error_left; | |
| 688 | |
| 689 // Projected Bits available for a group of frames including 1 GF or ARF | |
| 690 int64_t gf_group_bits; | |
| 691 // Bits for the golden frame or ARF - 2 pass only | |
| 692 int gf_bits; | |
| 693 int alt_extra_bits; | |
| 694 | |
| 695 int sr_update_lag; | |
| 696 | |
| 697 int kf_zeromotion_pct; | |
| 698 int gf_zeromotion_pct; | |
| 699 } twopass; | |
| 700 | 586 |
| 701 YV12_BUFFER_CONFIG alt_ref_buffer; | 587 YV12_BUFFER_CONFIG alt_ref_buffer; |
| 702 YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS]; | 588 YV12_BUFFER_CONFIG *frames[MAX_LAG_BUFFERS]; |
| 703 int fixed_divide[512]; | 589 int fixed_divide[512]; |
| 704 | 590 |
| 705 #if CONFIG_INTERNAL_STATS | 591 #if CONFIG_INTERNAL_STATS |
| 706 int count; | 592 int count; |
| 707 double total_y; | 593 double total_y; |
| 708 double total_u; | 594 double total_u; |
| 709 double total_v; | 595 double total_v; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 746 | 632 |
| 747 int droppable; | 633 int droppable; |
| 748 | 634 |
| 749 int dummy_packing; /* flag to indicate if packing is dummy */ | 635 int dummy_packing; /* flag to indicate if packing is dummy */ |
| 750 | 636 |
| 751 unsigned int tx_stepdown_count[TX_SIZES]; | 637 unsigned int tx_stepdown_count[TX_SIZES]; |
| 752 | 638 |
| 753 int initial_width; | 639 int initial_width; |
| 754 int initial_height; | 640 int initial_height; |
| 755 | 641 |
| 756 int number_spatial_layers; | 642 int use_svc; |
| 757 int enable_encode_breakout; // Default value is 1. From first pass stats, | 643 |
| 758 // encode_breakout may be disabled. | 644 struct svc { |
| 645 int spatial_layer_id; |
| 646 int temporal_layer_id; |
| 647 int number_spatial_layers; |
| 648 int number_temporal_layers; |
| 649 // Layer context used for rate control in CBR mode, only defined for |
| 650 // temporal layers for now. |
| 651 LAYER_CONTEXT layer_context[VPX_TS_MAX_LAYERS]; |
| 652 } svc; |
| 759 | 653 |
| 760 #if CONFIG_MULTIPLE_ARF | 654 #if CONFIG_MULTIPLE_ARF |
| 761 // ARF tracking variables. | 655 // ARF tracking variables. |
| 762 int multi_arf_enabled; | 656 int multi_arf_enabled; |
| 763 unsigned int frame_coding_order_period; | 657 unsigned int frame_coding_order_period; |
| 764 unsigned int new_frame_coding_order_period; | 658 unsigned int new_frame_coding_order_period; |
| 765 int frame_coding_order[MAX_LAG_BUFFERS * 2]; | 659 int frame_coding_order[MAX_LAG_BUFFERS * 2]; |
| 766 int arf_buffer_idx[MAX_LAG_BUFFERS * 3 / 2]; | 660 int arf_buffer_idx[MAX_LAG_BUFFERS * 3 / 2]; |
| 767 int arf_weight[MAX_LAG_BUFFERS]; | 661 int arf_weight[MAX_LAG_BUFFERS]; |
| 768 int arf_buffered; | 662 int arf_buffered; |
| (...skipping 26 matching lines...) Expand all Loading... |
| 795 } else if (ref_frame == GOLDEN_FRAME) { | 689 } else if (ref_frame == GOLDEN_FRAME) { |
| 796 return cpi->gld_fb_idx; | 690 return cpi->gld_fb_idx; |
| 797 } else { | 691 } else { |
| 798 return cpi->alt_fb_idx; | 692 return cpi->alt_fb_idx; |
| 799 } | 693 } |
| 800 } | 694 } |
| 801 | 695 |
| 802 static YV12_BUFFER_CONFIG *get_ref_frame_buffer(VP9_COMP *cpi, | 696 static YV12_BUFFER_CONFIG *get_ref_frame_buffer(VP9_COMP *cpi, |
| 803 MV_REFERENCE_FRAME ref_frame) { | 697 MV_REFERENCE_FRAME ref_frame) { |
| 804 VP9_COMMON *const cm = &cpi->common; | 698 VP9_COMMON *const cm = &cpi->common; |
| 805 return &cm->yv12_fb[cm->ref_frame_map[get_ref_frame_idx(cpi, ref_frame)]]; | 699 return &cm->frame_bufs[cm->ref_frame_map[get_ref_frame_idx(cpi, |
| 700 ref_frame)]].buf; |
| 806 } | 701 } |
| 807 | 702 |
| 808 void vp9_encode_frame(VP9_COMP *cpi); | 703 void vp9_encode_frame(VP9_COMP *cpi); |
| 809 | 704 |
| 810 void vp9_pack_bitstream(VP9_COMP *cpi, uint8_t *dest, size_t *size); | 705 void vp9_pack_bitstream(VP9_COMP *cpi, uint8_t *dest, size_t *size); |
| 811 | 706 |
| 812 void vp9_activity_masking(VP9_COMP *cpi, MACROBLOCK *x); | |
| 813 | |
| 814 void vp9_set_speed_features(VP9_COMP *cpi); | 707 void vp9_set_speed_features(VP9_COMP *cpi); |
| 815 | 708 |
| 816 int vp9_calc_ss_err(const YV12_BUFFER_CONFIG *source, | 709 int vp9_calc_ss_err(const YV12_BUFFER_CONFIG *source, |
| 817 const YV12_BUFFER_CONFIG *reference); | 710 const YV12_BUFFER_CONFIG *reference); |
| 818 | 711 |
| 819 void vp9_alloc_compressor_data(VP9_COMP *cpi); | 712 void vp9_alloc_compressor_data(VP9_COMP *cpi); |
| 820 | 713 |
| 821 int vp9_compute_qdelta(const VP9_COMP *cpi, double qstart, double qtarget); | 714 int vp9_compute_qdelta(const VP9_COMP *cpi, double qstart, double qtarget); |
| 822 | 715 |
| 823 static int get_token_alloc(int mb_rows, int mb_cols) { | 716 static int get_token_alloc(int mb_rows, int mb_cols) { |
| 824 return mb_rows * mb_cols * (48 * 16 + 4); | 717 return mb_rows * mb_cols * (48 * 16 + 4); |
| 825 } | 718 } |
| 826 | 719 |
| 827 static void set_ref_ptrs(VP9_COMMON *cm, MACROBLOCKD *xd, | 720 static void set_ref_ptrs(VP9_COMMON *cm, MACROBLOCKD *xd, |
| 828 MV_REFERENCE_FRAME ref0, MV_REFERENCE_FRAME ref1) { | 721 MV_REFERENCE_FRAME ref0, MV_REFERENCE_FRAME ref1) { |
| 829 xd->block_refs[0] = &cm->frame_refs[ref0 - LAST_FRAME]; | 722 xd->block_refs[0] = &cm->frame_refs[ref0 >= LAST_FRAME ? ref0 - LAST_FRAME |
| 830 xd->block_refs[1] = &cm->frame_refs[ref1 - LAST_FRAME]; | 723 : 0]; |
| 724 xd->block_refs[1] = &cm->frame_refs[ref1 >= LAST_FRAME ? ref1 - LAST_FRAME |
| 725 : 0]; |
| 831 } | 726 } |
| 832 | 727 |
| 833 #ifdef __cplusplus | 728 #ifdef __cplusplus |
| 834 } // extern "C" | 729 } // extern "C" |
| 835 #endif | 730 #endif |
| 836 | 731 |
| 837 #endif // VP9_ENCODER_VP9_ONYX_INT_H_ | 732 #endif // VP9_ENCODER_VP9_ONYX_INT_H_ |
| OLD | NEW |