| Index: source/libvpx/vp9/decoder/vp9_dthread.c
|
| ===================================================================
|
| --- source/libvpx/vp9/decoder/vp9_dthread.c (revision 271138)
|
| +++ source/libvpx/vp9/decoder/vp9_dthread.c (working copy)
|
| @@ -89,7 +89,8 @@
|
|
|
| // Implement row loopfiltering for each thread.
|
| static void loop_filter_rows_mt(const YV12_BUFFER_CONFIG *const frame_buffer,
|
| - VP9_COMMON *const cm, MACROBLOCKD *const xd,
|
| + VP9_COMMON *const cm,
|
| + struct macroblockd_plane planes[MAX_MB_PLANE],
|
| int start, int stop, int y_only,
|
| VP9LfSync *const lf_sync, int num_lf_workers) {
|
| const int num_planes = y_only ? 1 : MAX_MB_PLANE;
|
| @@ -107,11 +108,11 @@
|
|
|
| sync_read(lf_sync, r, c);
|
|
|
| - vp9_setup_dst_planes(xd, frame_buffer, mi_row, mi_col);
|
| + vp9_setup_dst_planes(planes, frame_buffer, mi_row, mi_col);
|
| vp9_setup_mask(cm, mi_row, mi_col, mi + mi_col, cm->mi_stride, &lfm);
|
|
|
| for (plane = 0; plane < num_planes; ++plane) {
|
| - vp9_filter_block_plane(cm, &xd->plane[plane], mi_row, &lfm);
|
| + vp9_filter_block_plane(cm, &planes[plane], mi_row, &lfm);
|
| }
|
|
|
| sync_write(lf_sync, r, c, sb_cols);
|
| @@ -124,7 +125,7 @@
|
| TileWorkerData *const tile_data = (TileWorkerData*)arg1;
|
| LFWorkerData *const lf_data = &tile_data->lfdata;
|
|
|
| - loop_filter_rows_mt(lf_data->frame_buffer, lf_data->cm, &lf_data->xd,
|
| + loop_filter_rows_mt(lf_data->frame_buffer, lf_data->cm, lf_data->planes,
|
| lf_data->start, lf_data->stop, lf_data->y_only,
|
| lf_data->lf_sync, lf_data->num_lf_workers);
|
| return 1;
|
| @@ -186,7 +187,7 @@
|
| // Loopfilter data
|
| lf_data->frame_buffer = frame;
|
| lf_data->cm = cm;
|
| - lf_data->xd = pbi->mb;
|
| + vp9_copy(lf_data->planes, pbi->mb.plane);
|
| lf_data->start = i;
|
| lf_data->stop = sb_rows;
|
| lf_data->y_only = y_only; // always do all planes in decoder
|
|
|