OLD | NEW |
1 /* | 1 /* |
2 * Copyright (c) 2014 The WebM project authors. All Rights Reserved. | 2 * Copyright (c) 2014 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 |
(...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
99 | 99 |
100 mi->mbmi.mode_context[ref_frame] = counter_to_context[context_counter]; | 100 mi->mbmi.mode_context[ref_frame] = counter_to_context[context_counter]; |
101 | 101 |
102 // Clamp vectors | 102 // Clamp vectors |
103 for (i = 0; i < MAX_MV_REF_CANDIDATES; ++i) | 103 for (i = 0; i < MAX_MV_REF_CANDIDATES; ++i) |
104 clamp_mv_ref(&mv_ref_list[i].as_mv, xd); | 104 clamp_mv_ref(&mv_ref_list[i].as_mv, xd); |
105 | 105 |
106 return const_motion; | 106 return const_motion; |
107 } | 107 } |
108 | 108 |
109 static void full_pixel_motion_search(VP9_COMP *cpi, MACROBLOCK *x, | 109 static int combined_motion_search(VP9_COMP *cpi, MACROBLOCK *x, |
110 BLOCK_SIZE bsize, int mi_row, int mi_col, | 110 BLOCK_SIZE bsize, int mi_row, int mi_col, |
111 int_mv *tmp_mv, int *rate_mv) { | 111 int_mv *tmp_mv, int *rate_mv, |
| 112 int64_t best_rd_sofar) { |
112 MACROBLOCKD *xd = &x->e_mbd; | 113 MACROBLOCKD *xd = &x->e_mbd; |
113 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi; | 114 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi; |
114 struct buf_2d backup_yv12[MAX_MB_PLANE] = {{0, 0}}; | 115 struct buf_2d backup_yv12[MAX_MB_PLANE] = {{0, 0}}; |
115 int step_param; | 116 const int step_param = cpi->sf.mv.fullpel_search_step_param; |
116 int sadpb = x->sadperbit16; | 117 const int sadpb = x->sadperbit16; |
117 MV mvp_full; | 118 MV mvp_full; |
118 int ref = mbmi->ref_frame[0]; | 119 const int ref = mbmi->ref_frame[0]; |
119 const MV ref_mv = mbmi->ref_mvs[ref][0].as_mv; | 120 const MV ref_mv = mbmi->ref_mvs[ref][0].as_mv; |
120 int i; | 121 int dis; |
121 | 122 int rate_mode; |
122 int tmp_col_min = x->mv_col_min; | 123 const int tmp_col_min = x->mv_col_min; |
123 int tmp_col_max = x->mv_col_max; | 124 const int tmp_col_max = x->mv_col_max; |
124 int tmp_row_min = x->mv_row_min; | 125 const int tmp_row_min = x->mv_row_min; |
125 int tmp_row_max = x->mv_row_max; | 126 const int tmp_row_max = x->mv_row_max; |
126 | 127 int rv = 0; |
127 const YV12_BUFFER_CONFIG *scaled_ref_frame = vp9_get_scaled_ref_frame(cpi, | 128 const YV12_BUFFER_CONFIG *scaled_ref_frame = vp9_get_scaled_ref_frame(cpi, |
128 ref); | 129 ref); |
| 130 if (cpi->common.show_frame && |
| 131 (x->pred_mv_sad[ref] >> 3) > x->pred_mv_sad[LAST_FRAME]) |
| 132 return rv; |
| 133 |
129 if (scaled_ref_frame) { | 134 if (scaled_ref_frame) { |
130 int i; | 135 int i; |
131 // Swap out the reference frame for a version that's been scaled to | 136 // Swap out the reference frame for a version that's been scaled to |
132 // match the resolution of the current frame, allowing the existing | 137 // match the resolution of the current frame, allowing the existing |
133 // motion search code to be used without additional modifications. | 138 // motion search code to be used without additional modifications. |
134 for (i = 0; i < MAX_MB_PLANE; i++) | 139 for (i = 0; i < MAX_MB_PLANE; i++) |
135 backup_yv12[i] = xd->plane[i].pre[0]; | 140 backup_yv12[i] = xd->plane[i].pre[0]; |
136 | |
137 vp9_setup_pre_planes(xd, 0, scaled_ref_frame, mi_row, mi_col, NULL); | 141 vp9_setup_pre_planes(xd, 0, scaled_ref_frame, mi_row, mi_col, NULL); |
138 } | 142 } |
139 | |
140 vp9_set_mv_search_range(x, &ref_mv); | 143 vp9_set_mv_search_range(x, &ref_mv); |
141 | 144 |
142 // TODO(jingning) exploiting adaptive motion search control in non-RD | |
143 // mode decision too. | |
144 step_param = cpi->sf.mv.fullpel_search_step_param; | |
145 | |
146 for (i = LAST_FRAME; i <= LAST_FRAME && cpi->common.show_frame; ++i) { | |
147 if ((x->pred_mv_sad[ref] >> 3) > x->pred_mv_sad[i]) { | |
148 tmp_mv->as_int = INVALID_MV; | |
149 | |
150 if (scaled_ref_frame) { | |
151 int i; | |
152 for (i = 0; i < MAX_MB_PLANE; i++) | |
153 xd->plane[i].pre[0] = backup_yv12[i]; | |
154 } | |
155 return; | |
156 } | |
157 } | |
158 assert(x->mv_best_ref_index[ref] <= 2); | 145 assert(x->mv_best_ref_index[ref] <= 2); |
159 if (x->mv_best_ref_index[ref] < 2) | 146 if (x->mv_best_ref_index[ref] < 2) |
160 mvp_full = mbmi->ref_mvs[ref][x->mv_best_ref_index[ref]].as_mv; | 147 mvp_full = mbmi->ref_mvs[ref][x->mv_best_ref_index[ref]].as_mv; |
161 else | 148 else |
162 mvp_full = x->pred_mv[ref]; | 149 mvp_full = x->pred_mv[ref]; |
163 | 150 |
164 mvp_full.col >>= 3; | 151 mvp_full.col >>= 3; |
165 mvp_full.row >>= 3; | 152 mvp_full.row >>= 3; |
166 | 153 |
167 vp9_full_pixel_search(cpi, x, bsize, &mvp_full, step_param, sadpb, &ref_mv, | 154 vp9_full_pixel_search(cpi, x, bsize, &mvp_full, step_param, sadpb, &ref_mv, |
168 &tmp_mv->as_mv, INT_MAX, 0); | 155 &tmp_mv->as_mv, INT_MAX, 0); |
169 | 156 |
170 x->mv_col_min = tmp_col_min; | 157 x->mv_col_min = tmp_col_min; |
171 x->mv_col_max = tmp_col_max; | 158 x->mv_col_max = tmp_col_max; |
172 x->mv_row_min = tmp_row_min; | 159 x->mv_row_min = tmp_row_min; |
173 x->mv_row_max = tmp_row_max; | 160 x->mv_row_max = tmp_row_max; |
174 | 161 |
| 162 // calculate the bit cost on motion vector |
| 163 mvp_full.row = tmp_mv->as_mv.row * 8; |
| 164 mvp_full.col = tmp_mv->as_mv.col * 8; |
| 165 |
| 166 *rate_mv = vp9_mv_bit_cost(&mvp_full, &ref_mv, |
| 167 x->nmvjointcost, x->mvcost, MV_COST_WEIGHT); |
| 168 |
| 169 rate_mode = cpi->inter_mode_cost[mbmi->mode_context[ref]] |
| 170 [INTER_OFFSET(NEWMV)]; |
| 171 rv = !(RDCOST(x->rdmult, x->rddiv, (*rate_mv + rate_mode), 0) > |
| 172 best_rd_sofar); |
| 173 |
| 174 if (rv) { |
| 175 cpi->find_fractional_mv_step(x, &tmp_mv->as_mv, &ref_mv, |
| 176 cpi->common.allow_high_precision_mv, |
| 177 x->errorperbit, |
| 178 &cpi->fn_ptr[bsize], |
| 179 cpi->sf.mv.subpel_force_stop, |
| 180 cpi->sf.mv.subpel_iters_per_step, |
| 181 x->nmvjointcost, x->mvcost, |
| 182 &dis, &x->pred_sse[ref], NULL, 0, 0); |
| 183 x->pred_mv[ref] = tmp_mv->as_mv; |
| 184 } |
| 185 |
175 if (scaled_ref_frame) { | 186 if (scaled_ref_frame) { |
176 int i; | 187 int i; |
177 for (i = 0; i < MAX_MB_PLANE; i++) | 188 for (i = 0; i < MAX_MB_PLANE; i++) |
178 xd->plane[i].pre[0] = backup_yv12[i]; | 189 xd->plane[i].pre[0] = backup_yv12[i]; |
179 } | 190 } |
180 | 191 return rv; |
181 // calculate the bit cost on motion vector | |
182 mvp_full.row = tmp_mv->as_mv.row * 8; | |
183 mvp_full.col = tmp_mv->as_mv.col * 8; | |
184 *rate_mv = vp9_mv_bit_cost(&mvp_full, &ref_mv, | |
185 x->nmvjointcost, x->mvcost, MV_COST_WEIGHT); | |
186 } | 192 } |
187 | 193 |
188 static void sub_pixel_motion_search(VP9_COMP *cpi, MACROBLOCK *x, | |
189 BLOCK_SIZE bsize, int mi_row, int mi_col, | |
190 MV *tmp_mv) { | |
191 MACROBLOCKD *xd = &x->e_mbd; | |
192 MB_MODE_INFO *mbmi = &xd->mi[0]->mbmi; | |
193 struct buf_2d backup_yv12[MAX_MB_PLANE] = {{0, 0}}; | |
194 int ref = mbmi->ref_frame[0]; | |
195 MV ref_mv = mbmi->ref_mvs[ref][0].as_mv; | |
196 int dis; | |
197 | |
198 const YV12_BUFFER_CONFIG *scaled_ref_frame = vp9_get_scaled_ref_frame(cpi, | |
199 ref); | |
200 if (scaled_ref_frame) { | |
201 int i; | |
202 // Swap out the reference frame for a version that's been scaled to | |
203 // match the resolution of the current frame, allowing the existing | |
204 // motion search code to be used without additional modifications. | |
205 for (i = 0; i < MAX_MB_PLANE; i++) | |
206 backup_yv12[i] = xd->plane[i].pre[0]; | |
207 | |
208 vp9_setup_pre_planes(xd, 0, scaled_ref_frame, mi_row, mi_col, NULL); | |
209 } | |
210 | |
211 cpi->find_fractional_mv_step(x, tmp_mv, &ref_mv, | |
212 cpi->common.allow_high_precision_mv, | |
213 x->errorperbit, | |
214 &cpi->fn_ptr[bsize], | |
215 cpi->sf.mv.subpel_force_stop, | |
216 cpi->sf.mv.subpel_iters_per_step, | |
217 x->nmvjointcost, x->mvcost, | |
218 &dis, &x->pred_sse[ref]); | |
219 | |
220 if (scaled_ref_frame) { | |
221 int i; | |
222 for (i = 0; i < MAX_MB_PLANE; i++) | |
223 xd->plane[i].pre[0] = backup_yv12[i]; | |
224 } | |
225 | |
226 x->pred_mv[ref] = *tmp_mv; | |
227 } | |
228 | 194 |
229 static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize, | 195 static void model_rd_for_sb_y(VP9_COMP *cpi, BLOCK_SIZE bsize, |
230 MACROBLOCK *x, MACROBLOCKD *xd, | 196 MACROBLOCK *x, MACROBLOCKD *xd, |
231 int *out_rate_sum, int64_t *out_dist_sum, | 197 int *out_rate_sum, int64_t *out_dist_sum, |
232 unsigned int *var_y, unsigned int *sse_y) { | 198 unsigned int *var_y, unsigned int *sse_y) { |
233 // Note our transform coeffs are 8 times an orthogonal transform. | 199 // Note our transform coeffs are 8 times an orthogonal transform. |
234 // Hence quantizer step is also 8 times. To get effective quantizer | 200 // Hence quantizer step is also 8 times. To get effective quantizer |
235 // we need to divide by 8 before sending to modeling function. | 201 // we need to divide by 8 before sending to modeling function. |
236 unsigned int sse; | 202 unsigned int sse; |
237 int rate; | 203 int rate; |
(...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
314 // The encode_breakout input | 280 // The encode_breakout input |
315 const unsigned int min_thresh = | 281 const unsigned int min_thresh = |
316 MIN(((unsigned int)x->encode_breakout << 4), max_thresh); | 282 MIN(((unsigned int)x->encode_breakout << 4), max_thresh); |
317 | 283 |
318 // Calculate threshold according to dequant value. | 284 // Calculate threshold according to dequant value. |
319 thresh_ac = (xd->plane[0].dequant[1] * xd->plane[0].dequant[1]) / 9; | 285 thresh_ac = (xd->plane[0].dequant[1] * xd->plane[0].dequant[1]) / 9; |
320 thresh_ac = clamp(thresh_ac, min_thresh, max_thresh); | 286 thresh_ac = clamp(thresh_ac, min_thresh, max_thresh); |
321 | 287 |
322 // Adjust ac threshold according to partition size. | 288 // Adjust ac threshold according to partition size. |
323 thresh_ac >>= | 289 thresh_ac >>= |
324 8 - (b_width_log2_lookup[bsize] + b_height_log2_lookup[bsize]); | 290 8 - (b_width_log2(bsize) + b_height_log2(bsize)); |
325 | 291 |
326 thresh_dc = (xd->plane[0].dequant[0] * xd->plane[0].dequant[0] >> 6); | 292 thresh_dc = (xd->plane[0].dequant[0] * xd->plane[0].dequant[0] >> 6); |
327 } else { | 293 } else { |
328 thresh_ac = 0; | 294 thresh_ac = 0; |
329 thresh_dc = 0; | 295 thresh_dc = 0; |
330 } | 296 } |
331 | 297 |
332 // Y skipping condition checking for ac and dc. | 298 // Y skipping condition checking for ac and dc. |
333 if (var <= thresh_ac && (sse - var) <= thresh_dc) { | 299 if (var <= thresh_ac && (sse - var) <= thresh_dc) { |
334 unsigned int sse_u, sse_v; | 300 unsigned int sse_u, sse_v; |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
414 const int64_t inter_mode_thresh = RDCOST(x->rdmult, x->rddiv, | 380 const int64_t inter_mode_thresh = RDCOST(x->rdmult, x->rddiv, |
415 intra_cost_penalty, 0); | 381 intra_cost_penalty, 0); |
416 const int64_t intra_mode_cost = 50; | 382 const int64_t intra_mode_cost = 50; |
417 | 383 |
418 unsigned char segment_id = mbmi->segment_id; | 384 unsigned char segment_id = mbmi->segment_id; |
419 const int *const rd_threshes = cpi->rd.threshes[segment_id][bsize]; | 385 const int *const rd_threshes = cpi->rd.threshes[segment_id][bsize]; |
420 const int *const rd_thresh_freq_fact = cpi->rd.thresh_freq_fact[bsize]; | 386 const int *const rd_thresh_freq_fact = cpi->rd.thresh_freq_fact[bsize]; |
421 // Mode index conversion form THR_MODES to PREDICTION_MODE for a ref frame. | 387 // Mode index conversion form THR_MODES to PREDICTION_MODE for a ref frame. |
422 int mode_idx[MB_MODE_COUNT] = {0}; | 388 int mode_idx[MB_MODE_COUNT] = {0}; |
423 INTERP_FILTER filter_ref = cm->interp_filter; | 389 INTERP_FILTER filter_ref = cm->interp_filter; |
424 int bsl = mi_width_log2_lookup[bsize]; | 390 int bsl = mi_width_log2(bsize); |
425 const int pred_filter_search = cm->interp_filter == SWITCHABLE ? | 391 const int pred_filter_search = cm->interp_filter == SWITCHABLE ? |
426 (((mi_row + mi_col) >> bsl) + get_chessboard_index(cm)) % 2 : 0; | 392 (((mi_row + mi_col) >> bsl) + get_chessboard_index(cm)) % 2 : 0; |
427 int const_motion[MAX_REF_FRAMES] = { 0 }; | 393 int const_motion[MAX_REF_FRAMES] = { 0 }; |
428 | 394 |
429 // For speed 6, the result of interp filter is reused later in actual encoding | 395 // For speed 6, the result of interp filter is reused later in actual encoding |
430 // process. | 396 // process. |
431 int bh = num_4x4_blocks_high_lookup[bsize] << 2; | 397 int bh = num_4x4_blocks_high_lookup[bsize] << 2; |
432 int bw = num_4x4_blocks_wide_lookup[bsize] << 2; | 398 int bw = num_4x4_blocks_wide_lookup[bsize] << 2; |
433 int pixels_in_block = bh * bw; | 399 int pixels_in_block = bh * bw; |
434 // tmp[3] points to dst buffer, and the other 3 point to allocated buffers. | 400 // tmp[3] points to dst buffer, and the other 3 point to allocated buffers. |
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
537 continue; | 503 continue; |
538 | 504 |
539 if (!(cpi->sf.inter_mode_mask[bsize] & (1 << this_mode))) | 505 if (!(cpi->sf.inter_mode_mask[bsize] & (1 << this_mode))) |
540 continue; | 506 continue; |
541 | 507 |
542 if (rd_less_than_thresh(best_rd, rd_threshes[mode_idx[this_mode]], | 508 if (rd_less_than_thresh(best_rd, rd_threshes[mode_idx[this_mode]], |
543 rd_thresh_freq_fact[this_mode])) | 509 rd_thresh_freq_fact[this_mode])) |
544 continue; | 510 continue; |
545 | 511 |
546 if (this_mode == NEWMV) { | 512 if (this_mode == NEWMV) { |
547 int rate_mode = 0; | |
548 if (this_rd < (int64_t)(1 << num_pels_log2_lookup[bsize])) | 513 if (this_rd < (int64_t)(1 << num_pels_log2_lookup[bsize])) |
549 continue; | 514 continue; |
550 | 515 if (!combined_motion_search(cpi, x, bsize, mi_row, mi_col, |
551 full_pixel_motion_search(cpi, x, bsize, mi_row, mi_col, | 516 &frame_mv[NEWMV][ref_frame], |
552 &frame_mv[NEWMV][ref_frame], &rate_mv); | 517 &rate_mv, best_rd)) |
553 | |
554 if (frame_mv[NEWMV][ref_frame].as_int == INVALID_MV) | |
555 continue; | 518 continue; |
556 | |
557 rate_mode = cpi->inter_mode_cost[mbmi->mode_context[ref_frame]] | |
558 [INTER_OFFSET(this_mode)]; | |
559 if (RDCOST(x->rdmult, x->rddiv, rate_mv + rate_mode, 0) > best_rd) | |
560 continue; | |
561 | |
562 sub_pixel_motion_search(cpi, x, bsize, mi_row, mi_col, | |
563 &frame_mv[NEWMV][ref_frame].as_mv); | |
564 } | 519 } |
565 | 520 |
566 if (this_mode != NEARESTMV) | 521 if (this_mode != NEARESTMV && |
567 if (frame_mv[this_mode][ref_frame].as_int == | 522 frame_mv[this_mode][ref_frame].as_int == |
568 frame_mv[NEARESTMV][ref_frame].as_int) | 523 frame_mv[NEARESTMV][ref_frame].as_int) |
569 continue; | 524 continue; |
570 | 525 |
571 mbmi->mode = this_mode; | 526 mbmi->mode = this_mode; |
572 mbmi->mv[0].as_int = frame_mv[this_mode][ref_frame].as_int; | 527 mbmi->mv[0].as_int = frame_mv[this_mode][ref_frame].as_int; |
573 | 528 |
574 // Search for the best prediction filter type, when the resulting | 529 // Search for the best prediction filter type, when the resulting |
575 // motion vector is at sub-pixel accuracy level for luma component, i.e., | 530 // motion vector is at sub-pixel accuracy level for luma component, i.e., |
576 // the last three bits are all zeros. | 531 // the last three bits are all zeros. |
577 if (cpi->sf.reuse_inter_pred_sby) { | 532 if (cpi->sf.reuse_inter_pred_sby) { |
578 if (this_mode == NEARESTMV) { | 533 if (this_mode == NEARESTMV) { |
(...skipping 134 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
713 xd->mi[0]->bmi[0].as_mv[0].as_int = mbmi->mv[0].as_int; | 668 xd->mi[0]->bmi[0].as_mv[0].as_int = mbmi->mv[0].as_int; |
714 x->skip_txfm = skip_txfm; | 669 x->skip_txfm = skip_txfm; |
715 | 670 |
716 // Perform intra prediction search, if the best SAD is above a certain | 671 // Perform intra prediction search, if the best SAD is above a certain |
717 // threshold. | 672 // threshold. |
718 if (!x->skip && best_rd > inter_mode_thresh && | 673 if (!x->skip && best_rd > inter_mode_thresh && |
719 bsize <= cpi->sf.max_intra_bsize) { | 674 bsize <= cpi->sf.max_intra_bsize) { |
720 int i, j; | 675 int i, j; |
721 const int width = num_4x4_blocks_wide_lookup[bsize]; | 676 const int width = num_4x4_blocks_wide_lookup[bsize]; |
722 const int height = num_4x4_blocks_high_lookup[bsize]; | 677 const int height = num_4x4_blocks_high_lookup[bsize]; |
| 678 const BLOCK_SIZE bsize_tx = txsize_to_bsize[mbmi->tx_size]; |
723 | 679 |
724 int rate2 = 0; | 680 int rate2 = 0; |
725 int64_t dist2 = 0; | 681 int64_t dist2 = 0; |
726 const int dst_stride = pd->dst.stride; | 682 const int dst_stride = pd->dst.stride; |
727 const int src_stride = p->src.stride; | 683 const int src_stride = p->src.stride; |
728 int block_idx = 0; | 684 int block_idx = 0; |
729 | 685 |
730 TX_SIZE tmp_tx_size = MIN(max_txsize_lookup[bsize], | 686 TX_SIZE tmp_tx_size = MIN(max_txsize_lookup[bsize], |
731 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]); | 687 tx_mode_to_biggest_tx_size[cpi->common.tx_mode]); |
732 const int step = 1 << tmp_tx_size; | 688 const int step = 1 << tmp_tx_size; |
733 | 689 |
734 for (this_mode = DC_PRED; this_mode <= DC_PRED; ++this_mode) { | 690 for (this_mode = DC_PRED; this_mode <= DC_PRED; ++this_mode) { |
735 if (cpi->sf.reuse_inter_pred_sby) { | 691 if (cpi->sf.reuse_inter_pred_sby) { |
736 pd->dst.buf = tmp[0].data; | 692 pd->dst.buf = tmp[0].data; |
737 pd->dst.stride = bw; | 693 pd->dst.stride = bw; |
738 } | 694 } |
739 | 695 |
740 for (j = 0; j < height; j += step) { | 696 for (j = 0; j < height; j += step) { |
741 for (i = 0; i < width; i += step) { | 697 for (i = 0; i < width; i += step) { |
742 vp9_predict_intra_block(xd, block_idx, b_width_log2(bsize), | 698 vp9_predict_intra_block(xd, block_idx, b_width_log2(bsize), |
743 tmp_tx_size, this_mode, | 699 tmp_tx_size, this_mode, |
744 &p->src.buf[4 * (j * dst_stride + i)], | 700 &p->src.buf[4 * (j * dst_stride + i)], |
745 src_stride, | 701 src_stride, |
746 &pd->dst.buf[4 * (j * dst_stride + i)], | 702 &pd->dst.buf[4 * (j * dst_stride + i)], |
747 dst_stride, i, j, 0); | 703 dst_stride, i, j, 0); |
748 model_rd_for_sb_y(cpi, bsize, x, xd, &rate, &dist, &var_y, &sse_y); | 704 model_rd_for_sb_y(cpi, bsize_tx, x, xd, &rate, &dist, &var_y, &sse_y); |
749 rate2 += rate; | 705 rate2 += rate; |
750 dist2 += dist; | 706 dist2 += dist; |
751 ++block_idx; | 707 ++block_idx; |
752 } | 708 } |
753 } | 709 } |
754 | 710 |
755 rate = rate2; | 711 rate = rate2; |
756 dist = dist2; | 712 dist = dist2; |
757 | 713 |
758 rate += cpi->mbmode_cost[this_mode]; | 714 rate += cpi->mbmode_cost[this_mode]; |
(...skipping 19 matching lines...) Expand all Loading... |
778 } | 734 } |
779 | 735 |
780 #if CONFIG_DENOISING | 736 #if CONFIG_DENOISING |
781 if (cpi->oxcf.noise_sensitivity > 0) { | 737 if (cpi->oxcf.noise_sensitivity > 0) { |
782 vp9_denoiser_denoise(&cpi->denoiser, x, mi_row, mi_col, bsize); | 738 vp9_denoiser_denoise(&cpi->denoiser, x, mi_row, mi_col, bsize); |
783 } | 739 } |
784 #endif | 740 #endif |
785 | 741 |
786 return INT64_MAX; | 742 return INT64_MAX; |
787 } | 743 } |
OLD | NEW |