Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4)

Side by Side Diff: source/libvpx/vp9/common/vp9_loopfilter.c

Issue 290653003: libvpx: Pull from upstream (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/deps/third_party/libvpx/
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
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 601 matching lines...) Expand 10 before | Expand all | Expand 10 after
612 left_64x64_txform_mask[tx_size_y]) << shift_y; 612 left_64x64_txform_mask[tx_size_y]) << shift_y;
613 613
614 if (tx_size_y == TX_4X4) 614 if (tx_size_y == TX_4X4)
615 *int_4x4_y |= (size_mask[block_size] & 0xffffffffffffffff) << shift_y; 615 *int_4x4_y |= (size_mask[block_size] & 0xffffffffffffffff) << shift_y;
616 } 616 }
617 617
618 // This function sets up the bit masks for the entire 64x64 region represented 618 // This function sets up the bit masks for the entire 64x64 region represented
619 // by mi_row, mi_col. 619 // by mi_row, mi_col.
620 // TODO(JBB): This function only works for yv12. 620 // TODO(JBB): This function only works for yv12.
621 void vp9_setup_mask(VP9_COMMON *const cm, const int mi_row, const int mi_col, 621 void vp9_setup_mask(VP9_COMMON *const cm, const int mi_row, const int mi_col,
622 MODE_INFO **mi_8x8, const int mode_info_stride, 622 MODE_INFO **mi, const int mode_info_stride,
623 LOOP_FILTER_MASK *lfm) { 623 LOOP_FILTER_MASK *lfm) {
624 int idx_32, idx_16, idx_8; 624 int idx_32, idx_16, idx_8;
625 const loop_filter_info_n *const lfi_n = &cm->lf_info; 625 const loop_filter_info_n *const lfi_n = &cm->lf_info;
626 MODE_INFO **mip = mi_8x8; 626 MODE_INFO **mip = mi;
627 MODE_INFO **mip2 = mi_8x8; 627 MODE_INFO **mip2 = mi;
628 628
629 // These are offsets to the next mi in the 64x64 block. It is what gets 629 // These are offsets to the next mi in the 64x64 block. It is what gets
630 // added to the mi ptr as we go through each loop. It helps us to avoids 630 // added to the mi ptr as we go through each loop. It helps us to avoids
631 // setting up special row and column counters for each index. The last step 631 // setting up special row and column counters for each index. The last step
632 // brings us out back to the starting position. 632 // brings us out back to the starting position.
633 const int offset_32[] = {4, (mode_info_stride << 2) - 4, 4, 633 const int offset_32[] = {4, (mode_info_stride << 2) - 4, 4,
634 -(mode_info_stride << 2) - 4}; 634 -(mode_info_stride << 2) - 4};
635 const int offset_16[] = {2, (mode_info_stride << 1) - 2, 2, 635 const int offset_16[] = {2, (mode_info_stride << 1) - 2, 2,
636 -(mode_info_stride << 1) - 2}; 636 -(mode_info_stride << 1) - 2};
637 const int offset[] = {1, mode_info_stride - 1, 1, -mode_info_stride - 1}; 637 const int offset[] = {1, mode_info_stride - 1, 1, -mode_info_stride - 1};
(...skipping 550 matching lines...) Expand 10 before | Expand all | Expand 10 after
1188 mask_4x4 >>= 4; 1188 mask_4x4 >>= 4;
1189 mask_4x4_int >>= 4; 1189 mask_4x4_int >>= 4;
1190 } 1190 }
1191 } 1191 }
1192 } 1192 }
1193 1193
1194 void vp9_loop_filter_rows(const YV12_BUFFER_CONFIG *frame_buffer, 1194 void vp9_loop_filter_rows(const YV12_BUFFER_CONFIG *frame_buffer,
1195 VP9_COMMON *cm, MACROBLOCKD *xd, 1195 VP9_COMMON *cm, MACROBLOCKD *xd,
1196 int start, int stop, int y_only) { 1196 int start, int stop, int y_only) {
1197 const int num_planes = y_only ? 1 : MAX_MB_PLANE; 1197 const int num_planes = y_only ? 1 : MAX_MB_PLANE;
1198 const int use_420 = y_only || (xd->plane[1].subsampling_y == 1 &&
1199 xd->plane[1].subsampling_x == 1);
1200 LOOP_FILTER_MASK lfm;
1198 int mi_row, mi_col; 1201 int mi_row, mi_col;
1199 LOOP_FILTER_MASK lfm;
1200 int use_420 = y_only || (xd->plane[1].subsampling_y == 1 &&
1201 xd->plane[1].subsampling_x == 1);
1202 1202
1203 for (mi_row = start; mi_row < stop; mi_row += MI_BLOCK_SIZE) { 1203 for (mi_row = start; mi_row < stop; mi_row += MI_BLOCK_SIZE) {
1204 MODE_INFO **mi_8x8 = cm->mi_grid_visible + mi_row * cm->mi_stride; 1204 MODE_INFO **mi = cm->mi_grid_visible + mi_row * cm->mi_stride;
1205 1205
1206 for (mi_col = 0; mi_col < cm->mi_cols; mi_col += MI_BLOCK_SIZE) { 1206 for (mi_col = 0; mi_col < cm->mi_cols; mi_col += MI_BLOCK_SIZE) {
1207 int plane; 1207 int plane;
1208 1208
1209 vp9_setup_dst_planes(xd, frame_buffer, mi_row, mi_col); 1209 vp9_setup_dst_planes(xd, frame_buffer, mi_row, mi_col);
1210 1210
1211 // TODO(JBB): Make setup_mask work for non 420. 1211 // TODO(JBB): Make setup_mask work for non 420.
1212 if (use_420) 1212 if (use_420)
1213 vp9_setup_mask(cm, mi_row, mi_col, mi_8x8 + mi_col, cm->mi_stride, 1213 vp9_setup_mask(cm, mi_row, mi_col, mi + mi_col, cm->mi_stride,
1214 &lfm); 1214 &lfm);
1215 1215
1216 for (plane = 0; plane < num_planes; ++plane) { 1216 for (plane = 0; plane < num_planes; ++plane) {
1217 if (use_420) 1217 if (use_420)
1218 vp9_filter_block_plane(cm, &xd->plane[plane], mi_row, &lfm); 1218 vp9_filter_block_plane(cm, &xd->plane[plane], mi_row, &lfm);
1219 else 1219 else
1220 filter_block_plane_non420(cm, &xd->plane[plane], mi_8x8 + mi_col, 1220 filter_block_plane_non420(cm, &xd->plane[plane], mi + mi_col,
1221 mi_row, mi_col); 1221 mi_row, mi_col);
1222 } 1222 }
1223 } 1223 }
1224 } 1224 }
1225 } 1225 }
1226 1226
1227 void vp9_loop_filter_frame(VP9_COMMON *cm, MACROBLOCKD *xd, 1227 void vp9_loop_filter_frame(YV12_BUFFER_CONFIG *frame,
1228 VP9_COMMON *cm, MACROBLOCKD *xd,
1228 int frame_filter_level, 1229 int frame_filter_level,
1229 int y_only, int partial_frame) { 1230 int y_only, int partial_frame) {
1230 int start_mi_row, end_mi_row, mi_rows_to_filter; 1231 int start_mi_row, end_mi_row, mi_rows_to_filter;
1231 if (!frame_filter_level) return; 1232 if (!frame_filter_level) return;
1232 start_mi_row = 0; 1233 start_mi_row = 0;
1233 mi_rows_to_filter = cm->mi_rows; 1234 mi_rows_to_filter = cm->mi_rows;
1234 if (partial_frame && cm->mi_rows > 8) { 1235 if (partial_frame && cm->mi_rows > 8) {
1235 start_mi_row = cm->mi_rows >> 1; 1236 start_mi_row = cm->mi_rows >> 1;
1236 start_mi_row &= 0xfffffff8; 1237 start_mi_row &= 0xfffffff8;
1237 mi_rows_to_filter = MAX(cm->mi_rows / 8, 8); 1238 mi_rows_to_filter = MAX(cm->mi_rows / 8, 8);
1238 } 1239 }
1239 end_mi_row = start_mi_row + mi_rows_to_filter; 1240 end_mi_row = start_mi_row + mi_rows_to_filter;
1240 vp9_loop_filter_frame_init(cm, frame_filter_level); 1241 vp9_loop_filter_frame_init(cm, frame_filter_level);
1241 vp9_loop_filter_rows(cm->frame_to_show, cm, xd, 1242 vp9_loop_filter_rows(frame, cm, xd,
1242 start_mi_row, end_mi_row, 1243 start_mi_row, end_mi_row,
1243 y_only); 1244 y_only);
1244 } 1245 }
1245 1246
1246 int vp9_loop_filter_worker(void *arg1, void *arg2) { 1247 int vp9_loop_filter_worker(void *arg1, void *arg2) {
1247 LFWorkerData *const lf_data = (LFWorkerData*)arg1; 1248 LFWorkerData *const lf_data = (LFWorkerData*)arg1;
1248 (void)arg2; 1249 (void)arg2;
1249 vp9_loop_filter_rows(lf_data->frame_buffer, lf_data->cm, &lf_data->xd, 1250 vp9_loop_filter_rows(lf_data->frame_buffer, lf_data->cm, &lf_data->xd,
1250 lf_data->start, lf_data->stop, lf_data->y_only); 1251 lf_data->start, lf_data->stop, lf_data->y_only);
1251 return 1; 1252 return 1;
1252 } 1253 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698