Home | History | Annotate | Download | only in decoder

Lines Matching full:ps_proc

93                                process_ctxt_t *ps_proc,
109 void ihevcd_proc_map_check(process_ctxt_t *ps_proc, proc_type_t proc_type, WORD32 nctb)
111 tile_t *ps_tile = ps_proc->ps_tile;
112 sps_t *ps_sps = ps_proc->ps_sps;
113 pps_t *ps_pps = ps_proc->ps_pps;
114 codec_t *ps_codec = ps_proc->ps_codec;
120 if(ps_proc->i4_check_proc_status)
134 if(ps_proc->i4_ctb_y > 0)
136 x_pos = (ps_proc->i4_ctb_tile_x + nctb);
142 idx += ((ps_proc->i4_ctb_y - 1)
151 ps_pps = ps_proc->ps_pps;
155 if((ps_proc->i4_ctb_x > 0) && ((0 != status)))
157 x_pos = ps_tile->u1_pos_x + ps_proc->i4_ctb_tile_x - 1;
158 idx = x_pos + (ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
164 if((ps_proc->i4_ctb_x > 0) && (0 != status) && (ps_proc->i4_ctb_y > 0))
166 x_pos = ps_tile->u1_pos_x + ps_proc->i4_ctb_tile_x - 1;
167 idx = x_pos + ((ps_proc->i4_ctb_y - 1) * ps_sps->i2_pic_wd_in_ctb);
196 void ihevcd_proc_map_update(process_ctxt_t *ps_proc, proc_type_t proc_type, WORD32 nctb)
198 codec_t *ps_codec = ps_proc->ps_codec;
204 if(ps_proc->i4_check_proc_status)
209 sps_t *ps_sps = ps_proc->ps_sps;
211 idx = (ps_proc->i4_ctb_x + i);
212 idx += ((ps_proc->i4_ctb_y) * ps_sps->i2_pic_wd_in_ctb);
220 void ihevcd_slice_hdr_update(process_ctxt_t *ps_proc)
225 if(!((ps_proc->i4_ctb_x == 0) && (ps_proc->i4_ctb_y == 0)))
227 slice_header_t *ps_slice_hdr_next = ps_proc->ps_codec->ps_slice_hdr_base + ((ps_proc->i4_cur_slice_idx + 1) & (MAX_SLICE_HDR_CNT - 1));
229 if((ps_slice_hdr_next->i2_ctb_x == ps_proc->i4_ctb_x)
230 && (ps_slice_hdr_next->i2_ctb_y == ps_proc->i4_ctb_y))
234 ps_proc->i4_ctb_slice_x = 0;
235 ps_proc->i4_ctb_slice_y = 0;
238 ps_proc->i4_cur_slice_idx++;
239 ps_proc->ps_slice_hdr = ps_slice_hdr_next;
245 void ihevcd_ctb_pos_update(process_ctxt_t *ps_proc, WORD32 nctb)
248 slice_header_t *ps_slice_hdr = ps_proc->ps_slice_hdr;
249 tile_t *ps_tile = ps_proc->ps_tile;
250 sps_t *ps_sps = ps_proc->ps_sps;
253 ps_proc->i4_ctb_tile_x += nctb;
254 ps_proc->i4_ctb_x += nctb;
256 ps_proc->i4_ctb_slice_x += nctb;
258 if(ps_proc->ps_pps->i1_tiles_enabled_flag)
273 if(ps_proc->i4_ctb_x > ps_slice_hdr->i2_ctb_x)
275 if(ps_proc->i4_ctb_slice_x >= (ps_tile->u2_wd + ps_tile->u1_pos_x))
277 ps_proc->i4_ctb_slice_y++;
278 ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_slice_x
285 if(ps_proc->i4_ctb_slice_x >= (temp_stride + ps_tile->u2_wd + ps_tile->u1_pos_x))
287 ps_proc->i4_ctb_slice_y++;
288 ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_slice_x
294 else if(ps_proc->i4_ctb_slice_x >= (ps_tile->u2_wd))
297 ps_proc->i4_ctb_slice_y++;
298 ps_proc->i4_ctb_slice_x = 0;
303 if(ps_proc->i4_ctb_slice_x >= ps_tile->u2_wd)
305 ps_proc->i4_ctb_slice_y++;
306 ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_slice_x
312 void ihevcd_ctb_avail_update(process_ctxt_t *ps_proc)
314 slice_header_t *ps_slice_hdr = ps_proc->ps_slice_hdr;
315 sps_t *ps_sps = ps_proc->ps_sps;
317 tile_t *ps_tile = ps_proc->ps_tile;
354 cur_ctb_idx = ps_proc->i4_ctb_x
355 + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
359 ps_proc->u1_top_ctb_avail = 1;
360 ps_proc->u1_left_ctb_avail = 1;
361 ps_proc->u1_top_lt_ctb_avail = 1;
362 ps_proc->u1_top_rt_ctb_avail = 1;
365 if((0 == ps_proc->i4_ctb_y) || (0 == ps_proc->i4_ctb_tile_y))
367 ps_proc->u1_top_ctb_avail = 0;
368 ps_proc->u1_top_lt_ctb_avail = 0;
369 ps_proc->u1_top_rt_ctb_avail = 0;
372 if((0 == ps_proc->i4_ctb_x) || (0 == ps_proc->i4_ctb_tile_x))
374 ps_proc->u1_left_ctb_avail = 0;
375 ps_proc->u1_top_lt_ctb_avail = 0;
376 if((0 == ps_proc->i4_ctb_slice_y) || (0 == ps_proc->i4_ctb_tile_y))
378 ps_proc->u1_top_ctb_avail = 0;
379 if((i2_wd_in_ctb - 1) != ps_proc->i4_ctb_slice_x)
381 ps_proc->u1_top_rt_ctb_avail = 0;
386 else if(ps_proc->i4_ctb_x > 0)
388 if((0 == ps_proc->i4_ctb_slice_y) || (0 == ps_proc->i4_ctb_tile_y))
390 ps_proc->u1_top_ctb_avail = 0;
391 ps_proc->u1_top_lt_ctb_avail = 0;
392 if(0 == ps_proc->i4_ctb_slice_x)
394 ps_proc->u1_left_ctb_avail = 0;
396 if((i2_wd_in_ctb - 1) != ps_proc->i4_ctb_slice_x)
398 ps_proc->u1_top_rt_ctb_avail = 0;
401 else if((1 == ps_proc->i4_ctb_slice_y) && (0 == ps_proc->i4_ctb_slice_x))
403 ps_proc->u1_top_lt_ctb_avail = 0;
407 if((ps_proc->i4_ctb_x == (ps_sps->i2_pic_wd_in_ctb - 1)) || ((ps_tile->u2_wd - 1) == ps_proc->i4_ctb_tile_x))
409 ps_proc->u1_top_rt_ctb_avail = 0;
417 if(ps_tile->u2_wd == (ps_proc->i4_ctb_tile_x + 1))
419 if((ps_proc->i4_ctb_tile_y + 1) == ps_tile->u2_ht)
422 if(((ps_proc->i4_ctb_tile_y + 1 + ps_tile->u1_pos_y) == ps_sps->i2_pic_ht_in_ctb) && ((ps_proc->i4_ctb_tile_x + 1 + ps_tile->u1_pos_x) == ps_sps->i2_pic_wd_in_ctb))
428 tile_t *ps_tile_next = ps_proc->ps_tile + 1;
434 next_ctb_idx = ((ps_tile->u1_pos_y + ps_proc->i4_ctb_tile_y + 1) * ps_sps->i2_pic_wd_in_ctb) + ps_tile->u1_pos_x;
437 ps_proc->i4_next_pu_ctb_cnt = next_ctb_idx;
438 ps_proc->i4_ctb_pu_cnt =
439 ps_proc->pu4_pic_pu_idx[next_ctb_idx]
440 - ps_proc->pu4_pic_pu_idx[cur_ctb_idx];
441 cur_pu_idx = ps_proc->pu4_pic_pu_idx[cur_ctb_idx];
442 ps_proc->i4_ctb_start_pu_idx = cur_pu_idx;
443 ps_proc->ps_pu = &ps_proc->ps_pic_pu[cur_pu_idx];
447 void ihevcd_update_ctb_tu_cnt(process_ctxt_t *ps_proc)
449 sps_t *ps_sps = ps_proc->ps_sps;
450 codec_t *ps_codec = ps_proc->ps_codec;
453 cur_ctb_idx = ps_proc->i4_ctb_x
454 + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
459 ps_tile = ps_proc->ps_tile;
465 if(ps_tile->u2_wd == (ps_proc->i4_ctb_tile_x + 1))
467 if((ps_proc->i4_ctb_tile_y + 1) == ps_tile->u2_ht)
470 if(((ps_proc->i4_ctb_tile_y + 1 + ps_tile->u1_pos_y) == ps_sps->i2_pic_ht_in_ctb) && ((ps_proc->i4_ctb_tile_x + 1 + ps_tile->u1_pos_x) == ps_sps->i2_pic_wd_in_ctb))
476 tile_t *ps_tile_next = ps_proc->ps_tile + 1;
482 ps_proc->i4_ctb_tile_y + 1) * ps_sps->i2_pic_wd_in_ctb) + ps_tile->u1_pos_x;
485 ps_proc->i4_next_tu_ctb_cnt = next_ctb_tu_idx;
486 ps_proc->i4_ctb_tu_cnt = ps_proc->pu4_pic_tu_idx[next_ctb_tu_idx] - ps_proc->pu4_pic_tu_idx[cur_ctb_idx % RESET_TU_BUF_NCTB];
491 if(ps_tile->u2_wd == (ps_proc->i4_ctb_tile_x + 1))
493 if((ps_proc->i4_ctb_tile_y + 1) == ps_tile->u2_ht)
496 if(((ps_proc->i4_ctb_tile_y + 1 + ps_tile->u1_pos_y) == ps_sps->i2_pic_ht_in_ctb) && ((ps_proc->i4_ctb_tile_x + 1 + ps_tile->u1_pos_x) == ps_sps->i2_pic_wd_in_ctb))
502 tile_t *ps_tile_next = ps_proc->ps_tile + 1;
508 next_ctb_tu_idx = ((ps_tile->u1_pos_y + ps_proc->i4_ctb_tile_y + 1) * ps_sps->i2_pic_wd_in_ctb) + ps_tile->u1_pos_x;
511 ps_proc->i4_next_tu_ctb_cnt = next_ctb_tu_idx;
512 ps_proc->i4_ctb_tu_cnt = ps_proc->pu4_pic_tu_idx[next_ctb_tu_idx] -
513 ps_proc->pu4_pic_tu_idx[cur_ctb_idx];
518 IHEVCD_ERROR_T ihevcd_process(process_ctxt_t *ps_proc)
522 sps_t *ps_sps = ps_proc->ps_sps;
541 ps_codec = ps_proc->ps_codec;
544 nctb = MIN(ps_codec->i4_proc_nctb, ps_proc->i4_ctb_cnt);
545 nctb = MIN(nctb, (ps_proc->ps_tile->u2_wd - ps_proc->i4_ctb_tile_x));
547 if(ps_proc->i4_cur_slice_idx > (MAX_SLICE_HDR_CNT - 2 * ps_sps->i2_pic_wd_in_ctb))
553 num_ctb = ps_proc->i4_nctb;
555 nxt_ctb_slice_y = ps_proc->i4_ctb_slice_y;
556 nxt_ctb_slice_x = ps_proc->i4_ctb_slice_x;
557 pu1_pu_map_nxt = ps_proc->pu1_pu_map;
558 ps_tu_nxt = ps_proc->ps_tu;
560 while(ps_proc->i4_ctb_cnt)
562 ps_proc->i4_ctb_slice_y = nxt_ctb_slice_y;
563 ps_proc->i4_ctb_slice_x = nxt_ctb_slice_x;
564 ps_proc->pu1_pu_map = pu1_pu_map_nxt;
565 ps_proc->ps_tu = ps_tu_nxt;
567 cur_ctb_tile_x = ps_proc->i4_ctb_tile_x;
568 cur_ctb_tile_y = ps_proc->i4_ctb_tile_y;
569 cur_ctb_slice_x = ps_proc->i4_ctb_slice_x;
570 cur_ctb_slice_y = ps_proc->i4_ctb_slice_y;
571 cur_slice_idx = ps_proc->i4_cur_slice_idx;
572 ps_tu_cur = ps_proc->ps_tu;
573 pu1_pu_map_cur = ps_proc->pu1_pu_map;
576 if(ps_proc->i4_ctb_cnt < num_ctb)
578 num_ctb = ps_proc->i4_ctb_cnt;
585 tile_t *ps_tile = ps_proc->ps_tile;
592 if(ps_proc->i4_check_parse_status || ps_proc->i4_check_proc_status)
601 if(ps_proc->i4_check_parse_status)
603 idx = (ps_proc->i4_ctb_x + nctb - 1);
604 idx += (ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb);
630 ihevcd_proc_map_check(ps_proc, proc_type, nctb);
632 ihevcd_slice_hdr_update(ps_proc);
633 ps_slice_hdr = ps_proc->ps_slice_hdr;
640 //ihevcd_ctb_boundary_strength_islice(ps_proc, ctb_size);
641 //ihevcd_deblk_ctb(ps_proc);
648 ihevcd_ctb_avail_update(ps_proc);
651 au1_pic_avail_ctb_flags[ps_proc->i4_ctb_x + ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb] =
652 ((ps_proc->u1_top_ctb_avail << 3) | (ps_proc->u1_left_ctb_avail << 2) | (ps_proc->u1_top_lt_ctb_avail << 1) | (ps_proc->u1_top_rt_ctb_avail));
653 au4_pic_ctb_slice_xy[ps_proc->i4_ctb_x + ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb] =
654 (((UWORD16)ps_proc->i4_ctb_slice_x << 16) | ((UWORD16)ps_proc->i4_ctb_slice_y << 16));
665 pu4_ctb_top_pu_idx = ps_proc->pu4_pic_pu_idx_top
666 + (ps_proc->i4_ctb_x * ctb_size / MIN_PU_SIZE);
667 pu4_ctb_left_pu_idx = ps_proc->pu4_pic_pu_idx_left;
668 pu4_ctb_top_left_pu_idx = &ps_proc->u4_ctb_top_left_pu_idx;
673 s_mv_ctxt.ps_pps = ps_proc->ps_pps;
674 s_mv_ctxt.ps_sps = ps_proc->ps_sps;
675 s_mv_ctxt.ps_slice_hdr = ps_proc->ps_slice_hdr;
676 s_mv_ctxt.i4_ctb_x = ps_proc->i4_ctb_x;
677 s_mv_ctxt.i4_ctb_y = ps_proc->i4_ctb_y;
678 s_mv_ctxt.ps_pu = ps_proc->ps_pu;
679 s_mv_ctxt.ps_pic_pu = ps_proc->ps_pic_pu;
681 s_mv_ctxt.pu4_pic_pu_idx_map = ps_proc->pu4_pic_pu_idx_map;
682 s_mv_ctxt.pu4_pic_pu_idx = ps_proc->pu4_pic_pu_idx;
683 s_mv_ctxt.pu1_pic_pu_map = ps_proc->pu1_pic_pu_map;
684 s_mv_ctxt.i4_ctb_pu_cnt = ps_proc->i4_ctb_pu_cnt;
685 s_mv_ctxt.i4_ctb_start_pu_idx = ps_proc->i4_ctb_start_pu_idx;
686 s_mv_ctxt.u1_top_ctb_avail = ps_proc->u1_top_ctb_avail;
687 s_mv_ctxt.u1_top_rt_ctb_avail = ps_proc->u1_top_rt_ctb_avail;
688 s_mv_ctxt.u1_top_lt_ctb_avail = ps_proc->u1_top_lt_ctb_avail;
689 s_mv_ctxt.u1_left_ctb_avail = ps_proc->u1_left_ctb_avail;
695 ihevcd_inter_pred_ctb(ps_proc);
702 UWORD8 *pu1_pic_pu_map_ctb = ps_proc->pu1_pic_pu_map +
703 (ps_proc->i4_ctb_x + ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb) * num_minpu_in_ctb;
705 UWORD32 *pu4_nbr_pu_idx = ps_proc->pu4_pic_pu_idx_map;
718 cur_ctb_idx = ps_proc->i4_ctb_x
719 + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
720 next_ctb_idx = ps_proc->i4_next_pu_ctb_cnt;
721 num_pu_per_ctb = ps_proc->pu4_pic_pu_idx[next_ctb_idx]
722 - ps_proc->pu4_pic_pu_idx[cur_ctb_idx];
723 ctb_start_pu_idx = ps_proc->pu4_pic_pu_idx[cur_ctb_idx];
724 ps_pu = &ps_proc->ps_pic_pu[ctb_start_pu_idx];
745 - (ps_proc->i4_ctb_y << ps_sps->i1_log2_ctb_size);
750 ps_proc->u4_ctb_top_left_pu_idx = ps_proc->pu4_pic_pu_idx_top[((ps_proc->i4_ctb_x + 1) * ctb_size / MIN_PU_SIZE) - 1];
755 ps_proc->pu4_pic_pu_idx_left[i] =
759 ps_proc->pu4_pic_pu_idx_top[(ps_proc->i4_ctb_x * ctb_size / MIN_PU_SIZE) + i] =
767 if(ps_proc->ps_pps->i1_tiles_enabled_flag)
770 UWORD16 *pu1_tile_idx = ps_proc->pu1_tile_idx;
771 pu1_tile_idx[(ps_proc->i4_ctb_x + (ps_proc->i4_ctb_y * ps_sps->i2_pic_wd_in_ctb))]
772 = ps_proc->i4_cur_tile_idx;
778 /* Boundary strength call has to be after IQ IT recon since QP population needs ps_proc->i4_qp_const_inc_ctb flag */
782 ps_slice_hdr = ps_proc->ps_slice_hdr;
796 ihevcd_update_ctb_tu_cnt(ps_proc);
797 ps_proc->s_bs_ctxt.ps_pps = ps_proc->ps_pps;
798 ps_proc->s_bs_ctxt.ps_sps = ps_proc->ps_sps;
799 ps_proc->s_bs_ctxt.ps_codec = ps_proc->ps_codec;
800 ps_proc->s_bs_ctxt.i4_ctb_tu_cnt = ps_proc->i4_ctb_tu_cnt;
801 ps_proc->s_bs_ctxt.i4_ctb_x = ps_proc->i4_ctb_x;
802 ps_proc->s_bs_ctxt.i4_ctb_y = ps_proc->i4_ctb_y;
803 ps_proc->s_bs_ctxt.i4_ctb_tile_x = ps_proc->i4_ctb_tile_x;
804 ps_proc->s_bs_ctxt.i4_ctb_tile_y = ps_proc->i4_ctb_tile_y;
805 ps_proc->s_bs_ctxt.i4_ctb_slice_x = ps_proc->i4_ctb_slice_x;
806 ps_proc->s_bs_ctxt.i4_ctb_slice_y = ps_proc->i4_ctb_slice_y;
807 ps_proc->s_bs_ctxt.ps_tu = ps_proc->ps_tu;
808 ps_proc->s_bs_ctxt.ps_pu = ps_proc->ps_pu;
809 ps_proc->s_bs_ctxt.pu4_pic_pu_idx_map = ps_proc->pu4_pic_pu_idx_map;
810 ps_proc->s_bs_ctxt.i4_next_pu_ctb_cnt = ps_proc->i4_next_pu_ctb_cnt;
811 ps_proc->s_bs_ctxt.i4_next_tu_ctb_cnt = ps_proc->i4_next_tu_ctb_cnt;
812 ps_proc->s_bs_ctxt.pu1_slice_idx = ps_proc->pu1_slice_idx;
813 ps_proc->s_bs_ctxt.ps_slice_hdr = ps_proc->ps_slice_hdr;
814 ps_proc->s_bs_ctxt.ps_tile = ps_proc->ps_tile;
818 ihevcd_ctb_boundary_strength_islice(&ps_proc->s_bs_ctxt);
822 ps_proc->s_bs_ctxt);
831 UWORD32 *pu4_vert_bs = (UWORD32 *)((UWORD8 *)ps_proc->s_bs_ctxt.pu4_pic_vert_bs +
832 ps_proc->i4_ctb_x * (ctb_size * ctb_size / 8 / 16) +
833 ps_proc->i4_ctb_y * bs_strd);
834 UWORD32 *pu4_horz_bs = (UWORD32 *)((UWORD8 *)ps_proc->s_bs_ctxt.pu4_pic_horz_bs +
835 ps_proc->i4_ctb_x * (ctb_size * ctb_size / 8 / 16) +
836 ps_proc->i4_ctb_y * bs_strd);
847 WORD32 cur_ctb_idx = ps_proc->i4_ctb_x
848 + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
851 ps_proc->pu1_pu_map += nctb * num_minpu_in_ctb;
852 ps_proc->ps_tu += ps_proc->i4_ctb_tu_cnt;
856 ps_proc->ps_tu = ps_proc->ps_pic_tu;
858 ps_proc->ps_pu += ps_proc->i4_ctb_pu_cnt;
862 ihevcd_proc_map_update(ps_proc, proc_type, nctb);
865 ihevcd_ctb_pos_update(ps_proc, nctb);
869 if(cur_slice_idx != ps_proc->i4_cur_slice_idx)
871 ps_proc->ps_slice_hdr = ps_codec->ps_slice_hdr_base + ((cur_slice_idx)&(MAX_SLICE_HDR_CNT - 1));
872 ps_proc->i4_cur_slice_idx = cur_slice_idx;
876 ps_proc->i4_ctb_x -= num_ctb;
877 ps_proc->i4_ctb_tile_x = cur_ctb_tile_x;
878 ps_proc->i4_ctb_slice_x = cur_ctb_slice_x;
879 ps_proc->i4_ctb_tile_y = cur_ctb_tile_y;
880 ps_proc->i4_ctb_slice_y = cur_ctb_slice_y;
881 ps_proc->pu1_pu_map = pu1_pu_map_cur;
882 ps_proc->ps_tu = ps_tu_cur;
889 ihevcd_proc_map_check(ps_proc, proc_type, nctb);
891 ihevcd_slice_hdr_update(ps_proc);
895 ihevcd_ctb_avail_update(ps_proc);
901 ihevcd_update_ctb_tu_cnt(ps_proc);
909 ps_proc->api2_dequant_intra_matrix[0] =
911 ps_proc->api2_dequant_intra_matrix[1] =
913 ps_proc->api2_dequant_intra_matrix[2] =
915 ps_proc->api2_dequant_intra_matrix[3] =
918 ps_proc->api2_dequant_inter_matrix[0] =
920 ps_proc->api2_dequant_inter_matrix[1] =
922 ps_proc->api2_dequant_inter_matrix[2] =
924 ps_proc->api2_dequant_inter_matrix[3] =
931 ps_proc->api2_dequant_intra_matrix[0] =
933 ps_proc->api2_dequant_intra_matrix[1] =
935 ps_proc->api2_dequant_intra_matrix[2] =
937 ps_proc->api2_dequant_intra_matrix[3] =
940 ps_proc->api2_dequant_inter_matrix[0] =
942 ps_proc->api2_dequant_inter_matrix[1] =
944 ps_proc->api2_dequant_inter_matrix[2] =
946 ps_proc->api2_dequant_inter_matrix[3] =
954 ps_proc->pu1_cur_ctb_luma = ps_proc->pu1_cur_pic_luma
955 + (ps_proc->i4_ctb_x * ctb_size
956 + ps_proc->i4_ctb_y * ctb_size
958 ps_proc->pu1_cur_ctb_chroma = ps_proc->pu1_cur_pic_chroma
959 + ps_proc->i4_ctb_x * ctb_size
960 + (ps_proc->i4_ctb_y * ctb_size * ps_codec->i4_strd / 2);
962 ihevcd_iquant_itrans_recon_ctb(ps_proc);
967 WORD32 cur_ctb_idx = ps_proc->i4_ctb_x
968 + ps_proc->i4_ctb_y * (ps_sps->i2_pic_wd_in_ctb);
971 ps_proc->pu1_pu_map += nctb * num_minpu_in_ctb;
972 ps_proc->ps_tu += ps_proc->i4_ctb_tu_cnt;
976 ps_proc->ps_tu = ps_proc->ps_pic_tu;
978 ps_proc->ps_pu += ps_proc->i4_ctb_pu_cnt;
983 ihevcd_proc_map_update(ps_proc, proc_type, nctb);
986 ihevcd_ctb_pos_update(ps_proc, nctb);
989 if(cur_slice_idx != ps_proc->i4_cur_slice_idx)
991 ps_proc->ps_slice_hdr = ps_codec->ps_slice_hdr_base + ((cur_slice_idx)&(MAX_SLICE_HDR_CNT - 1));
992 ps_proc->i4_cur_slice_idx = cur_slice_idx;
996 ps_proc->i4_ctb_x -= num_ctb;
997 ps_proc->i4_ctb_tile_x = cur_ctb_tile_x;
998 ps_proc->i4_ctb_slice_x = cur_ctb_slice_x;
999 ps_proc->i4_ctb_tile_y = cur_ctb_tile_y;
1000 ps_proc->i4_ctb_slice_y = cur_ctb_slice_y;
1001 pu1_pu_map_nxt = ps_proc->pu1_pu_map;
1002 ps_tu_nxt = ps_proc->ps_tu;
1003 ps_proc->pu1_pu_map = pu1_pu_map_cur;
1004 ps_proc->ps_tu = ps_tu_cur;
1012 ihevcd_proc_map_check(ps_proc, proc_type, nctb);
1014 ihevcd_slice_hdr_update(ps_proc);
1027 ps_proc->s_deblk_ctxt.ps_pps = ps_proc->ps_pps;
1028 ps_proc->s_deblk_ctxt.ps_sps = ps_proc->ps_sps;
1029 ps_proc->s_deblk_ctxt.ps_codec = ps_proc->ps_codec;
1030 ps_proc->s_deblk_ctxt.ps_slice_hdr = ps_proc->ps_slice_hdr;
1031 ps_proc->s_deblk_ctxt.i4_ctb_x = ps_proc->i4_ctb_x;
1032 ps_proc->s_deblk_ctxt.i4_ctb_y = ps_proc->i4_ctb_y;
1033 ps_proc->s_deblk_ctxt.pu1_slice_idx = ps_proc->pu1_slice_idx;
1034 ps_proc->s_deblk_ctxt.is_chroma_yuv420sp_vu = (ps_codec->e_ref_chroma_fmt == IV_YUV_420SP_VU);
1045 WORD32 bit_pos = ((ps_proc->i4_ctb_y << (log2_ctb_size - 3)) - 1) * loop_filter_strd + (ps_proc->i4_ctb_x << (log2_ctb_size - 3)) - 1;
1050 ps_proc->s_deblk_ctxt.au2_ctb_no_loop_filter_flag[row] = (*(UWORD32 *)(ps_proc->pu1_pic_no_loop_filter_flag + (bit_pos >> 3))) >> (bit_pos & 7);
1055 ihevcd_deblk_ctb(&ps_proc->s_deblk_ctxt, i4_is_last_ctb_x, i4_is_last_ctb_y);
1060 if(ps_proc->i4_ctb_x == ps_sps->i2_pic_wd_in_ctb - 1)
1069 ihevcd_deblk_ctb(&ps_proc->s_deblk_ctxt, i4_is_last_ctb_x, i4_is_last_ctb_y);
1077 if(ps_proc->i4_ctb_y == ps_sps->i2_pic_ht_in_ctb - 1)
1085 ihevcd_deblk_ctb(&ps_proc->s_deblk_ctxt, i4_is_last_ctb_x, i4_is_last_ctb_y);
1092 ihevcd_proc_map_update(ps_proc, proc_type, nctb);
1095 ihevcd_ctb_pos_update(ps_proc, nctb);
1098 if(cur_slice_idx != ps_proc->i4_cur_slice_idx)
1100 ps_proc->ps_slice_hdr = ps_codec->ps_slice_hdr_base + ((cur_slice_idx)&(MAX_SLICE_HDR_CNT - 1));
1101 ps_proc->i4_cur_slice_idx = cur_slice_idx;
1105 ps_proc->i4_ctb_x -= num_ctb;
1106 ps_proc->i4_ctb_tile_x = cur_ctb_tile_x;
1107 ps_proc->i4_ctb_tile_y = cur_ctb_tile_y;
1108 ps_proc->pu1_pu_map = pu1_pu_map_cur;
1109 ps_proc->ps_tu = ps_tu_cur;
1110 nxt_ctb_slice_y = ps_proc->i4_ctb_slice_y;
1111 nxt_ctb_slice_x = ps_proc->i4_ctb_slice_x;
1112 ps_proc->i4_ctb_slice_y = cur_ctb_slice_y;
1113 ps_proc->i4_ctb_slice_x = cur_ctb_slice_x;
1121 ihevcd_proc_map_check(ps_proc, proc_type, nctb);
1123 ihevcd_slice_hdr_update(ps_proc);
1133 ps_proc->s_sao_ctxt.ps_pps = ps_proc->ps_pps;
1134 ps_proc->s_sao_ctxt.ps_sps = ps_proc->ps_sps;
1135 ps_proc->s_sao_ctxt.ps_tile = ps_proc->ps_tile;
1136 ps_proc->s_sao_ctxt.ps_codec = ps_proc->ps_codec;
1137 ps_proc->s_sao_ctxt.ps_slice_hdr = ps_proc->ps_slice_hdr;
1138 ps_proc->s_sao_ctxt.i4_cur_slice_idx = ps_proc->i4_cur_slice_idx;
1142 ps_proc->s_sao_ctxt.i4_ctb_x = ps_proc->i4_ctb_x;
1143 ps_proc->s_sao_ctxt.i4_ctb_y = ps_proc->i4_ctb_y;
1144 ps_proc->s_sao_ctxt.is_chroma_yuv420sp_vu = (ps_codec->e_ref_chroma_fmt == IV_YUV_420SP_VU);
1146 ihevcd_sao_shift_ctb(&ps_proc->s_sao_ctxt);
1148 if(ps_proc->i4_ctb_x > 1 && ps_proc->i4_ctb_y > 0)
1150 ps_proc->s_sao_ctxt.i4_ctb_x = ps_proc->i4_ctb_x - 2;
1151 ps_proc->s_sao_ctxt.i4_ctb_y = ps_proc->i4_ctb_y - 1;
1153 ihevcd_sao_ctb(&ps_proc->s_sao_ctxt);
1156 if(ps_sps->i2_pic_wd_in_ctb - 1 == ps_proc->i4_ctb_x && ps_proc->i4_ctb_y > 0)
1158 ps_proc->s_sao_ctxt.i4_ctb_x = ps_proc->i4_ctb_x - 1;
1159 ps_proc->s_sao_ctxt.i4_ctb_y = ps_proc->i4_ctb_y - 1;
1161 ihevcd_sao_ctb(&ps_proc->s_sao_ctxt);
1163 ps_proc->s_sao_ctxt.i4_ctb_x = ps_proc->i4_ctb_x;
1164 ps_proc->s_sao_ctxt.i4_ctb_y = ps_proc->i4_ctb_y - 1;
1166 ihevcd_sao_ctb(&ps_proc->s_sao_ctxt);
1168 if(ps_sps->i2_pic_ht_in_ctb - 1 == ps_proc->i4_ctb_y)
1171 ps_proc->s_sao_ctxt.i4_ctb_y = ps_proc->i4_ctb_y;
1174 ps_proc->s_sao_ctxt.i4_ctb_x = i4_ctb_x;
1175 ihevcd_sao_ctb(&ps_proc
1187 if(0 == ps_proc->i4_ctb_x)
1192 ps_proc->pu1_cur_ctb_luma = ps_proc->pu1_cur_pic_luma
1193 + (ps_proc->i4_ctb_x * ctb_size
1194 + ps_proc->i4_ctb_y * ctb_size
1196 ps_proc->pu1_cur_ctb_chroma = ps_proc->pu1_cur_pic_chroma
1197 + ps_proc->i4_ctb_x * ctb_size
1198 + (ps_proc->i4_ctb_y * ctb_size * ps_codec->i4_strd / 2);
1201 pad_ht_luma += (ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y ? 8 : 0;
1204 ps_codec->s_func_selector.ihevc_pad_left_luma_fptr(ps_proc->pu1_cur_ctb_luma - 8 * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_luma, PAD_LEFT);
1205 ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr(ps_proc->pu1_cur_ctb_chroma - 16 * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_chroma, PAD_LEFT);
1208 if((ps_sps->i2_pic_wd_in_ctb - 1) == ps_proc->i4_ctb_x)
1212 WORD32 cols_remaining = ps_sps->i2_pic_width_in_luma_samples - (ps_proc->i4_ctb_x << ps_sps->i1_log2_ctb_size);
1214 ps_proc->pu1_cur_ctb_luma = ps_proc->pu1_cur_pic_luma
1215 + (ps_proc->i4_ctb_x * ctb_size
1216 + ps_proc->i4_ctb_y * ctb_size
1218 ps_proc->pu1_cur_ctb_chroma = ps_proc->pu1_cur_pic_chroma
1219 + ps_proc->i4_ctb_x * ctb_size
1220 + (ps_proc->i4_ctb_y * ctb_size * ps_codec->i4_strd / 2);
1224 if((ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y)
1228 ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr(ps_proc->pu1_cur_pic_chroma + (ps_sps->i2_pic_height_in_luma_samples / 2 - 16) * ps_codec->i4_strd,
1232 ps_codec->s_func_selector.ihevc_pad_right_luma_fptr(ps_proc->pu1_cur_ctb_luma + cols_remaining - 8 * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_luma, PAD_RIGHT);
1233 ps_codec->s_func_selector.ihevc_pad_right_chroma_fptr(ps_proc->pu1_cur_ctb_chroma + cols_remaining - 16 * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_chroma, PAD_RIGHT);
1235 if((ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y)
1241 ihevc_pad_top(ps_proc->pu1_cur_pic_luma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP);
1242 ihevc_pad_top(ps_proc->pu1_cur_pic_chroma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP / 2);
1244 pu1_buf = ps_proc->pu1_cur_pic_luma + ps_codec->i4_strd * ps_sps->i2_pic_height_in_luma_samples - PAD_LEFT;
1248 pu1_buf = ps_proc->pu1_cur_pic_chroma + ps_codec->i4_strd * (ps_sps->i2_pic_height_in_luma_samples / 2) - PAD_LEFT;
1253 if(ps_proc->i4_ctb_y > 1)
1255 if(0 == ps_proc->i4_ctb_x)
1263 ps_codec->s_func_selector.ihevc_pad_left_luma_fptr(ps_proc->pu1_cur_ctb_luma - 2 * ctb_size * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_luma, PAD_LEFT);
1264 ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr(ps_proc->pu1_cur_ctb_chroma - ctb_size * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_chroma, PAD_LEFT);
1266 else if((ps_sps->i2_pic_wd_in_ctb - 1) == ps_proc->i4_ctb_x)
1270 WORD32 cols_remaining = ps_sps->i2_pic_width_in_luma_samples - (ps_proc->i4_ctb_x << ps_sps->i1_log2_ctb_size);
1272 pad_ht_luma = ((ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y) ? 3 * ctb_size : ctb_size;
1273 pad_ht_chroma = ((ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y) ? 3 * ctb_size / 2 : ctb_size / 2;
1275 ps_codec->s_func_selector.ihevc_pad_right_luma_fptr(ps_proc->pu1_cur_ctb_luma + cols_remaining - 2 * ctb_size * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_luma, PAD_RIGHT);
1276 ps_codec->s_func_selector.ihevc_pad_right_chroma_fptr(ps_proc->pu1_cur_ctb_chroma + cols_remaining - ctb_size * ps_codec->i4_strd, ps_codec->i4_strd, pad_ht_chroma, PAD_RIGHT);
1278 if((ps_sps->i2_pic_ht_in_ctb - 1) == ps_proc->i4_ctb_y)
1287 ps_codec->s_func_selector.ihevc_pad_left_luma_fptr(ps_proc->pu1_cur_pic_luma + ps_codec->i4_strd * (ps_sps->i2_pic_height_in_luma_samples - 2 * ctb_size),
1289 ps_codec->s_func_selector.ihevc_pad_left_chroma_fptr(ps_proc->pu1_cur_pic_chroma + ps_codec->i4_strd * (ps_sps->i2_pic_height_in_luma_samples / 2 - ctb_size),
1295 ihevc_pad_top(ps_proc->pu1_cur_pic_luma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP);
1296 ihevc_pad_top(ps_proc->pu1_cur_pic_chroma - PAD_LEFT, ps_codec->i4_strd, ps_sps->i2_pic_width_in_luma_samples + PAD_WD, PAD_TOP / 2);
1298 pu1_buf = ps_proc->pu1_cur_pic_luma + ps_codec->i4_strd * ps_sps->i2_pic_height_in_luma_samples - PAD_LEFT;
1302 pu1_buf = ps_proc->pu1_cur_pic_chroma + ps_codec->i4_strd * (ps_sps->i2_pic_height_in_luma_samples / 2) - PAD_LEFT;
1313 ihevcd_proc_map_update(ps_proc, proc_type, nctb);
1315 ihevcd_proc_map_update(ps_proc, PROC_ALL, nctb);
1319 ps_tile = ps_proc->ps_tile;
1322 ps_proc->i4_ctb_tile_x += nctb;
1323 ps_proc->i4_ctb_x += nctb;
1325 ps_proc->i4_ctb_slice_x += nctb;
1329 if(ps_proc->i4_ctb_tile_x >= (ps_tile->u2_wd))
1332 ps_proc->i4_ctb_tile_x = 0;
1333 ps_proc->i4_ctb_x = ps_tile->u1_pos_x;
1335 ps_proc->i4_ctb_tile_y++;
1336 ps_proc->i4_ctb_y++;
1337 if(ps_proc->i4_ctb_tile_y == ps_tile->u2_ht)
1340 ps_proc->i4_ctb_tile_y = 0;
1341 ps_proc->i4_ctb_tile_x = 0;
1342 ps_proc->ps_tile++;
1346 ps_tile = ps_proc->ps_tile;
1347 ps_proc->i4_ctb_x = ps_tile->u1_pos_x;
1348 ps_proc->i4_ctb_y = ps_tile->u1_pos_y;
1356 ps_proc->i4_ctb_cnt -= num_ctb;
1361 void ihevcd_init_proc_ctxt(process_ctxt_t *ps_proc, WORD32 tu_coeff_data_ofst)
1379 ps_codec = ps_proc->ps_codec;
1381 ps_slice_hdr = ps_codec->ps_slice_hdr_base + ((ps_proc->i4_cur_slice_idx) & (MAX_SLICE_HDR_CNT - 1));
1382 ps_proc->ps_slice_hdr = ps_slice_hdr;
1383 ps_proc->ps_pps = ps_codec->ps_pps_base + ps_slice_hdr->i1_pps_id;
1384 ps_pps = ps_proc->ps_pps;
1385 ps_proc->ps_sps = ps_codec->ps_sps_base + ps_pps->i1_sps_id;
1386 ps_sps = ps_proc->ps_sps;
1387 ps_proc->i4_init_done = 1;
1392 ps_proc->s_sao_ctxt.pu1_slice_idx = ps_proc->pu1_slice_idx;
1394 ihevcd_get_tile_pos(ps_pps, ps_sps, ps_proc->i4_ctb_x, ps_proc->i4_ctb_y,
1395 &ps_proc->i4_ctb_tile_x, &ps_proc->i4_ctb_tile_y,
1398 ps_proc->ps_tile = ps_pps->ps_tile + tile_idx;
1399 ps_proc->i4_cur_tile_idx = tile_idx;
1400 ps_tile = ps_proc->ps_tile;
1438 if(ps_proc->i4_ctb_x >= i2_independent_ctb_x)
1440 ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_x - i2_independent_ctb_x;
1460 ps_proc->i4_ctb_slice_x = i4_wd_in_ctb
1461 - (i2_independent_ctb_x - ps_proc->i4_ctb_x);
1465 ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_x - ps_tile->u1_pos_x;
1471 ps_proc->i4_ctb_slice_y = ps_proc->i4_ctb_y - i2_independent_ctb_y;
1474 if((0 == ps_proc->i4_ctb_tile_x) && (0 == ps_proc->i4_ctb_tile_y))
1478 ps_proc->i4_ctb_slice_x = 0;
1479 ps_proc->i4_ctb_slice_y = 0;
1484 ps_proc
1497 ps_proc->i4_ctb_slice_y -= 1;
1504 if(((i2_independent_ctb_x - ps_tile->u1_pos_x) != 0) && ((ps_proc->i4_ctb_slice_y != 0))
1507 ps_proc->i4_ctb_slice_y -= 1;
1518 ps_proc->i4_ctb_slice_x = ps_proc->i4_ctb_x - i2_independent_ctb_x;
1519 ps_proc->i4_ctb_slice_y = ps_proc->i4_ctb_y - i2_independent_ctb_y;
1520 if(ps_proc->i4_ctb_slice_x < 0)
1522 ps_proc->i4_ctb_slice_x += ps_sps->i2_pic_wd_in_ctb;
1523 ps_proc->i4_ctb_slice_y -= 1;
1537 ctb_addr = ps_proc->i4_ctb_y * num_ctb_in_row + ps_proc->i4_ctb_x;
1542 ps_proc->pu1_tu_map = ps_proc->pu1_pic_tu_map
1546 ps_proc->ps_tu = ps_proc->ps_pic_tu + ps_proc->pu4_pic_tu_idx[ctb_addr % RESET_TU_BUF_NCTB];
1550 ps_proc->ps_tu = ps_proc->ps_pic_tu + ps_proc->pu4_pic_tu_idx[ctb_addr];
1552 ps_proc->pv_tu_coeff_data = (UWORD8 *)ps_proc->pv_pic_tu_coeff_data
1560 ctb_addr = ps_proc->i4_ctb_y * num_ctb_in_row + ps_proc->i4_ctb_x;
1561 pu_idx = ps_proc->pu4_pic_pu_idx[ctb_addr];
1562 ps_proc->pu1_pu_map = ps_proc->pu1_pic_pu_map
1564 ps_proc->ps_pu = ps_proc->ps_pic_pu + pu_idx;
1569 ps_proc->i4_nctb = MIN(ps_codec->u4_nctb, ps_tile->u2_wd);
1573 void ihevcd_process_thread(process_ctxt_t *ps_proc)
1576 ithread_set_affinity(ps_proc->i4_id + 1);
1583 ret = ihevcd_jobq_dequeue((jobq_t *)ps_proc->pv_proc_jobq, &s_job,
1588 ps_proc->i4_ctb_cnt = s_job.i2_ctb_cnt;
1589 ps_proc->i4_ctb_x = s_job.i2_ctb_x;
1590 ps_proc->i4_ctb_y = s_job.i2_ctb_y;
1591 ps_proc->i4_cur_slice_idx = s_job.i2_slice_idx;
1597 ihevcd_init_proc_ctxt(ps_proc, s_job.i4_tu_coeff_data_ofst);
1598 ihevcd_process(ps_proc);
1607 if(0 == ps_proc->i4_init_done)
1609 ihevcd_init_proc_ctxt(ps_proc, 0);
1611 ps_sps = ps_proc->ps_sps;
1612 ps_codec = ps_proc->ps_codec;
1613 ps_out_buffer = ps_proc->ps_out_buffer;
1621 ihevcd_fmt_conv(ps_proc->ps_codec, ps_proc, ps_out_buffer->pu1_bufs[0], ps_out_buffer->pu1_bufs[1], ps_out_buffer->pu1_bufs[2],