| 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  | 
| (...skipping 310 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|   321  * decide whether to include cost of a trailing EOB node or not (i.e. we |   321  * decide whether to include cost of a trailing EOB node or not (i.e. we | 
|   322  * can skip this if the last coefficient in this transform block, e.g. the |   322  * can skip this if the last coefficient in this transform block, e.g. the | 
|   323  * 16th coefficient in a 4x4 block or the 64th coefficient in a 8x8 block, |   323  * 16th coefficient in a 4x4 block or the 64th coefficient in a 8x8 block, | 
|   324  * were non-zero). */ |   324  * were non-zero). */ | 
|   325 static const int16_t band_counts[TX_SIZES][8] = { |   325 static const int16_t band_counts[TX_SIZES][8] = { | 
|   326   { 1, 2, 3, 4,  3,   16 - 13, 0 }, |   326   { 1, 2, 3, 4,  3,   16 - 13, 0 }, | 
|   327   { 1, 2, 3, 4, 11,   64 - 21, 0 }, |   327   { 1, 2, 3, 4, 11,   64 - 21, 0 }, | 
|   328   { 1, 2, 3, 4, 11,  256 - 21, 0 }, |   328   { 1, 2, 3, 4, 11,  256 - 21, 0 }, | 
|   329   { 1, 2, 3, 4, 11, 1024 - 21, 0 }, |   329   { 1, 2, 3, 4, 11, 1024 - 21, 0 }, | 
|   330 }; |   330 }; | 
|   331 static INLINE int cost_coeffs(MACROBLOCK *x, |   331 static int cost_coeffs(MACROBLOCK *x, | 
|   332                               int plane, int block, |   332                        int plane, int block, | 
|   333                               ENTROPY_CONTEXT *A, ENTROPY_CONTEXT *L, |   333                        ENTROPY_CONTEXT *A, ENTROPY_CONTEXT *L, | 
|   334                               TX_SIZE tx_size, |   334                        TX_SIZE tx_size, | 
|   335                               const int16_t *scan, const int16_t *nb, |   335                        const int16_t *scan, const int16_t *nb, | 
|   336                               int use_fast_coef_costing) { |   336                        int use_fast_coef_costing) { | 
|   337   MACROBLOCKD *const xd = &x->e_mbd; |   337   MACROBLOCKD *const xd = &x->e_mbd; | 
|   338   MB_MODE_INFO *mbmi = &xd->mi[0].src_mi->mbmi; |   338   MB_MODE_INFO *mbmi = &xd->mi[0].src_mi->mbmi; | 
|   339   const struct macroblock_plane *p = &x->plane[plane]; |   339   const struct macroblock_plane *p = &x->plane[plane]; | 
|   340   const struct macroblockd_plane *pd = &xd->plane[plane]; |   340   const struct macroblockd_plane *pd = &xd->plane[plane]; | 
|   341   const PLANE_TYPE type = pd->plane_type; |   341   const PLANE_TYPE type = pd->plane_type; | 
|   342   const int16_t *band_count = &band_counts[tx_size][1]; |   342   const int16_t *band_count = &band_counts[tx_size][1]; | 
|   343   const int eob = p->eobs[block]; |   343   const int eob = p->eobs[block]; | 
|   344   const tran_low_t *const qcoeff = BLOCK_OFFSET(p->qcoeff, block); |   344   const tran_low_t *const qcoeff = BLOCK_OFFSET(p->qcoeff, block); | 
|   345   unsigned int (*token_costs)[2][COEFF_CONTEXTS][ENTROPY_TOKENS] = |   345   unsigned int (*token_costs)[2][COEFF_CONTEXTS][ENTROPY_TOKENS] = | 
|   346                    x->token_costs[tx_size][type][is_inter_block(mbmi)]; |   346                    x->token_costs[tx_size][type][is_inter_block(mbmi)]; | 
| (...skipping 962 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  1309   } |  1309   } | 
|  1310  |  1310  | 
|  1311   mic->bmi[i].as_mv[0].as_int = this_mv[0].as_int; |  1311   mic->bmi[i].as_mv[0].as_int = this_mv[0].as_int; | 
|  1312   if (is_compound) |  1312   if (is_compound) | 
|  1313     mic->bmi[i].as_mv[1].as_int = this_mv[1].as_int; |  1313     mic->bmi[i].as_mv[1].as_int = this_mv[1].as_int; | 
|  1314  |  1314  | 
|  1315   mic->bmi[i].as_mode = mode; |  1315   mic->bmi[i].as_mode = mode; | 
|  1316  |  1316  | 
|  1317   for (idy = 0; idy < num_4x4_blocks_high; ++idy) |  1317   for (idy = 0; idy < num_4x4_blocks_high; ++idy) | 
|  1318     for (idx = 0; idx < num_4x4_blocks_wide; ++idx) |  1318     for (idx = 0; idx < num_4x4_blocks_wide; ++idx) | 
|  1319       vpx_memcpy(&mic->bmi[i + idy * 2 + idx], |  1319       vpx_memmove(&mic->bmi[i + idy * 2 + idx], | 
|  1320                  &mic->bmi[i], sizeof(mic->bmi[i])); |  1320                   &mic->bmi[i], sizeof(mic->bmi[i])); | 
|  1321  |  1321  | 
|  1322   return cost_mv_ref(cpi, mode, mbmi->mode_context[mbmi->ref_frame[0]]) + |  1322   return cost_mv_ref(cpi, mode, mbmi->mode_context[mbmi->ref_frame[0]]) + | 
|  1323             thismvcost; |  1323             thismvcost; | 
|  1324 } |  1324 } | 
|  1325  |  1325  | 
|  1326 static int64_t encode_inter_mb_segment(VP9_COMP *cpi, |  1326 static int64_t encode_inter_mb_segment(VP9_COMP *cpi, | 
|  1327                                        MACROBLOCK *x, |  1327                                        MACROBLOCK *x, | 
|  1328                                        int64_t best_yrd, |  1328                                        int64_t best_yrd, | 
|  1329                                        int i, |  1329                                        int i, | 
|  1330                                        int *labelyrate, |  1330                                        int *labelyrate, | 
| (...skipping 684 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2015                                int_mv frame_nearest_mv[MAX_REF_FRAMES], |  2015                                int_mv frame_nearest_mv[MAX_REF_FRAMES], | 
|  2016                                int_mv frame_near_mv[MAX_REF_FRAMES], |  2016                                int_mv frame_near_mv[MAX_REF_FRAMES], | 
|  2017                                struct buf_2d yv12_mb[4][MAX_MB_PLANE]) { |  2017                                struct buf_2d yv12_mb[4][MAX_MB_PLANE]) { | 
|  2018   const VP9_COMMON *cm = &cpi->common; |  2018   const VP9_COMMON *cm = &cpi->common; | 
|  2019   const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame); |  2019   const YV12_BUFFER_CONFIG *yv12 = get_ref_frame_buffer(cpi, ref_frame); | 
|  2020   MACROBLOCKD *const xd = &x->e_mbd; |  2020   MACROBLOCKD *const xd = &x->e_mbd; | 
|  2021   MODE_INFO *const mi = xd->mi[0].src_mi; |  2021   MODE_INFO *const mi = xd->mi[0].src_mi; | 
|  2022   int_mv *const candidates = mi->mbmi.ref_mvs[ref_frame]; |  2022   int_mv *const candidates = mi->mbmi.ref_mvs[ref_frame]; | 
|  2023   const struct scale_factors *const sf = &cm->frame_refs[ref_frame - 1].sf; |  2023   const struct scale_factors *const sf = &cm->frame_refs[ref_frame - 1].sf; | 
|  2024  |  2024  | 
 |  2025   assert(yv12 != NULL); | 
 |  2026  | 
|  2025   // TODO(jkoleszar): Is the UV buffer ever used here? If so, need to make this |  2027   // TODO(jkoleszar): Is the UV buffer ever used here? If so, need to make this | 
|  2026   // use the UV scaling factors. |  2028   // use the UV scaling factors. | 
|  2027   vp9_setup_pred_block(xd, yv12_mb[ref_frame], yv12, mi_row, mi_col, sf, sf); |  2029   vp9_setup_pred_block(xd, yv12_mb[ref_frame], yv12, mi_row, mi_col, sf, sf); | 
|  2028  |  2030  | 
|  2029   // Gets an initial list of candidate vectors from neighbours and orders them |  2031   // Gets an initial list of candidate vectors from neighbours and orders them | 
|  2030   vp9_find_mv_refs(cm, xd, tile, mi, ref_frame, candidates, mi_row, mi_col, |  2032   vp9_find_mv_refs(cm, xd, tile, mi, ref_frame, candidates, mi_row, mi_col, | 
|  2031                    NULL, NULL); |  2033                    NULL, NULL); | 
|  2032  |  2034  | 
|  2033   // Candidate refinement carried out at encoder and decoder |  2035   // Candidate refinement carried out at encoder and decoder | 
|  2034   vp9_find_best_ref_mvs(xd, cm->allow_high_precision_mv, candidates, |  2036   vp9_find_best_ref_mvs(xd, cm->allow_high_precision_mv, candidates, | 
| (...skipping 870 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  2905       single_inter_filter[i][k] = SWITCHABLE; |  2907       single_inter_filter[i][k] = SWITCHABLE; | 
|  2906       single_skippable[i][k] = 0; |  2908       single_skippable[i][k] = 0; | 
|  2907     } |  2909     } | 
|  2908   } |  2910   } | 
|  2909  |  2911  | 
|  2910   rd_cost->rate = INT_MAX; |  2912   rd_cost->rate = INT_MAX; | 
|  2911  |  2913  | 
|  2912   for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { |  2914   for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { | 
|  2913     x->pred_mv_sad[ref_frame] = INT_MAX; |  2915     x->pred_mv_sad[ref_frame] = INT_MAX; | 
|  2914     if (cpi->ref_frame_flags & flag_list[ref_frame]) { |  2916     if (cpi->ref_frame_flags & flag_list[ref_frame]) { | 
 |  2917       assert(get_ref_frame_buffer(cpi, ref_frame) != NULL); | 
|  2915       setup_buffer_inter(cpi, x, tile_info, ref_frame, bsize, mi_row, mi_col, |  2918       setup_buffer_inter(cpi, x, tile_info, ref_frame, bsize, mi_row, mi_col, | 
|  2916                          frame_mv[NEARESTMV], frame_mv[NEARMV], yv12_mb); |  2919                          frame_mv[NEARESTMV], frame_mv[NEARMV], yv12_mb); | 
|  2917     } |  2920     } | 
|  2918     frame_mv[NEWMV][ref_frame].as_int = INVALID_MV; |  2921     frame_mv[NEWMV][ref_frame].as_int = INVALID_MV; | 
|  2919     frame_mv[ZEROMV][ref_frame].as_int = 0; |  2922     frame_mv[ZEROMV][ref_frame].as_int = 0; | 
|  2920   } |  2923   } | 
|  2921  |  2924  | 
|  2922   for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { |  2925   for (ref_frame = LAST_FRAME; ref_frame <= ALTREF_FRAME; ++ref_frame) { | 
|  2923     if (!(cpi->ref_frame_flags & flag_list[ref_frame])) { |  2926     if (!(cpi->ref_frame_flags & flag_list[ref_frame])) { | 
|  2924       // Skip checking missing references in both single and compound reference |  2927       // Skip checking missing references in both single and compound reference | 
| (...skipping 1306 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
|  4231     } |  4234     } | 
|  4232     if (cm->interp_filter == SWITCHABLE) |  4235     if (cm->interp_filter == SWITCHABLE) | 
|  4233       assert(best_filter_diff[SWITCHABLE_FILTERS] == 0); |  4236       assert(best_filter_diff[SWITCHABLE_FILTERS] == 0); | 
|  4234   } else { |  4237   } else { | 
|  4235     vp9_zero(best_filter_diff); |  4238     vp9_zero(best_filter_diff); | 
|  4236   } |  4239   } | 
|  4237  |  4240  | 
|  4238   store_coding_context(x, ctx, best_ref_index, |  4241   store_coding_context(x, ctx, best_ref_index, | 
|  4239                        best_pred_diff, best_tx_diff, best_filter_diff, 0); |  4242                        best_pred_diff, best_tx_diff, best_filter_diff, 0); | 
|  4240 } |  4243 } | 
|  4241  |  | 
| OLD | NEW |