Lines Matching refs:cpi

18 extern int vp8cx_encode_inter_macroblock(VP8_COMP *cpi, MACROBLOCK *x,
21 extern int vp8cx_encode_intra_macro_block(VP8_COMP *cpi, MACROBLOCK *x,
23 extern void vp8cx_mb_init_quantizer(VP8_COMP *cpi, MACROBLOCK *x);
27 extern void loopfilter_frame(VP8_COMP *cpi, VP8_COMMON *cm);
31 VP8_COMP *cpi = (VP8_COMP *)(((LPFTHREAD_DATA *)p_data)->ptr1);
32 VP8_COMMON *cm = &cpi->common;
36 if (cpi->b_multi_threaded == 0)
39 if (sem_wait(&cpi->h_event_start_lpf) == 0)
41 if (cpi->b_multi_threaded == FALSE) // we're shutting down
44 loopfilter_frame(cpi, cm);
46 sem_post(&cpi->h_event_end_lpf);
57 VP8_COMP *cpi = (VP8_COMP *)(((ENCODETHREAD_DATA *)p_data)->ptr1);
61 const int nsync = cpi->mt_sync_range;
66 if (cpi->b_multi_threaded == 0)
69 //if(WaitForSingleObject(cpi->h_event_mbrencoding[ithread], INFINITE) == WAIT_OBJECT_0)
70 if (sem_wait(&cpi->h_event_start_encoding[ithread]) == 0)
72 VP8_COMMON *cm = &cpi->common;
81 if (cpi->b_multi_threaded == FALSE) // we're shutting down
84 for (mb_row = ithread + 1; mb_row < cm->mb_rows; mb_row += (cpi->encoding_thread_count + 1))
97 tp = cpi->tok + (mb_row * (cm->mb_cols * 16 * 24));
99 last_row_current_mb_col = &cpi->mt_current_mb_col[mb_row - 1];
111 cpi->tplist[mb_row].start = tp;
147 x->rddiv = cpi->RDDIV;
148 x->rdmult = cpi->RDMULT;
150 if (cpi->oxcf.tuning == VP8_TUNE_SSIM)
151 activity_sum += vp8_activity_masking(cpi, x);
158 if (cpi->segmentation_map[seg_map_index + mb_col] <= 3)
159 xd->mode_info_context->mbmi.segment_id = cpi->segmentation_map[seg_map_index + mb_col];
163 vp8cx_mb_init_quantizer(cpi, x);
168 x->active_ptr = cpi->active_map + seg_map_index + mb_col;
172 *totalrate += vp8cx_encode_intra_macro_block(cpi, x, &tp);
179 *totalrate += vp8cx_encode_inter_macroblock(cpi, x, &tp, recon_yoffset, recon_uvoffset);
198 cpi->inter_zz_count++;
203 if (cpi->cyclic_refresh_mode_enabled && xd->segmentation_enabled)
206 cpi->segmentation_map[seg_map_index + mb_col] = mbmi->segment_id;
212 cpi->cyclic_refresh_map[seg_map_index + mb_col] = -1;
215 if (cpi->cyclic_refresh_map[seg_map_index + mb_col] == 1)
216 cpi->cyclic_refresh_map[seg_map_index + mb_col] = 0;
219 cpi->cyclic_refresh_map[seg_map_index + mb_col] = 1;
223 cpi->tplist[mb_row].stop = tp;
246 cpi->mt_current_mb_col[mb_row] = mb_col;
261 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;
263 x->src.v_buffer += 8 * x->src.uv_stride * (cpi->encoding_thread_count + 1) - 8 * cm->mb_cols;
265 xd->mode_info_context += xd->mode_info_stride * cpi->encoding_thread_count;
266 x->partition_info += xd->mode_info_stride * cpi->encoding_thread_count;
270 //SetEvent(cpi->h_event_main);
271 sem_post(&cpi->h_event_end_encoding); /* signal frame encoding end */
390 void vp8cx_init_mbrthread_data(VP8_COMP *cpi,
398 VP8_COMMON *const cm = & cpi->common;
432 mb->src = * cpi->Source;
456 void vp8cx_create_encoder_threads(VP8_COMP *cpi)
458 const VP8_COMMON * cm = &cpi->common;
460 cpi->b_multi_threaded = 0;
461 cpi->encoding_thread_count = 0;
462 cpi->processor_core_count = 32; //vp8_get_proc_core_count();
464 if (cpi->processor_core_count > 1 && cpi->oxcf.multi_threaded > 1)
467 int th_count = cpi->oxcf.multi_threaded - 1;
469 if (cpi->oxcf.multi_threaded > cpi->processor_core_count)
470 th_count = cpi->processor_core_count - 1;
474 if(th_count > ((cm->mb_cols / cpi->mt_sync_range) - 1))
476 th_count = (cm->mb_cols / cpi->mt_sync_range) - 1;
482 CHECK_MEM_ERROR(cpi->h_encoding_thread, vpx_malloc(sizeof(pthread_t) * th_count));
483 CHECK_MEM_ERROR(cpi->h_event_start_encoding, vpx_malloc(sizeof(sem_t) * th_count));
484 CHECK_MEM_ERROR(cpi->mb_row_ei, vpx_memalign(32, sizeof(MB_ROW_COMP) * th_count));
485 vpx_memset(cpi->mb_row_ei, 0, sizeof(MB_ROW_COMP) * th_count);
486 CHECK_MEM_ERROR(cpi->en_thread_data,
488 CHECK_MEM_ERROR(cpi->mt_current_mb_col,
489 vpx_malloc(sizeof(*cpi->mt_current_mb_col) * cm->mb_rows));
491 sem_init(&cpi->h_event_end_encoding, 0, 0);
493 cpi->b_multi_threaded = 1;
494 cpi->encoding_thread_count = th_count;
498 (cpi->encoding_thread_count +1));
503 ENCODETHREAD_DATA * ethd = &cpi->en_thread_data[ithread];
505 sem_init(&cpi->h_event_start_encoding[ithread], 0, 0);
507 ethd->ptr1 = (void *)cpi;
508 ethd->ptr2 = (void *)&cpi->mb_row_ei[ithread];
510 pthread_create(&cpi->h_encoding_thread[ithread], 0, thread_encoding_proc, ethd);
514 LPFTHREAD_DATA * lpfthd = &cpi->lpf_thread_data;
516 sem_init(&cpi->h_event_start_lpf, 0, 0);
517 sem_init(&cpi->h_event_end_lpf, 0, 0);
519 lpfthd->ptr1 = (void *)cpi;
520 pthread_create(&cpi->h_filter_thread, 0, loopfilter_thread, lpfthd);
526 void vp8cx_remove_encoder_threads(VP8_COMP *cpi)
528 if (cpi->b_multi_threaded)
531 cpi->b_multi_threaded = 0;
535 for (i = 0; i < cpi->encoding_thread_count; i++)
537 //SetEvent(cpi->h_event_mbrencoding[i]);
538 sem_post(&cpi->h_event_start_encoding[i]);
539 pthread_join(cpi->h_encoding_thread[i], 0);
541 sem_destroy(&cpi->h_event_start_encoding[i]);
544 sem_post(&cpi->h_event_start_lpf);
545 pthread_join(cpi->h_filter_thread, 0);
548 sem_destroy(&cpi->h_event_end_encoding);
549 sem_destroy(&cpi->h_event_end_lpf);
550 sem_destroy(&cpi->h_event_start_lpf);
553 vpx_free(cpi->h_event_start_encoding);
554 vpx_free(cpi->h_encoding_thread);
555 vpx_free(cpi->mb_row_ei);
556 vpx_free(cpi->en_thread_data);
557 vpx_free(cpi->mt_current_mb_col);