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

Side by Side Diff: source/libvpx/vp8/decoder/threading.c

Issue 1124333011: libvpx: Pull from upstream (Closed) Base URL: https://chromium.googlesource.com/chromium/deps/libvpx.git@master
Patch Set: only update to last nights LKGR Created 5 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
« no previous file with comments | « source/libvpx/vp8/decoder/onyxd_if.c ('k') | source/libvpx/vp8/encoder/bitstream.c » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
53 53
54 mbd->mode_info_context = pc->mi + pc->mode_info_stride * (i + 1); 54 mbd->mode_info_context = pc->mi + pc->mode_info_stride * (i + 1);
55 mbd->mode_info_stride = pc->mode_info_stride; 55 mbd->mode_info_stride = pc->mode_info_stride;
56 56
57 mbd->frame_type = pc->frame_type; 57 mbd->frame_type = pc->frame_type;
58 mbd->pre = xd->pre; 58 mbd->pre = xd->pre;
59 mbd->dst = xd->dst; 59 mbd->dst = xd->dst;
60 60
61 mbd->segmentation_enabled = xd->segmentation_enabled; 61 mbd->segmentation_enabled = xd->segmentation_enabled;
62 mbd->mb_segement_abs_delta = xd->mb_segement_abs_delta; 62 mbd->mb_segement_abs_delta = xd->mb_segement_abs_delta;
63 vpx_memcpy(mbd->segment_feature_data, xd->segment_feature_data, sizeof(x d->segment_feature_data)); 63 memcpy(mbd->segment_feature_data, xd->segment_feature_data, sizeof(xd->s egment_feature_data));
64 64
65 /*signed char ref_lf_deltas[MAX_REF_LF_DELTAS];*/ 65 /*signed char ref_lf_deltas[MAX_REF_LF_DELTAS];*/
66 vpx_memcpy(mbd->ref_lf_deltas, xd->ref_lf_deltas, sizeof(xd->ref_lf_delt as)); 66 memcpy(mbd->ref_lf_deltas, xd->ref_lf_deltas, sizeof(xd->ref_lf_deltas)) ;
67 /*signed char mode_lf_deltas[MAX_MODE_LF_DELTAS];*/ 67 /*signed char mode_lf_deltas[MAX_MODE_LF_DELTAS];*/
68 vpx_memcpy(mbd->mode_lf_deltas, xd->mode_lf_deltas, sizeof(xd->mode_lf_d eltas)); 68 memcpy(mbd->mode_lf_deltas, xd->mode_lf_deltas, sizeof(xd->mode_lf_delta s));
69 /*unsigned char mode_ref_lf_delta_enabled; 69 /*unsigned char mode_ref_lf_delta_enabled;
70 unsigned char mode_ref_lf_delta_update;*/ 70 unsigned char mode_ref_lf_delta_update;*/
71 mbd->mode_ref_lf_delta_enabled = xd->mode_ref_lf_delta_enabled; 71 mbd->mode_ref_lf_delta_enabled = xd->mode_ref_lf_delta_enabled;
72 mbd->mode_ref_lf_delta_update = xd->mode_ref_lf_delta_update; 72 mbd->mode_ref_lf_delta_update = xd->mode_ref_lf_delta_update;
73 73
74 mbd->current_bc = &pbi->mbc[0]; 74 mbd->current_bc = &pbi->mbc[0];
75 75
76 vpx_memcpy(mbd->dequant_y1_dc, xd->dequant_y1_dc, sizeof(xd->dequant_y1_ dc)); 76 memcpy(mbd->dequant_y1_dc, xd->dequant_y1_dc, sizeof(xd->dequant_y1_dc)) ;
77 vpx_memcpy(mbd->dequant_y1, xd->dequant_y1, sizeof(xd->dequant_y1)); 77 memcpy(mbd->dequant_y1, xd->dequant_y1, sizeof(xd->dequant_y1));
78 vpx_memcpy(mbd->dequant_y2, xd->dequant_y2, sizeof(xd->dequant_y2)); 78 memcpy(mbd->dequant_y2, xd->dequant_y2, sizeof(xd->dequant_y2));
79 vpx_memcpy(mbd->dequant_uv, xd->dequant_uv, sizeof(xd->dequant_uv)); 79 memcpy(mbd->dequant_uv, xd->dequant_uv, sizeof(xd->dequant_uv));
80 80
81 mbd->fullpixel_mask = 0xffffffff; 81 mbd->fullpixel_mask = 0xffffffff;
82 82
83 if (pc->full_pixel) 83 if (pc->full_pixel)
84 mbd->fullpixel_mask = 0xfffffff8; 84 mbd->fullpixel_mask = 0xfffffff8;
85 85
86 } 86 }
87 87
88 for (i = 0; i < pc->mb_rows; i++) 88 for (i = 0; i < pc->mb_rows; i++)
89 pbi->mt_current_mb_col[i] = -1; 89 pbi->mt_current_mb_col[i] = -1;
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
130 throw_residual = (!pbi->independent_partitions && 130 throw_residual = (!pbi->independent_partitions &&
131 pbi->frame_corrupt_residual); 131 pbi->frame_corrupt_residual);
132 throw_residual = (throw_residual || vp8dx_bool_error(xd->current_bc)); 132 throw_residual = (throw_residual || vp8dx_bool_error(xd->current_bc));
133 133
134 if ((mb_idx >= pbi->mvs_corrupt_from_mb || throw_residual)) 134 if ((mb_idx >= pbi->mvs_corrupt_from_mb || throw_residual))
135 { 135 {
136 /* MB with corrupt residuals or corrupt mode/motion vectors. 136 /* MB with corrupt residuals or corrupt mode/motion vectors.
137 * Better to use the predictor as reconstruction. 137 * Better to use the predictor as reconstruction.
138 */ 138 */
139 pbi->frame_corrupt_residual = 1; 139 pbi->frame_corrupt_residual = 1;
140 vpx_memset(xd->qcoeff, 0, sizeof(xd->qcoeff)); 140 memset(xd->qcoeff, 0, sizeof(xd->qcoeff));
141 vp8_conceal_corrupt_mb(xd); 141 vp8_conceal_corrupt_mb(xd);
142 142
143 143
144 corruption_detected = 1; 144 corruption_detected = 1;
145 145
146 /* force idct to be skipped for B_PRED and use the 146 /* force idct to be skipped for B_PRED and use the
147 * prediction only for reconstruction 147 * prediction only for reconstruction
148 * */ 148 * */
149 vpx_memset(xd->eobs, 0, 25); 149 memset(xd->eobs, 0, 25);
150 } 150 }
151 } 151 }
152 #endif 152 #endif
153 153
154 /* do prediction */ 154 /* do prediction */
155 if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME) 155 if (xd->mode_info_context->mbmi.ref_frame == INTRA_FRAME)
156 { 156 {
157 vp8_build_intra_predictors_mbuv_s(xd, 157 vp8_build_intra_predictors_mbuv_s(xd,
158 xd->recon_above[1], 158 xd->recon_above[1],
159 xd->recon_above[2], 159 xd->recon_above[2],
(...skipping 12 matching lines...) Expand all
172 xd->dst.y_buffer, 172 xd->dst.y_buffer,
173 xd->dst.y_stride); 173 xd->dst.y_stride);
174 } 174 }
175 else 175 else
176 { 176 {
177 short *DQC = xd->dequant_y1; 177 short *DQC = xd->dequant_y1;
178 int dst_stride = xd->dst.y_stride; 178 int dst_stride = xd->dst.y_stride;
179 179
180 /* clear out residual eob info */ 180 /* clear out residual eob info */
181 if(xd->mode_info_context->mbmi.mb_skip_coeff) 181 if(xd->mode_info_context->mbmi.mb_skip_coeff)
182 vpx_memset(xd->eobs, 0, 25); 182 memset(xd->eobs, 0, 25);
183 183
184 intra_prediction_down_copy(xd, xd->recon_above[0] + 16); 184 intra_prediction_down_copy(xd, xd->recon_above[0] + 16);
185 185
186 for (i = 0; i < 16; i++) 186 for (i = 0; i < 16; i++)
187 { 187 {
188 BLOCKD *b = &xd->block[i]; 188 BLOCKD *b = &xd->block[i];
189 unsigned char *dst = xd->dst.y_buffer + b->offset; 189 unsigned char *dst = xd->dst.y_buffer + b->offset;
190 B_PREDICTION_MODE b_mode = 190 B_PREDICTION_MODE b_mode =
191 xd->mode_info_context->bmi[i].as_mode; 191 xd->mode_info_context->bmi[i].as_mode;
192 unsigned char *Above; 192 unsigned char *Above;
(...skipping 29 matching lines...) Expand all
222 if (xd->eobs[i] ) 222 if (xd->eobs[i] )
223 { 223 {
224 if (xd->eobs[i] > 1) 224 if (xd->eobs[i] > 1)
225 { 225 {
226 vp8_dequant_idct_add(b->qcoeff, DQC, dst, dst_stride); 226 vp8_dequant_idct_add(b->qcoeff, DQC, dst, dst_stride);
227 } 227 }
228 else 228 else
229 { 229 {
230 vp8_dc_only_idct_add(b->qcoeff[0] * DQC[0], 230 vp8_dc_only_idct_add(b->qcoeff[0] * DQC[0],
231 dst, dst_stride, dst, dst_stride); 231 dst, dst_stride, dst, dst_stride);
232 vpx_memset(b->qcoeff, 0, 2 * sizeof(b->qcoeff[0])); 232 memset(b->qcoeff, 0, 2 * sizeof(b->qcoeff[0]));
233 } 233 }
234 } 234 }
235 } 235 }
236 } 236 }
237 } 237 }
238 else 238 else
239 { 239 {
240 vp8_build_inter_predictors_mb(xd); 240 vp8_build_inter_predictors_mb(xd);
241 } 241 }
242 242
(...skipping 16 matching lines...) Expand all
259 { 259 {
260 BLOCKD *b = &xd->block[24]; 260 BLOCKD *b = &xd->block[24];
261 261
262 /* do 2nd order transform on the dc block */ 262 /* do 2nd order transform on the dc block */
263 if (xd->eobs[24] > 1) 263 if (xd->eobs[24] > 1)
264 { 264 {
265 vp8_dequantize_b(b, xd->dequant_y2); 265 vp8_dequantize_b(b, xd->dequant_y2);
266 266
267 vp8_short_inv_walsh4x4(&b->dqcoeff[0], 267 vp8_short_inv_walsh4x4(&b->dqcoeff[0],
268 xd->qcoeff); 268 xd->qcoeff);
269 vpx_memset(b->qcoeff, 0, 16 * sizeof(b->qcoeff[0])); 269 memset(b->qcoeff, 0, 16 * sizeof(b->qcoeff[0]));
270 } 270 }
271 else 271 else
272 { 272 {
273 b->dqcoeff[0] = b->qcoeff[0] * xd->dequant_y2[0]; 273 b->dqcoeff[0] = b->qcoeff[0] * xd->dequant_y2[0];
274 vp8_short_inv_walsh4x4_1(&b->dqcoeff[0], 274 vp8_short_inv_walsh4x4_1(&b->dqcoeff[0],
275 xd->qcoeff); 275 xd->qcoeff);
276 vpx_memset(b->qcoeff, 0, 2 * sizeof(b->qcoeff[0])); 276 memset(b->qcoeff, 0, 2 * sizeof(b->qcoeff[0]));
277 } 277 }
278 278
279 /* override the dc dequant constant in order to preserve the 279 /* override the dc dequant constant in order to preserve the
280 * dc components 280 * dc components
281 */ 281 */
282 DQC = xd->dequant_y1_dc; 282 DQC = xd->dequant_y1_dc;
283 } 283 }
284 284
285 vp8_dequant_idct_add_y_block 285 vp8_dequant_idct_add_y_block
286 (xd->qcoeff, DQC, 286 (xd->qcoeff, DQC,
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
353 else 353 else
354 last_row_current_mb_col = &first_row_no_sync_above; 354 last_row_current_mb_col = &first_row_no_sync_above;
355 355
356 current_mb_col = &pbi->mt_current_mb_col[mb_row]; 356 current_mb_col = &pbi->mt_current_mb_col[mb_row];
357 357
358 recon_yoffset = mb_row * recon_y_stride * 16; 358 recon_yoffset = mb_row * recon_y_stride * 16;
359 recon_uvoffset = mb_row * recon_uv_stride * 8; 359 recon_uvoffset = mb_row * recon_uv_stride * 8;
360 360
361 /* reset contexts */ 361 /* reset contexts */
362 xd->above_context = pc->above_context; 362 xd->above_context = pc->above_context;
363 vpx_memset(xd->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES)); 363 memset(xd->left_context, 0, sizeof(ENTROPY_CONTEXT_PLANES));
364 364
365 xd->left_available = 0; 365 xd->left_available = 0;
366 366
367 xd->mb_to_top_edge = -((mb_row * 16)) << 3; 367 xd->mb_to_top_edge = -((mb_row * 16)) << 3;
368 xd->mb_to_bottom_edge = ((pc->mb_rows - 1 - mb_row) * 16) << 3; 368 xd->mb_to_bottom_edge = ((pc->mb_rows - 1 - mb_row) * 16) << 3;
369 369
370 if (pbi->common.filter_level) 370 if (pbi->common.filter_level)
371 { 371 {
372 xd->recon_above[0] = pbi->mt_yabove_row[mb_row] + 0*16 +32; 372 xd->recon_above[0] = pbi->mt_yabove_row[mb_row] + 0*16 +32;
373 xd->recon_above[1] = pbi->mt_uabove_row[mb_row] + 0*8 +16; 373 xd->recon_above[1] = pbi->mt_uabove_row[mb_row] + 0*8 +16;
(...skipping 118 matching lines...) Expand 10 before | Expand all | Expand 10 after
492 492
493 const int mode_index = lfi_n->mode_lf_lut[xd->mode_info_context-> mbmi.mode]; 493 const int mode_index = lfi_n->mode_lf_lut[xd->mode_info_context-> mbmi.mode];
494 const int seg = xd->mode_info_context->mbmi.segment_id; 494 const int seg = xd->mode_info_context->mbmi.segment_id;
495 const int ref_frame = xd->mode_info_context->mbmi.ref_frame; 495 const int ref_frame = xd->mode_info_context->mbmi.ref_frame;
496 496
497 filter_level = lfi_n->lvl[seg][ref_frame][mode_index]; 497 filter_level = lfi_n->lvl[seg][ref_frame][mode_index];
498 498
499 if( mb_row != pc->mb_rows-1 ) 499 if( mb_row != pc->mb_rows-1 )
500 { 500 {
501 /* Save decoded MB last row data for next-row decoding */ 501 /* Save decoded MB last row data for next-row decoding */
502 vpx_memcpy((pbi->mt_yabove_row[mb_row + 1] + 32 + mb_col*16), (xd->dst.y_buffer + 15 * recon_y_stride), 16); 502 memcpy((pbi->mt_yabove_row[mb_row + 1] + 32 + mb_col*16), (xd ->dst.y_buffer + 15 * recon_y_stride), 16);
503 vpx_memcpy((pbi->mt_uabove_row[mb_row + 1] + 16 + mb_col*8), (xd->dst.u_buffer + 7 * recon_uv_stride), 8); 503 memcpy((pbi->mt_uabove_row[mb_row + 1] + 16 + mb_col*8), (xd- >dst.u_buffer + 7 * recon_uv_stride), 8);
504 vpx_memcpy((pbi->mt_vabove_row[mb_row + 1] + 16 + mb_col*8), (xd->dst.v_buffer + 7 * recon_uv_stride), 8); 504 memcpy((pbi->mt_vabove_row[mb_row + 1] + 16 + mb_col*8), (xd- >dst.v_buffer + 7 * recon_uv_stride), 8);
505 } 505 }
506 506
507 /* save left_col for next MB decoding */ 507 /* save left_col for next MB decoding */
508 if(mb_col != pc->mb_cols-1) 508 if(mb_col != pc->mb_cols-1)
509 { 509 {
510 MODE_INFO *next = xd->mode_info_context +1; 510 MODE_INFO *next = xd->mode_info_context +1;
511 511
512 if (next->mbmi.ref_frame == INTRA_FRAME) 512 if (next->mbmi.ref_frame == INTRA_FRAME)
513 { 513 {
514 for (i = 0; i < 16; i++) 514 for (i = 0; i < 16; i++)
(...skipping 354 matching lines...) Expand 10 before | Expand all | Expand 10 after
869 VP8_COMMON *pc = &pbi->common; 869 VP8_COMMON *pc = &pbi->common;
870 unsigned int i; 870 unsigned int i;
871 int j; 871 int j;
872 872
873 int filter_level = pc->filter_level; 873 int filter_level = pc->filter_level;
874 YV12_BUFFER_CONFIG *yv12_fb_new = pbi->dec_fb_ref[INTRA_FRAME]; 874 YV12_BUFFER_CONFIG *yv12_fb_new = pbi->dec_fb_ref[INTRA_FRAME];
875 875
876 if (filter_level) 876 if (filter_level)
877 { 877 {
878 /* Set above_row buffer to 127 for decoding first MB row */ 878 /* Set above_row buffer to 127 for decoding first MB row */
879 vpx_memset(pbi->mt_yabove_row[0] + VP8BORDERINPIXELS-1, 127, yv12_fb_new ->y_width + 5); 879 memset(pbi->mt_yabove_row[0] + VP8BORDERINPIXELS-1, 127, yv12_fb_new->y_ width + 5);
880 vpx_memset(pbi->mt_uabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (yv12_ fb_new->y_width>>1) +5); 880 memset(pbi->mt_uabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (yv12_fb_n ew->y_width>>1) +5);
881 vpx_memset(pbi->mt_vabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (yv12_ fb_new->y_width>>1) +5); 881 memset(pbi->mt_vabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (yv12_fb_n ew->y_width>>1) +5);
882 882
883 for (j=1; j<pc->mb_rows; j++) 883 for (j=1; j<pc->mb_rows; j++)
884 { 884 {
885 vpx_memset(pbi->mt_yabove_row[j] + VP8BORDERINPIXELS-1, (unsigned ch ar)129, 1); 885 memset(pbi->mt_yabove_row[j] + VP8BORDERINPIXELS-1, (unsigned char)1 29, 1);
886 vpx_memset(pbi->mt_uabove_row[j] + (VP8BORDERINPIXELS>>1)-1, (unsign ed char)129, 1); 886 memset(pbi->mt_uabove_row[j] + (VP8BORDERINPIXELS>>1)-1, (unsigned c har)129, 1);
887 vpx_memset(pbi->mt_vabove_row[j] + (VP8BORDERINPIXELS>>1)-1, (unsign ed char)129, 1); 887 memset(pbi->mt_vabove_row[j] + (VP8BORDERINPIXELS>>1)-1, (unsigned c har)129, 1);
888 } 888 }
889 889
890 /* Set left_col to 129 initially */ 890 /* Set left_col to 129 initially */
891 for (j=0; j<pc->mb_rows; j++) 891 for (j=0; j<pc->mb_rows; j++)
892 { 892 {
893 vpx_memset(pbi->mt_yleft_col[j], (unsigned char)129, 16); 893 memset(pbi->mt_yleft_col[j], (unsigned char)129, 16);
894 vpx_memset(pbi->mt_uleft_col[j], (unsigned char)129, 8); 894 memset(pbi->mt_uleft_col[j], (unsigned char)129, 8);
895 vpx_memset(pbi->mt_vleft_col[j], (unsigned char)129, 8); 895 memset(pbi->mt_vleft_col[j], (unsigned char)129, 8);
896 } 896 }
897 897
898 /* Initialize the loop filter for this frame. */ 898 /* Initialize the loop filter for this frame. */
899 vp8_loop_filter_frame_init(pc, &pbi->mb, filter_level); 899 vp8_loop_filter_frame_init(pc, &pbi->mb, filter_level);
900 } 900 }
901 else 901 else
902 vp8_setup_intra_recon_top_line(yv12_fb_new); 902 vp8_setup_intra_recon_top_line(yv12_fb_new);
903 903
904 setup_decoding_thread_data(pbi, xd, pbi->mb_row_di, pbi->decoding_thread_cou nt); 904 setup_decoding_thread_data(pbi, xd, pbi->mb_row_di, pbi->decoding_thread_cou nt);
905 905
906 for (i = 0; i < pbi->decoding_thread_count; i++) 906 for (i = 0; i < pbi->decoding_thread_count; i++)
907 sem_post(&pbi->h_event_start_decoding[i]); 907 sem_post(&pbi->h_event_start_decoding[i]);
908 908
909 mt_decode_mb_rows(pbi, xd, 0); 909 mt_decode_mb_rows(pbi, xd, 0);
910 910
911 sem_wait(&pbi->h_event_end_decoding); /* add back for each frame */ 911 sem_wait(&pbi->h_event_end_decoding); /* add back for each frame */
912 } 912 }
OLDNEW
« no previous file with comments | « source/libvpx/vp8/decoder/onyxd_if.c ('k') | source/libvpx/vp8/encoder/bitstream.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698