From 2b0ce2b326e97c5572b333ad5229b2325ed21234 Mon Sep 17 00:00:00 2001 From: Harish Mahendrakar Date: Wed, 2 Sep 2015 09:01:40 +0530 Subject: Decoder: Fixed an issue in handling flush Fixed a NULL pointer reference, when flush is called before decoding any pictures. This was seen in following CTS test, android.media.cts.DecoderTest#testCodecResetsH264WithSurface Fixed code formatting issues in ih264d_set_flush_mode Updated the testbench to call flush before decoding starts Bug: 24405410 Change-Id: Ib04e0b15573b2482c9d5b43c8bc7dd30d8f8efdd --- decoder/ih264d_api.c | 13 ++++--------- test/decoder/main.c | 15 ++++++++++----- 2 files changed, 14 insertions(+), 14 deletions(-) diff --git a/decoder/ih264d_api.c b/decoder/ih264d_api.c index 6ef5185..5442dae 100644 --- a/decoder/ih264d_api.c +++ b/decoder/ih264d_api.c @@ -2484,7 +2484,6 @@ WORD32 ih264d_set_display_frame(iv_obj_t *dec_hdl, /*****************************************************************************/ WORD32 ih264d_set_flush_mode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op) { - dec_struct_t * ps_dec; ivd_ctl_flush_op_t *ps_ctl_op = (ivd_ctl_flush_op_t*)pv_api_op; ps_ctl_op->u4_error_code = 0; @@ -2495,19 +2494,15 @@ WORD32 ih264d_set_flush_mode(iv_obj_t *dec_hdl, void *pv_api_ip, void *pv_api_op /* Signal flush frame control call */ ps_dec->u1_flushfrm = 1; - if( ps_dec->u1_init_dec_flag == 1) + if(ps_dec->u1_init_dec_flag == 1) { - - ih264d_release_pics_in_dpb((void *)ps_dec, - ps_dec->u1_pic_bufs); - ih264d_release_display_bufs(ps_dec); + ih264d_release_pics_in_dpb((void *)ps_dec, ps_dec->u1_pic_bufs); + ih264d_release_display_bufs(ps_dec); } - ps_ctl_op->u4_error_code = - ((ivd_ctl_flush_op_t*)ps_dec->pv_dec_out)->u4_error_code; //verify the value + ps_ctl_op->u4_error_code = 0; return IV_SUCCESS; - } /*****************************************************************************/ diff --git a/test/decoder/main.c b/test/decoder/main.c index 89a54c5..875ed3d 100644 --- a/test/decoder/main.c +++ b/test/decoder/main.c @@ -65,8 +65,8 @@ #endif //#define ADAPTIVE_TEST -#define ADAPTIVE_MAX_WD 1920 -#define ADAPTIVE_MAX_HT 1088 +#define ADAPTIVE_MAX_WD 4096 +#define ADAPTIVE_MAX_HT 2160 #define ALIGN8(x) ((((x) + 7) >> 3) << 3) #define NUM_DISPLAY_BUFFERS 4 @@ -1789,7 +1789,7 @@ int main(WORD32 argc, CHAR *argv[]) WORD32 ret; CHAR ac_error_str[STRLENGTH]; vid_dec_ctx_t s_app_ctx; - UWORD8 *pu1_bs_buf; + UWORD8 *pu1_bs_buf = NULL; ivd_out_bufdesc_t *ps_out_buf; UWORD32 u4_num_bytes_dec = 0; @@ -2228,6 +2228,10 @@ int main(WORD32 argc, CHAR *argv[]) } + flush_output(codec_obj, &s_app_ctx, ps_out_buf, + pu1_bs_buf, &u4_op_frm_ts, + ps_op_file, ps_op_chksum_file, + u4_ip_frm_ts, u4_bytes_remaining); /*****************************************************************************/ /* Decode header to get width and height and buffer sizes */ @@ -2334,8 +2338,6 @@ int main(WORD32 argc, CHAR *argv[]) s_app_ctx.u4_pic_wd = s_video_decode_op.u4_pic_wd; s_app_ctx.u4_pic_ht = s_video_decode_op.u4_pic_ht; - /* Allocate input buffer */ - u4_ip_buf_len = 2048 * 2048; free(pu1_bs_buf); #if IOS_DISPLAY @@ -3139,5 +3141,8 @@ int main(WORD32 argc, CHAR *argv[]) free(ps_out_buf); free(pu1_bs_buf); + if(s_app_ctx.display_thread_handle) + free(s_app_ctx.display_thread_handle); + return (0); } -- cgit v1.2.3