diff options
author | Xin Li <delphij@google.com> | 2021-08-14 06:30:56 +0000 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2021-08-14 06:30:56 +0000 |
commit | 1603a390d9ea7ef40ec70319f071e42407463031 (patch) | |
tree | d849791180a7c14f53a5946412e6122e22634147 | |
parent | 2f22097eb368a3b3deed6946e18143b5ecf7e1e1 (diff) | |
parent | 1f0a09988e6802f7bdf66a00bc09ac88a894fa68 (diff) | |
download | libavc-1603a390d9ea7ef40ec70319f071e42407463031.tar.gz |
Merge sc-dev-plus-aosp-without-vendor@7634622
Merged-In: Iaa58fca12b868b2bcbf80d8c57b1199d3f5906eb
Change-Id: I52a5f915b9bb31f432c4ad55ae4117ff4ddceb54
-rw-r--r-- | decoder/ih264d_parse_slice.c | 15 | ||||
-rw-r--r-- | encoder/ih264e_process.c | 34 |
2 files changed, 31 insertions, 18 deletions
diff --git a/decoder/ih264d_parse_slice.c b/decoder/ih264d_parse_slice.c index f4413c7..266c69b 100644 --- a/decoder/ih264d_parse_slice.c +++ b/decoder/ih264d_parse_slice.c @@ -1435,17 +1435,20 @@ WORD32 ih264d_parse_decode_slice(UWORD8 u1_is_idr_slice, i1_is_end_of_poc = 0; } - if (ps_dec->u4_first_slice_in_pic == 0) + /* Increment only if the current slice has atleast 1 more MB */ + if (ps_dec->u4_first_slice_in_pic == 0 && + (ps_dec->ps_parse_cur_slice->u4_first_mb_in_slice < + (UWORD32)(ps_dec->u2_total_mbs_coded >> ps_dec->ps_cur_slice->u1_mbaff_frame_flag))) { ps_dec->ps_parse_cur_slice++; ps_dec->u2_cur_slice_num++; + // in the case of single core increment ps_decode_cur_slice + if(ps_dec->u1_separate_parse == 0) + { + ps_dec->ps_decode_cur_slice++; + } } - // in the case of single core increment ps_decode_cur_slice - if((ps_dec->u1_separate_parse == 0) && (ps_dec->u4_first_slice_in_pic == 0)) - { - ps_dec->ps_decode_cur_slice++; - } ps_dec->u1_slice_header_done = 0; diff --git a/encoder/ih264e_process.c b/encoder/ih264e_process.c index 289053f..bf4c1e7 100644 --- a/encoder/ih264e_process.c +++ b/encoder/ih264e_process.c @@ -1259,7 +1259,8 @@ IH264E_ERROR_T ih264e_init_proc_ctxt(process_ctxt_t *ps_proc) /* init buffer pointers */ convert_uv_only = 1; if (u4_pad_bottom_sz || u4_pad_right_sz || - ps_codec->s_cfg.e_inp_color_fmt == IV_YUV_422ILE) + ps_codec->s_cfg.e_inp_color_fmt == IV_YUV_422ILE || + ps_proc->i4_mb_y == (ps_proc->i4_ht_mbs - 1)) { if (ps_proc->i4_mb_y == ps_proc->i4_ht_mbs - 1) u2_num_rows = (UWORD16) MB_SIZE - u4_pad_bottom_sz; @@ -1311,7 +1312,7 @@ IH264E_ERROR_T ih264e_init_proc_ctxt(process_ctxt_t *ps_proc) case IV_YUV_420SP_UV: case IV_YUV_420SP_VU: /* In case of 420 semi-planar input, copy last few rows to intermediate - buffer as chroma trans functions access one extra byte due to interleaved input. + buffer as few SIMD functions access upto 16 more bytes. This data will be padded if required */ if (ps_proc->i4_mb_y == (ps_proc->i4_ht_mbs - 1) || u4_pad_bottom_sz || u4_pad_right_sz) { @@ -1324,16 +1325,13 @@ IH264E_ERROR_T ih264e_init_proc_ctxt(process_ctxt_t *ps_proc) pu1_dst = ps_proc->pu1_src_buf_luma; - /* If padding is required, we always copy luma, if padding isn't required we never copy luma. */ - if (u4_pad_bottom_sz || u4_pad_right_sz) { - if (ps_proc->i4_mb_y == (ps_proc->i4_ht_mbs - 1)) - num_rows = MB_SIZE - u4_pad_bottom_sz; - for (i = 0; i < num_rows; i++) - { - memcpy(pu1_dst, pu1_src, ps_codec->s_cfg.u4_wd); - pu1_src += ps_proc->s_inp_buf.s_raw_buf.au4_strd[0]; - pu1_dst += ps_proc->i4_src_strd; - } + if (ps_proc->i4_mb_y == (ps_proc->i4_ht_mbs - 1)) + num_rows = MB_SIZE - u4_pad_bottom_sz; + for (i = 0; i < num_rows; i++) + { + memcpy(pu1_dst, pu1_src, ps_codec->s_cfg.u4_wd); + pu1_src += ps_proc->s_inp_buf.s_raw_buf.au4_strd[0]; + pu1_dst += ps_proc->i4_src_strd; } pu1_src = (UWORD8 *)ps_proc->s_inp_buf.s_raw_buf.apv_bufs[1] + (i4_mb_x * BLK8x8SIZE) + ps_proc->s_inp_buf.s_raw_buf.au4_strd[1] * (i4_mb_y * BLK8x8SIZE); @@ -1414,6 +1412,18 @@ IH264E_ERROR_T ih264e_init_proc_ctxt(process_ctxt_t *ps_proc) ps_proc->i4_src_chroma_strd, u4_pad_ht / 2, u4_pad_wd); } + if (ps_proc->i4_mb_y && ps_proc->i4_mb_y == ps_proc->i4_ht_mbs - 1) { + UWORD8 *pu1_src = (UWORD8 *)ps_proc->s_inp_buf.s_raw_buf.apv_bufs[0] + + ps_proc->s_inp_buf.s_raw_buf.au4_strd[0] * (i4_mb_y * MB_SIZE) - + ps_proc->s_inp_buf.s_raw_buf.au4_strd[0]; + UWORD8 *pu1_dst = ps_proc->pu1_src_buf_luma - ps_proc->i4_src_strd; + memcpy(pu1_dst, pu1_src, ps_codec->s_cfg.u4_wd); + if (u4_pad_right_sz && (ps_proc->i4_mb_x == 0)) { + pu1_dst += ps_codec->s_cfg.u4_disp_wd; + memset(pu1_dst, pu1_dst[-1], u4_pad_right_sz); + } + } + /* pad bottom edge */ if (u4_pad_bottom_sz && (ps_proc->i4_mb_y == ps_proc->i4_ht_mbs - 1) && ps_proc->i4_mb_x == 0) { |