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 | 11 |
12 #include "vpx_config.h" | 12 #include "vpx_config.h" |
(...skipping 29 matching lines...) Expand all Loading... |
42 #include "vp9/encoder/vp9_picklpf.h" | 42 #include "vp9/encoder/vp9_picklpf.h" |
43 #include "vp9/common/vp9_mvref_common.h" | 43 #include "vp9/common/vp9_mvref_common.h" |
44 #include "vp9/encoder/vp9_temporal_filter.h" | 44 #include "vp9/encoder/vp9_temporal_filter.h" |
45 | 45 |
46 #include <math.h> | 46 #include <math.h> |
47 #include <stdio.h> | 47 #include <stdio.h> |
48 #include <limits.h> | 48 #include <limits.h> |
49 | 49 |
50 extern void print_tree_update_probs(); | 50 extern void print_tree_update_probs(); |
51 | 51 |
52 static void set_default_lf_deltas(VP9_COMP *cpi); | 52 static void set_default_lf_deltas(struct loopfilter *lf); |
53 | 53 |
54 #define DEFAULT_INTERP_FILTER SWITCHABLE | 54 #define DEFAULT_INTERP_FILTER SWITCHABLE |
55 | 55 |
56 #define SEARCH_BEST_FILTER 0 /* to search exhaustively for | 56 #define SEARCH_BEST_FILTER 0 /* to search exhaustively for |
57 best filter */ | 57 best filter */ |
58 #define RESET_FOREACH_FILTER 0 /* whether to reset the encoder state | 58 #define RESET_FOREACH_FILTER 0 /* whether to reset the encoder state |
59 before trying each new filter */ | 59 before trying each new filter */ |
60 #define SHARP_FILTER_QTHRESH 0 /* Q threshold for 8-tap sharp filter */ | 60 #define SHARP_FILTER_QTHRESH 0 /* Q threshold for 8-tap sharp filter */ |
61 | 61 |
62 #define ALTREF_HIGH_PRECISION_MV 1 /* whether to use high precision mv | 62 #define ALTREF_HIGH_PRECISION_MV 1 /* whether to use high precision mv |
(...skipping 28 matching lines...) Expand all Loading... |
91 #endif | 91 #endif |
92 | 92 |
93 #if 0 | 93 #if 0 |
94 FILE *framepsnr; | 94 FILE *framepsnr; |
95 FILE *kf_list; | 95 FILE *kf_list; |
96 FILE *keyfile; | 96 FILE *keyfile; |
97 #endif | 97 #endif |
98 | 98 |
99 | 99 |
100 #ifdef ENTROPY_STATS | 100 #ifdef ENTROPY_STATS |
101 extern int intra_mode_stats[VP9_INTRA_MODES] | 101 extern int intra_mode_stats[INTRA_MODES] |
102 [VP9_INTRA_MODES] | 102 [INTRA_MODES] |
103 [VP9_INTRA_MODES]; | 103 [INTRA_MODES]; |
104 #endif | 104 #endif |
105 | 105 |
106 #ifdef NMV_STATS | |
107 extern void init_nmvstats(); | |
108 extern void print_nmvstats(); | |
109 #endif | |
110 #ifdef MODE_STATS | 106 #ifdef MODE_STATS |
111 extern void init_tx_count_stats(); | 107 extern void init_tx_count_stats(); |
112 extern void write_tx_count_stats(); | 108 extern void write_tx_count_stats(); |
113 extern void init_switchable_interp_stats(); | 109 extern void init_switchable_interp_stats(); |
114 extern void write_switchable_interp_stats(); | 110 extern void write_switchable_interp_stats(); |
115 #endif | 111 #endif |
116 | 112 |
117 #ifdef SPEEDSTATS | 113 #ifdef SPEEDSTATS |
118 unsigned int frames_at_speed[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0}; | 114 unsigned int frames_at_speed[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0}; |
119 #endif | 115 #endif |
(...skipping 114 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
234 vp9_initialize_common(); | 230 vp9_initialize_common(); |
235 vp9_tokenize_initialize(); | 231 vp9_tokenize_initialize(); |
236 vp9_init_quant_tables(); | 232 vp9_init_quant_tables(); |
237 vp9_init_me_luts(); | 233 vp9_init_me_luts(); |
238 init_minq_luts(); | 234 init_minq_luts(); |
239 // init_base_skip_probs(); | 235 // init_base_skip_probs(); |
240 init_done = 1; | 236 init_done = 1; |
241 } | 237 } |
242 } | 238 } |
243 | 239 |
244 static void setup_features(VP9_COMP *cpi) { | 240 static void setup_features(VP9_COMMON *cm) { |
245 MACROBLOCKD *xd = &cpi->mb.e_mbd; | 241 struct loopfilter *const lf = &cm->lf; |
246 struct loopfilter *lf = &xd->lf; | 242 struct segmentation *const seg = &cm->seg; |
247 | 243 |
248 // Set up default state for MB feature flags | 244 // Set up default state for MB feature flags |
249 xd->seg.enabled = 0; | 245 seg->enabled = 0; |
250 | 246 |
251 xd->seg.update_map = 0; | 247 seg->update_map = 0; |
252 xd->seg.update_data = 0; | 248 seg->update_data = 0; |
253 vpx_memset(xd->seg.tree_probs, 255, sizeof(xd->seg.tree_probs)); | 249 vpx_memset(seg->tree_probs, 255, sizeof(seg->tree_probs)); |
254 | 250 |
255 vp9_clearall_segfeatures(&xd->seg); | 251 vp9_clearall_segfeatures(seg); |
256 | 252 |
257 lf->mode_ref_delta_enabled = 0; | 253 lf->mode_ref_delta_enabled = 0; |
258 lf->mode_ref_delta_update = 0; | 254 lf->mode_ref_delta_update = 0; |
259 vp9_zero(lf->ref_deltas); | 255 vp9_zero(lf->ref_deltas); |
260 vp9_zero(lf->mode_deltas); | 256 vp9_zero(lf->mode_deltas); |
261 vp9_zero(lf->last_ref_deltas); | 257 vp9_zero(lf->last_ref_deltas); |
262 vp9_zero(lf->last_mode_deltas); | 258 vp9_zero(lf->last_mode_deltas); |
263 | 259 |
264 set_default_lf_deltas(cpi); | 260 set_default_lf_deltas(lf); |
265 } | 261 } |
266 | 262 |
267 static void dealloc_compressor_data(VP9_COMP *cpi) { | 263 static void dealloc_compressor_data(VP9_COMP *cpi) { |
268 // Delete sementation map | 264 // Delete sementation map |
269 vpx_free(cpi->segmentation_map); | 265 vpx_free(cpi->segmentation_map); |
270 cpi->segmentation_map = 0; | 266 cpi->segmentation_map = 0; |
271 vpx_free(cpi->common.last_frame_seg_map); | 267 vpx_free(cpi->common.last_frame_seg_map); |
272 cpi->common.last_frame_seg_map = 0; | 268 cpi->common.last_frame_seg_map = 0; |
273 vpx_free(cpi->coding_context.last_frame_seg_map_copy); | 269 vpx_free(cpi->coding_context.last_frame_seg_map_copy); |
274 cpi->coding_context.last_frame_seg_map_copy = 0; | 270 cpi->coding_context.last_frame_seg_map_copy = 0; |
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
316 target_index = i; | 312 target_index = i; |
317 if (vp9_convert_qindex_to_q(i) >= qtarget) | 313 if (vp9_convert_qindex_to_q(i) >= qtarget) |
318 break; | 314 break; |
319 } | 315 } |
320 | 316 |
321 return target_index - start_index; | 317 return target_index - start_index; |
322 } | 318 } |
323 | 319 |
324 static void configure_static_seg_features(VP9_COMP *cpi) { | 320 static void configure_static_seg_features(VP9_COMP *cpi) { |
325 VP9_COMMON *cm = &cpi->common; | 321 VP9_COMMON *cm = &cpi->common; |
326 MACROBLOCKD *xd = &cpi->mb.e_mbd; | 322 struct segmentation *seg = &cm->seg; |
327 | 323 |
328 int high_q = (int)(cpi->avg_q > 48.0); | 324 int high_q = (int)(cpi->avg_q > 48.0); |
329 int qi_delta; | 325 int qi_delta; |
330 | 326 |
331 // Disable and clear down for KF | 327 // Disable and clear down for KF |
332 if (cm->frame_type == KEY_FRAME) { | 328 if (cm->frame_type == KEY_FRAME) { |
333 // Clear down the global segmentation map | 329 // Clear down the global segmentation map |
334 vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols); | 330 vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols); |
335 xd->seg.update_map = 0; | 331 seg->update_map = 0; |
336 xd->seg.update_data = 0; | 332 seg->update_data = 0; |
337 cpi->static_mb_pct = 0; | 333 cpi->static_mb_pct = 0; |
338 | 334 |
339 // Disable segmentation | 335 // Disable segmentation |
340 vp9_disable_segmentation((VP9_PTR)cpi); | 336 vp9_disable_segmentation((VP9_PTR)cpi); |
341 | 337 |
342 // Clear down the segment features. | 338 // Clear down the segment features. |
343 vp9_clearall_segfeatures(&xd->seg); | 339 vp9_clearall_segfeatures(seg); |
344 } else if (cpi->refresh_alt_ref_frame) { | 340 } else if (cpi->refresh_alt_ref_frame) { |
345 // If this is an alt ref frame | 341 // If this is an alt ref frame |
346 // Clear down the global segmentation map | 342 // Clear down the global segmentation map |
347 vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols); | 343 vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols); |
348 xd->seg.update_map = 0; | 344 seg->update_map = 0; |
349 xd->seg.update_data = 0; | 345 seg->update_data = 0; |
350 cpi->static_mb_pct = 0; | 346 cpi->static_mb_pct = 0; |
351 | 347 |
352 // Disable segmentation and individual segment features by default | 348 // Disable segmentation and individual segment features by default |
353 vp9_disable_segmentation((VP9_PTR)cpi); | 349 vp9_disable_segmentation((VP9_PTR)cpi); |
354 vp9_clearall_segfeatures(&xd->seg); | 350 vp9_clearall_segfeatures(seg); |
355 | 351 |
356 // Scan frames from current to arf frame. | 352 // Scan frames from current to arf frame. |
357 // This function re-enables segmentation if appropriate. | 353 // This function re-enables segmentation if appropriate. |
358 vp9_update_mbgraph_stats(cpi); | 354 vp9_update_mbgraph_stats(cpi); |
359 | 355 |
360 // If segmentation was enabled set those features needed for the | 356 // If segmentation was enabled set those features needed for the |
361 // arf itself. | 357 // arf itself. |
362 if (xd->seg.enabled) { | 358 if (seg->enabled) { |
363 xd->seg.update_map = 1; | 359 seg->update_map = 1; |
364 xd->seg.update_data = 1; | 360 seg->update_data = 1; |
365 | 361 |
366 qi_delta = compute_qdelta(cpi, cpi->avg_q, (cpi->avg_q * 0.875)); | 362 qi_delta = compute_qdelta(cpi, cpi->avg_q, (cpi->avg_q * 0.875)); |
367 vp9_set_segdata(&xd->seg, 1, SEG_LVL_ALT_Q, (qi_delta - 2)); | 363 vp9_set_segdata(seg, 1, SEG_LVL_ALT_Q, (qi_delta - 2)); |
368 vp9_set_segdata(&xd->seg, 1, SEG_LVL_ALT_LF, -2); | 364 vp9_set_segdata(seg, 1, SEG_LVL_ALT_LF, -2); |
369 | 365 |
370 vp9_enable_segfeature(&xd->seg, 1, SEG_LVL_ALT_Q); | 366 vp9_enable_segfeature(seg, 1, SEG_LVL_ALT_Q); |
371 vp9_enable_segfeature(&xd->seg, 1, SEG_LVL_ALT_LF); | 367 vp9_enable_segfeature(seg, 1, SEG_LVL_ALT_LF); |
372 | 368 |
373 // Where relevant assume segment data is delta data | 369 // Where relevant assume segment data is delta data |
374 xd->seg.abs_delta = SEGMENT_DELTADATA; | 370 seg->abs_delta = SEGMENT_DELTADATA; |
375 | 371 |
376 } | 372 } |
377 } else if (xd->seg.enabled) { | 373 } else if (seg->enabled) { |
378 // All other frames if segmentation has been enabled | 374 // All other frames if segmentation has been enabled |
379 | 375 |
380 // First normal frame in a valid gf or alt ref group | 376 // First normal frame in a valid gf or alt ref group |
381 if (cpi->frames_since_golden == 0) { | 377 if (cpi->frames_since_golden == 0) { |
382 // Set up segment features for normal frames in an arf group | 378 // Set up segment features for normal frames in an arf group |
383 if (cpi->source_alt_ref_active) { | 379 if (cpi->source_alt_ref_active) { |
384 xd->seg.update_map = 0; | 380 seg->update_map = 0; |
385 xd->seg.update_data = 1; | 381 seg->update_data = 1; |
386 xd->seg.abs_delta = SEGMENT_DELTADATA; | 382 seg->abs_delta = SEGMENT_DELTADATA; |
387 | 383 |
388 qi_delta = compute_qdelta(cpi, cpi->avg_q, | 384 qi_delta = compute_qdelta(cpi, cpi->avg_q, |
389 (cpi->avg_q * 1.125)); | 385 (cpi->avg_q * 1.125)); |
390 vp9_set_segdata(&xd->seg, 1, SEG_LVL_ALT_Q, (qi_delta + 2)); | 386 vp9_set_segdata(seg, 1, SEG_LVL_ALT_Q, (qi_delta + 2)); |
391 vp9_enable_segfeature(&xd->seg, 1, SEG_LVL_ALT_Q); | 387 vp9_enable_segfeature(seg, 1, SEG_LVL_ALT_Q); |
392 | 388 |
393 vp9_set_segdata(&xd->seg, 1, SEG_LVL_ALT_LF, -2); | 389 vp9_set_segdata(seg, 1, SEG_LVL_ALT_LF, -2); |
394 vp9_enable_segfeature(&xd->seg, 1, SEG_LVL_ALT_LF); | 390 vp9_enable_segfeature(seg, 1, SEG_LVL_ALT_LF); |
395 | 391 |
396 // Segment coding disabled for compred testing | 392 // Segment coding disabled for compred testing |
397 if (high_q || (cpi->static_mb_pct == 100)) { | 393 if (high_q || (cpi->static_mb_pct == 100)) { |
398 vp9_set_segdata(&xd->seg, 1, SEG_LVL_REF_FRAME, ALTREF_FRAME); | 394 vp9_set_segdata(seg, 1, SEG_LVL_REF_FRAME, ALTREF_FRAME); |
399 vp9_enable_segfeature(&xd->seg, 1, SEG_LVL_REF_FRAME); | 395 vp9_enable_segfeature(seg, 1, SEG_LVL_REF_FRAME); |
400 vp9_enable_segfeature(&xd->seg, 1, SEG_LVL_SKIP); | 396 vp9_enable_segfeature(seg, 1, SEG_LVL_SKIP); |
401 } | 397 } |
402 } else { | 398 } else { |
403 // Disable segmentation and clear down features if alt ref | 399 // Disable segmentation and clear down features if alt ref |
404 // is not active for this group | 400 // is not active for this group |
405 | 401 |
406 vp9_disable_segmentation((VP9_PTR)cpi); | 402 vp9_disable_segmentation((VP9_PTR)cpi); |
407 | 403 |
408 vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols); | 404 vpx_memset(cpi->segmentation_map, 0, cm->mi_rows * cm->mi_cols); |
409 | 405 |
410 xd->seg.update_map = 0; | 406 seg->update_map = 0; |
411 xd->seg.update_data = 0; | 407 seg->update_data = 0; |
412 | 408 |
413 vp9_clearall_segfeatures(&xd->seg); | 409 vp9_clearall_segfeatures(seg); |
414 } | 410 } |
415 } else if (cpi->is_src_frame_alt_ref) { | 411 } else if (cpi->is_src_frame_alt_ref) { |
416 // Special case where we are coding over the top of a previous | 412 // Special case where we are coding over the top of a previous |
417 // alt ref frame. | 413 // alt ref frame. |
418 // Segment coding disabled for compred testing | 414 // Segment coding disabled for compred testing |
419 | 415 |
420 // Enable ref frame features for segment 0 as well | 416 // Enable ref frame features for segment 0 as well |
421 vp9_enable_segfeature(&xd->seg, 0, SEG_LVL_REF_FRAME); | 417 vp9_enable_segfeature(seg, 0, SEG_LVL_REF_FRAME); |
422 vp9_enable_segfeature(&xd->seg, 1, SEG_LVL_REF_FRAME); | 418 vp9_enable_segfeature(seg, 1, SEG_LVL_REF_FRAME); |
423 | 419 |
424 // All mbs should use ALTREF_FRAME | 420 // All mbs should use ALTREF_FRAME |
425 vp9_clear_segdata(&xd->seg, 0, SEG_LVL_REF_FRAME); | 421 vp9_clear_segdata(seg, 0, SEG_LVL_REF_FRAME); |
426 vp9_set_segdata(&xd->seg, 0, SEG_LVL_REF_FRAME, ALTREF_FRAME); | 422 vp9_set_segdata(seg, 0, SEG_LVL_REF_FRAME, ALTREF_FRAME); |
427 vp9_clear_segdata(&xd->seg, 1, SEG_LVL_REF_FRAME); | 423 vp9_clear_segdata(seg, 1, SEG_LVL_REF_FRAME); |
428 vp9_set_segdata(&xd->seg, 1, SEG_LVL_REF_FRAME, ALTREF_FRAME); | 424 vp9_set_segdata(seg, 1, SEG_LVL_REF_FRAME, ALTREF_FRAME); |
429 | 425 |
430 // Skip all MBs if high Q (0,0 mv and skip coeffs) | 426 // Skip all MBs if high Q (0,0 mv and skip coeffs) |
431 if (high_q) { | 427 if (high_q) { |
432 vp9_enable_segfeature(&xd->seg, 0, SEG_LVL_SKIP); | 428 vp9_enable_segfeature(seg, 0, SEG_LVL_SKIP); |
433 vp9_enable_segfeature(&xd->seg, 1, SEG_LVL_SKIP); | 429 vp9_enable_segfeature(seg, 1, SEG_LVL_SKIP); |
434 } | 430 } |
435 // Enable data update | 431 // Enable data update |
436 xd->seg.update_data = 1; | 432 seg->update_data = 1; |
437 } else { | 433 } else { |
438 // All other frames. | 434 // All other frames. |
439 | 435 |
440 // No updates.. leave things as they are. | 436 // No updates.. leave things as they are. |
441 xd->seg.update_map = 0; | 437 seg->update_map = 0; |
442 xd->seg.update_data = 0; | 438 seg->update_data = 0; |
443 } | 439 } |
444 } | 440 } |
445 } | 441 } |
446 | 442 |
447 #ifdef ENTROPY_STATS | 443 #ifdef ENTROPY_STATS |
448 void vp9_update_mode_context_stats(VP9_COMP *cpi) { | 444 void vp9_update_mode_context_stats(VP9_COMP *cpi) { |
449 VP9_COMMON *cm = &cpi->common; | 445 VP9_COMMON *cm = &cpi->common; |
450 int i, j; | 446 int i, j; |
451 unsigned int (*inter_mode_counts)[VP9_INTER_MODES - 1][2] = | 447 unsigned int (*inter_mode_counts)[INTER_MODES - 1][2] = |
452 cm->fc.inter_mode_counts; | 448 cm->fc.inter_mode_counts; |
453 int64_t (*mv_ref_stats)[VP9_INTER_MODES - 1][2] = cpi->mv_ref_stats; | 449 int64_t (*mv_ref_stats)[INTER_MODES - 1][2] = cpi->mv_ref_stats; |
454 FILE *f; | 450 FILE *f; |
455 | 451 |
456 // Read the past stats counters | 452 // Read the past stats counters |
457 f = fopen("mode_context.bin", "rb"); | 453 f = fopen("mode_context.bin", "rb"); |
458 if (!f) { | 454 if (!f) { |
459 vpx_memset(cpi->mv_ref_stats, 0, sizeof(cpi->mv_ref_stats)); | 455 vpx_memset(cpi->mv_ref_stats, 0, sizeof(cpi->mv_ref_stats)); |
460 } else { | 456 } else { |
461 fread(cpi->mv_ref_stats, sizeof(cpi->mv_ref_stats), 1, f); | 457 fread(cpi->mv_ref_stats, sizeof(cpi->mv_ref_stats), 1, f); |
462 fclose(f); | 458 fclose(f); |
463 } | 459 } |
464 | 460 |
465 // Add in the values for this frame | 461 // Add in the values for this frame |
466 for (i = 0; i < INTER_MODE_CONTEXTS; i++) { | 462 for (i = 0; i < INTER_MODE_CONTEXTS; i++) { |
467 for (j = 0; j < VP9_INTER_MODES - 1; j++) { | 463 for (j = 0; j < INTER_MODES - 1; j++) { |
468 mv_ref_stats[i][j][0] += (int64_t)inter_mode_counts[i][j][0]; | 464 mv_ref_stats[i][j][0] += (int64_t)inter_mode_counts[i][j][0]; |
469 mv_ref_stats[i][j][1] += (int64_t)inter_mode_counts[i][j][1]; | 465 mv_ref_stats[i][j][1] += (int64_t)inter_mode_counts[i][j][1]; |
470 } | 466 } |
471 } | 467 } |
472 | 468 |
473 // Write back the accumulated stats | 469 // Write back the accumulated stats |
474 f = fopen("mode_context.bin", "wb"); | 470 f = fopen("mode_context.bin", "wb"); |
475 fwrite(cpi->mv_ref_stats, sizeof(cpi->mv_ref_stats), 1, f); | 471 fwrite(cpi->mv_ref_stats, sizeof(cpi->mv_ref_stats), 1, f); |
476 fclose(f); | 472 fclose(f); |
477 } | 473 } |
478 | 474 |
479 void print_mode_context(VP9_COMP *cpi) { | 475 void print_mode_context(VP9_COMP *cpi) { |
480 FILE *f = fopen("vp9_modecont.c", "a"); | 476 FILE *f = fopen("vp9_modecont.c", "a"); |
481 int i, j; | 477 int i, j; |
482 | 478 |
483 fprintf(f, "#include \"vp9_entropy.h\"\n"); | 479 fprintf(f, "#include \"vp9_entropy.h\"\n"); |
484 fprintf( | 480 fprintf( |
485 f, | 481 f, |
486 "const int inter_mode_probs[INTER_MODE_CONTEXTS][VP9_INTER_MODES - 1] ="); | 482 "const int inter_mode_probs[INTER_MODE_CONTEXTS][INTER_MODES - 1] ="); |
487 fprintf(f, "{\n"); | 483 fprintf(f, "{\n"); |
488 for (j = 0; j < INTER_MODE_CONTEXTS; j++) { | 484 for (j = 0; j < INTER_MODE_CONTEXTS; j++) { |
489 fprintf(f, " {/* %d */ ", j); | 485 fprintf(f, " {/* %d */ ", j); |
490 fprintf(f, " "); | 486 fprintf(f, " "); |
491 for (i = 0; i < VP9_INTER_MODES - 1; i++) { | 487 for (i = 0; i < INTER_MODES - 1; i++) { |
492 int this_prob; | 488 int this_prob; |
493 int64_t count = cpi->mv_ref_stats[j][i][0] + cpi->mv_ref_stats[j][i][1]; | 489 int64_t count = cpi->mv_ref_stats[j][i][0] + cpi->mv_ref_stats[j][i][1]; |
494 if (count) | 490 if (count) |
495 this_prob = ((cpi->mv_ref_stats[j][i][0] * 256) + (count >> 1)) / count; | 491 this_prob = ((cpi->mv_ref_stats[j][i][0] * 256) + (count >> 1)) / count; |
496 else | 492 else |
497 this_prob = 128; | 493 this_prob = 128; |
498 | 494 |
499 // context probs | 495 // context probs |
500 fprintf(f, "%5d, ", this_prob); | 496 fprintf(f, "%5d, ", this_prob); |
501 } | 497 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 for (row = 0; row < cm->mi_rows; row++) { | 533 for (row = 0; row < cm->mi_rows; row++) { |
538 mi = mi_ptr; | 534 mi = mi_ptr; |
539 cache = cache_ptr; | 535 cache = cache_ptr; |
540 for (col = 0; col < cm->mi_cols; col++, mi++, cache++) | 536 for (col = 0; col < cm->mi_cols; col++, mi++, cache++) |
541 cache[0] = mi->mbmi.segment_id; | 537 cache[0] = mi->mbmi.segment_id; |
542 mi_ptr += cm->mode_info_stride; | 538 mi_ptr += cm->mode_info_stride; |
543 cache_ptr += cm->mi_cols; | 539 cache_ptr += cm->mi_cols; |
544 } | 540 } |
545 } | 541 } |
546 | 542 |
547 static void set_default_lf_deltas(VP9_COMP *cpi) { | 543 static void set_default_lf_deltas(struct loopfilter *lf) { |
548 struct loopfilter *lf = &cpi->mb.e_mbd.lf; | |
549 | |
550 lf->mode_ref_delta_enabled = 1; | 544 lf->mode_ref_delta_enabled = 1; |
551 lf->mode_ref_delta_update = 1; | 545 lf->mode_ref_delta_update = 1; |
552 | 546 |
553 vp9_zero(lf->ref_deltas); | 547 vp9_zero(lf->ref_deltas); |
554 vp9_zero(lf->mode_deltas); | 548 vp9_zero(lf->mode_deltas); |
555 | 549 |
556 // Test of ref frame deltas | 550 // Test of ref frame deltas |
557 lf->ref_deltas[INTRA_FRAME] = 2; | 551 lf->ref_deltas[INTRA_FRAME] = 2; |
558 lf->ref_deltas[LAST_FRAME] = 0; | 552 lf->ref_deltas[LAST_FRAME] = 0; |
559 lf->ref_deltas[GOLDEN_FRAME] = -2; | 553 lf->ref_deltas[GOLDEN_FRAME] = -2; |
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
607 sf->thresh_mult[THR_COMP_ZEROLA] += speed_multiplier * 2500; | 601 sf->thresh_mult[THR_COMP_ZEROLA] += speed_multiplier * 2500; |
608 sf->thresh_mult[THR_COMP_ZEROGA] += speed_multiplier * 2500; | 602 sf->thresh_mult[THR_COMP_ZEROGA] += speed_multiplier * 2500; |
609 | 603 |
610 sf->thresh_mult[THR_B_PRED] += speed_multiplier * 2500; | 604 sf->thresh_mult[THR_B_PRED] += speed_multiplier * 2500; |
611 sf->thresh_mult[THR_H_PRED] += speed_multiplier * 2000; | 605 sf->thresh_mult[THR_H_PRED] += speed_multiplier * 2000; |
612 sf->thresh_mult[THR_V_PRED] += speed_multiplier * 2000; | 606 sf->thresh_mult[THR_V_PRED] += speed_multiplier * 2000; |
613 sf->thresh_mult[THR_D45_PRED ] += speed_multiplier * 2500; | 607 sf->thresh_mult[THR_D45_PRED ] += speed_multiplier * 2500; |
614 sf->thresh_mult[THR_D135_PRED] += speed_multiplier * 2500; | 608 sf->thresh_mult[THR_D135_PRED] += speed_multiplier * 2500; |
615 sf->thresh_mult[THR_D117_PRED] += speed_multiplier * 2500; | 609 sf->thresh_mult[THR_D117_PRED] += speed_multiplier * 2500; |
616 sf->thresh_mult[THR_D153_PRED] += speed_multiplier * 2500; | 610 sf->thresh_mult[THR_D153_PRED] += speed_multiplier * 2500; |
617 sf->thresh_mult[THR_D27_PRED] += speed_multiplier * 2500; | 611 sf->thresh_mult[THR_D207_PRED] += speed_multiplier * 2500; |
618 sf->thresh_mult[THR_D63_PRED] += speed_multiplier * 2500; | 612 sf->thresh_mult[THR_D63_PRED] += speed_multiplier * 2500; |
619 | 613 |
620 if (cpi->sf.skip_lots_of_modes) { | 614 if (cpi->sf.skip_lots_of_modes) { |
621 for (i = 0; i < MAX_MODES; ++i) | 615 for (i = 0; i < MAX_MODES; ++i) |
622 sf->thresh_mult[i] = INT_MAX; | 616 sf->thresh_mult[i] = INT_MAX; |
623 | 617 |
624 sf->thresh_mult[THR_DC] = 2000; | 618 sf->thresh_mult[THR_DC] = 2000; |
625 sf->thresh_mult[THR_TM] = 2000; | 619 sf->thresh_mult[THR_TM] = 2000; |
626 sf->thresh_mult[THR_NEWMV] = 4000; | 620 sf->thresh_mult[THR_NEWMV] = 4000; |
627 sf->thresh_mult[THR_NEWG] = 4000; | 621 sf->thresh_mult[THR_NEWG] = 4000; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
704 cpi->mode_check_freq[i] = 0; | 698 cpi->mode_check_freq[i] = 0; |
705 cpi->mode_test_hit_counts[i] = 0; | 699 cpi->mode_test_hit_counts[i] = 0; |
706 cpi->mode_chosen_counts[i] = 0; | 700 cpi->mode_chosen_counts[i] = 0; |
707 } | 701 } |
708 | 702 |
709 // best quality defaults | 703 // best quality defaults |
710 sf->RD = 1; | 704 sf->RD = 1; |
711 sf->search_method = NSTEP; | 705 sf->search_method = NSTEP; |
712 sf->auto_filter = 1; | 706 sf->auto_filter = 1; |
713 sf->recode_loop = 1; | 707 sf->recode_loop = 1; |
714 sf->quarter_pixel_search = 1; | 708 sf->subpel_search_method = SUBPEL_TREE; |
715 sf->half_pixel_search = 1; | 709 sf->subpel_iters_per_step = 2; |
716 sf->iterative_sub_pixel = 1; | |
717 sf->optimize_coefficients = !cpi->oxcf.lossless; | 710 sf->optimize_coefficients = !cpi->oxcf.lossless; |
718 sf->reduce_first_step_size = 0; | 711 sf->reduce_first_step_size = 0; |
719 sf->auto_mv_step_size = 0; | 712 sf->auto_mv_step_size = 0; |
720 sf->max_step_search_steps = MAX_MVSEARCH_STEPS; | 713 sf->max_step_search_steps = MAX_MVSEARCH_STEPS; |
721 sf->comp_inter_joint_search_thresh = BLOCK_SIZE_AB4X4; | 714 sf->comp_inter_joint_search_thresh = BLOCK_4X4; |
722 sf->adaptive_rd_thresh = 0; | 715 sf->adaptive_rd_thresh = 0; |
723 sf->use_lastframe_partitioning = 0; | 716 sf->use_lastframe_partitioning = 0; |
724 sf->tx_size_search_method = USE_FULL_RD; | 717 sf->tx_size_search_method = USE_FULL_RD; |
725 sf->use_8tap_always = 0; | 718 sf->use_lp32x32fdct = 0; |
726 sf->use_avoid_tested_higherror = 0; | 719 sf->use_avoid_tested_higherror = 0; |
727 sf->reference_masking = 0; | 720 sf->reference_masking = 0; |
728 sf->skip_lots_of_modes = 0; | 721 sf->skip_lots_of_modes = 0; |
729 sf->adjust_thresholds_by_speed = 0; | 722 sf->adjust_thresholds_by_speed = 0; |
730 sf->partition_by_variance = 0; | 723 sf->partition_by_variance = 0; |
731 sf->use_one_partition_size_always = 0; | 724 sf->use_one_partition_size_always = 0; |
732 sf->less_rectangular_check = 0; | 725 sf->less_rectangular_check = 0; |
733 sf->use_square_partition_only = 0; | 726 sf->use_square_partition_only = 0; |
734 sf->use_partitions_less_than = 0; | 727 sf->auto_min_max_partition_size = 0; |
735 sf->less_than_block_size = BLOCK_SIZE_MB16X16; | 728 sf->auto_min_max_partition_interval = 0; |
736 sf->use_partitions_greater_than = 0; | 729 sf->auto_min_max_partition_count = 0; |
737 sf->greater_than_block_size = BLOCK_SIZE_SB8X8; | 730 sf->max_partition_size = BLOCK_64X64; |
| 731 sf->min_partition_size = BLOCK_4X4; |
738 sf->adjust_partitioning_from_last_frame = 0; | 732 sf->adjust_partitioning_from_last_frame = 0; |
739 sf->last_partitioning_redo_frequency = 4; | 733 sf->last_partitioning_redo_frequency = 4; |
740 sf->disable_splitmv = 0; | 734 sf->disable_splitmv = 0; |
741 sf->mode_search_skip_flags = 0; | 735 sf->mode_search_skip_flags = 0; |
742 sf->last_chroma_intra_mode = TM_PRED; | 736 sf->disable_split_var_thresh = 0; |
| 737 sf->disable_filter_search_var_thresh = 0; |
| 738 sf->intra_y_mode_mask = ALL_INTRA_MODES; |
| 739 sf->intra_uv_mode_mask = ALL_INTRA_MODES; |
743 sf->use_rd_breakout = 0; | 740 sf->use_rd_breakout = 0; |
744 sf->skip_encode_sb = 0; | 741 sf->skip_encode_sb = 0; |
745 sf->use_uv_intra_rd_estimate = 0; | 742 sf->use_uv_intra_rd_estimate = 0; |
| 743 sf->use_fast_lpf_pick = 0; |
746 sf->using_small_partition_info = 0; | 744 sf->using_small_partition_info = 0; |
747 // Skip any mode not chosen at size < X for all sizes > X | 745 // Skip any mode not chosen at size < X for all sizes > X |
748 // Hence BLOCK_SIZE_SB64X64 (skip is off) | 746 // Hence BLOCK_64X64 (skip is off) |
749 sf->unused_mode_skip_lvl = BLOCK_SIZE_SB64X64; | 747 sf->unused_mode_skip_lvl = BLOCK_64X64; |
750 | 748 |
751 #if CONFIG_MULTIPLE_ARF | 749 #if CONFIG_MULTIPLE_ARF |
752 // Switch segmentation off. | 750 // Switch segmentation off. |
753 sf->static_segmentation = 0; | 751 sf->static_segmentation = 0; |
754 #else | 752 #else |
755 sf->static_segmentation = 0; | 753 sf->static_segmentation = 0; |
756 #endif | 754 #endif |
757 | 755 |
758 switch (mode) { | 756 switch (mode) { |
759 case 0: // best quality mode | 757 case 0: // best quality mode |
760 sf->search_best_filter = SEARCH_BEST_FILTER; | 758 sf->search_best_filter = SEARCH_BEST_FILTER; |
761 break; | 759 break; |
762 | 760 |
763 case 1: | 761 case 1: |
764 #if CONFIG_MULTIPLE_ARF | 762 #if CONFIG_MULTIPLE_ARF |
765 // Switch segmentation off. | 763 // Switch segmentation off. |
766 sf->static_segmentation = 0; | 764 sf->static_segmentation = 0; |
767 #else | 765 #else |
768 sf->static_segmentation = 0; | 766 sf->static_segmentation = 0; |
769 #endif | 767 #endif |
770 sf->use_avoid_tested_higherror = 1; | 768 sf->use_avoid_tested_higherror = 1; |
771 sf->adaptive_rd_thresh = 1; | 769 sf->adaptive_rd_thresh = MIN((speed + 1), 4); |
772 sf->last_chroma_intra_mode = TM_PRED; | |
773 | 770 |
774 if (speed == 1) { | 771 if (speed == 1) { |
775 sf->comp_inter_joint_search_thresh = BLOCK_SIZE_TYPES; | 772 sf->comp_inter_joint_search_thresh = BLOCK_SIZES; |
776 sf->less_rectangular_check = 1; | 773 sf->less_rectangular_check = 1; |
777 sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME || | 774 sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME || |
778 cpi->common.intra_only || | 775 cpi->common.intra_only || |
779 cpi->common.show_frame == 0) ? | 776 cpi->common.show_frame == 0) ? |
780 USE_FULL_RD : | 777 USE_FULL_RD : |
781 USE_LARGESTALL); | 778 USE_LARGESTALL); |
782 sf->use_square_partition_only = !(cpi->common.frame_type == KEY_FRAME || | 779 sf->use_square_partition_only = !(cpi->common.frame_type == KEY_FRAME || |
783 cpi->common.intra_only || | 780 cpi->common.intra_only || |
784 cpi->common.show_frame == 0); | 781 cpi->common.show_frame == 0); |
785 sf->disable_splitmv = | 782 sf->disable_splitmv = |
786 (MIN(cpi->common.width, cpi->common.height) >= 720)? 1 : 0; | 783 (MIN(cpi->common.width, cpi->common.height) >= 720)? 1 : 0; |
787 sf->unused_mode_skip_lvl = BLOCK_SIZE_SB32X32; | 784 sf->unused_mode_skip_lvl = BLOCK_32X32; |
788 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH | | 785 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH | |
789 FLAG_SKIP_INTRA_BESTINTER | | 786 FLAG_SKIP_INTRA_BESTINTER | |
790 FLAG_SKIP_COMP_BESTINTRA; | 787 FLAG_SKIP_COMP_BESTINTRA | |
791 sf->last_chroma_intra_mode = H_PRED; | 788 FLAG_SKIP_INTRA_LOWVAR; |
| 789 sf->use_uv_intra_rd_estimate = 1; |
792 sf->use_rd_breakout = 1; | 790 sf->use_rd_breakout = 1; |
793 sf->skip_encode_sb = 1; | 791 sf->skip_encode_sb = 1; |
| 792 sf->use_lp32x32fdct = 1; |
794 sf->auto_mv_step_size = 1; | 793 sf->auto_mv_step_size = 1; |
| 794 |
| 795 sf->auto_min_max_partition_size = 1; |
| 796 sf->auto_min_max_partition_interval = 1; |
| 797 // FIXME(jingning): temporarily turn off disable_split_var_thresh |
| 798 // during refactoring process. will get this back after finishing |
| 799 // the main framework of partition search type. |
| 800 sf->disable_split_var_thresh = 0; |
| 801 sf->disable_filter_search_var_thresh = 16; |
| 802 |
| 803 sf->intra_y_mode_mask = INTRA_DC_TM_H_V; |
| 804 sf->intra_uv_mode_mask = INTRA_DC_TM_H_V; |
795 } | 805 } |
796 if (speed == 2) { | 806 if (speed == 2) { |
797 sf->adjust_thresholds_by_speed = 1; | 807 sf->adjust_thresholds_by_speed = 1; |
798 sf->less_rectangular_check = 1; | 808 sf->less_rectangular_check = 1; |
799 sf->use_square_partition_only = 1; | 809 sf->use_square_partition_only = 1; |
800 sf->comp_inter_joint_search_thresh = BLOCK_SIZE_TYPES; | 810 sf->comp_inter_joint_search_thresh = BLOCK_SIZES; |
801 sf->use_lastframe_partitioning = 1; | 811 sf->use_lastframe_partitioning = 1; |
802 sf->adjust_partitioning_from_last_frame = 1; | 812 sf->adjust_partitioning_from_last_frame = 1; |
803 sf->last_partitioning_redo_frequency = 3; | 813 sf->last_partitioning_redo_frequency = 3; |
804 sf->unused_mode_skip_lvl = BLOCK_SIZE_SB32X32; | 814 sf->unused_mode_skip_lvl = BLOCK_32X32; |
805 sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME || | 815 sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME || |
806 cpi->common.intra_only || | 816 cpi->common.intra_only || |
807 cpi->common.show_frame == 0) ? | 817 cpi->common.show_frame == 0) ? |
808 USE_FULL_RD : | 818 USE_FULL_RD : |
809 USE_LARGESTALL); | 819 USE_LARGESTALL); |
810 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH | | 820 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH | |
811 FLAG_SKIP_INTRA_BESTINTER | | 821 FLAG_SKIP_INTRA_BESTINTER | |
812 FLAG_SKIP_COMP_BESTINTRA | | 822 FLAG_SKIP_COMP_BESTINTRA | |
813 FLAG_SKIP_COMP_REFMISMATCH; | 823 FLAG_SKIP_COMP_REFMISMATCH | |
814 sf->last_chroma_intra_mode = DC_PRED; | 824 FLAG_SKIP_INTRA_LOWVAR | |
| 825 FLAG_EARLY_TERMINATE; |
| 826 sf->intra_y_mode_mask = INTRA_DC_TM; |
| 827 sf->intra_uv_mode_mask = INTRA_DC_TM; |
| 828 sf->use_uv_intra_rd_estimate = 1; |
815 sf->use_rd_breakout = 1; | 829 sf->use_rd_breakout = 1; |
816 sf->skip_encode_sb = 1; | 830 sf->skip_encode_sb = 1; |
817 sf->use_uv_intra_rd_estimate = 1; | 831 sf->use_lp32x32fdct = 1; |
818 sf->using_small_partition_info = 1; | 832 sf->using_small_partition_info = 0; |
819 sf->disable_splitmv = | 833 sf->disable_splitmv = |
820 (MIN(cpi->common.width, cpi->common.height) >= 720)? 1 : 0; | 834 (MIN(cpi->common.width, cpi->common.height) >= 720)? 1 : 0; |
821 sf->auto_mv_step_size = 1; | 835 sf->auto_mv_step_size = 1; |
| 836 sf->search_method = SQUARE; |
| 837 sf->subpel_iters_per_step = 1; |
| 838 sf->use_fast_lpf_pick = 1; |
| 839 sf->auto_min_max_partition_size = 1; |
| 840 sf->auto_min_max_partition_interval = 2; |
| 841 sf->disable_split_var_thresh = 32; |
| 842 sf->disable_filter_search_var_thresh = 32; |
822 } | 843 } |
823 if (speed == 3) { | 844 if (speed == 3) { |
824 sf->comp_inter_joint_search_thresh = BLOCK_SIZE_TYPES; | 845 sf->comp_inter_joint_search_thresh = BLOCK_SIZES; |
825 sf->partition_by_variance = 1; | 846 sf->partition_by_variance = 1; |
826 sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME || | 847 sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME || |
827 cpi->common.intra_only || | 848 cpi->common.intra_only || |
828 cpi->common.show_frame == 0) ? | 849 cpi->common.show_frame == 0) ? |
829 USE_FULL_RD : | 850 USE_FULL_RD : |
830 USE_LARGESTALL); | 851 USE_LARGESTALL); |
831 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH | | 852 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH | |
832 FLAG_SKIP_INTRA_BESTINTER | | 853 FLAG_SKIP_INTRA_BESTINTER | |
833 FLAG_SKIP_COMP_BESTINTRA | | 854 FLAG_SKIP_COMP_BESTINTRA | |
834 FLAG_SKIP_COMP_REFMISMATCH; | 855 FLAG_SKIP_COMP_REFMISMATCH | |
| 856 FLAG_SKIP_INTRA_LOWVAR | |
| 857 FLAG_EARLY_TERMINATE; |
835 sf->use_rd_breakout = 1; | 858 sf->use_rd_breakout = 1; |
836 sf->skip_encode_sb = 1; | 859 sf->skip_encode_sb = 1; |
| 860 sf->use_lp32x32fdct = 1; |
837 sf->disable_splitmv = 1; | 861 sf->disable_splitmv = 1; |
838 sf->auto_mv_step_size = 1; | 862 sf->auto_mv_step_size = 1; |
| 863 sf->search_method = BIGDIA; |
| 864 sf->subpel_iters_per_step = 1; |
| 865 sf->disable_split_var_thresh = 64; |
| 866 sf->disable_filter_search_var_thresh = 64; |
| 867 sf->intra_y_mode_mask = INTRA_DC_ONLY; |
| 868 sf->intra_uv_mode_mask = INTRA_DC_ONLY; |
839 } | 869 } |
840 if (speed == 4) { | 870 if (speed == 4) { |
841 sf->comp_inter_joint_search_thresh = BLOCK_SIZE_TYPES; | 871 sf->comp_inter_joint_search_thresh = BLOCK_SIZES; |
842 sf->use_one_partition_size_always = 1; | 872 sf->use_one_partition_size_always = 1; |
843 sf->always_this_block_size = BLOCK_SIZE_MB16X16; | 873 sf->always_this_block_size = BLOCK_16X16; |
844 sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME || | 874 sf->tx_size_search_method = ((cpi->common.frame_type == KEY_FRAME || |
845 cpi->common.intra_only || | 875 cpi->common.intra_only || |
846 cpi->common.show_frame == 0) ? | 876 cpi->common.show_frame == 0) ? |
847 USE_FULL_RD : | 877 USE_FULL_RD : |
848 USE_LARGESTALL); | 878 USE_LARGESTALL); |
849 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH | | 879 sf->mode_search_skip_flags = FLAG_SKIP_INTRA_DIRMISMATCH | |
850 FLAG_SKIP_INTRA_BESTINTER | | 880 FLAG_SKIP_INTRA_BESTINTER | |
851 FLAG_SKIP_COMP_BESTINTRA | | 881 FLAG_SKIP_COMP_BESTINTRA | |
852 FLAG_SKIP_COMP_REFMISMATCH; | 882 FLAG_SKIP_COMP_REFMISMATCH | |
| 883 FLAG_SKIP_INTRA_LOWVAR | |
| 884 FLAG_EARLY_TERMINATE; |
853 sf->use_rd_breakout = 1; | 885 sf->use_rd_breakout = 1; |
| 886 sf->use_lp32x32fdct = 1; |
854 sf->optimize_coefficients = 0; | 887 sf->optimize_coefficients = 0; |
855 sf->auto_mv_step_size = 1; | 888 sf->auto_mv_step_size = 1; |
856 // sf->reduce_first_step_size = 1; | 889 // sf->reduce_first_step_size = 1; |
857 // sf->reference_masking = 1; | 890 // sf->reference_masking = 1; |
858 | 891 |
859 sf->disable_splitmv = 1; | 892 sf->disable_splitmv = 1; |
| 893 sf->search_method = HEX; |
| 894 sf->subpel_iters_per_step = 1; |
| 895 sf->disable_split_var_thresh = 64; |
| 896 sf->disable_filter_search_var_thresh = 96; |
860 } | 897 } |
861 /* | 898 /* |
862 if (speed == 2) { | 899 if (speed == 2) { |
863 sf->first_step = 0; | 900 sf->first_step = 0; |
864 sf->comp_inter_joint_search_thresh = BLOCK_SIZE_SB8X8; | 901 sf->comp_inter_joint_search_thresh = BLOCK_8X8; |
865 sf->use_partitions_less_than = 1; | 902 sf->max_partition_size = BLOCK_16X16; |
866 sf->less_than_block_size = BLOCK_SIZE_MB16X16; | |
867 } | 903 } |
868 if (speed == 3) { | 904 if (speed == 3) { |
869 sf->first_step = 0; | 905 sf->first_step = 0; |
870 sf->comp_inter_joint_search_thresh = BLOCK_SIZE_SB8X8; | 906 sf->comp_inter_joint_search_thresh = BLOCK_B8X8; |
871 sf->use_partitions_greater_than = 1; | 907 sf->min_partition_size = BLOCK_8X8; |
872 sf->greater_than_block_size = BLOCK_SIZE_SB8X8; | |
873 } | 908 } |
874 */ | 909 */ |
875 | 910 |
876 break; | 911 break; |
877 | 912 |
878 }; /* switch */ | 913 }; /* switch */ |
879 | 914 |
880 // Set rd thresholds based on mode and speed setting | 915 // Set rd thresholds based on mode and speed setting |
881 if (cpi->sf.adjust_thresholds_by_speed) | 916 if (cpi->sf.adjust_thresholds_by_speed) |
882 set_rd_speed_thresholds(cpi, mode, speed); | 917 set_rd_speed_thresholds(cpi, mode, speed); |
(...skipping 10 matching lines...) Expand all Loading... |
893 cpi->mb.fwd_txm8x8 = vp9_short_fdct8x8; | 928 cpi->mb.fwd_txm8x8 = vp9_short_fdct8x8; |
894 cpi->mb.fwd_txm8x4 = vp9_short_fdct8x4; | 929 cpi->mb.fwd_txm8x4 = vp9_short_fdct8x4; |
895 cpi->mb.fwd_txm4x4 = vp9_short_fdct4x4; | 930 cpi->mb.fwd_txm4x4 = vp9_short_fdct4x4; |
896 if (cpi->oxcf.lossless || cpi->mb.e_mbd.lossless) { | 931 if (cpi->oxcf.lossless || cpi->mb.e_mbd.lossless) { |
897 cpi->mb.fwd_txm8x4 = vp9_short_walsh8x4; | 932 cpi->mb.fwd_txm8x4 = vp9_short_walsh8x4; |
898 cpi->mb.fwd_txm4x4 = vp9_short_walsh4x4; | 933 cpi->mb.fwd_txm4x4 = vp9_short_walsh4x4; |
899 } | 934 } |
900 | 935 |
901 cpi->mb.quantize_b_4x4 = vp9_regular_quantize_b_4x4; | 936 cpi->mb.quantize_b_4x4 = vp9_regular_quantize_b_4x4; |
902 | 937 |
903 if (cpi->sf.iterative_sub_pixel == 1) { | 938 if (cpi->sf.subpel_search_method == SUBPEL_ITERATIVE) { |
904 cpi->find_fractional_mv_step = vp9_find_best_sub_pixel_step_iteratively; | 939 cpi->find_fractional_mv_step = vp9_find_best_sub_pixel_iterative; |
905 } else if (cpi->sf.quarter_pixel_search) { | 940 cpi->find_fractional_mv_step_comp = vp9_find_best_sub_pixel_comp_iterative; |
906 cpi->find_fractional_mv_step = vp9_find_best_sub_pixel_step; | 941 } else if (cpi->sf.subpel_search_method == SUBPEL_TREE) { |
907 } else if (cpi->sf.half_pixel_search) { | 942 cpi->find_fractional_mv_step = vp9_find_best_sub_pixel_tree; |
908 cpi->find_fractional_mv_step = vp9_find_best_half_pixel_step; | 943 cpi->find_fractional_mv_step_comp = vp9_find_best_sub_pixel_comp_tree; |
909 } | 944 } |
910 | 945 |
911 cpi->mb.optimize = cpi->sf.optimize_coefficients == 1 && cpi->pass != 1; | 946 cpi->mb.optimize = cpi->sf.optimize_coefficients == 1 && cpi->pass != 1; |
912 | 947 |
913 #ifdef SPEEDSTATS | 948 #ifdef SPEEDSTATS |
914 frames_at_speed[cpi->speed]++; | 949 frames_at_speed[cpi->speed]++; |
915 #endif | 950 #endif |
916 } | 951 } |
917 | 952 |
918 static void alloc_raw_frame_buffers(VP9_COMP *cpi) { | 953 static void alloc_raw_frame_buffers(VP9_COMP *cpi) { |
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1205 | 1240 |
1206 cpi->ref_frame_flags = VP9_ALT_FLAG | VP9_GOLD_FLAG | VP9_LAST_FLAG; | 1241 cpi->ref_frame_flags = VP9_ALT_FLAG | VP9_GOLD_FLAG | VP9_LAST_FLAG; |
1207 | 1242 |
1208 // cpi->use_golden_frame_only = 0; | 1243 // cpi->use_golden_frame_only = 0; |
1209 // cpi->use_last_frame_only = 0; | 1244 // cpi->use_last_frame_only = 0; |
1210 cpi->refresh_golden_frame = 0; | 1245 cpi->refresh_golden_frame = 0; |
1211 cpi->refresh_last_frame = 1; | 1246 cpi->refresh_last_frame = 1; |
1212 cm->refresh_frame_context = 1; | 1247 cm->refresh_frame_context = 1; |
1213 cm->reset_frame_context = 0; | 1248 cm->reset_frame_context = 0; |
1214 | 1249 |
1215 setup_features(cpi); | 1250 setup_features(cm); |
1216 cpi->mb.e_mbd.allow_high_precision_mv = 0; // Default mv precision adaptatio
n | 1251 cpi->mb.e_mbd.allow_high_precision_mv = 0; // Default mv precision adaptatio
n |
1217 set_mvcost(&cpi->mb); | 1252 set_mvcost(&cpi->mb); |
1218 | 1253 |
1219 { | 1254 { |
1220 int i; | 1255 int i; |
1221 | 1256 |
1222 for (i = 0; i < MAX_SEGMENTS; i++) | 1257 for (i = 0; i < MAX_SEGMENTS; i++) |
1223 cpi->segment_encode_breakout[i] = cpi->oxcf.encode_breakout; | 1258 cpi->segment_encode_breakout[i] = cpi->oxcf.encode_breakout; |
1224 } | 1259 } |
1225 | 1260 |
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1275 cm->mcomp_filter_type = DEFAULT_INTERP_FILTER; | 1310 cm->mcomp_filter_type = DEFAULT_INTERP_FILTER; |
1276 | 1311 |
1277 cpi->target_bandwidth = cpi->oxcf.target_bandwidth; | 1312 cpi->target_bandwidth = cpi->oxcf.target_bandwidth; |
1278 | 1313 |
1279 cm->display_width = cpi->oxcf.width; | 1314 cm->display_width = cpi->oxcf.width; |
1280 cm->display_height = cpi->oxcf.height; | 1315 cm->display_height = cpi->oxcf.height; |
1281 | 1316 |
1282 // VP8 sharpness level mapping 0-7 (vs 0-10 in general VPx dialogs) | 1317 // VP8 sharpness level mapping 0-7 (vs 0-10 in general VPx dialogs) |
1283 cpi->oxcf.Sharpness = MIN(7, cpi->oxcf.Sharpness); | 1318 cpi->oxcf.Sharpness = MIN(7, cpi->oxcf.Sharpness); |
1284 | 1319 |
1285 cpi->mb.e_mbd.lf.sharpness_level = cpi->oxcf.Sharpness; | 1320 cpi->common.lf.sharpness_level = cpi->oxcf.Sharpness; |
1286 | 1321 |
1287 if (cpi->initial_width) { | 1322 if (cpi->initial_width) { |
1288 // Increasing the size of the frame beyond the first seen frame, or some | 1323 // Increasing the size of the frame beyond the first seen frame, or some |
1289 // otherwise signalled maximum size, is not supported. | 1324 // otherwise signalled maximum size, is not supported. |
1290 // TODO(jkoleszar): exit gracefully. | 1325 // TODO(jkoleszar): exit gracefully. |
1291 assert(cm->width <= cpi->initial_width); | 1326 assert(cm->width <= cpi->initial_width); |
1292 assert(cm->height <= cpi->initial_height); | 1327 assert(cm->height <= cpi->initial_height); |
1293 } | 1328 } |
1294 update_frame_size(cpi); | 1329 update_frame_size(cpi); |
1295 | 1330 |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1360 do { | 1395 do { |
1361 double z = 256 * (2 * (log2f(8 * i) + .6)); | 1396 double z = 256 * (2 * (log2f(8 * i) + .6)); |
1362 mvsadcost[0][i] = (int)z; | 1397 mvsadcost[0][i] = (int)z; |
1363 mvsadcost[1][i] = (int)z; | 1398 mvsadcost[1][i] = (int)z; |
1364 mvsadcost[0][-i] = (int)z; | 1399 mvsadcost[0][-i] = (int)z; |
1365 mvsadcost[1][-i] = (int)z; | 1400 mvsadcost[1][-i] = (int)z; |
1366 } while (++i <= MV_MAX); | 1401 } while (++i <= MV_MAX); |
1367 } | 1402 } |
1368 | 1403 |
1369 VP9_PTR vp9_create_compressor(VP9_CONFIG *oxcf) { | 1404 VP9_PTR vp9_create_compressor(VP9_CONFIG *oxcf) { |
1370 int i; | 1405 int i, j; |
1371 volatile union { | 1406 volatile union { |
1372 VP9_COMP *cpi; | 1407 VP9_COMP *cpi; |
1373 VP9_PTR ptr; | 1408 VP9_PTR ptr; |
1374 } ctx; | 1409 } ctx; |
1375 | 1410 |
1376 VP9_COMP *cpi; | 1411 VP9_COMP *cpi; |
1377 VP9_COMMON *cm; | 1412 VP9_COMMON *cm; |
1378 | 1413 |
1379 cpi = ctx.cpi = vpx_memalign(32, sizeof(VP9_COMP)); | 1414 cpi = ctx.cpi = vpx_memalign(32, sizeof(VP9_COMP)); |
1380 // Check that the CPI instance is valid | 1415 // Check that the CPI instance is valid |
1381 if (!cpi) | 1416 if (!cpi) |
1382 return 0; | 1417 return 0; |
1383 | 1418 |
1384 cm = &cpi->common; | 1419 cm = &cpi->common; |
1385 | 1420 |
1386 vpx_memset(cpi, 0, sizeof(VP9_COMP)); | 1421 vp9_zero(*cpi); |
1387 | 1422 |
1388 if (setjmp(cm->error.jmp)) { | 1423 if (setjmp(cm->error.jmp)) { |
1389 VP9_PTR ptr = ctx.ptr; | 1424 VP9_PTR ptr = ctx.ptr; |
1390 | 1425 |
1391 ctx.cpi->common.error.setjmp = 0; | 1426 ctx.cpi->common.error.setjmp = 0; |
1392 vp9_remove_compressor(&ptr); | 1427 vp9_remove_compressor(&ptr); |
1393 return 0; | 1428 return 0; |
1394 } | 1429 } |
1395 | 1430 |
1396 cm->error.setjmp = 1; | 1431 cm->error.setjmp = 1; |
(...skipping 18 matching lines...) Expand all Loading... |
1415 cpi->baseline_gf_interval = DEFAULT_GF_INTERVAL; | 1450 cpi->baseline_gf_interval = DEFAULT_GF_INTERVAL; |
1416 | 1451 |
1417 cpi->gold_is_last = 0; | 1452 cpi->gold_is_last = 0; |
1418 cpi->alt_is_last = 0; | 1453 cpi->alt_is_last = 0; |
1419 cpi->gold_is_alt = 0; | 1454 cpi->gold_is_alt = 0; |
1420 | 1455 |
1421 // Create the encoder segmentation map and set all entries to 0 | 1456 // Create the encoder segmentation map and set all entries to 0 |
1422 CHECK_MEM_ERROR(cm, cpi->segmentation_map, | 1457 CHECK_MEM_ERROR(cm, cpi->segmentation_map, |
1423 vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); | 1458 vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); |
1424 | 1459 |
1425 // And a copy in common for temporal coding | |
1426 CHECK_MEM_ERROR(cm, cm->last_frame_seg_map, | |
1427 vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); | |
1428 | |
1429 // And a place holder structure is the coding context | 1460 // And a place holder structure is the coding context |
1430 // for use if we want to save and restore it | 1461 // for use if we want to save and restore it |
1431 CHECK_MEM_ERROR(cm, cpi->coding_context.last_frame_seg_map_copy, | 1462 CHECK_MEM_ERROR(cm, cpi->coding_context.last_frame_seg_map_copy, |
1432 vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); | 1463 vpx_calloc(cm->mi_rows * cm->mi_cols, 1)); |
1433 | 1464 |
1434 CHECK_MEM_ERROR(cm, cpi->active_map, vpx_calloc(cm->MBs, 1)); | 1465 CHECK_MEM_ERROR(cm, cpi->active_map, vpx_calloc(cm->MBs, 1)); |
1435 vpx_memset(cpi->active_map, 1, cm->MBs); | 1466 vpx_memset(cpi->active_map, 1, cm->MBs); |
1436 cpi->active_map_enabled = 0; | 1467 cpi->active_map_enabled = 0; |
1437 | 1468 |
1438 for (i = 0; i < (sizeof(cpi->mbgraph_stats) / | 1469 for (i = 0; i < (sizeof(cpi->mbgraph_stats) / |
1439 sizeof(cpi->mbgraph_stats[0])); i++) { | 1470 sizeof(cpi->mbgraph_stats[0])); i++) { |
1440 CHECK_MEM_ERROR(cm, cpi->mbgraph_stats[i].mb_stats, | 1471 CHECK_MEM_ERROR(cm, cpi->mbgraph_stats[i].mb_stats, |
1441 vpx_calloc(cm->MBs * | 1472 vpx_calloc(cm->MBs * |
1442 sizeof(*cpi->mbgraph_stats[i].mb_stats), 1)); | 1473 sizeof(*cpi->mbgraph_stats[i].mb_stats), 1)); |
1443 } | 1474 } |
1444 | 1475 |
1445 #ifdef ENTROPY_STATS | 1476 #ifdef ENTROPY_STATS |
1446 if (cpi->pass != 1) | 1477 if (cpi->pass != 1) |
1447 init_context_counters(); | 1478 init_context_counters(); |
1448 #endif | 1479 #endif |
1449 | 1480 |
1450 #ifdef NMV_STATS | |
1451 init_nmvstats(); | |
1452 #endif | |
1453 #ifdef MODE_STATS | 1481 #ifdef MODE_STATS |
1454 init_tx_count_stats(); | 1482 init_tx_count_stats(); |
1455 init_switchable_interp_stats(); | 1483 init_switchable_interp_stats(); |
1456 #endif | 1484 #endif |
1457 | 1485 |
1458 /*Initialize the feed-forward activity masking.*/ | 1486 /*Initialize the feed-forward activity masking.*/ |
1459 cpi->activity_avg = 90 << 12; | 1487 cpi->activity_avg = 90 << 12; |
1460 | 1488 |
1461 cpi->frames_since_key = 8; // Give a sensible default for the first fra
me. | 1489 cpi->frames_since_key = 8; // Give a sensible default for the first fra
me. |
1462 cpi->key_frame_frequency = cpi->oxcf.key_freq; | 1490 cpi->key_frame_frequency = cpi->oxcf.key_freq; |
(...skipping 106 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1569 | 1597 |
1570 cpi->twopass.stats_in_start = oxcf->two_pass_stats_in.buf; | 1598 cpi->twopass.stats_in_start = oxcf->two_pass_stats_in.buf; |
1571 cpi->twopass.stats_in = cpi->twopass.stats_in_start; | 1599 cpi->twopass.stats_in = cpi->twopass.stats_in_start; |
1572 cpi->twopass.stats_in_end = (void *)((char *)cpi->twopass.stats_in | 1600 cpi->twopass.stats_in_end = (void *)((char *)cpi->twopass.stats_in |
1573 + (packets - 1) * packet_sz); | 1601 + (packets - 1) * packet_sz); |
1574 vp9_init_second_pass(cpi); | 1602 vp9_init_second_pass(cpi); |
1575 } | 1603 } |
1576 | 1604 |
1577 vp9_set_speed_features(cpi); | 1605 vp9_set_speed_features(cpi); |
1578 | 1606 |
1579 // Set starting values of RD threshold multipliers (128 = *1) | 1607 // Default rd threshold factors for mode selection |
1580 for (i = 0; i < MAX_MODES; i++) | 1608 for (i = 0; i < BLOCK_SIZES; ++i) |
1581 cpi->rd_thresh_mult[i] = 128; | 1609 for (j = 0; j < MAX_MODES; ++j) |
| 1610 cpi->rd_thresh_freq_fact[i][j] = 32; |
1582 | 1611 |
1583 #define BFP(BT, SDF, SDAF, VF, SVF, SVAF, SVFHH, SVFHV, SVFHHV, \ | 1612 #define BFP(BT, SDF, SDAF, VF, SVF, SVAF, SVFHH, SVFHV, SVFHHV, \ |
1584 SDX3F, SDX8F, SDX4DF)\ | 1613 SDX3F, SDX8F, SDX4DF)\ |
1585 cpi->fn_ptr[BT].sdf = SDF; \ | 1614 cpi->fn_ptr[BT].sdf = SDF; \ |
1586 cpi->fn_ptr[BT].sdaf = SDAF; \ | 1615 cpi->fn_ptr[BT].sdaf = SDAF; \ |
1587 cpi->fn_ptr[BT].vf = VF; \ | 1616 cpi->fn_ptr[BT].vf = VF; \ |
1588 cpi->fn_ptr[BT].svf = SVF; \ | 1617 cpi->fn_ptr[BT].svf = SVF; \ |
1589 cpi->fn_ptr[BT].svaf = SVAF; \ | 1618 cpi->fn_ptr[BT].svaf = SVAF; \ |
1590 cpi->fn_ptr[BT].svf_halfpix_h = SVFHH; \ | 1619 cpi->fn_ptr[BT].svf_halfpix_h = SVFHH; \ |
1591 cpi->fn_ptr[BT].svf_halfpix_v = SVFHV; \ | 1620 cpi->fn_ptr[BT].svf_halfpix_v = SVFHV; \ |
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1678 // make sure frame 1 is okay | 1707 // make sure frame 1 is okay |
1679 cpi->error_bins[0] = cpi->common.MBs; | 1708 cpi->error_bins[0] = cpi->common.MBs; |
1680 | 1709 |
1681 /* vp9_init_quantizer() is first called here. Add check in | 1710 /* vp9_init_quantizer() is first called here. Add check in |
1682 * vp9_frame_init_quantizer() so that vp9_init_quantizer is only | 1711 * vp9_frame_init_quantizer() so that vp9_init_quantizer is only |
1683 * called later when needed. This will avoid unnecessary calls of | 1712 * called later when needed. This will avoid unnecessary calls of |
1684 * vp9_init_quantizer() for every frame. | 1713 * vp9_init_quantizer() for every frame. |
1685 */ | 1714 */ |
1686 vp9_init_quantizer(cpi); | 1715 vp9_init_quantizer(cpi); |
1687 | 1716 |
1688 vp9_loop_filter_init(cm, &cpi->mb.e_mbd.lf); | 1717 vp9_loop_filter_init(cm); |
1689 | 1718 |
1690 cpi->common.error.setjmp = 0; | 1719 cpi->common.error.setjmp = 0; |
1691 | 1720 |
1692 vp9_zero(cpi->y_uv_mode_count) | 1721 vp9_zero(cpi->y_uv_mode_count) |
1693 | 1722 |
1694 return (VP9_PTR) cpi; | 1723 return (VP9_PTR) cpi; |
1695 } | 1724 } |
1696 | 1725 |
1697 void vp9_remove_compressor(VP9_PTR *ptr) { | 1726 void vp9_remove_compressor(VP9_PTR *ptr) { |
1698 VP9_COMP *cpi = (VP9_COMP *)(*ptr); | 1727 VP9_COMP *cpi = (VP9_COMP *)(*ptr); |
1699 int i; | 1728 int i; |
1700 | 1729 |
1701 if (!cpi) | 1730 if (!cpi) |
1702 return; | 1731 return; |
1703 | 1732 |
1704 if (cpi && (cpi->common.current_video_frame > 0)) { | 1733 if (cpi && (cpi->common.current_video_frame > 0)) { |
1705 if (cpi->pass == 2) { | 1734 if (cpi->pass == 2) { |
1706 vp9_end_second_pass(cpi); | 1735 vp9_end_second_pass(cpi); |
1707 } | 1736 } |
1708 | 1737 |
1709 #ifdef ENTROPY_STATS | 1738 #ifdef ENTROPY_STATS |
1710 if (cpi->pass != 1) { | 1739 if (cpi->pass != 1) { |
1711 print_context_counters(); | 1740 print_context_counters(); |
1712 print_tree_update_probs(); | 1741 print_tree_update_probs(); |
1713 print_mode_context(cpi); | 1742 print_mode_context(cpi); |
1714 } | 1743 } |
1715 #endif | 1744 #endif |
1716 #ifdef NMV_STATS | 1745 |
1717 if (cpi->pass != 1) | |
1718 print_nmvstats(); | |
1719 #endif | |
1720 #ifdef MODE_STATS | 1746 #ifdef MODE_STATS |
1721 if (cpi->pass != 1) { | 1747 if (cpi->pass != 1) { |
1722 write_tx_count_stats(); | 1748 write_tx_count_stats(); |
1723 write_switchable_interp_stats(); | 1749 write_switchable_interp_stats(); |
1724 } | 1750 } |
1725 #endif | 1751 #endif |
1726 | 1752 |
1727 #if CONFIG_INTERNAL_STATS | 1753 #if CONFIG_INTERNAL_STATS |
1728 | 1754 |
1729 vp9_clear_system_state(); | 1755 vp9_clear_system_state(); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1775 | 1801 |
1776 #endif | 1802 #endif |
1777 | 1803 |
1778 #ifdef ENTROPY_STATS | 1804 #ifdef ENTROPY_STATS |
1779 { | 1805 { |
1780 int i, j, k; | 1806 int i, j, k; |
1781 FILE *fmode = fopen("vp9_modecontext.c", "w"); | 1807 FILE *fmode = fopen("vp9_modecontext.c", "w"); |
1782 | 1808 |
1783 fprintf(fmode, "\n#include \"vp9_entropymode.h\"\n\n"); | 1809 fprintf(fmode, "\n#include \"vp9_entropymode.h\"\n\n"); |
1784 fprintf(fmode, "const unsigned int vp9_kf_default_bmode_counts "); | 1810 fprintf(fmode, "const unsigned int vp9_kf_default_bmode_counts "); |
1785 fprintf(fmode, "[VP9_INTRA_MODES][VP9_INTRA_MODES]" | 1811 fprintf(fmode, "[INTRA_MODES][INTRA_MODES]" |
1786 "[VP9_INTRA_MODES] =\n{\n"); | 1812 "[INTRA_MODES] =\n{\n"); |
1787 | 1813 |
1788 for (i = 0; i < VP9_INTRA_MODES; i++) { | 1814 for (i = 0; i < INTRA_MODES; i++) { |
1789 | 1815 |
1790 fprintf(fmode, " { // Above Mode : %d\n", i); | 1816 fprintf(fmode, " { // Above Mode : %d\n", i); |
1791 | 1817 |
1792 for (j = 0; j < VP9_INTRA_MODES; j++) { | 1818 for (j = 0; j < INTRA_MODES; j++) { |
1793 | 1819 |
1794 fprintf(fmode, " {"); | 1820 fprintf(fmode, " {"); |
1795 | 1821 |
1796 for (k = 0; k < VP9_INTRA_MODES; k++) { | 1822 for (k = 0; k < INTRA_MODES; k++) { |
1797 if (!intra_mode_stats[i][j][k]) | 1823 if (!intra_mode_stats[i][j][k]) |
1798 fprintf(fmode, " %5d, ", 1); | 1824 fprintf(fmode, " %5d, ", 1); |
1799 else | 1825 else |
1800 fprintf(fmode, " %5d, ", intra_mode_stats[i][j][k]); | 1826 fprintf(fmode, " %5d, ", intra_mode_stats[i][j][k]); |
1801 } | 1827 } |
1802 | 1828 |
1803 fprintf(fmode, "}, // left_mode %d\n", j); | 1829 fprintf(fmode, "}, // left_mode %d\n", j); |
1804 | 1830 |
1805 } | 1831 } |
1806 | 1832 |
(...skipping 19 matching lines...) Expand all Loading... |
1826 fprintf(f, "\n"); | 1852 fprintf(f, "\n"); |
1827 fclose(f); | 1853 fclose(f); |
1828 } | 1854 } |
1829 | 1855 |
1830 #endif | 1856 #endif |
1831 | 1857 |
1832 #if 0 | 1858 #if 0 |
1833 { | 1859 { |
1834 printf("\n_pick_loop_filter_level:%d\n", cpi->time_pick_lpf / 1000); | 1860 printf("\n_pick_loop_filter_level:%d\n", cpi->time_pick_lpf / 1000); |
1835 printf("\n_frames recive_data encod_mb_row compress_frame Total\n"); | 1861 printf("\n_frames recive_data encod_mb_row compress_frame Total\n"); |
1836 printf("%6d %10ld %10ld %10ld %10ld\n", cpi->common.current_video_frame, c
pi->time_receive_data / 1000, cpi->time_encode_mb_row / 1000, cpi->time_compress
_data / 1000, (cpi->time_receive_data + cpi->time_compress_data) / 1000); | 1862 printf("%6d %10ld %10ld %10ld %10ld\n", cpi->common.current_video_frame, |
| 1863 cpi->time_receive_data / 1000, cpi->time_encode_sb_row / 1000, |
| 1864 cpi->time_compress_data / 1000, |
| 1865 (cpi->time_receive_data + cpi->time_compress_data) / 1000); |
1837 } | 1866 } |
1838 #endif | 1867 #endif |
1839 | 1868 |
1840 } | 1869 } |
1841 | 1870 |
1842 dealloc_compressor_data(cpi); | 1871 dealloc_compressor_data(cpi); |
1843 vpx_free(cpi->mb.ss); | 1872 vpx_free(cpi->mb.ss); |
1844 vpx_free(cpi->tok); | 1873 vpx_free(cpi->tok); |
1845 | 1874 |
1846 for (i = 0; i < sizeof(cpi->mbgraph_stats) / sizeof(cpi->mbgraph_stats[0]); i+
+) { | 1875 for (i = 0; i < sizeof(cpi->mbgraph_stats) / sizeof(cpi->mbgraph_stats[0]); i+
+) { |
(...skipping 552 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2399 } | 2428 } |
2400 | 2429 |
2401 if (cpi->refresh_last_frame) { | 2430 if (cpi->refresh_last_frame) { |
2402 ref_cnt_fb(cm->fb_idx_ref_cnt, | 2431 ref_cnt_fb(cm->fb_idx_ref_cnt, |
2403 &cm->ref_frame_map[cpi->lst_fb_idx], cm->new_fb_idx); | 2432 &cm->ref_frame_map[cpi->lst_fb_idx], cm->new_fb_idx); |
2404 } | 2433 } |
2405 } | 2434 } |
2406 | 2435 |
2407 static void loopfilter_frame(VP9_COMP *cpi, VP9_COMMON *cm) { | 2436 static void loopfilter_frame(VP9_COMP *cpi, VP9_COMMON *cm) { |
2408 MACROBLOCKD *xd = &cpi->mb.e_mbd; | 2437 MACROBLOCKD *xd = &cpi->mb.e_mbd; |
| 2438 struct loopfilter *lf = &cm->lf; |
2409 if (xd->lossless) { | 2439 if (xd->lossless) { |
2410 xd->lf.filter_level = 0; | 2440 lf->filter_level = 0; |
2411 } else { | 2441 } else { |
2412 struct vpx_usec_timer timer; | 2442 struct vpx_usec_timer timer; |
2413 | 2443 |
2414 vp9_clear_system_state(); | 2444 vp9_clear_system_state(); |
2415 | 2445 |
2416 vpx_usec_timer_start(&timer); | 2446 vpx_usec_timer_start(&timer); |
2417 | 2447 |
2418 vp9_pick_filter_level(cpi->Source, cpi); | 2448 vp9_pick_filter_level(cpi->Source, cpi, cpi->sf.use_fast_lpf_pick); |
2419 | 2449 |
2420 vpx_usec_timer_mark(&timer); | 2450 vpx_usec_timer_mark(&timer); |
2421 cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer); | 2451 cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer); |
2422 } | 2452 } |
2423 | 2453 |
2424 if (xd->lf.filter_level > 0) { | 2454 if (lf->filter_level > 0) { |
2425 vp9_set_alt_lf_level(cpi, xd->lf.filter_level); | 2455 vp9_set_alt_lf_level(cpi, lf->filter_level); |
2426 vp9_loop_filter_frame(cm, xd, xd->lf.filter_level, 0); | 2456 vp9_loop_filter_frame(cm, xd, lf->filter_level, 0, 0); |
2427 } | 2457 } |
2428 | 2458 |
2429 vp9_extend_frame_inner_borders(cm->frame_to_show, | 2459 vp9_extend_frame_inner_borders(cm->frame_to_show, |
2430 cm->subsampling_x, cm->subsampling_y); | 2460 cm->subsampling_x, cm->subsampling_y); |
2431 } | 2461 } |
2432 | 2462 |
2433 static void scale_references(VP9_COMP *cpi) { | 2463 static void scale_references(VP9_COMP *cpi) { |
2434 VP9_COMMON *cm = &cpi->common; | 2464 VP9_COMMON *cm = &cpi->common; |
2435 int i; | 2465 int i; |
2436 | 2466 |
(...skipping 69 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2506 | 2536 |
2507 int top_index; | 2537 int top_index; |
2508 int bottom_index; | 2538 int bottom_index; |
2509 int active_worst_qchanged = 0; | 2539 int active_worst_qchanged = 0; |
2510 | 2540 |
2511 int overshoot_seen = 0; | 2541 int overshoot_seen = 0; |
2512 int undershoot_seen = 0; | 2542 int undershoot_seen = 0; |
2513 | 2543 |
2514 SPEED_FEATURES *sf = &cpi->sf; | 2544 SPEED_FEATURES *sf = &cpi->sf; |
2515 unsigned int max_mv_def = MIN(cpi->common.width, cpi->common.height); | 2545 unsigned int max_mv_def = MIN(cpi->common.width, cpi->common.height); |
| 2546 struct segmentation *seg = &cm->seg; |
2516 #if RESET_FOREACH_FILTER | 2547 #if RESET_FOREACH_FILTER |
2517 int q_low0; | 2548 int q_low0; |
2518 int q_high0; | 2549 int q_high0; |
2519 int Q0; | 2550 int Q0; |
2520 int active_best_quality0; | 2551 int active_best_quality0; |
2521 int active_worst_quality0; | 2552 int active_worst_quality0; |
2522 double rate_correction_factor0; | 2553 double rate_correction_factor0; |
2523 double gf_rate_correction_factor0; | 2554 double gf_rate_correction_factor0; |
2524 #endif | 2555 #endif |
2525 | 2556 |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2576 // Check to see if a key frame is signaled | 2607 // Check to see if a key frame is signaled |
2577 // For two pass with auto key frame enabled cm->frame_type may already be set,
but not for one pass. | 2608 // For two pass with auto key frame enabled cm->frame_type may already be set,
but not for one pass. |
2578 if ((cm->current_video_frame == 0) || | 2609 if ((cm->current_video_frame == 0) || |
2579 (cm->frame_flags & FRAMEFLAGS_KEY) || | 2610 (cm->frame_flags & FRAMEFLAGS_KEY) || |
2580 (cpi->oxcf.auto_key && (cpi->frames_since_key % cpi->key_frame_frequency =
= 0))) { | 2611 (cpi->oxcf.auto_key && (cpi->frames_since_key % cpi->key_frame_frequency =
= 0))) { |
2581 // Key frame from VFW/auto-keyframe/first frame | 2612 // Key frame from VFW/auto-keyframe/first frame |
2582 cm->frame_type = KEY_FRAME; | 2613 cm->frame_type = KEY_FRAME; |
2583 } | 2614 } |
2584 | 2615 |
2585 // Set default state for segment based loop filter update flags | 2616 // Set default state for segment based loop filter update flags |
2586 xd->lf.mode_ref_delta_update = 0; | 2617 cm->lf.mode_ref_delta_update = 0; |
2587 | 2618 |
2588 // Initialize cpi->mv_step_param to default based on max resolution | 2619 // Initialize cpi->mv_step_param to default based on max resolution |
2589 cpi->mv_step_param = vp9_init_search_range(cpi, max_mv_def); | 2620 cpi->mv_step_param = vp9_init_search_range(cpi, max_mv_def); |
2590 // Initialize cpi->max_mv_magnitude and cpi->mv_step_param if appropriate. | 2621 // Initialize cpi->max_mv_magnitude and cpi->mv_step_param if appropriate. |
2591 if (sf->auto_mv_step_size) { | 2622 if (sf->auto_mv_step_size) { |
2592 if ((cpi->common.frame_type == KEY_FRAME) || cpi->common.intra_only) { | 2623 if ((cpi->common.frame_type == KEY_FRAME) || cpi->common.intra_only) { |
2593 // initialize max_mv_magnitude for use in the first INTER frame | 2624 // initialize max_mv_magnitude for use in the first INTER frame |
2594 // after a key/intra-only frame | 2625 // after a key/intra-only frame |
2595 cpi->max_mv_magnitude = max_mv_def; | 2626 cpi->max_mv_magnitude = max_mv_def; |
2596 } else { | 2627 } else { |
2597 if (cm->show_frame) | 2628 if (cm->show_frame) |
2598 // allow mv_steps to correspond to twice the max mv magnitude found | 2629 // allow mv_steps to correspond to twice the max mv magnitude found |
2599 // in the previous frame, capped by the default max_mv_magnitude based | 2630 // in the previous frame, capped by the default max_mv_magnitude based |
2600 // on resolution | 2631 // on resolution |
2601 cpi->mv_step_param = vp9_init_search_range( | 2632 cpi->mv_step_param = vp9_init_search_range( |
2602 cpi, MIN(max_mv_def, 2 * cpi->max_mv_magnitude)); | 2633 cpi, MIN(max_mv_def, 2 * cpi->max_mv_magnitude)); |
2603 cpi->max_mv_magnitude = 0; | 2634 cpi->max_mv_magnitude = 0; |
2604 } | 2635 } |
2605 } | 2636 } |
2606 | 2637 |
2607 // Set various flags etc to special state if it is a key frame | 2638 // Set various flags etc to special state if it is a key frame |
2608 if (cm->frame_type == KEY_FRAME) { | 2639 if (cm->frame_type == KEY_FRAME) { |
2609 int i; | |
2610 | |
2611 // Reset the loop filter deltas and segmentation map | 2640 // Reset the loop filter deltas and segmentation map |
2612 setup_features(cpi); | 2641 setup_features(cm); |
2613 | 2642 |
2614 // If segmentation is enabled force a map update for key frames | 2643 // If segmentation is enabled force a map update for key frames |
2615 if (xd->seg.enabled) { | 2644 if (seg->enabled) { |
2616 xd->seg.update_map = 1; | 2645 seg->update_map = 1; |
2617 xd->seg.update_data = 1; | 2646 seg->update_data = 1; |
2618 } | 2647 } |
2619 | 2648 |
2620 // The alternate reference frame cannot be active for a key frame | 2649 // The alternate reference frame cannot be active for a key frame |
2621 cpi->source_alt_ref_active = 0; | 2650 cpi->source_alt_ref_active = 0; |
2622 | 2651 |
2623 // Reset the RD threshold multipliers to default of * 1 (128) | |
2624 for (i = 0; i < MAX_MODES; i++) | |
2625 cpi->rd_thresh_mult[i] = 128; | |
2626 | |
2627 cm->error_resilient_mode = (cpi->oxcf.error_resilient_mode != 0); | 2652 cm->error_resilient_mode = (cpi->oxcf.error_resilient_mode != 0); |
2628 cm->frame_parallel_decoding_mode = | 2653 cm->frame_parallel_decoding_mode = |
2629 (cpi->oxcf.frame_parallel_decoding_mode != 0); | 2654 (cpi->oxcf.frame_parallel_decoding_mode != 0); |
2630 if (cm->error_resilient_mode) { | 2655 if (cm->error_resilient_mode) { |
2631 cm->frame_parallel_decoding_mode = 1; | 2656 cm->frame_parallel_decoding_mode = 1; |
2632 cm->reset_frame_context = 0; | 2657 cm->reset_frame_context = 0; |
2633 cm->refresh_frame_context = 0; | 2658 cm->refresh_frame_context = 0; |
2634 } | 2659 } |
2635 } | 2660 } |
2636 | 2661 |
(...skipping 174 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2811 #endif | 2836 #endif |
2812 // Limit Q range for the adaptive loop. | 2837 // Limit Q range for the adaptive loop. |
2813 bottom_index = cpi->active_best_quality; | 2838 bottom_index = cpi->active_best_quality; |
2814 top_index = cpi->active_worst_quality; | 2839 top_index = cpi->active_worst_quality; |
2815 q_low = cpi->active_best_quality; | 2840 q_low = cpi->active_best_quality; |
2816 q_high = cpi->active_worst_quality; | 2841 q_high = cpi->active_worst_quality; |
2817 #if CONFIG_MULTIPLE_ARF | 2842 #if CONFIG_MULTIPLE_ARF |
2818 } | 2843 } |
2819 #endif | 2844 #endif |
2820 loop_count = 0; | 2845 loop_count = 0; |
2821 vpx_memset(cpi->rd_tx_select_threshes, 0, sizeof(cpi->rd_tx_select_threshes)); | 2846 vp9_zero(cpi->rd_tx_select_threshes); |
2822 | 2847 |
2823 if (cm->frame_type != KEY_FRAME) { | 2848 if (cm->frame_type != KEY_FRAME) { |
2824 /* TODO: Decide this more intelligently */ | 2849 /* TODO: Decide this more intelligently */ |
2825 if (sf->search_best_filter) { | 2850 if (sf->search_best_filter) { |
2826 cm->mcomp_filter_type = mcomp_filters_to_search[0]; | 2851 cm->mcomp_filter_type = mcomp_filters_to_search[0]; |
2827 mcomp_filter_index = 0; | 2852 mcomp_filter_index = 0; |
2828 } else { | 2853 } else { |
2829 cm->mcomp_filter_type = DEFAULT_INTERP_FILTER; | 2854 cm->mcomp_filter_type = DEFAULT_INTERP_FILTER; |
2830 } | 2855 } |
2831 /* TODO: Decide this more intelligently */ | 2856 /* TODO: Decide this more intelligently */ |
(...skipping 306 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3138 cm->current_video_frame + 2000); | 3163 cm->current_video_frame + 2000); |
3139 else | 3164 else |
3140 write_cx_frame_to_file(cm->frame_to_show, | 3165 write_cx_frame_to_file(cm->frame_to_show, |
3141 cm->current_video_frame + 3000); | 3166 cm->current_video_frame + 3000); |
3142 #endif | 3167 #endif |
3143 | 3168 |
3144 // build the bitstream | 3169 // build the bitstream |
3145 cpi->dummy_packing = 0; | 3170 cpi->dummy_packing = 0; |
3146 vp9_pack_bitstream(cpi, dest, size); | 3171 vp9_pack_bitstream(cpi, dest, size); |
3147 | 3172 |
3148 if (xd->seg.update_map) | 3173 if (cm->seg.update_map) |
3149 update_reference_segmentation_map(cpi); | 3174 update_reference_segmentation_map(cpi); |
3150 | 3175 |
3151 release_scaled_references(cpi); | 3176 release_scaled_references(cpi); |
3152 update_reference_frames(cpi); | 3177 update_reference_frames(cpi); |
3153 | 3178 |
3154 for (t = TX_4X4; t <= TX_32X32; t++) | 3179 for (t = TX_4X4; t <= TX_32X32; t++) |
3155 full_to_model_counts(cpi->common.counts.coef[t], | 3180 full_to_model_counts(cpi->common.counts.coef[t], |
3156 cpi->coef_counts[t]); | 3181 cpi->coef_counts[t]); |
3157 if (!cpi->common.error_resilient_mode && | 3182 if (!cpi->common.error_resilient_mode && |
3158 !cpi->common.frame_parallel_decoding_mode) { | 3183 !cpi->common.frame_parallel_decoding_mode) { |
3159 vp9_adapt_coef_probs(&cpi->common); | 3184 vp9_adapt_coef_probs(&cpi->common); |
3160 } | 3185 } |
3161 | 3186 |
3162 if (cpi->common.frame_type != KEY_FRAME) { | 3187 if (cpi->common.frame_type != KEY_FRAME) { |
3163 FRAME_COUNTS *counts = &cpi->common.counts; | 3188 FRAME_COUNTS *counts = &cpi->common.counts; |
3164 | 3189 |
3165 vp9_copy(counts->y_mode, cpi->y_mode_count); | 3190 vp9_copy(counts->y_mode, cpi->y_mode_count); |
3166 vp9_copy(counts->uv_mode, cpi->y_uv_mode_count); | 3191 vp9_copy(counts->uv_mode, cpi->y_uv_mode_count); |
3167 vp9_copy(counts->partition, cpi->partition_count); | 3192 vp9_copy(counts->partition, cpi->partition_count); |
3168 vp9_copy(counts->intra_inter, cpi->intra_inter_count); | 3193 vp9_copy(counts->intra_inter, cpi->intra_inter_count); |
3169 vp9_copy(counts->comp_inter, cpi->comp_inter_count); | 3194 vp9_copy(counts->comp_inter, cpi->comp_inter_count); |
3170 vp9_copy(counts->single_ref, cpi->single_ref_count); | 3195 vp9_copy(counts->single_ref, cpi->single_ref_count); |
3171 vp9_copy(counts->comp_ref, cpi->comp_ref_count); | 3196 vp9_copy(counts->comp_ref, cpi->comp_ref_count); |
3172 counts->mv = cpi->NMVcount; | 3197 counts->mv = cpi->NMVcount; |
3173 if (!cpi->common.error_resilient_mode && | 3198 if (!cpi->common.error_resilient_mode && |
3174 !cpi->common.frame_parallel_decoding_mode) { | 3199 !cpi->common.frame_parallel_decoding_mode) { |
3175 vp9_adapt_mode_probs(&cpi->common); | 3200 vp9_adapt_mode_probs(&cpi->common); |
3176 vp9_adapt_mode_context(&cpi->common); | |
3177 vp9_adapt_mv_probs(&cpi->common, cpi->mb.e_mbd.allow_high_precision_mv); | 3201 vp9_adapt_mv_probs(&cpi->common, cpi->mb.e_mbd.allow_high_precision_mv); |
3178 } | 3202 } |
3179 } | 3203 } |
3180 | 3204 |
3181 #ifdef ENTROPY_STATS | 3205 #ifdef ENTROPY_STATS |
3182 vp9_update_mode_context_stats(cpi); | 3206 vp9_update_mode_context_stats(cpi); |
3183 #endif | 3207 #endif |
3184 | 3208 |
3185 /* Move storing frame_type out of the above loop since it is also | 3209 /* Move storing frame_type out of the above loop since it is also |
3186 * needed in motion search besides loopfilter */ | 3210 * needed in motion search besides loopfilter */ |
(...skipping 260 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3447 cpi->frame_coding_order_period = cpi->new_frame_coding_order_period; | 3471 cpi->frame_coding_order_period = cpi->new_frame_coding_order_period; |
3448 cpi->new_frame_coding_order_period = -1; | 3472 cpi->new_frame_coding_order_period = -1; |
3449 } | 3473 } |
3450 cpi->this_frame_weight = cpi->arf_weight[cpi->sequence_number]; | 3474 cpi->this_frame_weight = cpi->arf_weight[cpi->sequence_number]; |
3451 assert(cpi->this_frame_weight >= 0); | 3475 assert(cpi->this_frame_weight >= 0); |
3452 } | 3476 } |
3453 #endif | 3477 #endif |
3454 } | 3478 } |
3455 | 3479 |
3456 // Clear the one shot update flags for segmentation map and mode/ref loop filt
er deltas. | 3480 // Clear the one shot update flags for segmentation map and mode/ref loop filt
er deltas. |
3457 xd->seg.update_map = 0; | 3481 cm->seg.update_map = 0; |
3458 xd->seg.update_data = 0; | 3482 cm->seg.update_data = 0; |
3459 xd->lf.mode_ref_delta_update = 0; | 3483 cm->lf.mode_ref_delta_update = 0; |
3460 | 3484 |
3461 // keep track of the last coded dimensions | 3485 // keep track of the last coded dimensions |
3462 cm->last_width = cm->width; | 3486 cm->last_width = cm->width; |
3463 cm->last_height = cm->height; | 3487 cm->last_height = cm->height; |
3464 | 3488 |
3465 // reset to normal state now that we are done. | 3489 // reset to normal state now that we are done. |
3466 cm->last_show_frame = cm->show_frame; | 3490 cm->last_show_frame = cm->show_frame; |
3467 if (cm->show_frame) { | 3491 if (cm->show_frame) { |
3468 // current mip will be the prev_mip for the next frame | 3492 // current mip will be the prev_mip for the next frame |
3469 MODE_INFO *temp = cm->prev_mip; | 3493 MODE_INFO *temp = cm->prev_mip; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3549 res = -1; | 3573 res = -1; |
3550 vpx_usec_timer_mark(&timer); | 3574 vpx_usec_timer_mark(&timer); |
3551 cpi->time_receive_data += vpx_usec_timer_elapsed(&timer); | 3575 cpi->time_receive_data += vpx_usec_timer_elapsed(&timer); |
3552 | 3576 |
3553 return res; | 3577 return res; |
3554 } | 3578 } |
3555 | 3579 |
3556 | 3580 |
3557 static int frame_is_reference(const VP9_COMP *cpi) { | 3581 static int frame_is_reference(const VP9_COMP *cpi) { |
3558 const VP9_COMMON *cm = &cpi->common; | 3582 const VP9_COMMON *cm = &cpi->common; |
3559 const MACROBLOCKD *mb = &cpi->mb.e_mbd; | |
3560 | 3583 |
3561 return cm->frame_type == KEY_FRAME || | 3584 return cm->frame_type == KEY_FRAME || |
3562 cpi->refresh_last_frame || | 3585 cpi->refresh_last_frame || |
3563 cpi->refresh_golden_frame || | 3586 cpi->refresh_golden_frame || |
3564 cpi->refresh_alt_ref_frame || | 3587 cpi->refresh_alt_ref_frame || |
3565 cm->refresh_frame_context || | 3588 cm->refresh_frame_context || |
3566 mb->lf.mode_ref_delta_update || | 3589 cm->lf.mode_ref_delta_update || |
3567 mb->seg.update_map || | 3590 cm->seg.update_map || |
3568 mb->seg.update_data; | 3591 cm->seg.update_data; |
3569 } | 3592 } |
3570 | 3593 |
3571 #if CONFIG_MULTIPLE_ARF | 3594 #if CONFIG_MULTIPLE_ARF |
3572 int is_next_frame_arf(VP9_COMP *cpi) { | 3595 int is_next_frame_arf(VP9_COMP *cpi) { |
3573 // Negative entry in frame_coding_order indicates an ARF at this position. | 3596 // Negative entry in frame_coding_order indicates an ARF at this position. |
3574 return cpi->frame_coding_order[cpi->sequence_number + 1] < 0 ? 1 : 0; | 3597 return cpi->frame_coding_order[cpi->sequence_number + 1] < 0 ? 1 : 0; |
3575 } | 3598 } |
3576 #endif | 3599 #endif |
3577 | 3600 |
3578 int vp9_get_compressed_data(VP9_PTR ptr, unsigned int *frame_flags, | 3601 int vp9_get_compressed_data(VP9_PTR ptr, unsigned int *frame_flags, |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3618 #else | 3641 #else |
3619 cpi->alt_ref_source = cpi->source; | 3642 cpi->alt_ref_source = cpi->source; |
3620 #endif | 3643 #endif |
3621 | 3644 |
3622 if (cpi->oxcf.arnr_max_frames > 0) { | 3645 if (cpi->oxcf.arnr_max_frames > 0) { |
3623 // Produce the filtered ARF frame. | 3646 // Produce the filtered ARF frame. |
3624 // TODO(agrange) merge these two functions. | 3647 // TODO(agrange) merge these two functions. |
3625 configure_arnr_filter(cpi, cm->current_video_frame + frames_to_arf, | 3648 configure_arnr_filter(cpi, cm->current_video_frame + frames_to_arf, |
3626 cpi->gfu_boost); | 3649 cpi->gfu_boost); |
3627 vp9_temporal_filter_prepare(cpi, frames_to_arf); | 3650 vp9_temporal_filter_prepare(cpi, frames_to_arf); |
| 3651 vp9_extend_frame_borders(&cpi->alt_ref_buffer, |
| 3652 cm->subsampling_x, cm->subsampling_y); |
3628 force_src_buffer = &cpi->alt_ref_buffer; | 3653 force_src_buffer = &cpi->alt_ref_buffer; |
3629 } | 3654 } |
3630 | 3655 |
3631 cm->show_frame = 0; | 3656 cm->show_frame = 0; |
3632 cm->intra_only = 0; | 3657 cm->intra_only = 0; |
3633 cpi->refresh_alt_ref_frame = 1; | 3658 cpi->refresh_alt_ref_frame = 1; |
3634 cpi->refresh_golden_frame = 0; | 3659 cpi->refresh_golden_frame = 0; |
3635 cpi->refresh_last_frame = 0; | 3660 cpi->refresh_last_frame = 0; |
3636 cpi->is_src_frame_alt_ref = 0; | 3661 cpi->is_src_frame_alt_ref = 0; |
3637 | 3662 |
(...skipping 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3887 cpi->total_y += vp9_mse2psnr(y_samples, 255.0, ye); | 3912 cpi->total_y += vp9_mse2psnr(y_samples, 255.0, ye); |
3888 cpi->total_u += vp9_mse2psnr(uv_samples, 255.0, ue); | 3913 cpi->total_u += vp9_mse2psnr(uv_samples, 255.0, ue); |
3889 cpi->total_v += vp9_mse2psnr(uv_samples, 255.0, ve); | 3914 cpi->total_v += vp9_mse2psnr(uv_samples, 255.0, ve); |
3890 cpi->total_sq_error += sq_error; | 3915 cpi->total_sq_error += sq_error; |
3891 cpi->total += frame_psnr; | 3916 cpi->total += frame_psnr; |
3892 { | 3917 { |
3893 double frame_psnr2, frame_ssim2 = 0; | 3918 double frame_psnr2, frame_ssim2 = 0; |
3894 double weight = 0; | 3919 double weight = 0; |
3895 #if CONFIG_POSTPROC | 3920 #if CONFIG_POSTPROC |
3896 vp9_deblock(cm->frame_to_show, &cm->post_proc_buffer, | 3921 vp9_deblock(cm->frame_to_show, &cm->post_proc_buffer, |
3897 cpi->mb.e_mbd.lf.filter_level * 10 / 6); | 3922 cm->lf.filter_level * 10 / 6); |
3898 #endif | 3923 #endif |
3899 vp9_clear_system_state(); | 3924 vp9_clear_system_state(); |
3900 | 3925 |
3901 ye = (double)calc_plane_error(orig->y_buffer, orig->y_stride, | 3926 ye = (double)calc_plane_error(orig->y_buffer, orig->y_stride, |
3902 pp->y_buffer, pp->y_stride, | 3927 pp->y_buffer, pp->y_stride, |
3903 orig->y_crop_width, orig->y_crop_height); | 3928 orig->y_crop_width, orig->y_crop_height); |
3904 | 3929 |
3905 ue = (double)calc_plane_error(orig->u_buffer, orig->uv_stride, | 3930 ue = (double)calc_plane_error(orig->u_buffer, orig->uv_stride, |
3906 pp->u_buffer, pp->uv_stride, | 3931 pp->u_buffer, pp->uv_stride, |
3907 orig->uv_crop_width, orig->uv_crop_height); | 3932 orig->uv_crop_width, orig->uv_crop_height); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3962 | 3987 |
3963 int vp9_get_preview_raw_frame(VP9_PTR comp, YV12_BUFFER_CONFIG *dest, | 3988 int vp9_get_preview_raw_frame(VP9_PTR comp, YV12_BUFFER_CONFIG *dest, |
3964 vp9_ppflags_t *flags) { | 3989 vp9_ppflags_t *flags) { |
3965 VP9_COMP *cpi = (VP9_COMP *) comp; | 3990 VP9_COMP *cpi = (VP9_COMP *) comp; |
3966 | 3991 |
3967 if (!cpi->common.show_frame) | 3992 if (!cpi->common.show_frame) |
3968 return -1; | 3993 return -1; |
3969 else { | 3994 else { |
3970 int ret; | 3995 int ret; |
3971 #if CONFIG_POSTPROC | 3996 #if CONFIG_POSTPROC |
3972 ret = vp9_post_proc_frame(&cpi->common, &cpi->mb.e_mbd.lf, dest, flags); | 3997 ret = vp9_post_proc_frame(&cpi->common, dest, flags); |
3973 #else | 3998 #else |
3974 | 3999 |
3975 if (cpi->common.frame_to_show) { | 4000 if (cpi->common.frame_to_show) { |
3976 *dest = *cpi->common.frame_to_show; | 4001 *dest = *cpi->common.frame_to_show; |
3977 dest->y_width = cpi->common.width; | 4002 dest->y_width = cpi->common.width; |
3978 dest->y_height = cpi->common.height; | 4003 dest->y_height = cpi->common.height; |
3979 dest->uv_height = cpi->common.height / 2; | 4004 dest->uv_height = cpi->common.height / 2; |
3980 ret = 0; | 4005 ret = 0; |
3981 } else { | 4006 } else { |
3982 ret = -1; | 4007 ret = -1; |
3983 } | 4008 } |
3984 | 4009 |
3985 #endif // !CONFIG_POSTPROC | 4010 #endif // !CONFIG_POSTPROC |
3986 vp9_clear_system_state(); | 4011 vp9_clear_system_state(); |
3987 return ret; | 4012 return ret; |
3988 } | 4013 } |
3989 } | 4014 } |
3990 | 4015 |
3991 int vp9_set_roimap(VP9_PTR comp, unsigned char *map, unsigned int rows, | 4016 int vp9_set_roimap(VP9_PTR comp, unsigned char *map, unsigned int rows, |
3992 unsigned int cols, int delta_q[MAX_SEGMENTS], | 4017 unsigned int cols, int delta_q[MAX_SEGMENTS], |
3993 int delta_lf[MAX_SEGMENTS], | 4018 int delta_lf[MAX_SEGMENTS], |
3994 unsigned int threshold[MAX_SEGMENTS]) { | 4019 unsigned int threshold[MAX_SEGMENTS]) { |
3995 VP9_COMP *cpi = (VP9_COMP *) comp; | 4020 VP9_COMP *cpi = (VP9_COMP *) comp; |
3996 signed char feature_data[SEG_LVL_MAX][MAX_SEGMENTS]; | 4021 signed char feature_data[SEG_LVL_MAX][MAX_SEGMENTS]; |
3997 MACROBLOCKD *xd = &cpi->mb.e_mbd; | 4022 struct segmentation *seg = &cpi->common.seg; |
3998 int i; | 4023 int i; |
3999 | 4024 |
4000 if (cpi->common.mb_rows != rows || cpi->common.mb_cols != cols) | 4025 if (cpi->common.mb_rows != rows || cpi->common.mb_cols != cols) |
4001 return -1; | 4026 return -1; |
4002 | 4027 |
4003 if (!map) { | 4028 if (!map) { |
4004 vp9_disable_segmentation((VP9_PTR)cpi); | 4029 vp9_disable_segmentation((VP9_PTR)cpi); |
4005 return 0; | 4030 return 0; |
4006 } | 4031 } |
4007 | 4032 |
4008 // Set the segmentation Map | 4033 // Set the segmentation Map |
4009 vp9_set_segmentation_map((VP9_PTR)cpi, map); | 4034 vp9_set_segmentation_map((VP9_PTR)cpi, map); |
4010 | 4035 |
4011 // Activate segmentation. | 4036 // Activate segmentation. |
4012 vp9_enable_segmentation((VP9_PTR)cpi); | 4037 vp9_enable_segmentation((VP9_PTR)cpi); |
4013 | 4038 |
4014 // Set up the quan, LF and breakout threshold segment data | 4039 // Set up the quant, LF and breakout threshold segment data |
4015 for (i = 0; i < MAX_SEGMENTS; i++) { | 4040 for (i = 0; i < MAX_SEGMENTS; i++) { |
4016 feature_data[SEG_LVL_ALT_Q][i] = delta_q[i]; | 4041 feature_data[SEG_LVL_ALT_Q][i] = delta_q[i]; |
4017 feature_data[SEG_LVL_ALT_LF][i] = delta_lf[i]; | 4042 feature_data[SEG_LVL_ALT_LF][i] = delta_lf[i]; |
4018 cpi->segment_encode_breakout[i] = threshold[i]; | 4043 cpi->segment_encode_breakout[i] = threshold[i]; |
4019 } | 4044 } |
4020 | 4045 |
4021 // Enable the loop and quant changes in the feature mask | 4046 // Enable the loop and quant changes in the feature mask |
4022 for (i = 0; i < MAX_SEGMENTS; i++) { | 4047 for (i = 0; i < MAX_SEGMENTS; i++) { |
4023 if (delta_q[i]) | 4048 if (delta_q[i]) |
4024 vp9_enable_segfeature(&xd->seg, i, SEG_LVL_ALT_Q); | 4049 vp9_enable_segfeature(seg, i, SEG_LVL_ALT_Q); |
4025 else | 4050 else |
4026 vp9_disable_segfeature(&xd->seg, i, SEG_LVL_ALT_Q); | 4051 vp9_disable_segfeature(seg, i, SEG_LVL_ALT_Q); |
4027 | 4052 |
4028 if (delta_lf[i]) | 4053 if (delta_lf[i]) |
4029 vp9_enable_segfeature(&xd->seg, i, SEG_LVL_ALT_LF); | 4054 vp9_enable_segfeature(seg, i, SEG_LVL_ALT_LF); |
4030 else | 4055 else |
4031 vp9_disable_segfeature(&xd->seg, i, SEG_LVL_ALT_LF); | 4056 vp9_disable_segfeature(seg, i, SEG_LVL_ALT_LF); |
4032 } | 4057 } |
4033 | 4058 |
4034 // Initialise the feature data structure | 4059 // Initialize the feature data structure |
4035 // SEGMENT_DELTADATA 0, SEGMENT_ABSDATA 1 | 4060 // SEGMENT_DELTADATA 0, SEGMENT_ABSDATA 1 |
4036 vp9_set_segment_data((VP9_PTR)cpi, &feature_data[0][0], SEGMENT_DELTADATA); | 4061 vp9_set_segment_data((VP9_PTR)cpi, &feature_data[0][0], SEGMENT_DELTADATA); |
4037 | 4062 |
4038 return 0; | 4063 return 0; |
4039 } | 4064 } |
4040 | 4065 |
4041 int vp9_set_active_map(VP9_PTR comp, unsigned char *map, | 4066 int vp9_set_active_map(VP9_PTR comp, unsigned char *map, |
4042 unsigned int rows, unsigned int cols) { | 4067 unsigned int rows, unsigned int cols) { |
4043 VP9_COMP *cpi = (VP9_COMP *) comp; | 4068 VP9_COMP *cpi = (VP9_COMP *) comp; |
4044 | 4069 |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4101 dst += 16 * dest->y_stride; | 4126 dst += 16 * dest->y_stride; |
4102 } | 4127 } |
4103 | 4128 |
4104 return total; | 4129 return total; |
4105 } | 4130 } |
4106 | 4131 |
4107 | 4132 |
4108 int vp9_get_quantizer(VP9_PTR c) { | 4133 int vp9_get_quantizer(VP9_PTR c) { |
4109 return ((VP9_COMP *)c)->common.base_qindex; | 4134 return ((VP9_COMP *)c)->common.base_qindex; |
4110 } | 4135 } |
OLD | NEW |