Lines Matching refs:pbi

39 void vp8_mb_init_dequantizer(VP8D_COMP *pbi, MACROBLOCKD *xd);
41 static void setup_decoding_thread_data(VP8D_COMP *pbi, MACROBLOCKD *xd, MB_ROW_DEC *mbrd, int count)
43 VP8_COMMON *const pc = & pbi->common;
74 mbd->current_bc = &pbi->mbc[0];
89 pbi->mt_current_mb_col[i] = -1;
92 static void mt_decode_macroblock(VP8D_COMP *pbi, MACROBLOCKD *xd,
108 eobtotal = vp8_decode_mb_tokens(pbi, xd);
117 vp8_mb_init_dequantizer(pbi, xd);
122 if(pbi->ec_active)
128 throw_residual = (!pbi->independent_partitions &&
129 pbi->frame_corrupt_residual);
132 if ((mb_idx >= pbi->mvs_corrupt_from_mb || throw_residual))
137 pbi->frame_corrupt_residual = 1;
196 if (i < 4 && pbi->common.filter_level)
201 if (i%4==0 && pbi->common.filter_level)
212 if ((i==4 || i==8 || i==12) && pbi->common.filter_level)
296 static void mt_decode_mb_rows(VP8D_COMP *pbi, MACROBLOCKD *xd, int start_mb_row)
301 VP8_COMMON *pc = &pbi->common;
302 const int nsync = pbi->sync_range;
304 int num_part = 1 << pbi->common.multi_token_partition;
307 YV12_BUFFER_CONFIG *yv12_fb_new = pbi->dec_fb_ref[INTRA_FRAME];
308 YV12_BUFFER_CONFIG *yv12_fb_lst = pbi->dec_fb_ref[LAST_FRAME];
322 YV12_BUFFER_CONFIG *this_fb = pbi->dec_fb_ref[i];
337 for (mb_row = start_mb_row; mb_row < pc->mb_rows; mb_row += (pbi->decoding_thread_count + 1))
347 xd->current_bc = &pbi->mbc[mb_row%num_part];
350 last_row_current_mb_col = &pbi->mt_current_mb_col[mb_row -1];
354 current_mb_col = &pbi->mt_current_mb_col[mb_row];
368 if (pbi->common.filter_level)
370 xd->recon_above[0] = pbi->mt_yabove_row[mb_row] + 0*16 +32;
371 xd->recon_above[1] = pbi->mt_uabove_row[mb_row] + 0*8 +16;
372 xd->recon_above[2] = pbi->mt_vabove_row[mb_row] + 0*8 +16;
374 xd->recon_left[0] = pbi->mt_yleft_col[mb_row];
375 xd->recon_left[1] = pbi->mt_uleft_col[mb_row];
376 xd->recon_left[2] = pbi->mt_vleft_col[mb_row];
428 (!pbi->independent_partitions &&
429 pbi->frame_corrupt_residual) ||
431 if (pbi->ec_active &&
467 mt_decode_macroblock(pbi, xd, 0);
478 if (!pbi->common.filter_level)
485 if (pbi->common.filter_level)
500 vpx_memcpy((pbi->mt_yabove_row[mb_row + 1] + 32 + mb_col*16), (xd->dst.y_buffer + 15 * recon_y_stride), 16);
501 vpx_memcpy((pbi->mt_uabove_row[mb_row + 1] + 16 + mb_col*8), (xd->dst.u_buffer + 7 * recon_uv_stride), 8);
502 vpx_memcpy((pbi->mt_vabove_row[mb_row + 1] + 16 + mb_col*8), (xd->dst.v_buffer + 7 * recon_uv_stride), 8);
513 pbi->mt_yleft_col[mb_row][i] = xd->dst.y_buffer [i* recon_y_stride + 15];
516 pbi->mt_uleft_col[mb_row][i] = xd->dst.u_buffer [i* recon_uv_stride + 7];
517 pbi->mt_vleft_col[mb_row][i] = xd->dst.v_buffer [i* recon_uv_stride + 7];
584 if (pbi->common.filter_level)
593 pbi->mt_yabove_row[mb_row +1][lasty + i] = pbi->mt_yabove_row[mb_row +1][lasty -1];
594 pbi->mt_uabove_row[mb_row +1][lastuv + i] = pbi->mt_uabove_row[mb_row +1][lastuv -1];
595 pbi->mt_vabove_row[mb_row +1][lastuv + i] = pbi->mt_vabove_row[mb_row +1][lastuv -1];
610 xd->mode_info_context += xd->mode_info_stride * pbi->decoding_thread_count;
615 sem_post(&pbi->h_event_end_decoding);
623 VP8D_COMP *pbi = (VP8D_COMP *)(((DECODETHREAD_DATA *)p_data)->ptr1);
629 if (pbi->b_multithreaded_rd == 0)
632 if (sem_wait(&pbi->h_event_start_decoding[ithread]) == 0)
634 if (pbi->b_multithreaded_rd == 0)
641 mt_decode_mb_rows(pbi, xd, ithread+1);
650 void vp8_decoder_create_threads(VP8D_COMP *pbi)
655 pbi->b_multithreaded_rd = 0;
656 pbi->allocated_decoding_thread_count = 0;
659 core_count = (pbi->max_threads > 8) ? 8 : pbi->max_threads;
662 if (core_count > pbi->common.processor_core_count)
663 core_count = pbi->common.processor_core_count;
667 pbi->b_multithreaded_rd = 1;
668 pbi->decoding_thread_count = core_count - 1;
670 CALLOC_ARRAY(pbi->h_decoding_thread, pbi->decoding_thread_count);
671 CALLOC_ARRAY(pbi->h_event_start_decoding, pbi->decoding_thread_count);
672 CALLOC_ARRAY_ALIGNED(pbi->mb_row_di, pbi->decoding_thread_count, 32);
673 CALLOC_ARRAY(pbi->de_thread_data, pbi->decoding_thread_count);
675 for (ithread = 0; ithread < pbi->decoding_thread_count; ithread++)
677 sem_init(&pbi->h_event_start_decoding[ithread], 0, 0);
679 vp8_setup_block_dptrs(&pbi->mb_row_di[ithread].mbd);
681 pbi->de_thread_data[ithread].ithread = ithread;
682 pbi->de_thread_data[ithread].ptr1 = (void *)pbi;
683 pbi->de_thread_data[ithread].ptr2 = (void *) &pbi->mb_row_di[ithread];
685 pthread_create(&pbi->h_decoding_thread[ithread], 0, thread_decoding_proc, (&pbi->de_thread_data[ithread]));
688 sem_init(&pbi->h_event_end_decoding, 0, 0);
690 pbi->allocated_decoding_thread_count = pbi->decoding_thread_count;
695 void vp8mt_de_alloc_temp_buffers(VP8D_COMP *pbi, int mb_rows)
699 if (pbi->b_multithreaded_rd)
701 vpx_free(pbi->mt_current_mb_col);
702 pbi->mt_current_mb_col = NULL ;
705 if (pbi->mt_yabove_row)
709 vpx_free(pbi->mt_yabove_row[i]);
710 pbi->mt_yabove_row[i] = NULL ;
712 vpx_free(pbi->mt_yabove_row);
713 pbi->mt_yabove_row = NULL ;
716 if (pbi->mt_uabove_row)
720 vpx_free(pbi->mt_uabove_row[i]);
721 pbi->mt_uabove_row[i] = NULL ;
723 vpx_free(pbi->mt_uabove_row);
724 pbi->mt_uabove_row = NULL ;
727 if (pbi->mt_vabove_row)
731 vpx_free(pbi->mt_vabove_row[i]);
732 pbi->mt_vabove_row[i] = NULL ;
734 vpx_free(pbi->mt_vabove_row);
735 pbi->mt_vabove_row = NULL ;
739 if (pbi->mt_yleft_col)
743 vpx_free(pbi->mt_yleft_col[i]);
744 pbi->mt_yleft_col[i] = NULL ;
746 vpx_free(pbi->mt_yleft_col);
747 pbi->mt_yleft_col = NULL ;
750 if (pbi->mt_uleft_col)
754 vpx_free(pbi->mt_uleft_col[i]);
755 pbi->mt_uleft_col[i] = NULL ;
757 vpx_free(pbi->mt_uleft_col);
758 pbi->mt_uleft_col = NULL ;
761 if (pbi->mt_vleft_col)
765 vpx_free(pbi->mt_vleft_col[i]);
766 pbi->mt_vleft_col[i] = NULL ;
768 vpx_free(pbi->mt_vleft_col);
769 pbi->mt_vleft_col = NULL ;
775 void vp8mt_alloc_temp_buffers(VP8D_COMP *pbi, int width, int prev_mb_rows)
777 VP8_COMMON *const pc = & pbi->common;
781 if (pbi->b_multithreaded_rd)
783 vp8mt_de_alloc_temp_buffers(pbi, prev_mb_rows);
789 if (width < 640) pbi->sync_range = 1;
790 else if (width <= 1280) pbi->sync_range = 8;
791 else if (width <= 2560) pbi->sync_range =16;
792 else pbi->sync_range = 32;
797 CALLOC_ARRAY(pbi->mt_current_mb_col, pc->mb_rows);
800 CALLOC_ARRAY(pbi->mt_yabove_row, pc->mb_rows);
802 CHECK_MEM_ERROR(pbi->mt_yabove_row[i], vpx_memalign(16,sizeof(unsigned char) * (width + (VP8BORDERINPIXELS<<1))));
804 CALLOC_ARRAY(pbi->mt_uabove_row, pc->mb_rows);
806 CHECK_MEM_ERROR(pbi->mt_uabove_row[i], vpx_memalign(16,sizeof(unsigned char) * (uv_width + VP8BORDERINPIXELS)));
808 CALLOC_ARRAY(pbi->mt_vabove_row, pc->mb_rows);
810 CHECK_MEM_ERROR(pbi->mt_vabove_row[i], vpx_memalign(16,sizeof(unsigned char) * (uv_width + VP8BORDERINPIXELS)));
813 CALLOC_ARRAY(pbi->mt_yleft_col, pc->mb_rows);
815 CHECK_MEM_ERROR(pbi->mt_yleft_col[i], vpx_calloc(sizeof(unsigned char) * 16, 1));
817 CALLOC_ARRAY(pbi->mt_uleft_col, pc->mb_rows);
819 CHECK_MEM_ERROR(pbi->mt_uleft_col[i], vpx_calloc(sizeof(unsigned char) * 8, 1));
821 CALLOC_ARRAY(pbi->mt_vleft_col, pc->mb_rows);
823 CHECK_MEM_ERROR(pbi->mt_vleft_col[i], vpx_calloc(sizeof(unsigned char) * 8, 1));
828 void vp8_decoder_remove_threads(VP8D_COMP *pbi)
831 if (pbi->b_multithreaded_rd)
835 pbi->b_multithreaded_rd = 0;
838 for (i = 0; i < pbi->allocated_decoding_thread_count; i++)
840 sem_post(&pbi->h_event_start_decoding[i]);
841 pthread_join(pbi->h_decoding_thread[i], NULL);
844 for (i = 0; i < pbi->allocated_decoding_thread_count; i++)
846 sem_destroy(&pbi->h_event_start_decoding[i]);
849 sem_destroy(&pbi->h_event_end_decoding);
851 vpx_free(pbi->h_decoding_thread);
852 pbi->h_decoding_thread = NULL;
854 vpx_free(pbi->h_event_start_decoding);
855 pbi->h_event_start_decoding = NULL;
857 vpx_free(pbi->mb_row_di);
858 pbi->mb_row_di = NULL ;
860 vpx_free(pbi->de_thread_data);
861 pbi->de_thread_data = NULL;
865 void vp8mt_decode_mb_rows( VP8D_COMP *pbi, MACROBLOCKD *xd)
867 VP8_COMMON *pc = &pbi->common;
872 YV12_BUFFER_CONFIG *yv12_fb_new = pbi->dec_fb_ref[INTRA_FRAME];
877 vpx_memset(pbi->mt_yabove_row[0] + VP8BORDERINPIXELS-1, 127, yv12_fb_new->y_width + 5);
878 vpx_memset(pbi->mt_uabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (yv12_fb_new->y_width>>1) +5);
879 vpx_memset(pbi->mt_vabove_row[0] + (VP8BORDERINPIXELS>>1)-1, 127, (yv12_fb_new->y_width>>1) +5);
883 vpx_memset(pbi->mt_yabove_row[j] + VP8BORDERINPIXELS-1, (unsigned char)129, 1);
884 vpx_memset(pbi->mt_uabove_row[j] + (VP8BORDERINPIXELS>>1)-1, (unsigned char)129, 1);
885 vpx_memset(pbi->mt_vabove_row[j] + (VP8BORDERINPIXELS>>1)-1, (unsigned char)129, 1);
891 vpx_memset(pbi->mt_yleft_col[j], (unsigned char)129, 16);
892 vpx_memset(pbi->mt_uleft_col[j], (unsigned char)129, 8);
893 vpx_memset(pbi->mt_vleft_col[j], (unsigned char)129, 8);
897 vp8_loop_filter_frame_init(pc, &pbi->mb, filter_level);
902 setup_decoding_thread_data(pbi, xd, pbi->mb_row_di, pbi->decoding_thread_count);
904 for (i = 0; i < pbi->decoding_thread_count; i++)
905 sem_post(&pbi->h_event_start_decoding[i]);
907 mt_decode_mb_rows(pbi, xd, 0);
909 sem_wait(&pbi->h_event_end_decoding); /* add back for each frame */