diff options
author | android-build-team Robot <android-build-team-robot@google.com> | 2017-11-08 22:41:34 +0000 |
---|---|---|
committer | android-build-team Robot <android-build-team-robot@google.com> | 2017-11-08 22:41:34 +0000 |
commit | e10291812e3258c249346fe8982705093e974f53 (patch) | |
tree | 45175f10f68c1c72d4b3228880d5c59432089f32 | |
parent | 905881d6bf3aeefe4c133c767e4b5d8e2999c7b5 (diff) | |
parent | 4e2702a016e2d20fc4259cfcb69403cee1b55ae0 (diff) | |
download | libhevc-oreo-r4-release.tar.gz |
Merge cherrypicks of [3192228, 3193161, 3192849, 3192850, 3192851, 3193150, 3193193, 3193195, 3193196, 3192852, 3193233, 3193234, 3192311, 3192312, 3193273, 3193218] into oc-r4-releaseandroid-8.0.0_r35oreo-r4-release
Change-Id: Id4dd704370d2833f8c24d59c302ebf1be4550569
-rw-r--r-- | decoder/ihevcd_api.c | 4 | ||||
-rw-r--r-- | decoder/ihevcd_parse_headers.c | 25 |
2 files changed, 25 insertions, 4 deletions
diff --git a/decoder/ihevcd_api.c b/decoder/ihevcd_api.c index 5289a12..a0d82dd 100644 --- a/decoder/ihevcd_api.c +++ b/decoder/ihevcd_api.c @@ -1215,7 +1215,7 @@ WORD32 ihevcd_allocate_static_bufs(iv_obj_t **pps_codec_obj, /* Request memory for static bitstream buffer which holds bitstream after emulation prevention */ size = MIN_BITSBUF_SIZE; - pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size); + pv_buf = pf_aligned_alloc(pv_mem_ctxt, 128, size + 16); //Alloc extra for parse optimization RETURN_IF((NULL == pv_buf), IV_FAIL); ps_codec->pu1_bitsbuf_static = pv_buf; ps_codec->u4_bitsbuf_size_static = size; @@ -1912,7 +1912,7 @@ WORD32 ihevcd_allocate_dynamic_bufs(codec_t *ps_codec) size = wd * ht; if(size > MIN_BITSBUF_SIZE) { - pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size); + pv_buf = ps_codec->pf_aligned_alloc(pv_mem_ctxt, 128, size + 16); //Alloc extra for parse optimization RETURN_IF((NULL == pv_buf), IV_FAIL); ps_codec->pu1_bitsbuf_dynamic = pv_buf; ps_codec->u4_bitsbuf_size_dynamic = size; diff --git a/decoder/ihevcd_parse_headers.c b/decoder/ihevcd_parse_headers.c index afa6de3..4714f3a 100644 --- a/decoder/ihevcd_parse_headers.c +++ b/decoder/ihevcd_parse_headers.c @@ -1439,12 +1439,16 @@ IHEVCD_ERROR_T ihevcd_parse_sps(codec_t *ps_codec) /* Check if sps_max_dec_pic_buffering or sps_max_num_reorder_pics has changed */ - if(0 != ps_codec->i4_first_pic_done) + if(0 != ps_codec->u4_allocate_dynamic_done) { sps_t *ps_sps_old = ps_codec->s_parse.ps_sps; if(ps_sps_old->ai1_sps_max_dec_pic_buffering[ps_sps_old->i1_sps_max_sub_layers - 1] != ps_sps->ai1_sps_max_dec_pic_buffering[ps_sps->i1_sps_max_sub_layers - 1]) { + if(0 == ps_codec->i4_first_pic_done) + { + return IHEVCD_INVALID_PARAMETER; + } ps_codec->i4_reset_flag = 1; return (IHEVCD_ERROR_T)IVD_RES_CHANGED; } @@ -1452,6 +1456,10 @@ IHEVCD_ERROR_T ihevcd_parse_sps(codec_t *ps_codec) if(ps_sps_old->ai1_sps_max_num_reorder_pics[ps_sps_old->i1_sps_max_sub_layers - 1] != ps_sps->ai1_sps_max_num_reorder_pics[ps_sps->i1_sps_max_sub_layers - 1]) { + if(0 == ps_codec->i4_first_pic_done) + { + return IHEVCD_INVALID_PARAMETER; + } ps_codec->i4_reset_flag = 1; return (IHEVCD_ERROR_T)IVD_RES_CHANGED; } @@ -1625,10 +1633,14 @@ IHEVCD_ERROR_T ihevcd_parse_sps(codec_t *ps_codec) ps_sps->i2_pic_ht_in_min_cb = numerator / (1 << ps_sps->i1_log2_min_coding_block_size); } - if((0 != ps_codec->i4_first_pic_done) && + if((0 != ps_codec->u4_allocate_dynamic_done) && ((ps_codec->i4_wd != ps_sps->i2_pic_width_in_luma_samples) || (ps_codec->i4_ht != ps_sps->i2_pic_height_in_luma_samples))) { + if(0 == ps_codec->i4_first_pic_done) + { + return IHEVCD_INVALID_PARAMETER; + } ps_codec->i4_reset_flag = 1; return (IHEVCD_ERROR_T)IVD_RES_CHANGED; } @@ -2325,9 +2337,18 @@ IHEVCD_ERROR_T ihevcd_parse_pic_timing_sei(codec_t *ps_codec, sps_t *ps_sps) if(ps_vui_hdr->u1_sub_pic_cpb_params_present_flag && ps_vui_hdr->u1_sub_pic_cpb_params_in_pic_timing_sei_flag) { + UWORD32 num_units_minus1; + UWORD32 array_size; + UEV_PARSE("num_decoding_units_minus1", value, ps_bitstrm); ps_pic_timing->u4_num_decoding_units_minus1 = value; + num_units_minus1 = ps_pic_timing->u4_num_decoding_units_minus1; + array_size = (sizeof(ps_pic_timing->au4_num_nalus_in_du_minus1) + / sizeof(ps_pic_timing->au4_num_nalus_in_du_minus1[0])); + num_units_minus1 = CLIP3(num_units_minus1, 0,(array_size - 1)); + ps_pic_timing->u4_num_decoding_units_minus1 = num_units_minus1; + BITS_PARSE("du_common_cpb_removal_delay_flag", value, ps_bitstrm, 1); ps_pic_timing->u1_du_common_cpb_removal_delay_flag = value; |