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

Side by Side Diff: source/libvpx/vp8/encoder/ethreading.c

Issue 7671004: Update libvpx snapshot to v0.9.7-p1 (Cayuga). (Closed) Base URL: svn://chrome-svn/chrome/trunk/deps/third_party/libvpx/
Patch Set: '' Created 9 years, 4 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
« no previous file with comments | « source/libvpx/vp8/encoder/encodemv.c ('k') | source/libvpx/vp8/encoder/firstpass.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 73 matching lines...) Expand 10 before | Expand all | Expand 10 after
84 for (mb_row = ithread + 1; mb_row < cm->mb_rows; mb_row += (cpi->enc oding_thread_count + 1)) 84 for (mb_row = ithread + 1; mb_row < cm->mb_rows; mb_row += (cpi->enc oding_thread_count + 1))
85 { 85 {
86 86
87 int i; 87 int i;
88 int recon_yoffset, recon_uvoffset; 88 int recon_yoffset, recon_uvoffset;
89 int mb_col; 89 int mb_col;
90 int ref_fb_idx = cm->lst_fb_idx; 90 int ref_fb_idx = cm->lst_fb_idx;
91 int dst_fb_idx = cm->new_fb_idx; 91 int dst_fb_idx = cm->new_fb_idx;
92 int recon_y_stride = cm->yv12_fb[ref_fb_idx].y_stride; 92 int recon_y_stride = cm->yv12_fb[ref_fb_idx].y_stride;
93 int recon_uv_stride = cm->yv12_fb[ref_fb_idx].uv_stride; 93 int recon_uv_stride = cm->yv12_fb[ref_fb_idx].uv_stride;
94 int map_index = (mb_row * cm->mb_cols);
94 volatile int *last_row_current_mb_col; 95 volatile int *last_row_current_mb_col;
95 INT64 activity_sum = 0;
96 96
97 tp = cpi->tok + (mb_row * (cm->mb_cols * 16 * 24)); 97 tp = cpi->tok + (mb_row * (cm->mb_cols * 16 * 24));
98 98
99 last_row_current_mb_col = &cpi->mt_current_mb_col[mb_row - 1]; 99 last_row_current_mb_col = &cpi->mt_current_mb_col[mb_row - 1];
100 100
101 // reset above block coeffs 101 // reset above block coeffs
102 xd->above_context = cm->above_context; 102 xd->above_context = cm->above_context;
103 xd->left_context = &mb_row_left_context; 103 xd->left_context = &mb_row_left_context;
104 104
105 vp8_zero(mb_row_left_context); 105 vp8_zero(mb_row_left_context);
106 106
107 xd->up_available = (mb_row != 0); 107 xd->up_available = (mb_row != 0);
108 recon_yoffset = (mb_row * recon_y_stride * 16); 108 recon_yoffset = (mb_row * recon_y_stride * 16);
109 recon_uvoffset = (mb_row * recon_uv_stride * 8); 109 recon_uvoffset = (mb_row * recon_uv_stride * 8);
110 110
111 cpi->tplist[mb_row].start = tp; 111 cpi->tplist[mb_row].start = tp;
112 112
113 //printf("Thread mb_row = %d\n", mb_row); 113 //printf("Thread mb_row = %d\n", mb_row);
114 114
115 // Set the mb activity pointer to the start of the row.
116 x->mb_activity_ptr = &cpi->mb_activity_map[map_index];
117
115 // for each macroblock col in image 118 // for each macroblock col in image
116 for (mb_col = 0; mb_col < cm->mb_cols; mb_col++) 119 for (mb_col = 0; mb_col < cm->mb_cols; mb_col++)
117 { 120 {
118 int seg_map_index = (mb_row * cm->mb_cols);
119
120 if ((mb_col & (nsync - 1)) == 0) 121 if ((mb_col & (nsync - 1)) == 0)
121 { 122 {
122 while (mb_col > (*last_row_current_mb_col - nsync) && *l ast_row_current_mb_col != cm->mb_cols - 1) 123 while (mb_col > (*last_row_current_mb_col - nsync) && *l ast_row_current_mb_col != cm->mb_cols - 1)
123 { 124 {
124 x86_pause_hint(); 125 x86_pause_hint();
125 thread_sleep(0); 126 thread_sleep(0);
126 } 127 }
127 } 128 }
128 129
129 // Distance of Mb to the various image edges. 130 // Distance of Mb to the various image edges.
(...skipping 10 matching lines...) Expand all
140 x->mv_row_max = ((cm->mb_rows - 1 - mb_row) * 16) + (VP8BORD ERINPIXELS - 16); 141 x->mv_row_max = ((cm->mb_rows - 1 - mb_row) * 16) + (VP8BORD ERINPIXELS - 16);
141 142
142 xd->dst.y_buffer = cm->yv12_fb[dst_fb_idx].y_buffer + recon_ yoffset; 143 xd->dst.y_buffer = cm->yv12_fb[dst_fb_idx].y_buffer + recon_ yoffset;
143 xd->dst.u_buffer = cm->yv12_fb[dst_fb_idx].u_buffer + recon_ uvoffset; 144 xd->dst.u_buffer = cm->yv12_fb[dst_fb_idx].u_buffer + recon_ uvoffset;
144 xd->dst.v_buffer = cm->yv12_fb[dst_fb_idx].v_buffer + recon_ uvoffset; 145 xd->dst.v_buffer = cm->yv12_fb[dst_fb_idx].v_buffer + recon_ uvoffset;
145 xd->left_available = (mb_col != 0); 146 xd->left_available = (mb_col != 0);
146 147
147 x->rddiv = cpi->RDDIV; 148 x->rddiv = cpi->RDDIV;
148 x->rdmult = cpi->RDMULT; 149 x->rdmult = cpi->RDMULT;
149 150
151 //Copy current mb to a buffer
152 RECON_INVOKE(&xd->rtcd->recon, copy16x16)(x->src.y_buffer, x ->src.y_stride, x->thismb, 16);
153
150 if (cpi->oxcf.tuning == VP8_TUNE_SSIM) 154 if (cpi->oxcf.tuning == VP8_TUNE_SSIM)
151 activity_sum += vp8_activity_masking(cpi, x); 155 vp8_activity_masking(cpi, x);
152 156
153 // Is segmentation enabled 157 // Is segmentation enabled
154 // MB level adjutment to quantizer 158 // MB level adjutment to quantizer
155 if (xd->segmentation_enabled) 159 if (xd->segmentation_enabled)
156 { 160 {
157 // Code to set segment id in xd->mbmi.segment_id for cur rent MB (with range checking) 161 // Code to set segment id in xd->mbmi.segment_id for cur rent MB (with range checking)
158 if (cpi->segmentation_map[seg_map_index + mb_col] <= 3) 162 if (cpi->segmentation_map[map_index + mb_col] <= 3)
159 xd->mode_info_context->mbmi.segment_id = cpi->segmen tation_map[seg_map_index + mb_col]; 163 xd->mode_info_context->mbmi.segment_id = cpi->segmen tation_map[map_index + mb_col];
160 else 164 else
161 xd->mode_info_context->mbmi.segment_id = 0; 165 xd->mode_info_context->mbmi.segment_id = 0;
162 166
163 vp8cx_mb_init_quantizer(cpi, x); 167 vp8cx_mb_init_quantizer(cpi, x);
164 } 168 }
165 else 169 else
166 xd->mode_info_context->mbmi.segment_id = 0; // Set to Se gment 0 by default 170 xd->mode_info_context->mbmi.segment_id = 0; // Set to Se gment 0 by default
167 171
168 x->active_ptr = cpi->active_map + seg_map_index + mb_col; 172 x->active_ptr = cpi->active_map + map_index + mb_col;
169 173
170 if (cm->frame_type == KEY_FRAME) 174 if (cm->frame_type == KEY_FRAME)
171 { 175 {
172 *totalrate += vp8cx_encode_intra_macro_block(cpi, x, &tp ); 176 *totalrate += vp8cx_encode_intra_macro_block(cpi, x, &tp );
173 #ifdef MODE_STATS 177 #ifdef MODE_STATS
174 y_modes[xd->mbmi.mode] ++; 178 y_modes[xd->mbmi.mode] ++;
175 #endif 179 #endif
176 } 180 }
177 else 181 else
178 { 182 {
(...skipping 17 matching lines...) Expand all
196 // Count of last ref frame 0,0 useage 200 // Count of last ref frame 0,0 useage
197 if ((xd->mode_info_context->mbmi.mode == ZEROMV) && (xd- >mode_info_context->mbmi.ref_frame == LAST_FRAME)) 201 if ((xd->mode_info_context->mbmi.mode == ZEROMV) && (xd- >mode_info_context->mbmi.ref_frame == LAST_FRAME))
198 cpi->inter_zz_count++; 202 cpi->inter_zz_count++;
199 203
200 // Special case code for cyclic refresh 204 // Special case code for cyclic refresh
201 // If cyclic update enabled then copy xd->mbmi.segment_i d; (which may have been updated based on mode 205 // If cyclic update enabled then copy xd->mbmi.segment_i d; (which may have been updated based on mode
202 // during vp8cx_encode_inter_macroblock()) back into the global sgmentation map 206 // during vp8cx_encode_inter_macroblock()) back into the global sgmentation map
203 if (cpi->cyclic_refresh_mode_enabled && xd->segmentation _enabled) 207 if (cpi->cyclic_refresh_mode_enabled && xd->segmentation _enabled)
204 { 208 {
205 const MB_MODE_INFO * mbmi = &xd->mode_info_context-> mbmi; 209 const MB_MODE_INFO * mbmi = &xd->mode_info_context-> mbmi;
206 cpi->segmentation_map[seg_map_index + mb_col] = mbmi ->segment_id; 210 cpi->segmentation_map[map_index + mb_col] = mbmi->se gment_id;
207 211
208 // If the block has been refreshed mark it as clean (the magnitude of the -ve influences how long it will be before we consider anot her refresh): 212 // If the block has been refreshed mark it as clean (the magnitude of the -ve influences how long it will be before we consider anot her refresh):
209 // Else if it was coded (last frame 0,0) and has not already been refreshed then mark it as a candidate for cleanup next time (marke d 0) 213 // Else if it was coded (last frame 0,0) and has not already been refreshed then mark it as a candidate for cleanup next time (marke d 0)
210 // else mark it as dirty (1). 214 // else mark it as dirty (1).
211 if (mbmi->segment_id) 215 if (mbmi->segment_id)
212 cpi->cyclic_refresh_map[seg_map_index + mb_col] = -1; 216 cpi->cyclic_refresh_map[map_index + mb_col] = -1 ;
213 else if ((mbmi->mode == ZEROMV) && (mbmi->ref_frame == LAST_FRAME)) 217 else if ((mbmi->mode == ZEROMV) && (mbmi->ref_frame == LAST_FRAME))
214 { 218 {
215 if (cpi->cyclic_refresh_map[seg_map_index + mb_c ol] == 1) 219 if (cpi->cyclic_refresh_map[map_index + mb_col] == 1)
216 cpi->cyclic_refresh_map[seg_map_index + mb_c ol] = 0; 220 cpi->cyclic_refresh_map[map_index + mb_col] = 0;
217 } 221 }
218 else 222 else
219 cpi->cyclic_refresh_map[seg_map_index + mb_col] = 1; 223 cpi->cyclic_refresh_map[map_index + mb_col] = 1;
220 224
221 } 225 }
222 } 226 }
223 cpi->tplist[mb_row].stop = tp; 227 cpi->tplist[mb_row].stop = tp;
224 228
225 x->gf_active_ptr++; // Increment pointer into gf useage flag s structure for next mb 229 // Increment pointer into gf useage flags structure.
230 x->gf_active_ptr++;
226 231
232 // Increment the activity mask pointers.
233 x->mb_activity_ptr++;
234
235 /* save the block info */
227 for (i = 0; i < 16; i++) 236 for (i = 0; i < 16; i++)
228 vpx_memcpy(&xd->mode_info_context->bmi[i], &xd->block[i] .bmi, sizeof(xd->block[i].bmi)); 237 xd->mode_info_context->bmi[i] = xd->block[i].bmi;
229 238
230 // adjust to the next column of macroblocks 239 // adjust to the next column of macroblocks
231 x->src.y_buffer += 16; 240 x->src.y_buffer += 16;
232 x->src.u_buffer += 8; 241 x->src.u_buffer += 8;
233 x->src.v_buffer += 8; 242 x->src.v_buffer += 8;
234 243
235 recon_yoffset += 16; 244 recon_yoffset += 16;
236 recon_uvoffset += 8; 245 recon_uvoffset += 8;
237 246
238 // Keep track of segment useage 247 // Keep track of segment useage
(...skipping 10 matching lines...) Expand all
249 //extend the recon for intra prediction 258 //extend the recon for intra prediction
250 vp8_extend_mb_row( 259 vp8_extend_mb_row(
251 &cm->yv12_fb[dst_fb_idx], 260 &cm->yv12_fb[dst_fb_idx],
252 xd->dst.y_buffer + 16, 261 xd->dst.y_buffer + 16,
253 xd->dst.u_buffer + 8, 262 xd->dst.u_buffer + 8,
254 xd->dst.v_buffer + 8); 263 xd->dst.v_buffer + 8);
255 264
256 // this is to account for the border 265 // this is to account for the border
257 xd->mode_info_context++; 266 xd->mode_info_context++;
258 x->partition_info++; 267 x->partition_info++;
259 x->activity_sum += activity_sum;
260 268
261 x->src.y_buffer += 16 * x->src.y_stride * (cpi->encoding_thread_ count + 1) - 16 * cm->mb_cols; 269 x->src.y_buffer += 16 * x->src.y_stride * (cpi->encoding_thread_ count + 1) - 16 * cm->mb_cols;
262 x->src.u_buffer += 8 * x->src.uv_stride * (cpi->encoding_thread_ count + 1) - 8 * cm->mb_cols; 270 x->src.u_buffer += 8 * x->src.uv_stride * (cpi->encoding_thread_ count + 1) - 8 * cm->mb_cols;
263 x->src.v_buffer += 8 * x->src.uv_stride * (cpi->encoding_thread_ count + 1) - 8 * cm->mb_cols; 271 x->src.v_buffer += 8 * x->src.uv_stride * (cpi->encoding_thread_ count + 1) - 8 * cm->mb_cols;
264 272
265 xd->mode_info_context += xd->mode_info_stride * cpi->encoding_th read_count; 273 xd->mode_info_context += xd->mode_info_stride * cpi->encoding_th read_count;
266 x->partition_info += xd->mode_info_stride * cpi->encoding_thread _count; 274 x->partition_info += xd->mode_info_stride * cpi->encoding_thread _count;
275 x->gf_active_ptr += cm->mb_cols * cpi->encoding_thread_count;
267 276
268 if (mb_row == cm->mb_rows - 1) 277 if (mb_row == cm->mb_rows - 1)
269 { 278 {
270 //SetEvent(cpi->h_event_main); 279 //SetEvent(cpi->h_event_main);
271 sem_post(&cpi->h_event_end_encoding); /* signal frame encodi ng end */ 280 sem_post(&cpi->h_event_end_encoding); /* signal frame encodi ng end */
272 } 281 }
273 } 282 }
274 } 283 }
275 } 284 }
276 285
277 //printf("exit thread %d\n", ithread); 286 //printf("exit thread %d\n", ithread);
278 return 0; 287 return 0;
279 } 288 }
280 289
281 static void setup_mbby_copy(MACROBLOCK *mbdst, MACROBLOCK *mbsrc) 290 static void setup_mbby_copy(MACROBLOCK *mbdst, MACROBLOCK *mbsrc)
282 { 291 {
283 292
284 MACROBLOCK *x = mbsrc; 293 MACROBLOCK *x = mbsrc;
285 MACROBLOCK *z = mbdst; 294 MACROBLOCK *z = mbdst;
286 int i; 295 int i;
287 296
288 z->ss = x->ss; 297 z->ss = x->ss;
289 z->ss_count = x->ss_count; 298 z->ss_count = x->ss_count;
290 z->searches_per_step = x->searches_per_step; 299 z->searches_per_step = x->searches_per_step;
291 z->errorperbit = x->errorperbit; 300 z->errorperbit = x->errorperbit;
292 301
293 z->sadperbit16 = x->sadperbit16; 302 z->sadperbit16 = x->sadperbit16;
294 z->sadperbit4 = x->sadperbit4; 303 z->sadperbit4 = x->sadperbit4;
295 z->errthresh = x->errthresh;
296 304
297 /* 305 /*
298 z->mv_col_min = x->mv_col_min; 306 z->mv_col_min = x->mv_col_min;
299 z->mv_col_max = x->mv_col_max; 307 z->mv_col_max = x->mv_col_max;
300 z->mv_row_min = x->mv_row_min; 308 z->mv_row_min = x->mv_row_min;
301 z->mv_row_max = x->mv_row_max; 309 z->mv_row_max = x->mv_row_max;
302 z->vector_range = x->vector_range ; 310 z->vector_range = x->vector_range ;
303 */ 311 */
304 312
305 z->vp8_short_fdct4x4 = x->vp8_short_fdct4x4; 313 z->vp8_short_fdct4x4 = x->vp8_short_fdct4x4;
306 z->vp8_short_fdct8x4 = x->vp8_short_fdct8x4; 314 z->vp8_short_fdct8x4 = x->vp8_short_fdct8x4;
307 z->short_walsh4x4 = x->short_walsh4x4; 315 z->short_walsh4x4 = x->short_walsh4x4;
308 z->quantize_b = x->quantize_b; 316 z->quantize_b = x->quantize_b;
317 z->quantize_b_pair = x->quantize_b_pair;
309 z->optimize = x->optimize; 318 z->optimize = x->optimize;
310 319
311 /* 320 /*
312 z->mvc = x->mvc; 321 z->mvc = x->mvc;
313 z->src.y_buffer = x->src.y_buffer; 322 z->src.y_buffer = x->src.y_buffer;
314 z->src.u_buffer = x->src.u_buffer; 323 z->src.u_buffer = x->src.u_buffer;
315 z->src.v_buffer = x->src.v_buffer; 324 z->src.v_buffer = x->src.v_buffer;
316 */ 325 */
317 326
318 327
319 vpx_memcpy(z->mvcosts, x->mvcosts, sizeof(x->mvcosts)); 328 vpx_memcpy(z->mvcosts, x->mvcosts, sizeof(x->mvcosts));
320 z->mvcost[0] = &z->mvcosts[0][mv_max+1]; 329 z->mvcost[0] = &z->mvcosts[0][mv_max+1];
321 z->mvcost[1] = &z->mvcosts[1][mv_max+1]; 330 z->mvcost[1] = &z->mvcosts[1][mv_max+1];
322 z->mvsadcost[0] = &z->mvsadcosts[0][mv_max+1]; 331 z->mvsadcost[0] = &z->mvsadcosts[0][mvfp_max+1];
323 z->mvsadcost[1] = &z->mvsadcosts[1][mv_max+1]; 332 z->mvsadcost[1] = &z->mvsadcosts[1][mvfp_max+1];
324 333
325 334
326 vpx_memcpy(z->token_costs, x->token_costs, sizeof(x->token_costs) ); 335 vpx_memcpy(z->token_costs, x->token_costs, sizeof(x->token_costs) );
327 vpx_memcpy(z->inter_bmode_costs, x->inter_bmode_costs, sizeof(x->inter_bmod e_costs)); 336 vpx_memcpy(z->inter_bmode_costs, x->inter_bmode_costs, sizeof(x->inter_bmod e_costs));
328 //memcpy(z->mvcosts, x->mvcosts, sizeof(x->mvcosts)); 337 //memcpy(z->mvcosts, x->mvcosts, sizeof(x->mvcosts));
329 //memcpy(z->mvcost, x->mvcost, sizeof(x->mvcost)); 338 //memcpy(z->mvcost, x->mvcost, sizeof(x->mvcost));
330 vpx_memcpy(z->mbmode_cost, x->mbmode_cost, sizeof(x->mbmode_cost) ); 339 vpx_memcpy(z->mbmode_cost, x->mbmode_cost, sizeof(x->mbmode_cost) );
331 vpx_memcpy(z->intra_uv_mode_cost, x->intra_uv_mode_cost, sizeof(x->intra_uv _mode_cost)); 340 vpx_memcpy(z->intra_uv_mode_cost, x->intra_uv_mode_cost, sizeof(x->intra_uv _mode_cost));
332 vpx_memcpy(z->bmode_costs, x->bmode_costs, sizeof(x->bmode_costs) ); 341 vpx_memcpy(z->bmode_costs, x->bmode_costs, sizeof(x->bmode_costs) );
333 342
(...skipping 102 matching lines...) Expand 10 before | Expand all | Expand 10 after
436 mb->src.y_buffer += 16 * x->src.y_stride * (i + 1); 445 mb->src.y_buffer += 16 * x->src.y_stride * (i + 1);
437 mb->src.u_buffer += 8 * x->src.uv_stride * (i + 1); 446 mb->src.u_buffer += 8 * x->src.uv_stride * (i + 1);
438 mb->src.v_buffer += 8 * x->src.uv_stride * (i + 1); 447 mb->src.v_buffer += 8 * x->src.uv_stride * (i + 1);
439 448
440 vp8_build_block_offsets(mb); 449 vp8_build_block_offsets(mb);
441 450
442 vp8_setup_block_dptrs(mbd); 451 vp8_setup_block_dptrs(mbd);
443 452
444 vp8_setup_block_ptrs(mb); 453 vp8_setup_block_ptrs(mb);
445 454
446 mb->activity_sum = 0;
447
448 mbd->left_context = &cm->left_context; 455 mbd->left_context = &cm->left_context;
449 mb->mvc = cm->fc.mvc; 456 mb->mvc = cm->fc.mvc;
450 457
451 setup_mbby_copy(&mbr_ei[i].mb, x); 458 setup_mbby_copy(&mbr_ei[i].mb, x);
452 459
453 } 460 }
454 } 461 }
455 462
456 void vp8cx_create_encoder_threads(VP8_COMP *cpi) 463 void vp8cx_create_encoder_threads(VP8_COMP *cpi)
457 { 464 {
458 const VP8_COMMON * cm = &cpi->common; 465 const VP8_COMMON * cm = &cpi->common;
459 466
460 cpi->b_multi_threaded = 0; 467 cpi->b_multi_threaded = 0;
461 cpi->encoding_thread_count = 0; 468 cpi->encoding_thread_count = 0;
462 cpi->processor_core_count = 32; //vp8_get_proc_core_count();
463 469
464 if (cpi->processor_core_count > 1 && cpi->oxcf.multi_threaded > 1) 470 if (cm->processor_core_count > 1 && cpi->oxcf.multi_threaded > 1)
465 { 471 {
466 int ithread; 472 int ithread;
467 int th_count = cpi->oxcf.multi_threaded - 1; 473 int th_count = cpi->oxcf.multi_threaded - 1;
468 474
469 if (cpi->oxcf.multi_threaded > cpi->processor_core_count) 475 /* don't allocate more threads than cores available */
470 th_count = cpi->processor_core_count - 1; 476 if (cpi->oxcf.multi_threaded > cm->processor_core_count)
477 th_count = cm->processor_core_count - 1;
471 478
472 /* we have th_count + 1 (main) threads processing one row each */ 479 /* we have th_count + 1 (main) threads processing one row each */
473 /* no point to have more threads than the sync range allows */ 480 /* no point to have more threads than the sync range allows */
474 if(th_count > ((cm->mb_cols / cpi->mt_sync_range) - 1)) 481 if(th_count > ((cm->mb_cols / cpi->mt_sync_range) - 1))
475 { 482 {
476 th_count = (cm->mb_cols / cpi->mt_sync_range) - 1; 483 th_count = (cm->mb_cols / cpi->mt_sync_range) - 1;
477 } 484 }
478 485
479 if(th_count == 0) 486 if(th_count == 0)
480 return; 487 return;
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
551 558
552 //free thread related resources 559 //free thread related resources
553 vpx_free(cpi->h_event_start_encoding); 560 vpx_free(cpi->h_event_start_encoding);
554 vpx_free(cpi->h_encoding_thread); 561 vpx_free(cpi->h_encoding_thread);
555 vpx_free(cpi->mb_row_ei); 562 vpx_free(cpi->mb_row_ei);
556 vpx_free(cpi->en_thread_data); 563 vpx_free(cpi->en_thread_data);
557 vpx_free(cpi->mt_current_mb_col); 564 vpx_free(cpi->mt_current_mb_col);
558 } 565 }
559 } 566 }
560 #endif 567 #endif
OLDNEW
« no previous file with comments | « source/libvpx/vp8/encoder/encodemv.c ('k') | source/libvpx/vp8/encoder/firstpass.c » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698