| 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" |
| 13 #include "vp9/common/vp9_onyxc_int.h" | 13 #include "vp9/common/vp9_onyxc_int.h" |
| 14 #include "vp9/encoder/vp9_onyx_int.h" | 14 #include "vp9/encoder/vp9_onyx_int.h" |
| 15 #include "vp9/common/vp9_systemdependent.h" | 15 #include "vp9/common/vp9_systemdependent.h" |
| 16 #include "vp9/encoder/vp9_quantize.h" | 16 #include "vp9/encoder/vp9_quantize.h" |
| 17 #include "vp9/common/vp9_alloccommon.h" | 17 #include "vp9/common/vp9_alloccommon.h" |
| 18 #include "vp9/encoder/vp9_mcomp.h" | 18 #include "vp9/encoder/vp9_mcomp.h" |
| 19 #include "vp9/encoder/vp9_firstpass.h" | 19 #include "vp9/encoder/vp9_firstpass.h" |
| 20 #include "vp9/encoder/vp9_psnr.h" | 20 #include "vp9/encoder/vp9_psnr.h" |
| 21 #include "vpx_scale/vpxscale.h" | 21 #include "vpx_scale/vpx_scale.h" |
| 22 #include "vp9/common/vp9_extend.h" | 22 #include "vp9/common/vp9_extend.h" |
| 23 #include "vp9/encoder/vp9_ratectrl.h" | 23 #include "vp9/encoder/vp9_ratectrl.h" |
| 24 #include "vp9/common/vp9_quant_common.h" | 24 #include "vp9/common/vp9_quant_common.h" |
| 25 #include "vp9/encoder/vp9_segmentation.h" | 25 #include "vp9/encoder/vp9_segmentation.h" |
| 26 #include "./vp9_rtcd.h" | 26 #include "./vp9_rtcd.h" |
| 27 #include "./vpx_scale_rtcd.h" | 27 #include "./vpx_scale_rtcd.h" |
| 28 #if CONFIG_POSTPROC | 28 #if CONFIG_POSTPROC |
| 29 #include "vp9/common/vp9_postproc.h" | 29 #include "vp9/common/vp9_postproc.h" |
| 30 #endif | 30 #endif |
| 31 #include "vpx_mem/vpx_mem.h" | 31 #include "vpx_mem/vpx_mem.h" |
| (...skipping 10 matching lines...) Expand all Loading... |
| 42 #include "vp9/encoder/vp9_temporal_filter.h" | 42 #include "vp9/encoder/vp9_temporal_filter.h" |
| 43 | 43 |
| 44 #include <math.h> | 44 #include <math.h> |
| 45 #include <stdio.h> | 45 #include <stdio.h> |
| 46 #include <limits.h> | 46 #include <limits.h> |
| 47 | 47 |
| 48 extern void print_tree_update_probs(); | 48 extern void print_tree_update_probs(); |
| 49 | 49 |
| 50 static void set_default_lf_deltas(VP9_COMP *cpi); | 50 static void set_default_lf_deltas(VP9_COMP *cpi); |
| 51 | 51 |
| 52 #define DEFAULT_INTERP_FILTER EIGHTTAP /* SWITCHABLE for better performance */ | 52 #define DEFAULT_INTERP_FILTER SWITCHABLE |
| 53 |
| 53 #define SEARCH_BEST_FILTER 0 /* to search exhaustively for | 54 #define SEARCH_BEST_FILTER 0 /* to search exhaustively for |
| 54 best filter */ | 55 best filter */ |
| 55 #define RESET_FOREACH_FILTER 0 /* whether to reset the encoder state | 56 #define RESET_FOREACH_FILTER 0 /* whether to reset the encoder state |
| 56 before trying each new filter */ | 57 before trying each new filter */ |
| 57 #define SHARP_FILTER_QTHRESH 0 /* Q threshold for 8-tap sharp filter */ | 58 #define SHARP_FILTER_QTHRESH 0 /* Q threshold for 8-tap sharp filter */ |
| 58 | 59 |
| 59 #define ALTREF_HIGH_PRECISION_MV 1 /* whether to use high precision mv | 60 #define ALTREF_HIGH_PRECISION_MV 1 /* whether to use high precision mv |
| 60 for altref computation */ | 61 for altref computation */ |
| 61 #define HIGH_PRECISION_MV_QTHRESH 200 /* Q threshold for use of high precision | 62 #define HIGH_PRECISION_MV_QTHRESH 200 /* Q threshold for use of high precision |
| 62 mv. Choose a very high value for | 63 mv. Choose a very high value for |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 111 #endif | 112 #endif |
| 112 | 113 |
| 113 #ifdef SPEEDSTATS | 114 #ifdef SPEEDSTATS |
| 114 unsigned int frames_at_speed[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0}; | 115 unsigned int frames_at_speed[16] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0}; |
| 115 #endif | 116 #endif |
| 116 | 117 |
| 117 #if defined(SECTIONBITS_OUTPUT) | 118 #if defined(SECTIONBITS_OUTPUT) |
| 118 extern unsigned __int64 Sectionbits[500]; | 119 extern unsigned __int64 Sectionbits[500]; |
| 119 #endif | 120 #endif |
| 120 #ifdef MODE_STATS | 121 #ifdef MODE_STATS |
| 121 extern INT64 Sectionbits[500]; | 122 extern int64_t Sectionbits[500]; |
| 122 extern unsigned int y_modes[VP9_YMODES]; | 123 extern unsigned int y_modes[VP9_YMODES]; |
| 123 extern unsigned int i8x8_modes[VP9_I8X8_MODES]; | 124 extern unsigned int i8x8_modes[VP9_I8X8_MODES]; |
| 124 extern unsigned int uv_modes[VP9_UV_MODES]; | 125 extern unsigned int uv_modes[VP9_UV_MODES]; |
| 125 extern unsigned int uv_modes_y[VP9_YMODES][VP9_UV_MODES]; | 126 extern unsigned int uv_modes_y[VP9_YMODES][VP9_UV_MODES]; |
| 126 extern unsigned int b_modes[B_MODE_COUNT]; | 127 extern unsigned int b_modes[B_MODE_COUNT]; |
| 127 extern unsigned int inter_y_modes[MB_MODE_COUNT]; | 128 extern unsigned int inter_y_modes[MB_MODE_COUNT]; |
| 128 extern unsigned int inter_uv_modes[VP9_UV_MODES]; | 129 extern unsigned int inter_uv_modes[VP9_UV_MODES]; |
| 129 extern unsigned int inter_b_modes[B_MODE_COUNT]; | 130 extern unsigned int inter_b_modes[B_MODE_COUNT]; |
| 130 #endif | 131 #endif |
| 131 | 132 |
| 132 extern void vp9_init_quantizer(VP9_COMP *cpi); | 133 extern void vp9_init_quantizer(VP9_COMP *cpi); |
| 133 | 134 |
| 134 static int base_skip_false_prob[QINDEX_RANGE][3]; | 135 static int base_skip_false_prob[QINDEX_RANGE][3]; |
| 135 | 136 |
| 136 // Tables relating active max Q to active min Q | 137 // Tables relating active max Q to active min Q |
| 137 static int kf_low_motion_minq[QINDEX_RANGE]; | 138 static int kf_low_motion_minq[QINDEX_RANGE]; |
| 138 static int kf_high_motion_minq[QINDEX_RANGE]; | 139 static int kf_high_motion_minq[QINDEX_RANGE]; |
| 139 static int gf_low_motion_minq[QINDEX_RANGE]; | 140 static int gf_low_motion_minq[QINDEX_RANGE]; |
| 140 static int gf_high_motion_minq[QINDEX_RANGE]; | 141 static int gf_high_motion_minq[QINDEX_RANGE]; |
| 141 static int inter_minq[QINDEX_RANGE]; | 142 static int inter_minq[QINDEX_RANGE]; |
| 142 | 143 |
| 143 // Functions to compute the active minq lookup table entries based on a | 144 // Functions to compute the active minq lookup table entries based on a |
| 144 // formulaic approach to facilitate easier adjustment of the Q tables. | 145 // formulaic approach to facilitate easier adjustment of the Q tables. |
| 145 // The formulae were derived from computing a 3rd order polynomial best | 146 // The formulae were derived from computing a 3rd order polynomial best |
| 146 // fit to the original data (after plotting real maxq vs minq (not q index)) | 147 // fit to the original data (after plotting real maxq vs minq (not q index)) |
| 147 static int calculate_minq_index(double maxq, | 148 static int calculate_minq_index(double maxq, |
| 148 double x3, double x2, double x, double c) { | 149 double x3, double x2, double x, double c) { |
| 149 int i; | 150 int i; |
| 150 double minqtarget; | 151 double minqtarget; |
| 151 double thisq; | |
| 152 | 152 |
| 153 minqtarget = ((x3 * maxq * maxq * maxq) + | 153 minqtarget = ((x3 * maxq * maxq * maxq) + |
| 154 (x2 * maxq * maxq) + | 154 (x2 * maxq * maxq) + |
| 155 (x * maxq) + | 155 (x * maxq) + |
| 156 c); | 156 c); |
| 157 | 157 |
| 158 if (minqtarget > maxq) | 158 if (minqtarget > maxq) |
| 159 minqtarget = maxq; | 159 minqtarget = maxq; |
| 160 | 160 |
| 161 for (i = 0; i < QINDEX_RANGE; i++) { | 161 for (i = 0; i < QINDEX_RANGE; i++) { |
| 162 thisq = vp9_convert_qindex_to_q(i); | |
| 163 if (minqtarget <= vp9_convert_qindex_to_q(i)) | 162 if (minqtarget <= vp9_convert_qindex_to_q(i)) |
| 164 return i; | 163 return i; |
| 165 } | 164 } |
| 166 return QINDEX_RANGE - 1; | 165 return QINDEX_RANGE - 1; |
| 167 } | 166 } |
| 168 | 167 |
| 169 static void init_minq_luts(void) { | 168 static void init_minq_luts(void) { |
| 170 int i; | 169 int i; |
| 171 double maxq; | 170 double maxq; |
| 172 | 171 |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 209 mb->mvsadcost = mb->nmvsadcost_hp; | 208 mb->mvsadcost = mb->nmvsadcost_hp; |
| 210 | 209 |
| 211 } else { | 210 } else { |
| 212 mb->mvcost = mb->nmvcost; | 211 mb->mvcost = mb->nmvcost; |
| 213 mb->mvsadcost = mb->nmvsadcost; | 212 mb->mvsadcost = mb->nmvsadcost; |
| 214 } | 213 } |
| 215 } | 214 } |
| 216 static void init_base_skip_probs(void) { | 215 static void init_base_skip_probs(void) { |
| 217 int i; | 216 int i; |
| 218 double q; | 217 double q; |
| 219 int skip_prob, t; | 218 int t; |
| 220 | 219 |
| 221 for (i = 0; i < QINDEX_RANGE; i++) { | 220 for (i = 0; i < QINDEX_RANGE; i++) { |
| 222 q = vp9_convert_qindex_to_q(i); | 221 q = vp9_convert_qindex_to_q(i); |
| 223 | 222 |
| 224 // Exponential decay caluclation of baseline skip prob with clamping | 223 // Exponential decay caluclation of baseline skip prob with clamping |
| 225 // Based on crude best fit of old table. | 224 // Based on crude best fit of old table. |
| 226 t = (int)(564.25 * pow(2.71828, (-0.012 * q))); | 225 t = (int)(564.25 * pow(2.71828, (-0.012 * q))); |
| 227 | 226 |
| 228 skip_prob = t; | 227 base_skip_false_prob[i][1] = clip_prob(t); |
| 229 if (skip_prob < 1) | 228 base_skip_false_prob[i][2] = clip_prob(t * 3 / 4); |
| 230 skip_prob = 1; | 229 base_skip_false_prob[i][0] = clip_prob(t * 5 / 4); |
| 231 else if (skip_prob > 255) | |
| 232 skip_prob = 255; | |
| 233 base_skip_false_prob[i][1] = skip_prob; | |
| 234 | |
| 235 skip_prob = t * 3 / 4; | |
| 236 if (skip_prob < 1) | |
| 237 skip_prob = 1; | |
| 238 else if (skip_prob > 255) | |
| 239 skip_prob = 255; | |
| 240 base_skip_false_prob[i][2] = skip_prob; | |
| 241 | |
| 242 skip_prob = t * 5 / 4; | |
| 243 if (skip_prob < 1) | |
| 244 skip_prob = 1; | |
| 245 else if (skip_prob > 255) | |
| 246 skip_prob = 255; | |
| 247 base_skip_false_prob[i][0] = skip_prob; | |
| 248 } | 230 } |
| 249 } | 231 } |
| 250 | 232 |
| 251 static void update_base_skip_probs(VP9_COMP *cpi) { | 233 static void update_base_skip_probs(VP9_COMP *cpi) { |
| 252 VP9_COMMON *cm = &cpi->common; | 234 VP9_COMMON *cm = &cpi->common; |
| 253 | 235 |
| 254 if (cm->frame_type != KEY_FRAME) { | 236 if (cm->frame_type != KEY_FRAME) { |
| 255 vp9_update_skip_probs(cpi); | 237 vp9_update_skip_probs(cpi); |
| 256 | 238 |
| 257 if (cm->refresh_alt_ref_frame) { | 239 if (cm->refresh_alt_ref_frame) { |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 566 map_index++; | 548 map_index++; |
| 567 } | 549 } |
| 568 fprintf(statsfile, "\n"); | 550 fprintf(statsfile, "\n"); |
| 569 } | 551 } |
| 570 fprintf(statsfile, "\n"); | 552 fprintf(statsfile, "\n"); |
| 571 | 553 |
| 572 fclose(statsfile); | 554 fclose(statsfile); |
| 573 } | 555 } |
| 574 | 556 |
| 575 static void update_reference_segmentation_map(VP9_COMP *cpi) { | 557 static void update_reference_segmentation_map(VP9_COMP *cpi) { |
| 576 VP9_COMMON *cm = &cpi->common; | 558 VP9_COMMON *const cm = &cpi->common; |
| 577 int row, col, sb_rows = (cm->mb_rows + 1) >> 1, sb_cols = (cm->mb_cols + 1) >>
1; | 559 int row, col; |
| 578 MODE_INFO *mi = cm->mi; | 560 MODE_INFO *mi, *mi_ptr = cm->mi; |
| 579 uint8_t *segmap = cpi->segmentation_map; | 561 uint8_t *cache_ptr = cm->last_frame_seg_map, *cache; |
| 580 uint8_t *segcache = cm->last_frame_seg_map; | |
| 581 | 562 |
| 582 for (row = 0; row < sb_rows; row++) { | 563 for (row = 0; row < cm->mb_rows; row++) { |
| 583 for (col = 0; col < sb_cols; col++) { | 564 mi = mi_ptr; |
| 584 MODE_INFO *miptr = mi + col * 2; | 565 cache = cache_ptr; |
| 585 uint8_t *cache = segcache + col * 2; | 566 for (col = 0; col < cm->mb_cols; col++, mi++, cache++) { |
| 586 #if CONFIG_SUPERBLOCKS | 567 cache[0] = mi->mbmi.segment_id; |
| 587 if (miptr->mbmi.encoded_as_sb) { | |
| 588 cache[0] = miptr->mbmi.segment_id; | |
| 589 if (!(cm->mb_cols & 1) || col < sb_cols - 1) | |
| 590 cache[1] = miptr->mbmi.segment_id; | |
| 591 if (!(cm->mb_rows & 1) || row < sb_rows - 1) { | |
| 592 cache[cm->mb_cols] = miptr->mbmi.segment_id; | |
| 593 if (!(cm->mb_cols & 1) || col < sb_cols - 1) | |
| 594 cache[cm->mb_cols + 1] = miptr->mbmi.segment_id; | |
| 595 } | |
| 596 } else | |
| 597 #endif | |
| 598 { | |
| 599 cache[0] = miptr[0].mbmi.segment_id; | |
| 600 if (!(cm->mb_cols & 1) || col < sb_cols - 1) | |
| 601 cache[1] = miptr[1].mbmi.segment_id; | |
| 602 if (!(cm->mb_rows & 1) || row < sb_rows - 1) { | |
| 603 cache[cm->mb_cols] = miptr[cm->mode_info_stride].mbmi.segment_id; | |
| 604 if (!(cm->mb_cols & 1) || col < sb_cols - 1) | |
| 605 cache[1] = miptr[1].mbmi.segment_id; | |
| 606 cache[cm->mb_cols + 1] = miptr[cm->mode_info_stride + 1].mbmi.segment_
id; | |
| 607 } | |
| 608 } | |
| 609 } | 568 } |
| 610 segmap += 2 * cm->mb_cols; | 569 mi_ptr += cm->mode_info_stride; |
| 611 segcache += 2 * cm->mb_cols; | 570 cache_ptr += cm->mb_cols; |
| 612 mi += 2 * cm->mode_info_stride; | |
| 613 } | 571 } |
| 614 } | 572 } |
| 615 | 573 |
| 616 static void set_default_lf_deltas(VP9_COMP *cpi) { | 574 static void set_default_lf_deltas(VP9_COMP *cpi) { |
| 617 cpi->mb.e_mbd.mode_ref_lf_delta_enabled = 1; | 575 cpi->mb.e_mbd.mode_ref_lf_delta_enabled = 1; |
| 618 cpi->mb.e_mbd.mode_ref_lf_delta_update = 1; | 576 cpi->mb.e_mbd.mode_ref_lf_delta_update = 1; |
| 619 | 577 |
| 620 vpx_memset(cpi->mb.e_mbd.ref_lf_deltas, 0, sizeof(cpi->mb.e_mbd.ref_lf_deltas)
); | 578 vpx_memset(cpi->mb.e_mbd.ref_lf_deltas, 0, sizeof(cpi->mb.e_mbd.ref_lf_deltas)
); |
| 621 vpx_memset(cpi->mb.e_mbd.mode_lf_deltas, 0, sizeof(cpi->mb.e_mbd.mode_lf_delta
s)); | 579 vpx_memset(cpi->mb.e_mbd.mode_lf_deltas, 0, sizeof(cpi->mb.e_mbd.mode_lf_delta
s)); |
| 622 | 580 |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 661 sf->iterative_sub_pixel = 1; | 619 sf->iterative_sub_pixel = 1; |
| 662 #if CONFIG_LOSSLESS | 620 #if CONFIG_LOSSLESS |
| 663 sf->optimize_coefficients = 0; | 621 sf->optimize_coefficients = 0; |
| 664 #else | 622 #else |
| 665 sf->optimize_coefficients = 1; | 623 sf->optimize_coefficients = 1; |
| 666 #endif | 624 #endif |
| 667 sf->no_skip_block4x4_search = 1; | 625 sf->no_skip_block4x4_search = 1; |
| 668 | 626 |
| 669 sf->first_step = 0; | 627 sf->first_step = 0; |
| 670 sf->max_step_search_steps = MAX_MVSEARCH_STEPS; | 628 sf->max_step_search_steps = MAX_MVSEARCH_STEPS; |
| 671 sf->improved_mv_pred = 1; | |
| 672 | 629 |
| 673 // default thresholds to 0 | 630 // default thresholds to 0 |
| 674 for (i = 0; i < MAX_MODES; i++) | 631 for (i = 0; i < MAX_MODES; i++) |
| 675 sf->thresh_mult[i] = 0; | 632 sf->thresh_mult[i] = 0; |
| 676 | 633 |
| 677 switch (Mode) { | 634 switch (Mode) { |
| 678 case 0: // best quality mode | 635 case 0: // best quality mode |
| 679 #if CONFIG_PRED_FILTER | |
| 680 sf->thresh_mult[THR_ZEROMV ] = 0; | |
| 681 sf->thresh_mult[THR_ZEROMV_FILT ] = 0; | |
| 682 sf->thresh_mult[THR_ZEROG ] = 0; | |
| 683 sf->thresh_mult[THR_ZEROG_FILT ] = 0; | |
| 684 sf->thresh_mult[THR_ZEROA ] = 0; | |
| 685 sf->thresh_mult[THR_ZEROA_FILT ] = 0; | |
| 686 sf->thresh_mult[THR_NEARESTMV ] = 0; | |
| 687 sf->thresh_mult[THR_NEARESTMV_FILT] = 0; | |
| 688 sf->thresh_mult[THR_NEARESTG ] = 0; | |
| 689 sf->thresh_mult[THR_NEARESTG_FILT ] = 0; | |
| 690 sf->thresh_mult[THR_NEARESTA ] = 0; | |
| 691 sf->thresh_mult[THR_NEARESTA_FILT ] = 0; | |
| 692 sf->thresh_mult[THR_NEARMV ] = 0; | |
| 693 sf->thresh_mult[THR_NEARMV_FILT ] = 0; | |
| 694 sf->thresh_mult[THR_NEARG ] = 0; | |
| 695 sf->thresh_mult[THR_NEARG_FILT ] = 0; | |
| 696 sf->thresh_mult[THR_NEARA ] = 0; | |
| 697 sf->thresh_mult[THR_NEARA_FILT ] = 0; | |
| 698 | |
| 699 sf->thresh_mult[THR_DC ] = 0; | |
| 700 | |
| 701 sf->thresh_mult[THR_V_PRED ] = 1000; | |
| 702 sf->thresh_mult[THR_H_PRED ] = 1000; | |
| 703 sf->thresh_mult[THR_D45_PRED ] = 1000; | |
| 704 sf->thresh_mult[THR_D135_PRED] = 1000; | |
| 705 sf->thresh_mult[THR_D117_PRED] = 1000; | |
| 706 sf->thresh_mult[THR_D153_PRED] = 1000; | |
| 707 sf->thresh_mult[THR_D27_PRED ] = 1000; | |
| 708 sf->thresh_mult[THR_D63_PRED ] = 1000; | |
| 709 sf->thresh_mult[THR_B_PRED ] = 2000; | |
| 710 sf->thresh_mult[THR_I8X8_PRED] = 2000; | |
| 711 sf->thresh_mult[THR_TM ] = 1000; | |
| 712 | |
| 713 sf->thresh_mult[THR_NEWMV ] = 1000; | |
| 714 sf->thresh_mult[THR_NEWG ] = 1000; | |
| 715 sf->thresh_mult[THR_NEWA ] = 1000; | |
| 716 sf->thresh_mult[THR_NEWMV_FILT ] = 1000; | |
| 717 sf->thresh_mult[THR_NEWG_FILT ] = 1000; | |
| 718 sf->thresh_mult[THR_NEWA_FILT ] = 1000; | |
| 719 #else | |
| 720 sf->thresh_mult[THR_ZEROMV ] = 0; | 636 sf->thresh_mult[THR_ZEROMV ] = 0; |
| 721 sf->thresh_mult[THR_ZEROG ] = 0; | 637 sf->thresh_mult[THR_ZEROG ] = 0; |
| 722 sf->thresh_mult[THR_ZEROA ] = 0; | 638 sf->thresh_mult[THR_ZEROA ] = 0; |
| 723 sf->thresh_mult[THR_NEARESTMV] = 0; | 639 sf->thresh_mult[THR_NEARESTMV] = 0; |
| 724 sf->thresh_mult[THR_NEARESTG ] = 0; | 640 sf->thresh_mult[THR_NEARESTG ] = 0; |
| 725 sf->thresh_mult[THR_NEARESTA ] = 0; | 641 sf->thresh_mult[THR_NEARESTA ] = 0; |
| 726 sf->thresh_mult[THR_NEARMV ] = 0; | 642 sf->thresh_mult[THR_NEARMV ] = 0; |
| 727 sf->thresh_mult[THR_NEARG ] = 0; | 643 sf->thresh_mult[THR_NEARG ] = 0; |
| 728 sf->thresh_mult[THR_NEARA ] = 0; | 644 sf->thresh_mult[THR_NEARA ] = 0; |
| 729 | 645 |
| 730 sf->thresh_mult[THR_DC ] = 0; | 646 sf->thresh_mult[THR_DC ] = 0; |
| 731 | 647 |
| 732 sf->thresh_mult[THR_V_PRED ] = 1000; | 648 sf->thresh_mult[THR_V_PRED ] = 1000; |
| 733 sf->thresh_mult[THR_H_PRED ] = 1000; | 649 sf->thresh_mult[THR_H_PRED ] = 1000; |
| 734 sf->thresh_mult[THR_D45_PRED ] = 1000; | 650 sf->thresh_mult[THR_D45_PRED ] = 1000; |
| 735 sf->thresh_mult[THR_D135_PRED] = 1000; | 651 sf->thresh_mult[THR_D135_PRED] = 1000; |
| 736 sf->thresh_mult[THR_D117_PRED] = 1000; | 652 sf->thresh_mult[THR_D117_PRED] = 1000; |
| 737 sf->thresh_mult[THR_D153_PRED] = 1000; | 653 sf->thresh_mult[THR_D153_PRED] = 1000; |
| 738 sf->thresh_mult[THR_D27_PRED ] = 1000; | 654 sf->thresh_mult[THR_D27_PRED ] = 1000; |
| 739 sf->thresh_mult[THR_D63_PRED ] = 1000; | 655 sf->thresh_mult[THR_D63_PRED ] = 1000; |
| 740 sf->thresh_mult[THR_B_PRED ] = 2000; | 656 sf->thresh_mult[THR_B_PRED ] = 2000; |
| 741 sf->thresh_mult[THR_I8X8_PRED] = 2000; | 657 sf->thresh_mult[THR_I8X8_PRED] = 2000; |
| 742 sf->thresh_mult[THR_TM ] = 1000; | 658 sf->thresh_mult[THR_TM ] = 1000; |
| 743 | 659 |
| 744 sf->thresh_mult[THR_NEWMV ] = 1000; | 660 sf->thresh_mult[THR_NEWMV ] = 1000; |
| 745 sf->thresh_mult[THR_NEWG ] = 1000; | 661 sf->thresh_mult[THR_NEWG ] = 1000; |
| 746 sf->thresh_mult[THR_NEWA ] = 1000; | 662 sf->thresh_mult[THR_NEWA ] = 1000; |
| 747 #endif | 663 |
| 748 sf->thresh_mult[THR_SPLITMV ] = 2500; | 664 sf->thresh_mult[THR_SPLITMV ] = 2500; |
| 749 sf->thresh_mult[THR_SPLITG ] = 5000; | 665 sf->thresh_mult[THR_SPLITG ] = 5000; |
| 750 sf->thresh_mult[THR_SPLITA ] = 5000; | 666 sf->thresh_mult[THR_SPLITA ] = 5000; |
| 751 | 667 |
| 752 sf->thresh_mult[THR_COMP_ZEROLG ] = 0; | 668 sf->thresh_mult[THR_COMP_ZEROLG ] = 0; |
| 753 sf->thresh_mult[THR_COMP_NEARESTLG] = 0; | 669 sf->thresh_mult[THR_COMP_NEARESTLG] = 0; |
| 754 sf->thresh_mult[THR_COMP_NEARLG ] = 0; | 670 sf->thresh_mult[THR_COMP_NEARLG ] = 0; |
| 755 sf->thresh_mult[THR_COMP_ZEROLA ] = 0; | 671 sf->thresh_mult[THR_COMP_ZEROLA ] = 0; |
| 756 sf->thresh_mult[THR_COMP_NEARESTLA] = 0; | 672 sf->thresh_mult[THR_COMP_NEARESTLA] = 0; |
| 757 sf->thresh_mult[THR_COMP_NEARLA ] = 0; | 673 sf->thresh_mult[THR_COMP_NEARLA ] = 0; |
| (...skipping 22 matching lines...) Expand all Loading... |
| 780 sf->thresh_mult[THR_COMP_INTERINTRA_NEARESTA] = 0; | 696 sf->thresh_mult[THR_COMP_INTERINTRA_NEARESTA] = 0; |
| 781 sf->thresh_mult[THR_COMP_INTERINTRA_NEARA ] = 0; | 697 sf->thresh_mult[THR_COMP_INTERINTRA_NEARA ] = 0; |
| 782 sf->thresh_mult[THR_COMP_INTERINTRA_NEWA ] = 0; | 698 sf->thresh_mult[THR_COMP_INTERINTRA_NEWA ] = 0; |
| 783 #endif | 699 #endif |
| 784 | 700 |
| 785 sf->first_step = 0; | 701 sf->first_step = 0; |
| 786 sf->max_step_search_steps = MAX_MVSEARCH_STEPS; | 702 sf->max_step_search_steps = MAX_MVSEARCH_STEPS; |
| 787 sf->search_best_filter = SEARCH_BEST_FILTER; | 703 sf->search_best_filter = SEARCH_BEST_FILTER; |
| 788 break; | 704 break; |
| 789 case 1: | 705 case 1: |
| 790 #if CONFIG_PRED_FILTER | |
| 791 sf->thresh_mult[THR_NEARESTMV] = 0; | 706 sf->thresh_mult[THR_NEARESTMV] = 0; |
| 792 sf->thresh_mult[THR_NEARESTMV_FILT] = 0; | |
| 793 sf->thresh_mult[THR_ZEROMV ] = 0; | 707 sf->thresh_mult[THR_ZEROMV ] = 0; |
| 794 sf->thresh_mult[THR_ZEROMV_FILT ] = 0; | |
| 795 sf->thresh_mult[THR_DC ] = 0; | 708 sf->thresh_mult[THR_DC ] = 0; |
| 796 sf->thresh_mult[THR_NEARMV ] = 0; | 709 sf->thresh_mult[THR_NEARMV ] = 0; |
| 797 sf->thresh_mult[THR_NEARMV_FILT ] = 0; | |
| 798 sf->thresh_mult[THR_V_PRED ] = 1000; | 710 sf->thresh_mult[THR_V_PRED ] = 1000; |
| 799 sf->thresh_mult[THR_H_PRED ] = 1000; | 711 sf->thresh_mult[THR_H_PRED ] = 1000; |
| 800 sf->thresh_mult[THR_D45_PRED ] = 1000; | 712 sf->thresh_mult[THR_D45_PRED ] = 1000; |
| 801 sf->thresh_mult[THR_D135_PRED] = 1000; | 713 sf->thresh_mult[THR_D135_PRED] = 1000; |
| 802 sf->thresh_mult[THR_D117_PRED] = 1000; | 714 sf->thresh_mult[THR_D117_PRED] = 1000; |
| 803 sf->thresh_mult[THR_D153_PRED] = 1000; | 715 sf->thresh_mult[THR_D153_PRED] = 1000; |
| 804 sf->thresh_mult[THR_D27_PRED ] = 1000; | 716 sf->thresh_mult[THR_D27_PRED ] = 1000; |
| 805 sf->thresh_mult[THR_D63_PRED ] = 1000; | 717 sf->thresh_mult[THR_D63_PRED ] = 1000; |
| 806 sf->thresh_mult[THR_B_PRED ] = 2500; | 718 sf->thresh_mult[THR_B_PRED ] = 2500; |
| 807 sf->thresh_mult[THR_I8X8_PRED] = 2500; | 719 sf->thresh_mult[THR_I8X8_PRED] = 2500; |
| 808 sf->thresh_mult[THR_TM ] = 1000; | 720 sf->thresh_mult[THR_TM ] = 1000; |
| 809 | 721 |
| 810 sf->thresh_mult[THR_NEARESTG ] = 1000; | 722 sf->thresh_mult[THR_NEARESTG ] = 1000; |
| 811 sf->thresh_mult[THR_NEARESTG_FILT ] = 1000; | |
| 812 sf->thresh_mult[THR_NEARESTA ] = 1000; | 723 sf->thresh_mult[THR_NEARESTA ] = 1000; |
| 813 sf->thresh_mult[THR_NEARESTA_FILT ] = 1000; | |
| 814 | 724 |
| 815 sf->thresh_mult[THR_ZEROG ] = 1000; | 725 sf->thresh_mult[THR_ZEROG ] = 1000; |
| 816 sf->thresh_mult[THR_ZEROA ] = 1000; | 726 sf->thresh_mult[THR_ZEROA ] = 1000; |
| 817 sf->thresh_mult[THR_NEARG ] = 1000; | 727 sf->thresh_mult[THR_NEARG ] = 1000; |
| 818 sf->thresh_mult[THR_NEARA ] = 1000; | 728 sf->thresh_mult[THR_NEARA ] = 1000; |
| 819 sf->thresh_mult[THR_ZEROG_FILT ] = 1000; | |
| 820 sf->thresh_mult[THR_ZEROA_FILT ] = 1000; | |
| 821 sf->thresh_mult[THR_NEARG_FILT ] = 1000; | |
| 822 sf->thresh_mult[THR_NEARA_FILT ] = 1000; | |
| 823 | 729 |
| 824 sf->thresh_mult[THR_ZEROMV ] = 0; | 730 sf->thresh_mult[THR_ZEROMV ] = 0; |
| 825 sf->thresh_mult[THR_ZEROG ] = 0; | 731 sf->thresh_mult[THR_ZEROG ] = 0; |
| 826 sf->thresh_mult[THR_ZEROA ] = 0; | 732 sf->thresh_mult[THR_ZEROA ] = 0; |
| 827 sf->thresh_mult[THR_NEARESTMV] = 0; | 733 sf->thresh_mult[THR_NEARESTMV] = 0; |
| 828 sf->thresh_mult[THR_NEARESTG ] = 0; | 734 sf->thresh_mult[THR_NEARESTG ] = 0; |
| 829 sf->thresh_mult[THR_NEARESTA ] = 0; | 735 sf->thresh_mult[THR_NEARESTA ] = 0; |
| 830 sf->thresh_mult[THR_NEARMV ] = 0; | 736 sf->thresh_mult[THR_NEARMV ] = 0; |
| 831 sf->thresh_mult[THR_NEARG ] = 0; | 737 sf->thresh_mult[THR_NEARG ] = 0; |
| 832 sf->thresh_mult[THR_NEARA ] = 0; | 738 sf->thresh_mult[THR_NEARA ] = 0; |
| 833 sf->thresh_mult[THR_ZEROMV_FILT ] = 0; | |
| 834 sf->thresh_mult[THR_ZEROG_FILT ] = 0; | |
| 835 sf->thresh_mult[THR_ZEROA_FILT ] = 0; | |
| 836 sf->thresh_mult[THR_NEARESTMV_FILT] = 0; | |
| 837 sf->thresh_mult[THR_NEARESTG_FILT ] = 0; | |
| 838 sf->thresh_mult[THR_NEARESTA_FILT ] = 0; | |
| 839 sf->thresh_mult[THR_NEARMV_FILT ] = 0; | |
| 840 sf->thresh_mult[THR_NEARG_FILT ] = 0; | |
| 841 sf->thresh_mult[THR_NEARA_FILT ] = 0; | |
| 842 | |
| 843 sf->thresh_mult[THR_NEWMV ] = 1000; | |
| 844 sf->thresh_mult[THR_NEWG ] = 1000; | |
| 845 sf->thresh_mult[THR_NEWA ] = 1000; | |
| 846 sf->thresh_mult[THR_NEWMV_FILT ] = 1000; | |
| 847 sf->thresh_mult[THR_NEWG_FILT ] = 1000; | |
| 848 sf->thresh_mult[THR_NEWA_FILT ] = 1000; | |
| 849 #else | |
| 850 sf->thresh_mult[THR_NEARESTMV] = 0; | |
| 851 sf->thresh_mult[THR_ZEROMV ] = 0; | |
| 852 sf->thresh_mult[THR_DC ] = 0; | |
| 853 sf->thresh_mult[THR_NEARMV ] = 0; | |
| 854 sf->thresh_mult[THR_V_PRED ] = 1000; | |
| 855 sf->thresh_mult[THR_H_PRED ] = 1000; | |
| 856 sf->thresh_mult[THR_D45_PRED ] = 1000; | |
| 857 sf->thresh_mult[THR_D135_PRED] = 1000; | |
| 858 sf->thresh_mult[THR_D117_PRED] = 1000; | |
| 859 sf->thresh_mult[THR_D153_PRED] = 1000; | |
| 860 sf->thresh_mult[THR_D27_PRED ] = 1000; | |
| 861 sf->thresh_mult[THR_D63_PRED ] = 1000; | |
| 862 sf->thresh_mult[THR_B_PRED ] = 2500; | |
| 863 sf->thresh_mult[THR_I8X8_PRED] = 2500; | |
| 864 sf->thresh_mult[THR_TM ] = 1000; | |
| 865 | |
| 866 sf->thresh_mult[THR_NEARESTG ] = 1000; | |
| 867 sf->thresh_mult[THR_NEARESTA ] = 1000; | |
| 868 | |
| 869 sf->thresh_mult[THR_ZEROG ] = 1000; | |
| 870 sf->thresh_mult[THR_ZEROA ] = 1000; | |
| 871 sf->thresh_mult[THR_NEARG ] = 1000; | |
| 872 sf->thresh_mult[THR_NEARA ] = 1000; | |
| 873 | |
| 874 sf->thresh_mult[THR_ZEROMV ] = 0; | |
| 875 sf->thresh_mult[THR_ZEROG ] = 0; | |
| 876 sf->thresh_mult[THR_ZEROA ] = 0; | |
| 877 sf->thresh_mult[THR_NEARESTMV] = 0; | |
| 878 sf->thresh_mult[THR_NEARESTG ] = 0; | |
| 879 sf->thresh_mult[THR_NEARESTA ] = 0; | |
| 880 sf->thresh_mult[THR_NEARMV ] = 0; | |
| 881 sf->thresh_mult[THR_NEARG ] = 0; | |
| 882 sf->thresh_mult[THR_NEARA ] = 0; | |
| 883 | 739 |
| 884 sf->thresh_mult[THR_NEWMV ] = 1000; | 740 sf->thresh_mult[THR_NEWMV ] = 1000; |
| 885 sf->thresh_mult[THR_NEWG ] = 1000; | 741 sf->thresh_mult[THR_NEWG ] = 1000; |
| 886 sf->thresh_mult[THR_NEWA ] = 1000; | 742 sf->thresh_mult[THR_NEWA ] = 1000; |
| 887 #endif | 743 |
| 888 sf->thresh_mult[THR_SPLITMV ] = 1700; | 744 sf->thresh_mult[THR_SPLITMV ] = 1700; |
| 889 sf->thresh_mult[THR_SPLITG ] = 4500; | 745 sf->thresh_mult[THR_SPLITG ] = 4500; |
| 890 sf->thresh_mult[THR_SPLITA ] = 4500; | 746 sf->thresh_mult[THR_SPLITA ] = 4500; |
| 891 | 747 |
| 892 sf->thresh_mult[THR_COMP_ZEROLG ] = 0; | 748 sf->thresh_mult[THR_COMP_ZEROLG ] = 0; |
| 893 sf->thresh_mult[THR_COMP_NEARESTLG] = 0; | 749 sf->thresh_mult[THR_COMP_NEARESTLG] = 0; |
| 894 sf->thresh_mult[THR_COMP_NEARLG ] = 0; | 750 sf->thresh_mult[THR_COMP_NEARLG ] = 0; |
| 895 sf->thresh_mult[THR_COMP_ZEROLA ] = 0; | 751 sf->thresh_mult[THR_COMP_ZEROLA ] = 0; |
| 896 sf->thresh_mult[THR_COMP_NEARESTLA] = 0; | 752 sf->thresh_mult[THR_COMP_NEARESTLA] = 0; |
| 897 sf->thresh_mult[THR_COMP_NEARLA ] = 0; | 753 sf->thresh_mult[THR_COMP_NEARLA ] = 0; |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 953 sf->thresh_mult[THR_D135_PRED] = 1500; | 809 sf->thresh_mult[THR_D135_PRED] = 1500; |
| 954 sf->thresh_mult[THR_D117_PRED] = 1500; | 810 sf->thresh_mult[THR_D117_PRED] = 1500; |
| 955 sf->thresh_mult[THR_D153_PRED] = 1500; | 811 sf->thresh_mult[THR_D153_PRED] = 1500; |
| 956 sf->thresh_mult[THR_D27_PRED ] = 1500; | 812 sf->thresh_mult[THR_D27_PRED ] = 1500; |
| 957 sf->thresh_mult[THR_D63_PRED ] = 1500; | 813 sf->thresh_mult[THR_D63_PRED ] = 1500; |
| 958 sf->thresh_mult[THR_B_PRED ] = 5000; | 814 sf->thresh_mult[THR_B_PRED ] = 5000; |
| 959 sf->thresh_mult[THR_I8X8_PRED] = 5000; | 815 sf->thresh_mult[THR_I8X8_PRED] = 5000; |
| 960 | 816 |
| 961 if (cpi->ref_frame_flags & VP9_LAST_FLAG) { | 817 if (cpi->ref_frame_flags & VP9_LAST_FLAG) { |
| 962 sf->thresh_mult[THR_NEWMV ] = 2000; | 818 sf->thresh_mult[THR_NEWMV ] = 2000; |
| 963 #if CONFIG_PRED_FILTER | |
| 964 sf->thresh_mult[THR_NEWMV_FILT ] = 2000; | |
| 965 #endif | |
| 966 sf->thresh_mult[THR_SPLITMV ] = 10000; | 819 sf->thresh_mult[THR_SPLITMV ] = 10000; |
| 967 sf->thresh_mult[THR_COMP_SPLITLG ] = 20000; | 820 sf->thresh_mult[THR_COMP_SPLITLG ] = 20000; |
| 968 } | 821 } |
| 969 | 822 |
| 970 if (cpi->ref_frame_flags & VP9_GOLD_FLAG) { | 823 if (cpi->ref_frame_flags & VP9_GOLD_FLAG) { |
| 971 sf->thresh_mult[THR_NEARESTG ] = 1500; | 824 sf->thresh_mult[THR_NEARESTG ] = 1500; |
| 972 sf->thresh_mult[THR_ZEROG ] = 1500; | 825 sf->thresh_mult[THR_ZEROG ] = 1500; |
| 973 sf->thresh_mult[THR_NEARG ] = 1500; | 826 sf->thresh_mult[THR_NEARG ] = 1500; |
| 974 sf->thresh_mult[THR_NEWG ] = 2000; | 827 sf->thresh_mult[THR_NEWG ] = 2000; |
| 975 #if CONFIG_PRED_FILTER | |
| 976 sf->thresh_mult[THR_NEARESTG_FILT ] = 1500; | |
| 977 sf->thresh_mult[THR_ZEROG_FILT ] = 1500; | |
| 978 sf->thresh_mult[THR_NEARG_FILT ] = 1500; | |
| 979 sf->thresh_mult[THR_NEWG_FILT ] = 2000; | |
| 980 #endif | |
| 981 sf->thresh_mult[THR_SPLITG ] = 20000; | 828 sf->thresh_mult[THR_SPLITG ] = 20000; |
| 982 sf->thresh_mult[THR_COMP_SPLITGA ] = 20000; | 829 sf->thresh_mult[THR_COMP_SPLITGA ] = 20000; |
| 983 } | 830 } |
| 984 | 831 |
| 985 if (cpi->ref_frame_flags & VP9_ALT_FLAG) { | 832 if (cpi->ref_frame_flags & VP9_ALT_FLAG) { |
| 986 sf->thresh_mult[THR_NEARESTA ] = 1500; | 833 sf->thresh_mult[THR_NEARESTA ] = 1500; |
| 987 sf->thresh_mult[THR_ZEROA ] = 1500; | 834 sf->thresh_mult[THR_ZEROA ] = 1500; |
| 988 sf->thresh_mult[THR_NEARA ] = 1500; | 835 sf->thresh_mult[THR_NEARA ] = 1500; |
| 989 sf->thresh_mult[THR_NEWA ] = 2000; | 836 sf->thresh_mult[THR_NEWA ] = 2000; |
| 990 #if CONFIG_PRED_FILTER | |
| 991 sf->thresh_mult[THR_NEARESTA_FILT ] = 1500; | |
| 992 sf->thresh_mult[THR_ZEROA_FILT ] = 1500; | |
| 993 sf->thresh_mult[THR_NEARA_FILT ] = 1500; | |
| 994 sf->thresh_mult[THR_NEWA_FILT ] = 2000; | |
| 995 #endif | |
| 996 sf->thresh_mult[THR_SPLITA ] = 20000; | 837 sf->thresh_mult[THR_SPLITA ] = 20000; |
| 997 sf->thresh_mult[THR_COMP_SPLITLA ] = 10000; | 838 sf->thresh_mult[THR_COMP_SPLITLA ] = 10000; |
| 998 } | 839 } |
| 999 | 840 |
| 1000 sf->thresh_mult[THR_COMP_ZEROLG ] = 1500; | 841 sf->thresh_mult[THR_COMP_ZEROLG ] = 1500; |
| 1001 sf->thresh_mult[THR_COMP_NEARESTLG] = 1500; | 842 sf->thresh_mult[THR_COMP_NEARESTLG] = 1500; |
| 1002 sf->thresh_mult[THR_COMP_NEARLG ] = 1500; | 843 sf->thresh_mult[THR_COMP_NEARLG ] = 1500; |
| 1003 sf->thresh_mult[THR_COMP_ZEROLA ] = 1500; | 844 sf->thresh_mult[THR_COMP_ZEROLA ] = 1500; |
| 1004 sf->thresh_mult[THR_COMP_NEARESTLA] = 1500; | 845 sf->thresh_mult[THR_COMP_NEARESTLA] = 1500; |
| 1005 sf->thresh_mult[THR_COMP_NEARLA ] = 1500; | 846 sf->thresh_mult[THR_COMP_NEARLA ] = 1500; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1042 sf->thresh_mult[THR_D135_PRED] = 2000; | 883 sf->thresh_mult[THR_D135_PRED] = 2000; |
| 1043 sf->thresh_mult[THR_D117_PRED] = 2000; | 884 sf->thresh_mult[THR_D117_PRED] = 2000; |
| 1044 sf->thresh_mult[THR_D153_PRED] = 2000; | 885 sf->thresh_mult[THR_D153_PRED] = 2000; |
| 1045 sf->thresh_mult[THR_D27_PRED ] = 2000; | 886 sf->thresh_mult[THR_D27_PRED ] = 2000; |
| 1046 sf->thresh_mult[THR_D63_PRED ] = 2000; | 887 sf->thresh_mult[THR_D63_PRED ] = 2000; |
| 1047 sf->thresh_mult[THR_B_PRED ] = 7500; | 888 sf->thresh_mult[THR_B_PRED ] = 7500; |
| 1048 sf->thresh_mult[THR_I8X8_PRED] = 7500; | 889 sf->thresh_mult[THR_I8X8_PRED] = 7500; |
| 1049 | 890 |
| 1050 if (cpi->ref_frame_flags & VP9_LAST_FLAG) { | 891 if (cpi->ref_frame_flags & VP9_LAST_FLAG) { |
| 1051 sf->thresh_mult[THR_NEWMV ] = 2000; | 892 sf->thresh_mult[THR_NEWMV ] = 2000; |
| 1052 #if CONFIG_PRED_FILTER | |
| 1053 sf->thresh_mult[THR_NEWMV_FILT ] = 2000; | |
| 1054 #endif | |
| 1055 sf->thresh_mult[THR_SPLITMV ] = 25000; | 893 sf->thresh_mult[THR_SPLITMV ] = 25000; |
| 1056 sf->thresh_mult[THR_COMP_SPLITLG ] = 50000; | 894 sf->thresh_mult[THR_COMP_SPLITLG ] = 50000; |
| 1057 } | 895 } |
| 1058 | 896 |
| 1059 if (cpi->ref_frame_flags & VP9_GOLD_FLAG) { | 897 if (cpi->ref_frame_flags & VP9_GOLD_FLAG) { |
| 1060 sf->thresh_mult[THR_NEARESTG ] = 2000; | 898 sf->thresh_mult[THR_NEARESTG ] = 2000; |
| 1061 sf->thresh_mult[THR_ZEROG ] = 2000; | 899 sf->thresh_mult[THR_ZEROG ] = 2000; |
| 1062 sf->thresh_mult[THR_NEARG ] = 2000; | 900 sf->thresh_mult[THR_NEARG ] = 2000; |
| 1063 sf->thresh_mult[THR_NEWG ] = 2500; | 901 sf->thresh_mult[THR_NEWG ] = 2500; |
| 1064 #if CONFIG_PRED_FILTER | |
| 1065 sf->thresh_mult[THR_NEARESTG_FILT ] = 2000; | |
| 1066 sf->thresh_mult[THR_ZEROG_FILT ] = 2000; | |
| 1067 sf->thresh_mult[THR_NEARG_FILT ] = 2000; | |
| 1068 sf->thresh_mult[THR_NEWG_FILT ] = 2500; | |
| 1069 #endif | |
| 1070 sf->thresh_mult[THR_SPLITG ] = 50000; | 902 sf->thresh_mult[THR_SPLITG ] = 50000; |
| 1071 sf->thresh_mult[THR_COMP_SPLITGA ] = 50000; | 903 sf->thresh_mult[THR_COMP_SPLITGA ] = 50000; |
| 1072 } | 904 } |
| 1073 | 905 |
| 1074 if (cpi->ref_frame_flags & VP9_ALT_FLAG) { | 906 if (cpi->ref_frame_flags & VP9_ALT_FLAG) { |
| 1075 sf->thresh_mult[THR_NEARESTA ] = 2000; | 907 sf->thresh_mult[THR_NEARESTA ] = 2000; |
| 1076 sf->thresh_mult[THR_ZEROA ] = 2000; | 908 sf->thresh_mult[THR_ZEROA ] = 2000; |
| 1077 sf->thresh_mult[THR_NEARA ] = 2000; | 909 sf->thresh_mult[THR_NEARA ] = 2000; |
| 1078 sf->thresh_mult[THR_NEWA ] = 2500; | 910 sf->thresh_mult[THR_NEWA ] = 2500; |
| 1079 #if CONFIG_PRED_FILTER | |
| 1080 sf->thresh_mult[THR_NEARESTA_FILT ] = 2000; | |
| 1081 sf->thresh_mult[THR_ZEROA_FILT ] = 2000; | |
| 1082 sf->thresh_mult[THR_NEARA_FILT ] = 2000; | |
| 1083 sf->thresh_mult[THR_NEWA_FILT ] = 2500; | |
| 1084 #endif | |
| 1085 sf->thresh_mult[THR_SPLITA ] = 50000; | 911 sf->thresh_mult[THR_SPLITA ] = 50000; |
| 1086 sf->thresh_mult[THR_COMP_SPLITLA ] = 25000; | 912 sf->thresh_mult[THR_COMP_SPLITLA ] = 25000; |
| 1087 } | 913 } |
| 1088 | 914 |
| 1089 sf->thresh_mult[THR_COMP_ZEROLG ] = 2000; | 915 sf->thresh_mult[THR_COMP_ZEROLG ] = 2000; |
| 1090 sf->thresh_mult[THR_COMP_NEARESTLG] = 2000; | 916 sf->thresh_mult[THR_COMP_NEARESTLG] = 2000; |
| 1091 sf->thresh_mult[THR_COMP_NEARLG ] = 2000; | 917 sf->thresh_mult[THR_COMP_NEARLG ] = 2000; |
| 1092 sf->thresh_mult[THR_COMP_ZEROLA ] = 2000; | 918 sf->thresh_mult[THR_COMP_ZEROLA ] = 2000; |
| 1093 sf->thresh_mult[THR_COMP_NEARESTLA] = 2000; | 919 sf->thresh_mult[THR_COMP_NEARESTLA] = 2000; |
| 1094 sf->thresh_mult[THR_COMP_NEARLA ] = 2000; | 920 sf->thresh_mult[THR_COMP_NEARLA ] = 2000; |
| (...skipping 30 matching lines...) Expand all Loading... |
| 1125 break; | 951 break; |
| 1126 | 952 |
| 1127 }; /* switch */ | 953 }; /* switch */ |
| 1128 | 954 |
| 1129 /* disable frame modes if flags not set */ | 955 /* disable frame modes if flags not set */ |
| 1130 if (!(cpi->ref_frame_flags & VP9_LAST_FLAG)) { | 956 if (!(cpi->ref_frame_flags & VP9_LAST_FLAG)) { |
| 1131 sf->thresh_mult[THR_NEWMV ] = INT_MAX; | 957 sf->thresh_mult[THR_NEWMV ] = INT_MAX; |
| 1132 sf->thresh_mult[THR_NEARESTMV] = INT_MAX; | 958 sf->thresh_mult[THR_NEARESTMV] = INT_MAX; |
| 1133 sf->thresh_mult[THR_ZEROMV ] = INT_MAX; | 959 sf->thresh_mult[THR_ZEROMV ] = INT_MAX; |
| 1134 sf->thresh_mult[THR_NEARMV ] = INT_MAX; | 960 sf->thresh_mult[THR_NEARMV ] = INT_MAX; |
| 1135 #if CONFIG_PRED_FILTER | |
| 1136 sf->thresh_mult[THR_NEWMV_FILT ] = INT_MAX; | |
| 1137 sf->thresh_mult[THR_NEARESTMV_FILT] = INT_MAX; | |
| 1138 sf->thresh_mult[THR_ZEROMV_FILT ] = INT_MAX; | |
| 1139 sf->thresh_mult[THR_NEARMV_FILT ] = INT_MAX; | |
| 1140 #endif | |
| 1141 sf->thresh_mult[THR_SPLITMV ] = INT_MAX; | 961 sf->thresh_mult[THR_SPLITMV ] = INT_MAX; |
| 1142 } | 962 } |
| 1143 | 963 |
| 1144 if (!(cpi->ref_frame_flags & VP9_GOLD_FLAG)) { | 964 if (!(cpi->ref_frame_flags & VP9_GOLD_FLAG)) { |
| 1145 sf->thresh_mult[THR_NEARESTG ] = INT_MAX; | 965 sf->thresh_mult[THR_NEARESTG ] = INT_MAX; |
| 1146 sf->thresh_mult[THR_ZEROG ] = INT_MAX; | 966 sf->thresh_mult[THR_ZEROG ] = INT_MAX; |
| 1147 sf->thresh_mult[THR_NEARG ] = INT_MAX; | 967 sf->thresh_mult[THR_NEARG ] = INT_MAX; |
| 1148 sf->thresh_mult[THR_NEWG ] = INT_MAX; | 968 sf->thresh_mult[THR_NEWG ] = INT_MAX; |
| 1149 #if CONFIG_PRED_FILTER | |
| 1150 sf->thresh_mult[THR_NEARESTG_FILT ] = INT_MAX; | |
| 1151 sf->thresh_mult[THR_ZEROG_FILT ] = INT_MAX; | |
| 1152 sf->thresh_mult[THR_NEARG_FILT ] = INT_MAX; | |
| 1153 sf->thresh_mult[THR_NEWG_FILT ] = INT_MAX; | |
| 1154 #endif | |
| 1155 #if CONFIG_COMP_INTERINTRA_PRED | 969 #if CONFIG_COMP_INTERINTRA_PRED |
| 1156 sf->thresh_mult[THR_COMP_INTERINTRA_ZEROG ] = INT_MAX; | 970 sf->thresh_mult[THR_COMP_INTERINTRA_ZEROG ] = INT_MAX; |
| 1157 sf->thresh_mult[THR_COMP_INTERINTRA_NEARESTG] = INT_MAX; | 971 sf->thresh_mult[THR_COMP_INTERINTRA_NEARESTG] = INT_MAX; |
| 1158 sf->thresh_mult[THR_COMP_INTERINTRA_NEARG ] = INT_MAX; | 972 sf->thresh_mult[THR_COMP_INTERINTRA_NEARG ] = INT_MAX; |
| 1159 sf->thresh_mult[THR_COMP_INTERINTRA_NEWG ] = INT_MAX; | 973 sf->thresh_mult[THR_COMP_INTERINTRA_NEWG ] = INT_MAX; |
| 1160 #endif | 974 #endif |
| 1161 sf->thresh_mult[THR_SPLITG ] = INT_MAX; | 975 sf->thresh_mult[THR_SPLITG ] = INT_MAX; |
| 1162 } | 976 } |
| 1163 | 977 |
| 1164 if (!(cpi->ref_frame_flags & VP9_ALT_FLAG)) { | 978 if (!(cpi->ref_frame_flags & VP9_ALT_FLAG)) { |
| 1165 sf->thresh_mult[THR_NEARESTA ] = INT_MAX; | 979 sf->thresh_mult[THR_NEARESTA ] = INT_MAX; |
| 1166 sf->thresh_mult[THR_ZEROA ] = INT_MAX; | 980 sf->thresh_mult[THR_ZEROA ] = INT_MAX; |
| 1167 sf->thresh_mult[THR_NEARA ] = INT_MAX; | 981 sf->thresh_mult[THR_NEARA ] = INT_MAX; |
| 1168 sf->thresh_mult[THR_NEWA ] = INT_MAX; | 982 sf->thresh_mult[THR_NEWA ] = INT_MAX; |
| 1169 #if CONFIG_PRED_FILTER | |
| 1170 sf->thresh_mult[THR_NEARESTA_FILT ] = INT_MAX; | |
| 1171 sf->thresh_mult[THR_ZEROA_FILT ] = INT_MAX; | |
| 1172 sf->thresh_mult[THR_NEARA_FILT ] = INT_MAX; | |
| 1173 sf->thresh_mult[THR_NEWA_FILT ] = INT_MAX; | |
| 1174 #endif | |
| 1175 #if CONFIG_COMP_INTERINTRA_PRED | 983 #if CONFIG_COMP_INTERINTRA_PRED |
| 1176 sf->thresh_mult[THR_COMP_INTERINTRA_ZEROA ] = INT_MAX; | 984 sf->thresh_mult[THR_COMP_INTERINTRA_ZEROA ] = INT_MAX; |
| 1177 sf->thresh_mult[THR_COMP_INTERINTRA_NEARESTA] = INT_MAX; | 985 sf->thresh_mult[THR_COMP_INTERINTRA_NEARESTA] = INT_MAX; |
| 1178 sf->thresh_mult[THR_COMP_INTERINTRA_NEARA ] = INT_MAX; | 986 sf->thresh_mult[THR_COMP_INTERINTRA_NEARA ] = INT_MAX; |
| 1179 sf->thresh_mult[THR_COMP_INTERINTRA_NEWA ] = INT_MAX; | 987 sf->thresh_mult[THR_COMP_INTERINTRA_NEWA ] = INT_MAX; |
| 1180 #endif | 988 #endif |
| 1181 sf->thresh_mult[THR_SPLITA ] = INT_MAX; | 989 sf->thresh_mult[THR_SPLITA ] = INT_MAX; |
| 1182 } | 990 } |
| 1183 | 991 |
| 1184 if ((cpi->ref_frame_flags & (VP9_LAST_FLAG | VP9_GOLD_FLAG)) != (VP9_LAST_FLAG
| VP9_GOLD_FLAG)) { | 992 if ((cpi->ref_frame_flags & (VP9_LAST_FLAG | VP9_GOLD_FLAG)) != (VP9_LAST_FLAG
| VP9_GOLD_FLAG)) { |
| (...skipping 613 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1798 memcpy(cpi->base_skip_false_prob, base_skip_false_prob, sizeof(base_skip_false
_prob)); | 1606 memcpy(cpi->base_skip_false_prob, base_skip_false_prob, sizeof(base_skip_false
_prob)); |
| 1799 cpi->common.current_video_frame = 0; | 1607 cpi->common.current_video_frame = 0; |
| 1800 cpi->kf_overspend_bits = 0; | 1608 cpi->kf_overspend_bits = 0; |
| 1801 cpi->kf_bitrate_adjustment = 0; | 1609 cpi->kf_bitrate_adjustment = 0; |
| 1802 cpi->frames_till_gf_update_due = 0; | 1610 cpi->frames_till_gf_update_due = 0; |
| 1803 cpi->gf_overspend_bits = 0; | 1611 cpi->gf_overspend_bits = 0; |
| 1804 cpi->non_gf_bitrate_adjustment = 0; | 1612 cpi->non_gf_bitrate_adjustment = 0; |
| 1805 cm->prob_last_coded = 128; | 1613 cm->prob_last_coded = 128; |
| 1806 cm->prob_gf_coded = 128; | 1614 cm->prob_gf_coded = 128; |
| 1807 cm->prob_intra_coded = 63; | 1615 cm->prob_intra_coded = 63; |
| 1808 #if CONFIG_SUPERBLOCKS | 1616 cm->sb32_coded = 200; |
| 1809 cm->sb_coded = 200; | 1617 cm->sb64_coded = 200; |
| 1810 #endif | |
| 1811 for (i = 0; i < COMP_PRED_CONTEXTS; i++) | 1618 for (i = 0; i < COMP_PRED_CONTEXTS; i++) |
| 1812 cm->prob_comppred[i] = 128; | 1619 cm->prob_comppred[i] = 128; |
| 1813 for (i = 0; i < TX_SIZE_MAX - 1; i++) | 1620 for (i = 0; i < TX_SIZE_MAX_SB - 1; i++) |
| 1814 cm->prob_tx[i] = 128; | 1621 cm->prob_tx[i] = 128; |
| 1815 | 1622 |
| 1816 // Prime the recent reference frame useage counters. | 1623 // Prime the recent reference frame useage counters. |
| 1817 // Hereafter they will be maintained as a sort of moving average | 1624 // Hereafter they will be maintained as a sort of moving average |
| 1818 cpi->recent_ref_frame_usage[INTRA_FRAME] = 1; | 1625 cpi->recent_ref_frame_usage[INTRA_FRAME] = 1; |
| 1819 cpi->recent_ref_frame_usage[LAST_FRAME] = 1; | 1626 cpi->recent_ref_frame_usage[LAST_FRAME] = 1; |
| 1820 cpi->recent_ref_frame_usage[GOLDEN_FRAME] = 1; | 1627 cpi->recent_ref_frame_usage[GOLDEN_FRAME] = 1; |
| 1821 cpi->recent_ref_frame_usage[ALTREF_FRAME] = 1; | 1628 cpi->recent_ref_frame_usage[ALTREF_FRAME] = 1; |
| 1822 | 1629 |
| 1823 // Set reference frame sign bias for ALTREF frame to 1 (for now) | 1630 // Set reference frame sign bias for ALTREF frame to 1 (for now) |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1913 | 1720 |
| 1914 if (cpi->b_calculate_ssimg) { | 1721 if (cpi->b_calculate_ssimg) { |
| 1915 cpi->total_ssimg_y = 0; | 1722 cpi->total_ssimg_y = 0; |
| 1916 cpi->total_ssimg_u = 0; | 1723 cpi->total_ssimg_u = 0; |
| 1917 cpi->total_ssimg_v = 0; | 1724 cpi->total_ssimg_v = 0; |
| 1918 cpi->total_ssimg_all = 0; | 1725 cpi->total_ssimg_all = 0; |
| 1919 } | 1726 } |
| 1920 | 1727 |
| 1921 #endif | 1728 #endif |
| 1922 | 1729 |
| 1923 #ifndef LLONG_MAX | 1730 cpi->first_time_stamp_ever = INT64_MAX; |
| 1924 #define LLONG_MAX 9223372036854775807LL | |
| 1925 #endif | |
| 1926 cpi->first_time_stamp_ever = LLONG_MAX; | |
| 1927 | 1731 |
| 1928 cpi->frames_till_gf_update_due = 0; | 1732 cpi->frames_till_gf_update_due = 0; |
| 1929 cpi->key_frame_count = 1; | 1733 cpi->key_frame_count = 1; |
| 1930 | 1734 |
| 1931 cpi->ni_av_qi = cpi->oxcf.worst_allowed_q; | 1735 cpi->ni_av_qi = cpi->oxcf.worst_allowed_q; |
| 1932 cpi->ni_tot_qi = 0; | 1736 cpi->ni_tot_qi = 0; |
| 1933 cpi->ni_frames = 0; | 1737 cpi->ni_frames = 0; |
| 1934 cpi->tot_q = 0.0; | 1738 cpi->tot_q = 0.0; |
| 1935 cpi->avg_q = vp9_convert_qindex_to_q(cpi->oxcf.worst_allowed_q); | 1739 cpi->avg_q = vp9_convert_qindex_to_q(cpi->oxcf.worst_allowed_q); |
| 1936 cpi->total_byte_count = 0; | 1740 cpi->total_byte_count = 0; |
| (...skipping 63 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2000 cpi->fn_ptr[BT].vf = VF; \ | 1804 cpi->fn_ptr[BT].vf = VF; \ |
| 2001 cpi->fn_ptr[BT].svf = SVF; \ | 1805 cpi->fn_ptr[BT].svf = SVF; \ |
| 2002 cpi->fn_ptr[BT].svf_halfpix_h = SVFHH; \ | 1806 cpi->fn_ptr[BT].svf_halfpix_h = SVFHH; \ |
| 2003 cpi->fn_ptr[BT].svf_halfpix_v = SVFHV; \ | 1807 cpi->fn_ptr[BT].svf_halfpix_v = SVFHV; \ |
| 2004 cpi->fn_ptr[BT].svf_halfpix_hv = SVFHHV; \ | 1808 cpi->fn_ptr[BT].svf_halfpix_hv = SVFHHV; \ |
| 2005 cpi->fn_ptr[BT].sdx3f = SDX3F; \ | 1809 cpi->fn_ptr[BT].sdx3f = SDX3F; \ |
| 2006 cpi->fn_ptr[BT].sdx8f = SDX8F; \ | 1810 cpi->fn_ptr[BT].sdx8f = SDX8F; \ |
| 2007 cpi->fn_ptr[BT].sdx4df = SDX4DF; | 1811 cpi->fn_ptr[BT].sdx4df = SDX4DF; |
| 2008 | 1812 |
| 2009 | 1813 |
| 2010 #if CONFIG_SUPERBLOCKS | |
| 2011 BFP(BLOCK_32X32, vp9_sad32x32, vp9_variance32x32, vp9_sub_pixel_variance32x32, | 1814 BFP(BLOCK_32X32, vp9_sad32x32, vp9_variance32x32, vp9_sub_pixel_variance32x32, |
| 2012 vp9_variance_halfpixvar32x32_h, vp9_variance_halfpixvar32x32_v, | 1815 vp9_variance_halfpixvar32x32_h, vp9_variance_halfpixvar32x32_v, |
| 2013 vp9_variance_halfpixvar32x32_hv, vp9_sad32x32x3, vp9_sad32x32x8, | 1816 vp9_variance_halfpixvar32x32_hv, vp9_sad32x32x3, vp9_sad32x32x8, |
| 2014 vp9_sad32x32x4d) | 1817 vp9_sad32x32x4d) |
| 2015 #endif | 1818 |
| 1819 BFP(BLOCK_64X64, vp9_sad64x64, vp9_variance64x64, vp9_sub_pixel_variance64x64, |
| 1820 vp9_variance_halfpixvar64x64_h, vp9_variance_halfpixvar64x64_v, |
| 1821 vp9_variance_halfpixvar64x64_hv, vp9_sad64x64x3, vp9_sad64x64x8, |
| 1822 vp9_sad64x64x4d) |
| 2016 | 1823 |
| 2017 BFP(BLOCK_16X16, vp9_sad16x16, vp9_variance16x16, vp9_sub_pixel_variance16x16, | 1824 BFP(BLOCK_16X16, vp9_sad16x16, vp9_variance16x16, vp9_sub_pixel_variance16x16, |
| 2018 vp9_variance_halfpixvar16x16_h, vp9_variance_halfpixvar16x16_v, | 1825 vp9_variance_halfpixvar16x16_h, vp9_variance_halfpixvar16x16_v, |
| 2019 vp9_variance_halfpixvar16x16_hv, vp9_sad16x16x3, vp9_sad16x16x8, | 1826 vp9_variance_halfpixvar16x16_hv, vp9_sad16x16x3, vp9_sad16x16x8, |
| 2020 vp9_sad16x16x4d) | 1827 vp9_sad16x16x4d) |
| 2021 | 1828 |
| 2022 BFP(BLOCK_16X8, vp9_sad16x8, vp9_variance16x8, vp9_sub_pixel_variance16x8, | 1829 BFP(BLOCK_16X8, vp9_sad16x8, vp9_variance16x8, vp9_sub_pixel_variance16x8, |
| 2023 NULL, NULL, NULL, vp9_sad16x8x3, vp9_sad16x8x8, vp9_sad16x8x4d) | 1830 NULL, NULL, NULL, vp9_sad16x8x3, vp9_sad16x8x8, vp9_sad16x8x4d) |
| 2024 | 1831 |
| 2025 BFP(BLOCK_8X16, vp9_sad8x16, vp9_variance8x16, vp9_sub_pixel_variance8x16, | 1832 BFP(BLOCK_8X16, vp9_sad8x16, vp9_variance8x16, vp9_sub_pixel_variance8x16, |
| (...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2216 #ifdef ENTROPY_STATS | 2023 #ifdef ENTROPY_STATS |
| 2217 { | 2024 { |
| 2218 int i, j, k; | 2025 int i, j, k; |
| 2219 FILE *fmode = fopen("vp9_modecontext.c", "w"); | 2026 FILE *fmode = fopen("vp9_modecontext.c", "w"); |
| 2220 | 2027 |
| 2221 fprintf(fmode, "\n#include \"vp9_entropymode.h\"\n\n"); | 2028 fprintf(fmode, "\n#include \"vp9_entropymode.h\"\n\n"); |
| 2222 fprintf(fmode, "const unsigned int vp9_kf_default_bmode_counts "); | 2029 fprintf(fmode, "const unsigned int vp9_kf_default_bmode_counts "); |
| 2223 fprintf(fmode, "[VP9_KF_BINTRAMODES][VP9_KF_BINTRAMODES]" | 2030 fprintf(fmode, "[VP9_KF_BINTRAMODES][VP9_KF_BINTRAMODES]" |
| 2224 "[VP9_KF_BINTRAMODES] =\n{\n"); | 2031 "[VP9_KF_BINTRAMODES] =\n{\n"); |
| 2225 | 2032 |
| 2226 for (i = 0; i < VP8_KF_BINTRAMODES; i++) { | 2033 for (i = 0; i < VP9_KF_BINTRAMODES; i++) { |
| 2227 | 2034 |
| 2228 fprintf(fmode, " { // Above Mode : %d\n", i); | 2035 fprintf(fmode, " { // Above Mode : %d\n", i); |
| 2229 | 2036 |
| 2230 for (j = 0; j < VP8_KF_BINTRAMODES; j++) { | 2037 for (j = 0; j < VP9_KF_BINTRAMODES; j++) { |
| 2231 | 2038 |
| 2232 fprintf(fmode, " {"); | 2039 fprintf(fmode, " {"); |
| 2233 | 2040 |
| 2234 for (k = 0; k < VP9_KF_BINTRAMODES; k++) { | 2041 for (k = 0; k < VP9_KF_BINTRAMODES; k++) { |
| 2235 if (!intra_mode_stats[i][j][k]) | 2042 if (!intra_mode_stats[i][j][k]) |
| 2236 fprintf(fmode, " %5d, ", 1); | 2043 fprintf(fmode, " %5d, ", 1); |
| 2237 else | 2044 else |
| 2238 fprintf(fmode, " %5d, ", intra_mode_stats[i][j][k]); | 2045 fprintf(fmode, " %5d, ", intra_mode_stats[i][j][k]); |
| 2239 } | 2046 } |
| 2240 | 2047 |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2305 fclose(framepsnr); | 2112 fclose(framepsnr); |
| 2306 | 2113 |
| 2307 if (kf_list) | 2114 if (kf_list) |
| 2308 fclose(kf_list); | 2115 fclose(kf_list); |
| 2309 | 2116 |
| 2310 #endif | 2117 #endif |
| 2311 | 2118 |
| 2312 } | 2119 } |
| 2313 | 2120 |
| 2314 | 2121 |
| 2315 static uint64_t calc_plane_error(unsigned char *orig, int orig_stride, | 2122 static uint64_t calc_plane_error(uint8_t *orig, int orig_stride, |
| 2316 unsigned char *recon, int recon_stride, | 2123 uint8_t *recon, int recon_stride, |
| 2317 unsigned int cols, unsigned int rows) { | 2124 unsigned int cols, unsigned int rows) { |
| 2318 unsigned int row, col; | 2125 unsigned int row, col; |
| 2319 uint64_t total_sse = 0; | 2126 uint64_t total_sse = 0; |
| 2320 int diff; | 2127 int diff; |
| 2321 | 2128 |
| 2322 for (row = 0; row + 16 <= rows; row += 16) { | 2129 for (row = 0; row + 16 <= rows; row += 16) { |
| 2323 for (col = 0; col + 16 <= cols; col += 16) { | 2130 for (col = 0; col + 16 <= cols; col += 16) { |
| 2324 unsigned int sse; | 2131 unsigned int sse; |
| 2325 | 2132 |
| 2326 vp9_mse16x16(orig + col, orig_stride, recon + col, recon_stride, &sse); | 2133 vp9_mse16x16(orig + col, orig_stride, recon + col, recon_stride, &sse); |
| 2327 total_sse += sse; | 2134 total_sse += sse; |
| 2328 } | 2135 } |
| 2329 | 2136 |
| 2330 /* Handle odd-sized width */ | 2137 /* Handle odd-sized width */ |
| 2331 if (col < cols) { | 2138 if (col < cols) { |
| 2332 unsigned int border_row, border_col; | 2139 unsigned int border_row, border_col; |
| 2333 unsigned char *border_orig = orig; | 2140 uint8_t *border_orig = orig; |
| 2334 unsigned char *border_recon = recon; | 2141 uint8_t *border_recon = recon; |
| 2335 | 2142 |
| 2336 for (border_row = 0; border_row < 16; border_row++) { | 2143 for (border_row = 0; border_row < 16; border_row++) { |
| 2337 for (border_col = col; border_col < cols; border_col++) { | 2144 for (border_col = col; border_col < cols; border_col++) { |
| 2338 diff = border_orig[border_col] - border_recon[border_col]; | 2145 diff = border_orig[border_col] - border_recon[border_col]; |
| 2339 total_sse += diff * diff; | 2146 total_sse += diff * diff; |
| 2340 } | 2147 } |
| 2341 | 2148 |
| 2342 border_orig += orig_stride; | 2149 border_orig += orig_stride; |
| 2343 border_recon += recon_stride; | 2150 border_recon += recon_stride; |
| 2344 } | 2151 } |
| (...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2483 VP9_COMP *cpi = (VP9_COMP *) comp; | 2290 VP9_COMP *cpi = (VP9_COMP *) comp; |
| 2484 VP9_COMMON *cm = &cpi->common; | 2291 VP9_COMMON *cm = &cpi->common; |
| 2485 cm->refresh_entropy_probs = update; | 2292 cm->refresh_entropy_probs = update; |
| 2486 | 2293 |
| 2487 return 0; | 2294 return 0; |
| 2488 } | 2295 } |
| 2489 | 2296 |
| 2490 | 2297 |
| 2491 #ifdef OUTPUT_YUV_SRC | 2298 #ifdef OUTPUT_YUV_SRC |
| 2492 void vp9_write_yuv_frame(YV12_BUFFER_CONFIG *s) { | 2299 void vp9_write_yuv_frame(YV12_BUFFER_CONFIG *s) { |
| 2493 unsigned char *src = s->y_buffer; | 2300 uint8_t *src = s->y_buffer; |
| 2494 int h = s->y_height; | 2301 int h = s->y_height; |
| 2495 | 2302 |
| 2496 do { | 2303 do { |
| 2497 fwrite(src, s->y_width, 1, yuv_file); | 2304 fwrite(src, s->y_width, 1, yuv_file); |
| 2498 src += s->y_stride; | 2305 src += s->y_stride; |
| 2499 } while (--h); | 2306 } while (--h); |
| 2500 | 2307 |
| 2501 src = s->u_buffer; | 2308 src = s->u_buffer; |
| 2502 h = s->uv_height; | 2309 h = s->uv_height; |
| 2503 | 2310 |
| 2504 do { | 2311 do { |
| 2505 fwrite(src, s->uv_width, 1, yuv_file); | 2312 fwrite(src, s->uv_width, 1, yuv_file); |
| 2506 src += s->uv_stride; | 2313 src += s->uv_stride; |
| 2507 } while (--h); | 2314 } while (--h); |
| 2508 | 2315 |
| 2509 src = s->v_buffer; | 2316 src = s->v_buffer; |
| 2510 h = s->uv_height; | 2317 h = s->uv_height; |
| 2511 | 2318 |
| 2512 do { | 2319 do { |
| 2513 fwrite(src, s->uv_width, 1, yuv_file); | 2320 fwrite(src, s->uv_width, 1, yuv_file); |
| 2514 src += s->uv_stride; | 2321 src += s->uv_stride; |
| 2515 } while (--h); | 2322 } while (--h); |
| 2516 } | 2323 } |
| 2517 #endif | 2324 #endif |
| 2518 | 2325 |
| 2519 #ifdef OUTPUT_YUV_REC | 2326 #ifdef OUTPUT_YUV_REC |
| 2520 void vp9_write_yuv_rec_frame(VP9_COMMON *cm) { | 2327 void vp9_write_yuv_rec_frame(VP9_COMMON *cm) { |
| 2521 YV12_BUFFER_CONFIG *s = cm->frame_to_show; | 2328 YV12_BUFFER_CONFIG *s = cm->frame_to_show; |
| 2522 unsigned char *src = s->y_buffer; | 2329 uint8_t *src = s->y_buffer; |
| 2523 int h = cm->Height; | 2330 int h = cm->Height; |
| 2524 | 2331 |
| 2525 do { | 2332 do { |
| 2526 fwrite(src, s->y_width, 1, yuv_rec_file); | 2333 fwrite(src, s->y_width, 1, yuv_rec_file); |
| 2527 src += s->y_stride; | 2334 src += s->y_stride; |
| 2528 } while (--h); | 2335 } while (--h); |
| 2529 | 2336 |
| 2530 src = s->u_buffer; | 2337 src = s->u_buffer; |
| 2531 h = (cm->Height + 1) / 2; | 2338 h = (cm->Height + 1) / 2; |
| 2532 | 2339 |
| (...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2685 | 2492 |
| 2686 fclose(yframe); | 2493 fclose(yframe); |
| 2687 } | 2494 } |
| 2688 #endif | 2495 #endif |
| 2689 | 2496 |
| 2690 static double compute_edge_pixel_proportion(YV12_BUFFER_CONFIG *frame) { | 2497 static double compute_edge_pixel_proportion(YV12_BUFFER_CONFIG *frame) { |
| 2691 #define EDGE_THRESH 128 | 2498 #define EDGE_THRESH 128 |
| 2692 int i, j; | 2499 int i, j; |
| 2693 int num_edge_pels = 0; | 2500 int num_edge_pels = 0; |
| 2694 int num_pels = (frame->y_height - 2) * (frame->y_width - 2); | 2501 int num_pels = (frame->y_height - 2) * (frame->y_width - 2); |
| 2695 unsigned char *prev = frame->y_buffer + 1; | 2502 uint8_t *prev = frame->y_buffer + 1; |
| 2696 unsigned char *curr = frame->y_buffer + 1 + frame->y_stride; | 2503 uint8_t *curr = frame->y_buffer + 1 + frame->y_stride; |
| 2697 unsigned char *next = frame->y_buffer + 1 + 2 * frame->y_stride; | 2504 uint8_t *next = frame->y_buffer + 1 + 2 * frame->y_stride; |
| 2698 for (i = 1; i < frame->y_height - 1; i++) { | 2505 for (i = 1; i < frame->y_height - 1; i++) { |
| 2699 for (j = 1; j < frame->y_width - 1; j++) { | 2506 for (j = 1; j < frame->y_width - 1; j++) { |
| 2700 /* Sobel hor and ver gradients */ | 2507 /* Sobel hor and ver gradients */ |
| 2701 int v = 2 * (curr[1] - curr[-1]) + (prev[1] - prev[-1]) + (next[1] - next[
-1]); | 2508 int v = 2 * (curr[1] - curr[-1]) + (prev[1] - prev[-1]) + (next[1] - next[
-1]); |
| 2702 int h = 2 * (prev[0] - next[0]) + (prev[1] - next[1]) + (prev[-1] - next[-
1]); | 2509 int h = 2 * (prev[0] - next[0]) + (prev[1] - next[1]) + (prev[-1] - next[-
1]); |
| 2703 h = (h < 0 ? -h : h); | 2510 h = (h < 0 ? -h : h); |
| 2704 v = (v < 0 ? -v : v); | 2511 v = (v < 0 ? -v : v); |
| 2705 if (h > EDGE_THRESH || v > EDGE_THRESH) num_edge_pels++; | 2512 if (h > EDGE_THRESH || v > EDGE_THRESH) num_edge_pels++; |
| 2706 curr++; | 2513 curr++; |
| 2707 prev++; | 2514 prev++; |
| 2708 next++; | 2515 next++; |
| 2709 } | 2516 } |
| 2710 curr += frame->y_stride - frame->y_width + 2; | 2517 curr += frame->y_stride - frame->y_width + 2; |
| 2711 prev += frame->y_stride - frame->y_width + 2; | 2518 prev += frame->y_stride - frame->y_width + 2; |
| 2712 next += frame->y_stride - frame->y_width + 2; | 2519 next += frame->y_stride - frame->y_width + 2; |
| 2713 } | 2520 } |
| 2714 return (double)num_edge_pels / (double)num_pels; | 2521 return (double)num_edge_pels / (double)num_pels; |
| 2715 } | 2522 } |
| 2716 | 2523 |
| 2717 // Function to test for conditions that indicate we should loop | 2524 // Function to test for conditions that indicate we should loop |
| 2718 // back and recode a frame. | 2525 // back and recode a frame. |
| 2719 static BOOL recode_loop_test(VP9_COMP *cpi, | 2526 static int recode_loop_test(VP9_COMP *cpi, |
| 2720 int high_limit, int low_limit, | 2527 int high_limit, int low_limit, |
| 2721 int q, int maxq, int minq) { | 2528 int q, int maxq, int minq) { |
| 2722 BOOL force_recode = FALSE; | 2529 int force_recode = FALSE; |
| 2723 VP9_COMMON *cm = &cpi->common; | 2530 VP9_COMMON *cm = &cpi->common; |
| 2724 | 2531 |
| 2725 // Is frame recode allowed at all | 2532 // Is frame recode allowed at all |
| 2726 // Yes if either recode mode 1 is selected or mode two is selcted | 2533 // Yes if either recode mode 1 is selected or mode two is selcted |
| 2727 // and the frame is a key frame. golden frame or alt_ref_frame | 2534 // and the frame is a key frame. golden frame or alt_ref_frame |
| 2728 if ((cpi->sf.recode_loop == 1) || | 2535 if ((cpi->sf.recode_loop == 1) || |
| 2729 ((cpi->sf.recode_loop == 2) && | 2536 ((cpi->sf.recode_loop == 2) && |
| 2730 ((cm->frame_type == KEY_FRAME) || | 2537 ((cm->frame_type == KEY_FRAME) || |
| 2731 cm->refresh_golden_frame || | 2538 cm->refresh_golden_frame || |
| 2732 cm->refresh_alt_ref_frame))) { | 2539 cm->refresh_alt_ref_frame))) { |
| (...skipping 112 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 2845 vp9_pick_filter_level_fast(cpi->Source, cpi); | 2652 vp9_pick_filter_level_fast(cpi->Source, cpi); |
| 2846 else | 2653 else |
| 2847 vp9_pick_filter_level(cpi->Source, cpi); | 2654 vp9_pick_filter_level(cpi->Source, cpi); |
| 2848 | 2655 |
| 2849 vpx_usec_timer_mark(&timer); | 2656 vpx_usec_timer_mark(&timer); |
| 2850 cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer); | 2657 cpi->time_pick_lpf += vpx_usec_timer_elapsed(&timer); |
| 2851 } | 2658 } |
| 2852 | 2659 |
| 2853 if (cm->filter_level > 0) { | 2660 if (cm->filter_level > 0) { |
| 2854 vp9_set_alt_lf_level(cpi, cm->filter_level); | 2661 vp9_set_alt_lf_level(cpi, cm->filter_level); |
| 2855 vp9_loop_filter_frame(cm, &cpi->mb.e_mbd); | 2662 vp9_loop_filter_frame(cm, &cpi->mb.e_mbd, cm->filter_level, 0); |
| 2856 } | 2663 } |
| 2857 | 2664 |
| 2858 vp8_yv12_extend_frame_borders(cm->frame_to_show); | 2665 vp8_yv12_extend_frame_borders(cm->frame_to_show); |
| 2859 | 2666 |
| 2860 } | 2667 } |
| 2861 | 2668 |
| 2862 #if CONFIG_PRED_FILTER | 2669 void select_interp_filter_type(VP9_COMP *cpi) { |
| 2863 void select_pred_filter_mode(VP9_COMP *cpi) { | 2670 int i; |
| 2864 VP9_COMMON *cm = &cpi->common; | 2671 int high_filter_index = 0; |
| 2672 unsigned int thresh; |
| 2673 unsigned int high_count = 0; |
| 2674 unsigned int count_sum = 0; |
| 2675 unsigned int *hist = cpi->best_switchable_interp_count; |
| 2865 | 2676 |
| 2866 int prob_pred_filter_off = cm->prob_pred_filter_off; | 2677 if (DEFAULT_INTERP_FILTER != SWITCHABLE) { |
| 2678 cpi->common.mcomp_filter_type = DEFAULT_INTERP_FILTER; |
| 2679 return; |
| 2680 } |
| 2867 | 2681 |
| 2868 // Force filter on/off if probability is extreme | 2682 // TODO(agrange): Look at using RD criteria to select the interpolation |
| 2869 if (prob_pred_filter_off >= 255 * 0.95) | 2683 // filter to use for the next frame rather than this simpler counting scheme. |
| 2870 cm->pred_filter_mode = 0; // Off at the frame level | 2684 |
| 2871 else if (prob_pred_filter_off <= 255 * 0.05) | 2685 // Select the interpolation filter mode for the next frame |
| 2872 cm->pred_filter_mode = 1; // On at the frame level | 2686 // based on the selection frequency seen in the current frame. |
| 2873 else | 2687 for (i = 0; i < VP9_SWITCHABLE_FILTERS; ++i) { |
| 2874 cm->pred_filter_mode = 2; // Selectable at the MB level | 2688 unsigned int count = hist[i]; |
| 2689 count_sum += count; |
| 2690 if (count > high_count) { |
| 2691 high_count = count; |
| 2692 high_filter_index = i; |
| 2693 } |
| 2694 } |
| 2695 |
| 2696 thresh = (unsigned int)(0.80 * count_sum); |
| 2697 |
| 2698 if (high_count > thresh) { |
| 2699 // One filter accounts for 80+% of cases so force the next |
| 2700 // frame to use this filter exclusively using frame-level flag. |
| 2701 cpi->common.mcomp_filter_type = vp9_switchable_interp[high_filter_index]; |
| 2702 } else { |
| 2703 // Use a MB-level switchable filter selection strategy. |
| 2704 cpi->common.mcomp_filter_type = SWITCHABLE; |
| 2705 } |
| 2875 } | 2706 } |
| 2876 | 2707 |
| 2877 void update_pred_filt_prob(VP9_COMP *cpi) { | |
| 2878 VP9_COMMON *cm = &cpi->common; | |
| 2879 int prob_pred_filter_off; | |
| 2880 | |
| 2881 // Based on the selection in the previous frame determine what mode | |
| 2882 // to use for the current frame and work out the signaling probability | |
| 2883 if (cpi->pred_filter_on_count + cpi->pred_filter_off_count) { | |
| 2884 prob_pred_filter_off = cpi->pred_filter_off_count * 256 / | |
| 2885 (cpi->pred_filter_on_count + cpi->pred_filter_off_cou
nt); | |
| 2886 | |
| 2887 if (prob_pred_filter_off < 1) | |
| 2888 prob_pred_filter_off = 1; | |
| 2889 | |
| 2890 if (prob_pred_filter_off > 255) | |
| 2891 prob_pred_filter_off = 255; | |
| 2892 | |
| 2893 cm->prob_pred_filter_off = prob_pred_filter_off; | |
| 2894 } else | |
| 2895 cm->prob_pred_filter_off = 128; | |
| 2896 /* | |
| 2897 { | |
| 2898 FILE *fp = fopen("filt_use.txt", "a"); | |
| 2899 fprintf (fp, "%d %d prob=%d\n", cpi->pred_filter_off_count, | |
| 2900 cpi->pred_filter_on_count, cm->prob_pred_filter_off); | |
| 2901 fclose(fp); | |
| 2902 } | |
| 2903 */ | |
| 2904 } | |
| 2905 #endif | |
| 2906 #if CONFIG_COMP_INTERINTRA_PRED | 2708 #if CONFIG_COMP_INTERINTRA_PRED |
| 2907 static void select_interintra_mode(VP9_COMP *cpi) { | 2709 static void select_interintra_mode(VP9_COMP *cpi) { |
| 2908 static const double threshold = 0.01; | 2710 static const double threshold = 0.01; |
| 2909 VP9_COMMON *cm = &cpi->common; | 2711 VP9_COMMON *cm = &cpi->common; |
| 2910 // FIXME(debargha): Make this RD based | 2712 // FIXME(debargha): Make this RD based |
| 2911 int sum = cpi->interintra_select_count[1] + cpi->interintra_select_count[0]; | 2713 int sum = cpi->interintra_select_count[1] + cpi->interintra_select_count[0]; |
| 2912 if (sum) { | 2714 if (sum) { |
| 2913 double fraction = (double) cpi->interintra_select_count[1] / sum; | 2715 double fraction = (double) cpi->interintra_select_count[1] / sum; |
| 2914 // printf("fraction: %f\n", fraction); | 2716 // printf("fraction: %f\n", fraction); |
| 2915 cm->use_interintra = (fraction > threshold); | 2717 cm->use_interintra = (fraction > threshold); |
| 2916 } | 2718 } |
| 2917 } | 2719 } |
| 2918 #endif | 2720 #endif |
| 2919 | 2721 |
| 2920 static void encode_frame_to_data_rate | 2722 static void encode_frame_to_data_rate(VP9_COMP *cpi, |
| 2921 ( | 2723 unsigned long *size, |
| 2922 VP9_COMP *cpi, | 2724 unsigned char *dest, |
| 2923 unsigned long *size, | 2725 unsigned int *frame_flags) { |
| 2924 unsigned char *dest, | |
| 2925 unsigned int *frame_flags | |
| 2926 ) { | |
| 2927 VP9_COMMON *cm = &cpi->common; | 2726 VP9_COMMON *cm = &cpi->common; |
| 2928 MACROBLOCKD *xd = &cpi->mb.e_mbd; | 2727 MACROBLOCKD *xd = &cpi->mb.e_mbd; |
| 2929 | 2728 |
| 2930 int Q; | 2729 int Q; |
| 2931 int frame_over_shoot_limit; | 2730 int frame_over_shoot_limit; |
| 2932 int frame_under_shoot_limit; | 2731 int frame_under_shoot_limit; |
| 2933 | 2732 |
| 2934 int Loop = FALSE; | 2733 int Loop = FALSE; |
| 2935 int loop_count; | 2734 int loop_count; |
| 2936 int this_q; | |
| 2937 int last_zbin_oq; | |
| 2938 | 2735 |
| 2939 int q_low; | 2736 int q_low; |
| 2940 int q_high; | 2737 int q_high; |
| 2941 int zbin_oq_high; | 2738 int zbin_oq_high; |
| 2942 int zbin_oq_low = 0; | 2739 int zbin_oq_low = 0; |
| 2943 | 2740 |
| 2944 int top_index; | 2741 int top_index; |
| 2945 int bottom_index; | 2742 int bottom_index; |
| 2946 int active_worst_qchanged = FALSE; | 2743 int active_worst_qchanged = FALSE; |
| 2947 | 2744 |
| 2948 int overshoot_seen = FALSE; | 2745 int overshoot_seen = FALSE; |
| 2949 int undershoot_seen = FALSE; | 2746 int undershoot_seen = FALSE; |
| 2950 | 2747 |
| 2951 int loop_size_estimate = 0; | |
| 2952 | |
| 2953 SPEED_FEATURES *sf = &cpi->sf; | 2748 SPEED_FEATURES *sf = &cpi->sf; |
| 2954 #if RESET_FOREACH_FILTER | 2749 #if RESET_FOREACH_FILTER |
| 2955 int q_low0; | 2750 int q_low0; |
| 2956 int q_high0; | 2751 int q_high0; |
| 2957 int zbin_oq_high0; | 2752 int zbin_oq_high0; |
| 2958 int zbin_oq_low0 = 0; | 2753 int zbin_oq_low0 = 0; |
| 2959 int Q0; | 2754 int Q0; |
| 2755 int last_zbin_oq; |
| 2960 int last_zbin_oq0; | 2756 int last_zbin_oq0; |
| 2961 int active_best_quality0; | 2757 int active_best_quality0; |
| 2962 int active_worst_quality0; | 2758 int active_worst_quality0; |
| 2963 double rate_correction_factor0; | 2759 double rate_correction_factor0; |
| 2964 double gf_rate_correction_factor0; | 2760 double gf_rate_correction_factor0; |
| 2965 #endif | 2761 #endif |
| 2966 | 2762 |
| 2967 /* list of filters to search over */ | 2763 /* list of filters to search over */ |
| 2968 int mcomp_filters_to_search[] = { | 2764 int mcomp_filters_to_search[] = { |
| 2969 EIGHTTAP, EIGHTTAP_SHARP, SIXTAP, SWITCHABLE | 2765 #if CONFIG_ENABLE_6TAP |
| 2766 EIGHTTAP, EIGHTTAP_SHARP, SIXTAP, SWITCHABLE |
| 2767 #else |
| 2768 EIGHTTAP, EIGHTTAP_SHARP, EIGHTTAP_SMOOTH, SWITCHABLE |
| 2769 #endif |
| 2970 }; | 2770 }; |
| 2971 int mcomp_filters = sizeof(mcomp_filters_to_search) / | 2771 int mcomp_filters = sizeof(mcomp_filters_to_search) / |
| 2972 sizeof(*mcomp_filters_to_search); | 2772 sizeof(*mcomp_filters_to_search); |
| 2973 int mcomp_filter_index = 0; | 2773 int mcomp_filter_index = 0; |
| 2974 INT64 mcomp_filter_cost[4]; | 2774 int64_t mcomp_filter_cost[4]; |
| 2975 | 2775 |
| 2976 // Clear down mmx registers to allow floating point in what follows | 2776 // Clear down mmx registers to allow floating point in what follows |
| 2977 vp9_clear_system_state(); | 2777 vp9_clear_system_state(); |
| 2978 | 2778 |
| 2979 | 2779 |
| 2980 // For an alt ref frame in 2 pass we skip the call to the second | 2780 // For an alt ref frame in 2 pass we skip the call to the second |
| 2981 // pass function that sets the target bandwidth so must set it here | 2781 // pass function that sets the target bandwidth so must set it here |
| 2982 if (cpi->common.refresh_alt_ref_frame) { | 2782 if (cpi->common.refresh_alt_ref_frame) { |
| 2983 cpi->per_frame_bandwidth = cpi->twopass.gf_bits; /
/ Per frame bit target for the alt ref frame | 2783 cpi->per_frame_bandwidth = cpi->twopass.gf_bits; /
/ Per frame bit target for the alt ref frame |
| 2984 // per second target bitrate | 2784 // per second target bitrate |
| (...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3018 if ((cm->current_video_frame == 0) || | 2818 if ((cm->current_video_frame == 0) || |
| 3019 (cm->frame_flags & FRAMEFLAGS_KEY) || | 2819 (cm->frame_flags & FRAMEFLAGS_KEY) || |
| 3020 (cpi->oxcf.auto_key && (cpi->frames_since_key % cpi->key_frame_frequency =
= 0))) { | 2820 (cpi->oxcf.auto_key && (cpi->frames_since_key % cpi->key_frame_frequency =
= 0))) { |
| 3021 // Key frame from VFW/auto-keyframe/first frame | 2821 // Key frame from VFW/auto-keyframe/first frame |
| 3022 cm->frame_type = KEY_FRAME; | 2822 cm->frame_type = KEY_FRAME; |
| 3023 } | 2823 } |
| 3024 | 2824 |
| 3025 // Set default state for segment based loop filter update flags | 2825 // Set default state for segment based loop filter update flags |
| 3026 xd->mode_ref_lf_delta_update = 0; | 2826 xd->mode_ref_lf_delta_update = 0; |
| 3027 | 2827 |
| 3028 #if CONFIG_NEW_MVREF | |
| 3029 // Temp defaults probabilities for ecnoding the MV ref id signal | |
| 3030 vpx_memset(xd->mb_mv_ref_id_probs, 192, | |
| 3031 sizeof(xd->mb_mv_ref_id_probs)); | |
| 3032 #endif | |
| 3033 | 2828 |
| 3034 // Set various flags etc to special state if it is a key frame | 2829 // Set various flags etc to special state if it is a key frame |
| 3035 if (cm->frame_type == KEY_FRAME) { | 2830 if (cm->frame_type == KEY_FRAME) { |
| 3036 int i; | 2831 int i; |
| 3037 | 2832 |
| 3038 // Reset the loop filter deltas and segmentation map | 2833 // Reset the loop filter deltas and segmentation map |
| 3039 setup_features(cpi); | 2834 setup_features(cpi); |
| 3040 | 2835 |
| 3041 // If segmentation is enabled force a map update for key frames | 2836 // If segmentation is enabled force a map update for key frames |
| 3042 if (xd->segmentation_enabled) { | 2837 if (xd->segmentation_enabled) { |
| (...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3162 | 2957 |
| 3163 if (cpi->active_best_quality < cpi->best_quality) | 2958 if (cpi->active_best_quality < cpi->best_quality) |
| 3164 cpi->active_best_quality = cpi->best_quality; | 2959 cpi->active_best_quality = cpi->best_quality; |
| 3165 | 2960 |
| 3166 if (cpi->active_best_quality > cpi->worst_quality) | 2961 if (cpi->active_best_quality > cpi->worst_quality) |
| 3167 cpi->active_best_quality = cpi->worst_quality; | 2962 cpi->active_best_quality = cpi->worst_quality; |
| 3168 | 2963 |
| 3169 if (cpi->active_worst_quality < cpi->active_best_quality) | 2964 if (cpi->active_worst_quality < cpi->active_best_quality) |
| 3170 cpi->active_worst_quality = cpi->active_best_quality; | 2965 cpi->active_worst_quality = cpi->active_best_quality; |
| 3171 | 2966 |
| 3172 // Specuial case code to try and match quality with forced key frames | 2967 // Special case code to try and match quality with forced key frames |
| 3173 if ((cm->frame_type == KEY_FRAME) && cpi->this_key_frame_forced) { | 2968 if ((cm->frame_type == KEY_FRAME) && cpi->this_key_frame_forced) { |
| 3174 Q = cpi->last_boosted_qindex; | 2969 Q = cpi->last_boosted_qindex; |
| 3175 } else { | 2970 } else { |
| 3176 // Determine initial Q to try | 2971 // Determine initial Q to try |
| 3177 Q = vp9_regulate_q(cpi, cpi->this_frame_target); | 2972 Q = vp9_regulate_q(cpi, cpi->this_frame_target); |
| 3178 } | 2973 } |
| 2974 #if RESET_FOREACH_FILTER |
| 3179 last_zbin_oq = cpi->zbin_over_quant; | 2975 last_zbin_oq = cpi->zbin_over_quant; |
| 2976 #endif |
| 3180 | 2977 |
| 3181 // Set highest allowed value for Zbin over quant | 2978 // Set highest allowed value for Zbin over quant |
| 3182 if (cm->frame_type == KEY_FRAME) | 2979 if (cm->frame_type == KEY_FRAME) |
| 3183 zbin_oq_high = 0; // ZBIN_OQ_MAX/16 | 2980 zbin_oq_high = 0; // ZBIN_OQ_MAX/16 |
| 3184 else if (cm->refresh_alt_ref_frame || (cm->refresh_golden_frame && !cpi->sourc
e_alt_ref_active)) | 2981 else if (cm->refresh_alt_ref_frame || (cm->refresh_golden_frame && !cpi->sourc
e_alt_ref_active)) |
| 3185 zbin_oq_high = 16; | 2982 zbin_oq_high = 16; |
| 3186 else | 2983 else |
| 3187 zbin_oq_high = ZBIN_OQ_MAX; | 2984 zbin_oq_high = ZBIN_OQ_MAX; |
| 3188 | 2985 |
| 3189 vp9_compute_frame_size_bounds(cpi, &frame_under_shoot_limit, | 2986 vp9_compute_frame_size_bounds(cpi, &frame_under_shoot_limit, |
| (...skipping 22 matching lines...) Expand all Loading... |
| 3212 | 3009 |
| 3213 #if CONFIG_COMP_INTERINTRA_PRED | 3010 #if CONFIG_COMP_INTERINTRA_PRED |
| 3214 if (cm->current_video_frame == 0) { | 3011 if (cm->current_video_frame == 0) { |
| 3215 cm->use_interintra = 1; | 3012 cm->use_interintra = 1; |
| 3216 } | 3013 } |
| 3217 #endif | 3014 #endif |
| 3218 | 3015 |
| 3219 #if CONFIG_POSTPROC | 3016 #if CONFIG_POSTPROC |
| 3220 | 3017 |
| 3221 if (cpi->oxcf.noise_sensitivity > 0) { | 3018 if (cpi->oxcf.noise_sensitivity > 0) { |
| 3222 unsigned char *src; | 3019 uint8_t *src; |
| 3223 int l = 0; | 3020 int l = 0; |
| 3224 | 3021 |
| 3225 switch (cpi->oxcf.noise_sensitivity) { | 3022 switch (cpi->oxcf.noise_sensitivity) { |
| 3226 case 1: | 3023 case 1: |
| 3227 l = 20; | 3024 l = 20; |
| 3228 break; | 3025 break; |
| 3229 case 2: | 3026 case 2: |
| 3230 l = 40; | 3027 l = 40; |
| 3231 break; | 3028 break; |
| 3232 case 3: | 3029 case 3: |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3273 rate_correction_factor0 = cpi->rate_correction_factor; | 3070 rate_correction_factor0 = cpi->rate_correction_factor; |
| 3274 gf_rate_correction_factor0 = cpi->gf_rate_correction_factor; | 3071 gf_rate_correction_factor0 = cpi->gf_rate_correction_factor; |
| 3275 active_best_quality0 = cpi->active_best_quality; | 3072 active_best_quality0 = cpi->active_best_quality; |
| 3276 active_worst_quality0 = cpi->active_worst_quality; | 3073 active_worst_quality0 = cpi->active_worst_quality; |
| 3277 } | 3074 } |
| 3278 #endif | 3075 #endif |
| 3279 do { | 3076 do { |
| 3280 vp9_clear_system_state(); // __asm emms; | 3077 vp9_clear_system_state(); // __asm emms; |
| 3281 | 3078 |
| 3282 vp9_set_quantizer(cpi, Q); | 3079 vp9_set_quantizer(cpi, Q); |
| 3283 this_q = Q; | |
| 3284 | 3080 |
| 3285 if (loop_count == 0) { | 3081 if (loop_count == 0) { |
| 3286 | 3082 |
| 3287 // setup skip prob for costing in mode/mv decision | 3083 // setup skip prob for costing in mode/mv decision |
| 3288 if (cpi->common.mb_no_coeff_skip) { | 3084 if (cpi->common.mb_no_coeff_skip) { |
| 3289 int k; | 3085 int k; |
| 3290 for (k = 0; k < MBSKIP_CONTEXTS; k++) | 3086 for (k = 0; k < MBSKIP_CONTEXTS; k++) |
| 3291 cm->mbskip_pred_probs[k] = cpi->base_skip_false_prob[Q][k]; | 3087 cm->mbskip_pred_probs[k] = cpi->base_skip_false_prob[Q][k]; |
| 3292 | 3088 |
| 3293 if (cm->frame_type != KEY_FRAME) { | 3089 if (cm->frame_type != KEY_FRAME) { |
| (...skipping 43 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3337 // transform / motion compensation build reconstruction frame | 3133 // transform / motion compensation build reconstruction frame |
| 3338 | 3134 |
| 3339 vp9_encode_frame(cpi); | 3135 vp9_encode_frame(cpi); |
| 3340 | 3136 |
| 3341 // Update the skip mb flag probabilities based on the distribution | 3137 // Update the skip mb flag probabilities based on the distribution |
| 3342 // seen in the last encoder iteration. | 3138 // seen in the last encoder iteration. |
| 3343 update_base_skip_probs(cpi); | 3139 update_base_skip_probs(cpi); |
| 3344 | 3140 |
| 3345 vp9_clear_system_state(); // __asm emms; | 3141 vp9_clear_system_state(); // __asm emms; |
| 3346 | 3142 |
| 3347 #if CONFIG_PRED_FILTER | |
| 3348 // Update prediction filter on/off probability based on | |
| 3349 // selection made for the current frame | |
| 3350 if (cm->frame_type != KEY_FRAME) | |
| 3351 update_pred_filt_prob(cpi); | |
| 3352 #endif | |
| 3353 | |
| 3354 // Dummy pack of the bitstream using up to date stats to get an | 3143 // Dummy pack of the bitstream using up to date stats to get an |
| 3355 // accurate estimate of output frame size to determine if we need | 3144 // accurate estimate of output frame size to determine if we need |
| 3356 // to recode. | 3145 // to recode. |
| 3357 vp9_save_coding_context(cpi); | 3146 vp9_save_coding_context(cpi); |
| 3358 cpi->dummy_packing = 1; | 3147 cpi->dummy_packing = 1; |
| 3359 vp9_pack_bitstream(cpi, dest, size); | 3148 vp9_pack_bitstream(cpi, dest, size); |
| 3360 cpi->projected_frame_size = (*size) << 3; | 3149 cpi->projected_frame_size = (*size) << 3; |
| 3361 vp9_restore_coding_context(cpi); | 3150 vp9_restore_coding_context(cpi); |
| 3362 | 3151 |
| 3363 if (frame_over_shoot_limit == 0) | 3152 if (frame_over_shoot_limit == 0) |
| (...skipping 145 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3509 else if (Q < q_low) | 3298 else if (Q < q_low) |
| 3510 Q = q_low; | 3299 Q = q_low; |
| 3511 | 3300 |
| 3512 // Clamp cpi->zbin_over_quant | 3301 // Clamp cpi->zbin_over_quant |
| 3513 cpi->zbin_over_quant = (cpi->zbin_over_quant < zbin_oq_low) ? | 3302 cpi->zbin_over_quant = (cpi->zbin_over_quant < zbin_oq_low) ? |
| 3514 zbin_oq_low : (cpi->zbin_over_quant > zbin_oq_high) ? | 3303 zbin_oq_low : (cpi->zbin_over_quant > zbin_oq_high) ? |
| 3515 zbin_oq_high : cpi->zbin_over_quant; | 3304 zbin_oq_high : cpi->zbin_over_quant; |
| 3516 | 3305 |
| 3517 // Loop = ((Q != last_q) || (last_zbin_oq != cpi->zbin_over_quant)) ? TRUE
: FALSE; | 3306 // Loop = ((Q != last_q) || (last_zbin_oq != cpi->zbin_over_quant)) ? TRUE
: FALSE; |
| 3518 Loop = ((Q != last_q)) ? TRUE : FALSE; | 3307 Loop = ((Q != last_q)) ? TRUE : FALSE; |
| 3308 #if RESET_FOREACH_FILTER |
| 3519 last_zbin_oq = cpi->zbin_over_quant; | 3309 last_zbin_oq = cpi->zbin_over_quant; |
| 3310 #endif |
| 3520 } else | 3311 } else |
| 3521 Loop = FALSE; | 3312 Loop = FALSE; |
| 3522 | 3313 |
| 3523 if (cpi->is_src_frame_alt_ref) | 3314 if (cpi->is_src_frame_alt_ref) |
| 3524 Loop = FALSE; | 3315 Loop = FALSE; |
| 3525 | 3316 |
| 3526 if (cm->frame_type != KEY_FRAME && | |
| 3527 !sf->search_best_filter && | |
| 3528 cm->mcomp_filter_type == SWITCHABLE) { | |
| 3529 int interp_factor = Q / 3; /* denominator is 256 */ | |
| 3530 int count[VP9_SWITCHABLE_FILTERS]; | |
| 3531 int tot_count = 0, c = 0, thr; | |
| 3532 int i, j; | |
| 3533 for (i = 0; i < VP9_SWITCHABLE_FILTERS; ++i) { | |
| 3534 count[i] = 0; | |
| 3535 for (j = 0; j <= VP9_SWITCHABLE_FILTERS; ++j) { | |
| 3536 count[i] += cpi->switchable_interp_count[j][i]; | |
| 3537 } | |
| 3538 tot_count += count[i]; | |
| 3539 } | |
| 3540 | |
| 3541 thr = ((tot_count * interp_factor + 128) >> 8); | |
| 3542 for (i = 0; i < VP9_SWITCHABLE_FILTERS; ++i) { | |
| 3543 c += (count[i] >= thr); | |
| 3544 } | |
| 3545 if (c == 1) { | |
| 3546 /* Mostly one filter is used. So set the filter at frame level */ | |
| 3547 for (i = 0; i < VP9_SWITCHABLE_FILTERS; ++i) { | |
| 3548 if (count[i]) { | |
| 3549 cm->mcomp_filter_type = vp9_switchable_interp[i]; | |
| 3550 Loop = TRUE; /* Make sure to loop since the filter changed */ | |
| 3551 break; | |
| 3552 } | |
| 3553 } | |
| 3554 } | |
| 3555 } | |
| 3556 | |
| 3557 if (Loop == FALSE && cm->frame_type != KEY_FRAME && sf->search_best_filter)
{ | 3317 if (Loop == FALSE && cm->frame_type != KEY_FRAME && sf->search_best_filter)
{ |
| 3558 if (mcomp_filter_index < mcomp_filters) { | 3318 if (mcomp_filter_index < mcomp_filters) { |
| 3559 INT64 err = vp9_calc_ss_err(cpi->Source, | 3319 int64_t err = vp9_calc_ss_err(cpi->Source, |
| 3560 &cm->yv12_fb[cm->new_fb_idx]); | 3320 &cm->yv12_fb[cm->new_fb_idx]); |
| 3561 INT64 rate = cpi->projected_frame_size << 8; | 3321 int64_t rate = cpi->projected_frame_size << 8; |
| 3562 mcomp_filter_cost[mcomp_filter_index] = | 3322 mcomp_filter_cost[mcomp_filter_index] = |
| 3563 (RDCOST(cpi->RDMULT, cpi->RDDIV, rate, err)); | 3323 (RDCOST(cpi->RDMULT, cpi->RDDIV, rate, err)); |
| 3564 mcomp_filter_index++; | 3324 mcomp_filter_index++; |
| 3565 if (mcomp_filter_index < mcomp_filters) { | 3325 if (mcomp_filter_index < mcomp_filters) { |
| 3566 cm->mcomp_filter_type = mcomp_filters_to_search[mcomp_filter_index]; | 3326 cm->mcomp_filter_type = mcomp_filters_to_search[mcomp_filter_index]; |
| 3567 loop_count = -1; | 3327 loop_count = -1; |
| 3568 Loop = TRUE; | 3328 Loop = TRUE; |
| 3569 } else { | 3329 } else { |
| 3570 int f; | 3330 int f; |
| 3571 INT64 best_cost = mcomp_filter_cost[0]; | 3331 int64_t best_cost = mcomp_filter_cost[0]; |
| 3572 int mcomp_best_filter = mcomp_filters_to_search[0]; | 3332 int mcomp_best_filter = mcomp_filters_to_search[0]; |
| 3573 for (f = 1; f < mcomp_filters; f++) { | 3333 for (f = 1; f < mcomp_filters; f++) { |
| 3574 if (mcomp_filter_cost[f] < best_cost) { | 3334 if (mcomp_filter_cost[f] < best_cost) { |
| 3575 mcomp_best_filter = mcomp_filters_to_search[f]; | 3335 mcomp_best_filter = mcomp_filters_to_search[f]; |
| 3576 best_cost = mcomp_filter_cost[f]; | 3336 best_cost = mcomp_filter_cost[f]; |
| 3577 } | 3337 } |
| 3578 } | 3338 } |
| 3579 if (mcomp_best_filter != mcomp_filters_to_search[mcomp_filters - 1]) { | 3339 if (mcomp_best_filter != mcomp_filters_to_search[mcomp_filters - 1]) { |
| 3580 loop_count = -1; | 3340 loop_count = -1; |
| 3581 Loop = TRUE; | 3341 Loop = TRUE; |
| (...skipping 19 matching lines...) Expand all Loading... |
| 3601 cpi->gf_rate_correction_factor = gf_rate_correction_factor0; | 3361 cpi->gf_rate_correction_factor = gf_rate_correction_factor0; |
| 3602 cpi->active_best_quality = active_best_quality0; | 3362 cpi->active_best_quality = active_best_quality0; |
| 3603 cpi->active_worst_quality = active_worst_quality0; | 3363 cpi->active_worst_quality = active_worst_quality0; |
| 3604 } | 3364 } |
| 3605 #endif | 3365 #endif |
| 3606 } | 3366 } |
| 3607 } | 3367 } |
| 3608 | 3368 |
| 3609 if (Loop == TRUE) { | 3369 if (Loop == TRUE) { |
| 3610 loop_count++; | 3370 loop_count++; |
| 3371 |
| 3611 #if CONFIG_INTERNAL_STATS | 3372 #if CONFIG_INTERNAL_STATS |
| 3612 cpi->tot_recode_hits++; | 3373 cpi->tot_recode_hits++; |
| 3613 #endif | 3374 #endif |
| 3614 } | 3375 } |
| 3615 } while (Loop == TRUE); | 3376 } while (Loop == TRUE); |
| 3616 | 3377 |
| 3617 // Special case code to reduce pulsing when key frames are forced at a | 3378 // Special case code to reduce pulsing when key frames are forced at a |
| 3618 // fixed interval. Note the reconstruction error if it is the frame before | 3379 // fixed interval. Note the reconstruction error if it is the frame before |
| 3619 // the force key frame | 3380 // the force key frame |
| 3620 if (cpi->next_key_frame_forced && (cpi->twopass.frames_to_key == 0)) { | 3381 if (cpi->next_key_frame_forced && (cpi->twopass.frames_to_key == 0)) { |
| (...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3676 loopfilter_frame(cpi, cm); | 3437 loopfilter_frame(cpi, cm); |
| 3677 | 3438 |
| 3678 // build the bitstream | 3439 // build the bitstream |
| 3679 cpi->dummy_packing = 0; | 3440 cpi->dummy_packing = 0; |
| 3680 vp9_pack_bitstream(cpi, dest, size); | 3441 vp9_pack_bitstream(cpi, dest, size); |
| 3681 | 3442 |
| 3682 if (cpi->mb.e_mbd.update_mb_segmentation_map) { | 3443 if (cpi->mb.e_mbd.update_mb_segmentation_map) { |
| 3683 update_reference_segmentation_map(cpi); | 3444 update_reference_segmentation_map(cpi); |
| 3684 } | 3445 } |
| 3685 | 3446 |
| 3686 #if CONFIG_PRED_FILTER | |
| 3687 // Select the prediction filtering mode to use for the | |
| 3688 // next frame based on the current frame selections | |
| 3689 if (cm->frame_type != KEY_FRAME) | |
| 3690 select_pred_filter_mode(cpi); | |
| 3691 #endif | |
| 3692 | |
| 3693 update_reference_frames(cm); | 3447 update_reference_frames(cm); |
| 3694 vp9_copy(cpi->common.fc.coef_counts, cpi->coef_counts); | 3448 vp9_copy(cpi->common.fc.coef_counts_4x4, cpi->coef_counts_4x4); |
| 3695 vp9_copy(cpi->common.fc.hybrid_coef_counts, cpi->hybrid_coef_counts); | 3449 vp9_copy(cpi->common.fc.hybrid_coef_counts_4x4, |
| 3450 cpi->hybrid_coef_counts_4x4); |
| 3696 vp9_copy(cpi->common.fc.coef_counts_8x8, cpi->coef_counts_8x8); | 3451 vp9_copy(cpi->common.fc.coef_counts_8x8, cpi->coef_counts_8x8); |
| 3697 vp9_copy(cpi->common.fc.hybrid_coef_counts_8x8, cpi->hybrid_coef_counts_8x8); | 3452 vp9_copy(cpi->common.fc.hybrid_coef_counts_8x8, |
| 3453 cpi->hybrid_coef_counts_8x8); |
| 3698 vp9_copy(cpi->common.fc.coef_counts_16x16, cpi->coef_counts_16x16); | 3454 vp9_copy(cpi->common.fc.coef_counts_16x16, cpi->coef_counts_16x16); |
| 3699 vp9_copy(cpi->common.fc.hybrid_coef_counts_16x16, | 3455 vp9_copy(cpi->common.fc.hybrid_coef_counts_16x16, |
| 3700 cpi->hybrid_coef_counts_16x16); | 3456 cpi->hybrid_coef_counts_16x16); |
| 3457 vp9_copy(cpi->common.fc.coef_counts_32x32, cpi->coef_counts_32x32); |
| 3701 vp9_adapt_coef_probs(&cpi->common); | 3458 vp9_adapt_coef_probs(&cpi->common); |
| 3702 if (cpi->common.frame_type != KEY_FRAME) { | 3459 if (cpi->common.frame_type != KEY_FRAME) { |
| 3703 #if CONFIG_SUPERBLOCKS | |
| 3704 vp9_copy(cpi->common.fc.sb_ymode_counts, cpi->sb_ymode_count); | 3460 vp9_copy(cpi->common.fc.sb_ymode_counts, cpi->sb_ymode_count); |
| 3705 #endif | |
| 3706 vp9_copy(cpi->common.fc.ymode_counts, cpi->ymode_count); | 3461 vp9_copy(cpi->common.fc.ymode_counts, cpi->ymode_count); |
| 3707 vp9_copy(cpi->common.fc.uv_mode_counts, cpi->y_uv_mode_count); | 3462 vp9_copy(cpi->common.fc.uv_mode_counts, cpi->y_uv_mode_count); |
| 3708 vp9_copy(cpi->common.fc.bmode_counts, cpi->bmode_count); | 3463 vp9_copy(cpi->common.fc.bmode_counts, cpi->bmode_count); |
| 3709 vp9_copy(cpi->common.fc.i8x8_mode_counts, cpi->i8x8_mode_count); | 3464 vp9_copy(cpi->common.fc.i8x8_mode_counts, cpi->i8x8_mode_count); |
| 3710 vp9_copy(cpi->common.fc.sub_mv_ref_counts, cpi->sub_mv_ref_count); | 3465 vp9_copy(cpi->common.fc.sub_mv_ref_counts, cpi->sub_mv_ref_count); |
| 3711 vp9_copy(cpi->common.fc.mbsplit_counts, cpi->mbsplit_count); | 3466 vp9_copy(cpi->common.fc.mbsplit_counts, cpi->mbsplit_count); |
| 3712 #if CONFIG_COMP_INTERINTRA_PRED | 3467 #if CONFIG_COMP_INTERINTRA_PRED |
| 3713 vp9_copy(cpi->common.fc.interintra_counts, cpi->interintra_count); | 3468 vp9_copy(cpi->common.fc.interintra_counts, cpi->interintra_count); |
| 3714 #endif | 3469 #endif |
| 3715 vp9_adapt_mode_probs(&cpi->common); | 3470 vp9_adapt_mode_probs(&cpi->common); |
| 3716 | 3471 |
| 3717 cpi->common.fc.NMVcount = cpi->NMVcount; | 3472 cpi->common.fc.NMVcount = cpi->NMVcount; |
| 3718 /* | 3473 /* |
| 3719 printf("2: %d %d %d %d\n", cpi->NMVcount.joints[0], cpi->NMVcount.joints[1], | 3474 printf("2: %d %d %d %d\n", cpi->NMVcount.joints[0], cpi->NMVcount.joints[1], |
| 3720 cpi->NMVcount.joints[2], cpi->NMVcount.joints[3]); | 3475 cpi->NMVcount.joints[2], cpi->NMVcount.joints[3]); |
| 3721 */ | 3476 */ |
| 3722 vp9_adapt_nmv_probs(&cpi->common, cpi->mb.e_mbd.allow_high_precision_mv); | 3477 vp9_adapt_nmv_probs(&cpi->common, cpi->mb.e_mbd.allow_high_precision_mv); |
| 3723 } | 3478 } |
| 3724 #if CONFIG_COMP_INTERINTRA_PRED | 3479 #if CONFIG_COMP_INTERINTRA_PRED |
| 3725 if (cm->frame_type != KEY_FRAME) | 3480 if (cm->frame_type != KEY_FRAME) |
| 3726 select_interintra_mode(cpi); | 3481 select_interintra_mode(cpi); |
| 3727 #endif | 3482 #endif |
| 3728 | 3483 |
| 3729 /* Move storing frame_type out of the above loop since it is also | 3484 /* Move storing frame_type out of the above loop since it is also |
| 3730 * needed in motion search besides loopfilter */ | 3485 * needed in motion search besides loopfilter */ |
| 3731 cm->last_frame_type = cm->frame_type; | 3486 cm->last_frame_type = cm->frame_type; |
| 3732 | 3487 |
| 3733 // Keep a copy of the size estimate used in the loop | |
| 3734 loop_size_estimate = cpi->projected_frame_size; | |
| 3735 | |
| 3736 // Update rate control heuristics | 3488 // Update rate control heuristics |
| 3737 cpi->total_byte_count += (*size); | 3489 cpi->total_byte_count += (*size); |
| 3738 cpi->projected_frame_size = (*size) << 3; | 3490 cpi->projected_frame_size = (*size) << 3; |
| 3739 | 3491 |
| 3740 if (!active_worst_qchanged) | 3492 if (!active_worst_qchanged) |
| 3741 vp9_update_rate_correction_factors(cpi, 2); | 3493 vp9_update_rate_correction_factors(cpi, 2); |
| 3742 | 3494 |
| 3743 cpi->last_q[cm->frame_type] = cm->base_qindex; | 3495 cpi->last_q[cm->frame_type] = cm->base_qindex; |
| 3744 | 3496 |
| 3745 // Keep record of last boosted (KF/KF/ARF) Q value. | 3497 // Keep record of last boosted (KF/KF/ARF) Q value. |
| (...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 3810 cpi->twopass.gf_group_bits += cpi->this_frame_target - cpi->projected_frame_
size; | 3562 cpi->twopass.gf_group_bits += cpi->this_frame_target - cpi->projected_frame_
size; |
| 3811 | 3563 |
| 3812 if (cpi->twopass.gf_group_bits < 0) | 3564 if (cpi->twopass.gf_group_bits < 0) |
| 3813 cpi->twopass.gf_group_bits = 0; | 3565 cpi->twopass.gf_group_bits = 0; |
| 3814 } | 3566 } |
| 3815 | 3567 |
| 3816 // Update the skip mb flag probabilities based on the distribution seen | 3568 // Update the skip mb flag probabilities based on the distribution seen |
| 3817 // in this frame. | 3569 // in this frame. |
| 3818 update_base_skip_probs(cpi); | 3570 update_base_skip_probs(cpi); |
| 3819 | 3571 |
| 3820 #if 0 //CONFIG_NEW_MVREF && CONFIG_INTERNAL_STATS | |
| 3821 { | |
| 3822 FILE *f = fopen("mv_ref_dist.stt", "a"); | |
| 3823 unsigned int i; | |
| 3824 for (i = 0; i < MAX_MV_REFS; ++i) { | |
| 3825 fprintf(f, "%10d", cpi->best_ref_index_counts[0][i]); | |
| 3826 } | |
| 3827 fprintf(f, "\n" ); | |
| 3828 | |
| 3829 fclose(f); | |
| 3830 } | |
| 3831 #endif | |
| 3832 | |
| 3833 #if 0// 1 && CONFIG_INTERNAL_STATS | 3572 #if 0// 1 && CONFIG_INTERNAL_STATS |
| 3834 { | 3573 { |
| 3835 FILE *f = fopen("tmp.stt", "a"); | 3574 FILE *f = fopen("tmp.stt", "a"); |
| 3836 int recon_err; | 3575 int recon_err; |
| 3837 | 3576 |
| 3838 vp9_clear_system_state(); // __asm emms; | 3577 vp9_clear_system_state(); // __asm emms; |
| 3839 | 3578 |
| 3840 recon_err = vp9_calc_ss_err(cpi->Source, | 3579 recon_err = vp9_calc_ss_err(cpi->Source, |
| 3841 &cm->yv12_fb[cm->new_fb_idx]); | 3580 &cm->yv12_fb[cm->new_fb_idx]); |
| 3842 | 3581 |
| 3843 if (cpi->twopass.total_left_stats->coded_error != 0.0) | 3582 if (cpi->twopass.total_left_stats->coded_error != 0.0) |
| 3844 fprintf(f, "%10d %10d %10d %10d %10d %10d %10d %10d" | 3583 fprintf(f, "%10d %10d %10d %10d %10d %10d %10d %10d" |
| 3845 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f" | 3584 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f" |
| 3846 "%6d %5d %5d %5d %8d %8.2f %10d %10.3f" | 3585 "%6d %5d %5d %5d %8d %8.2f %10d %10.3f" |
| 3847 "%10.3f %8d %10d %10d %10d\n", | 3586 "%10.3f %8d %10d %10d %10d\n", |
| 3848 cpi->common.current_video_frame, cpi->this_frame_target, | 3587 cpi->common.current_video_frame, cpi->this_frame_target, |
| 3849 cpi->projected_frame_size, loop_size_estimate, | 3588 cpi->projected_frame_size, 0, //loop_size_estimate, |
| 3850 (cpi->projected_frame_size - cpi->this_frame_target), | 3589 (cpi->projected_frame_size - cpi->this_frame_target), |
| 3851 (int)cpi->total_target_vs_actual, | 3590 (int)cpi->total_target_vs_actual, |
| 3852 (cpi->oxcf.starting_buffer_level - cpi->bits_off_target), | 3591 (cpi->oxcf.starting_buffer_level - cpi->bits_off_target), |
| 3853 (int)cpi->total_actual_bits, | 3592 (int)cpi->total_actual_bits, |
| 3854 vp9_convert_qindex_to_q(cm->base_qindex), | 3593 vp9_convert_qindex_to_q(cm->base_qindex), |
| 3855 (double)vp9_dc_quant(cm->base_qindex, 0) / 4.0, | 3594 (double)vp9_dc_quant(cm->base_qindex, 0) / 4.0, |
| 3856 vp9_convert_qindex_to_q(cpi->active_best_quality), | 3595 vp9_convert_qindex_to_q(cpi->active_best_quality), |
| 3857 vp9_convert_qindex_to_q(cpi->active_worst_quality), | 3596 vp9_convert_qindex_to_q(cpi->active_worst_quality), |
| 3858 cpi->avg_q, | 3597 cpi->avg_q, |
| 3859 vp9_convert_qindex_to_q(cpi->ni_av_qi), | 3598 vp9_convert_qindex_to_q(cpi->ni_av_qi), |
| 3860 vp9_convert_qindex_to_q(cpi->cq_target_quality), | 3599 vp9_convert_qindex_to_q(cpi->cq_target_quality), |
| 3861 cpi->zbin_over_quant, | 3600 cpi->zbin_over_quant, |
| 3862 // cpi->avg_frame_qindex, cpi->zbin_over_quant, | 3601 // cpi->avg_frame_qindex, cpi->zbin_over_quant, |
| 3863 cm->refresh_golden_frame, cm->refresh_alt_ref_frame, | 3602 cm->refresh_golden_frame, cm->refresh_alt_ref_frame, |
| 3864 cm->frame_type, cpi->gfu_boost, | 3603 cm->frame_type, cpi->gfu_boost, |
| 3865 cpi->twopass.est_max_qcorrection_factor, | 3604 cpi->twopass.est_max_qcorrection_factor, |
| 3866 (int)cpi->twopass.bits_left, | 3605 (int)cpi->twopass.bits_left, |
| 3867 cpi->twopass.total_left_stats->coded_error, | 3606 cpi->twopass.total_left_stats->coded_error, |
| 3868 (double)cpi->twopass.bits_left / | 3607 (double)cpi->twopass.bits_left / |
| 3869 cpi->twopass.total_left_stats->coded_error, | 3608 cpi->twopass.total_left_stats->coded_error, |
| 3870 cpi->tot_recode_hits, recon_err, cpi->kf_boost, | 3609 cpi->tot_recode_hits, recon_err, cpi->kf_boost, |
| 3871 cpi->kf_zeromotion_pct); | 3610 cpi->kf_zeromotion_pct); |
| 3872 else | 3611 else |
| 3873 fprintf(f, "%10d %10d %10d %10d %10d %10d %10d %10d" | 3612 fprintf(f, "%10d %10d %10d %10d %10d %10d %10d %10d" |
| 3874 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f" | 3613 "%7.2f %7.2f %7.2f %7.2f %7.2f %7.2f %7.2f" |
| 3875 "%6d %5d %5d %5d %8d %8.2f %10d %10.3f" | 3614 "%6d %5d %5d %5d %8d %8.2f %10d %10.3f" |
| 3876 "%8d %10d %10d %10d\n", | 3615 "%8d %10d %10d %10d\n", |
| 3877 cpi->common.current_video_frame, | 3616 cpi->common.current_video_frame, |
| 3878 cpi->this_frame_target, cpi->projected_frame_size, | 3617 cpi->this_frame_target, cpi->projected_frame_size, |
| 3879 loop_size_estimate, | 3618 0, //loop_size_estimate, |
| 3880 (cpi->projected_frame_size - cpi->this_frame_target), | 3619 (cpi->projected_frame_size - cpi->this_frame_target), |
| 3881 (int)cpi->total_target_vs_actual, | 3620 (int)cpi->total_target_vs_actual, |
| 3882 (cpi->oxcf.starting_buffer_level - cpi->bits_off_target), | 3621 (cpi->oxcf.starting_buffer_level - cpi->bits_off_target), |
| 3883 (int)cpi->total_actual_bits, | 3622 (int)cpi->total_actual_bits, |
| 3884 vp9_convert_qindex_to_q(cm->base_qindex), | 3623 vp9_convert_qindex_to_q(cm->base_qindex), |
| 3885 (double)vp9_dc_quant(cm->base_qindex, 0) / 4.0, | 3624 (double)vp9_dc_quant(cm->base_qindex, 0) / 4.0, |
| 3886 vp9_convert_qindex_to_q(cpi->active_best_quality), | 3625 vp9_convert_qindex_to_q(cpi->active_best_quality), |
| 3887 vp9_convert_qindex_to_q(cpi->active_worst_quality), | 3626 vp9_convert_qindex_to_q(cpi->active_worst_quality), |
| 3888 cpi->avg_q, | 3627 cpi->avg_q, |
| 3889 vp9_convert_qindex_to_q(cpi->ni_av_qi), | 3628 vp9_convert_qindex_to_q(cpi->ni_av_qi), |
| (...skipping 601 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 4491 | 4230 |
| 4492 return 0; | 4231 return 0; |
| 4493 } | 4232 } |
| 4494 | 4233 |
| 4495 | 4234 |
| 4496 | 4235 |
| 4497 int vp9_calc_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest) { | 4236 int vp9_calc_ss_err(YV12_BUFFER_CONFIG *source, YV12_BUFFER_CONFIG *dest) { |
| 4498 int i, j; | 4237 int i, j; |
| 4499 int Total = 0; | 4238 int Total = 0; |
| 4500 | 4239 |
| 4501 unsigned char *src = source->y_buffer; | 4240 uint8_t *src = source->y_buffer; |
| 4502 unsigned char *dst = dest->y_buffer; | 4241 uint8_t *dst = dest->y_buffer; |
| 4503 | 4242 |
| 4504 // Loop through the Y plane raw and reconstruction data summing (square differ
ences) | 4243 // Loop through the Y plane raw and reconstruction data summing (square differ
ences) |
| 4505 for (i = 0; i < source->y_height; i += 16) { | 4244 for (i = 0; i < source->y_height; i += 16) { |
| 4506 for (j = 0; j < source->y_width; j += 16) { | 4245 for (j = 0; j < source->y_width; j += 16) { |
| 4507 unsigned int sse; | 4246 unsigned int sse; |
| 4508 Total += vp9_mse16x16(src + j, source->y_stride, dst + j, dest->y_stride, | 4247 Total += vp9_mse16x16(src + j, source->y_stride, dst + j, dest->y_stride, |
| 4509 &sse); | 4248 &sse); |
| 4510 } | 4249 } |
| 4511 | 4250 |
| 4512 src += 16 * source->y_stride; | 4251 src += 16 * source->y_stride; |
| 4513 dst += 16 * dest->y_stride; | 4252 dst += 16 * dest->y_stride; |
| 4514 } | 4253 } |
| 4515 | 4254 |
| 4516 return Total; | 4255 return Total; |
| 4517 } | 4256 } |
| 4518 | 4257 |
| 4519 | 4258 |
| 4520 int vp9_get_quantizer(VP9_PTR c) { | 4259 int vp9_get_quantizer(VP9_PTR c) { |
| 4521 VP9_COMP *cpi = (VP9_COMP *) c; | 4260 VP9_COMP *cpi = (VP9_COMP *) c; |
| 4522 return cpi->common.base_qindex; | 4261 return cpi->common.base_qindex; |
| 4523 } | 4262 } |
| OLD | NEW |