summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSzuWei Lin <szuweilin@google.com>2020-09-01 17:48:09 +0800
committerSzuWei Lin <szuweilin@google.com>2020-09-01 17:48:09 +0800
commitf3f22a675fddb9ff691621e2370c4f4bdc1ed235 (patch)
treec38084927c6fbda0c62cbc5d13bbdafff55f6593
parentade834e4b4e8a4d3784397743a43c5402b0cec7d (diff)
parent4d48ac80cc67fdc9225bd70de3c612681455e654 (diff)
downloadplatform_external_libmpeg2-android10-gsi.tar.gz
platform_external_libmpeg2-android10-gsi.tar.bz2
platform_external_libmpeg2-android10-gsi.zip
Merge branch android10-qpr3-releaseandroid10-gsi
Change-Id: If6e141530928feaa4b6f4894a7c49d5dde87f033
-rw-r--r--common/arm/impeg2_format_conv.s8
-rw-r--r--common/armv8/impeg2_format_conv.s9
-rw-r--r--common/ideint.c15
-rw-r--r--common/impeg2_format_conv.c4
-rw-r--r--decoder/impeg2d_api_main.c38
-rw-r--r--decoder/impeg2d_dec_hdr.c1
6 files changed, 45 insertions, 30 deletions
diff --git a/common/arm/impeg2_format_conv.s b/common/arm/impeg2_format_conv.s
index c07edda..bd9a81a 100644
--- a/common/arm/impeg2_format_conv.s
+++ b/common/arm/impeg2_format_conv.s
@@ -170,9 +170,11 @@ yuv420sp_uv_chroma:
ldr r3, [sp, #24] @// Load pu1_dest_uv from stack
ldr r4, [sp, #28] @// Load u2_height from stack
+ add r4, r4, 1
ldr r5, [sp, #32] @// Load u2_width from stack
-
+ add r5, r5, 1
+ bic r5, r5, #1
ldr r7, [sp, #40] @// Load u2_strideu from stack
@@ -332,9 +334,11 @@ yuv420sp_vu_chroma:
ldr r3, [sp, #24] @// Load pu1_dest_uv from stack
ldr r4, [sp, #28] @// Load u2_height from stack
+ add r4, r4, 1
ldr r5, [sp, #32] @// Load u2_width from stack
-
+ add r5, r5, 1
+ bic r5, r5, #1
ldr r7, [sp, #40] @// Load u2_strideu from stack
diff --git a/common/armv8/impeg2_format_conv.s b/common/armv8/impeg2_format_conv.s
index 48baf04..ec76e29 100644
--- a/common/armv8/impeg2_format_conv.s
+++ b/common/armv8/impeg2_format_conv.s
@@ -185,6 +185,10 @@ yuv420sp_uv_chroma:
ldr w8, [sp, #104] //// Load u2_dest_stride_uv from stack
sxtw x8, w8
+ add x6, x6, 1
+ bic x6, x6, #1
+
+ add x9, x9, 1
sub x7, x7, x6, lsr #1 //// Source increment
@@ -359,6 +363,11 @@ yuv420sp_vu_chroma:
ldr w8, [sp, #104] //// Load u2_dest_stride_uv from stack
sxtw x8, w8
+ add x6, x6, 1
+ bic x6, x6, #1
+
+ add x9, x9, 1
+
sub x7, x7, x6, lsr #1 //// Source increment
sub x8, x8, x6 //// Destination increment
diff --git a/common/ideint.c b/common/ideint.c
index 24e4e72..af6d15e 100644
--- a/common/ideint.c
+++ b/common/ideint.c
@@ -206,7 +206,7 @@ IDEINT_ERROR_T ideint_process(void *pv_ctxt,
for(i = 0; i < num_comp; i++)
{
- UWORD8 *pu1_prv, *pu1_out;
+ UWORD8 *pu1_prv = NULL, *pu1_out;
UWORD8 *pu1_top, *pu1_bot, *pu1_dst;
WORD32 cur_strd, out_strd, dst_strd;
@@ -255,14 +255,16 @@ IDEINT_ERROR_T ideint_process(void *pv_ctxt,
{
disable_cac_sad = 1;
}
-
for(row = comp_row_start; row < comp_row_end; row++)
{
pu1_out = ps_out_frm->apu1_buf[i];
pu1_out += (ps_out_frm->ai4_strd[i] * row << 3);
- pu1_prv = ps_prv_fld->apu1_buf[i];
- pu1_prv += (ps_prv_fld->ai4_strd[i] * row << 2);
+ if(0 == disable_cac_sad)
+ {
+ pu1_prv = ps_prv_fld->apu1_buf[i];
+ pu1_prv += (ps_prv_fld->ai4_strd[i] * row << 2);
+ }
if(ps_ctxt->s_params.i4_cur_fld_top)
{
@@ -408,7 +410,10 @@ IDEINT_ERROR_T ideint_process(void *pv_ctxt,
memcpy(pu1_out + j * out_strd, au1_dst + j * BLK_WD, blk_wd);
}
}
- pu1_prv += 8;
+ if(NULL != pu1_prv)
+ {
+ pu1_prv += 8;
+ }
pu1_top += 8;
pu1_bot += 8;
pu1_out += 8;
diff --git a/common/impeg2_format_conv.c b/common/impeg2_format_conv.c
index ec0bcfb..b4d62cc 100644
--- a/common/impeg2_format_conv.c
+++ b/common/impeg2_format_conv.c
@@ -321,7 +321,7 @@ void impeg2_fmt_conv_yuv420p_to_yuv420sp_vu(UWORD8 *pu1_y, UWORD8 *pu1_u, UWORD8
pu1_src_u = pu1_u;
pu1_src_v = pu1_v;
pu1_dst = pu1_dest_uv ;
-
+ u4_width = ((u4_width + 1) >> 1) << 1;
u4_height = (u4_height + 1) >> 1;
u2_width_uv = (u4_width + 1) >> 1;
for(i = 0; i < u4_height ; i++)
@@ -379,7 +379,7 @@ void impeg2_fmt_conv_yuv420p_to_yuv420sp_uv(UWORD8 *pu1_y, UWORD8 *pu1_u, UWORD8
pu1_src_u = pu1_u;
pu1_src_v = pu1_v;
pu1_dst = pu1_dest_uv ;
-
+ u4_width = ((u4_width + 1) >> 1) << 1;
u4_height = (u4_height + 1) >> 1;
u2_width_uv = (u4_width + 1) >> 1;
for(i = 0; i < u4_height ; i++)
diff --git a/decoder/impeg2d_api_main.c b/decoder/impeg2d_api_main.c
index 33a7281..44e1708 100644
--- a/decoder/impeg2d_api_main.c
+++ b/decoder/impeg2d_api_main.c
@@ -1500,10 +1500,8 @@ UWORD32 impeg2d_get_outbuf_size(WORD32 pic_wd,UWORD32 pic_ht, WORD32 u1_chroma_f
if(u1_chroma_format == IV_YUV_420P)
{
p_buf_size[0] = (pic_wd * pic_ht);
- p_buf_size[1] = (pic_wd * pic_ht)
- >> 2;
- p_buf_size[2] = (pic_wd * pic_ht)
- >> 2;
+ p_buf_size[1] = ((pic_wd + 1) >> 1) * ((pic_ht + 1) >> 1);
+ p_buf_size[2] = ((pic_wd + 1) >> 1) * ((pic_ht + 1) >> 1);
}
else if(u1_chroma_format == IV_YUV_422ILE)
{
@@ -1523,11 +1521,9 @@ UWORD32 impeg2d_get_outbuf_size(WORD32 pic_wd,UWORD32 pic_ht, WORD32 u1_chroma_f
|| (u1_chroma_format == IV_YUV_420SP_VU))
{
p_buf_size[0] = (pic_wd * pic_ht);
- p_buf_size[1] = (pic_wd * pic_ht)
- >> 1;
+ p_buf_size[1] = ((pic_wd + 1) >> 1) * ((pic_ht + 1) >> 1) * 2;
p_buf_size[2] = 0;
}
-
return u4_min_num_out_bufs;
}
@@ -3330,20 +3326,20 @@ IV_API_CALL_STATUS_T impeg2d_api_entity(iv_obj_t *ps_dechdl,
ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_y_strd = ps_dec_state->u4_frm_buf_stride;
ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_y_ht = ps_dec_state->u2_vertical_size;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_wd = ps_dec_state->u2_horizontal_size >> 1;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_strd = ps_dec_state->u4_frm_buf_stride >> 1;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_ht = ps_dec_state->u2_vertical_size >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_wd = (ps_dec_state->u2_horizontal_size + 1) >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_strd = (ps_dec_state->u4_frm_buf_stride + 1) >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_ht = (ps_dec_state->u2_vertical_size + 1) >> 1;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_wd = ps_dec_state->u2_horizontal_size >> 1;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_strd = ps_dec_state->u4_frm_buf_stride >> 1;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_ht = ps_dec_state->u2_vertical_size >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_wd = (ps_dec_state->u2_horizontal_size + 1) >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_strd = (ps_dec_state->u4_frm_buf_stride + 1) >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_ht = (ps_dec_state->u2_vertical_size + 1) >> 1;
ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_size = sizeof(ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf);
switch(ps_dec_state->i4_chromaFormat)
{
case IV_YUV_420SP_UV:
case IV_YUV_420SP_VU:
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_wd = ps_dec_state->u2_horizontal_size;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_wd = (((ps_dec_state->u2_horizontal_size + 1) >> 1) << 1);
ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_strd = ps_dec_state->u4_frm_buf_stride;
break;
case IV_YUV_422ILE:
@@ -3418,20 +3414,20 @@ IV_API_CALL_STATUS_T impeg2d_api_entity(iv_obj_t *ps_dechdl,
ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_y_strd = ps_dec_state->u4_frm_buf_stride;
ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_y_ht = ps_dec_state->u2_vertical_size;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_wd = ps_dec_state->u2_horizontal_size >> 1;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_strd = ps_dec_state->u4_frm_buf_stride >> 1;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_ht = ps_dec_state->u2_vertical_size >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_wd = (ps_dec_state->u2_horizontal_size + 1) >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_strd = (ps_dec_state->u4_frm_buf_stride + 1) >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_ht = (ps_dec_state->u2_vertical_size + 1) >> 1;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_wd = ps_dec_state->u2_horizontal_size >> 1;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_strd = ps_dec_state->u4_frm_buf_stride >> 1;
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_ht = ps_dec_state->u2_vertical_size >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_wd = (ps_dec_state->u2_horizontal_size + 1) >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_strd = (ps_dec_state->u4_frm_buf_stride + 1) >> 1;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_v_ht = (ps_dec_state->u2_vertical_size + 1) >> 1;
ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_size = sizeof(ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf);
switch(ps_dec_state->i4_chromaFormat)
{
case IV_YUV_420SP_UV:
case IV_YUV_420SP_VU:
- ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_wd = ps_dec_state->u2_horizontal_size;
+ ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_wd = (((ps_dec_state->u2_horizontal_size + 1) >> 1) << 1);
ps_dec_op->s_ivd_video_decode_op_t.s_disp_frm_buf.u4_u_strd = ps_dec_state->u4_frm_buf_stride;
break;
case IV_YUV_422ILE:
diff --git a/decoder/impeg2d_dec_hdr.c b/decoder/impeg2d_dec_hdr.c
index b60f488..3c974a5 100644
--- a/decoder/impeg2d_dec_hdr.c
+++ b/decoder/impeg2d_dec_hdr.c
@@ -1253,6 +1253,7 @@ static WORD32 impeg2d_init_thread_dec_ctxt(dec_state_t *ps_dec,
ps_dec_thd->ps_func_forw_or_back = ps_dec->ps_func_forw_or_back;
ps_dec_thd->pv_deinterlacer_ctxt = ps_dec->pv_deinterlacer_ctxt;
ps_dec_thd->ps_deint_pic = ps_dec->ps_deint_pic;
+ ps_dec_thd->pu1_deint_fmt_buf = ps_dec->pu1_deint_fmt_buf;
return 0;
}