aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-10-07 19:01:49 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2021-10-07 19:01:49 +0000
commit8c11426343d9efa7eafdac8bcc259dcbd50506b9 (patch)
tree481cde0c2c78eff4de329aab45e2062bbd3784ff
parent1bdffffad7b608c7a0c9315aedea9140a8b967dc (diff)
parent323d0a08fad441afb406df8b062376237b77fc4a (diff)
downloadlibhevc-android12-mainline-permission-release.tar.gz
Change-Id: I1ed726ed425225bd1cc98944512cb18c7102ada8
-rw-r--r--decoder/ihevcd_api.c4
-rw-r--r--encoder/ihevce_defs.h4
-rw-r--r--encoder/ihevce_encode_header_sei_vui.c9
-rw-r--r--encoder/ihevce_error_check.c5
-rw-r--r--encoder/ihevce_frame_process.c23
5 files changed, 32 insertions, 13 deletions
diff --git a/decoder/ihevcd_api.c b/decoder/ihevcd_api.c
index 4d094be..d8ee57d 100644
--- a/decoder/ihevcd_api.c
+++ b/decoder/ihevcd_api.c
@@ -2427,6 +2427,10 @@ WORD32 ihevcd_set_flush_mode(iv_obj_t *ps_codec_obj,
/* once it comes out of flush mode */
ps_codec->u4_pic_cnt = 0;
ps_codec->u4_disp_cnt = 0;
+
+ /* If the first slice NAL fed to decoder after flush is a CRA NAL, then */
+ /* it may have associated RASL nals that need to be skipped */
+ ps_codec->i4_cra_as_first_pic = 1;
return IV_SUCCESS;
diff --git a/encoder/ihevce_defs.h b/encoder/ihevce_defs.h
index 23871ea..4cc67b5 100644
--- a/encoder/ihevce_defs.h
+++ b/encoder/ihevce_defs.h
@@ -469,8 +469,8 @@
#define BELOW_REF_DEVIATION (0.0)
#define ABOVE_REF_DEVIATION (220.0)
-#define MIN_BITRATE 4000
-#define MIN_QP_MOD_OFFSET -10
+#define MIN_BITRATE (1 << (6 + (VUI_BIT_RATE_SCALE)))
+#define MIN_QP_MOD_OFFSET (-10)
#define MAX_QP_MOD_OFFSET 3
#define TOT_QP_MOD_OFFSET (MAX_QP_MOD_OFFSET - MIN_QP_MOD_OFFSET + 1)
diff --git a/encoder/ihevce_encode_header_sei_vui.c b/encoder/ihevce_encode_header_sei_vui.c
index be36257..68cef99 100644
--- a/encoder/ihevce_encode_header_sei_vui.c
+++ b/encoder/ihevce_encode_header_sei_vui.c
@@ -2682,6 +2682,15 @@ WORD32 ihevce_populate_vui(
}
u8_bit_rate_val >>= (6 + ps_vui->s_vui_hrd_parameters.u4_bit_rate_scale);
+ /************************************************************************/
+ /* u8_bit_rate_value forced >= 4096 as the shift is always of 12 */
+ /* because u4_bit_rate_scale = 6. */
+ /************************************************************************/
+ if (u8_bit_rate_val == 0)
+ {
+ return IHEVCE_BITRATE_NOT_SUPPORTED;
+ }
+
u8_max_cpb_size >>= (4 + ps_vui->s_vui_hrd_parameters.u4_cpb_size_scale);
ps_vui->s_vui_hrd_parameters.as_sub_layer_hrd_params[i]
diff --git a/encoder/ihevce_error_check.c b/encoder/ihevce_error_check.c
index d8e1a0b..223ea12 100644
--- a/encoder/ihevce_error_check.c
+++ b/encoder/ihevce_error_check.c
@@ -1191,13 +1191,14 @@ WORD32 ihevce_hle_validate_static_params(ihevce_static_cfg_params_t *ps_static_c
g_as_level_data[codec_level_index]
.i4_max_bit_rate[ps_static_cfg_prms->s_out_strm_prms.i4_codec_tier] *
CBP_VCL_FACTOR ||
- tgt_bitrate < 4000)
+ tgt_bitrate < MIN_BITRATE)
{
error_code = IHEVCE_BITRATE_NOT_SUPPORTED;
ps_sys_api->ihevce_printf(
pv_cb_handle,
- "IHEVCE ERROR: i4_tgt_bitrate out of range for resoltuion number %d bitrate "
+ "IHEVCE ERROR: i4_tgt_bitrate %d out of range for resolution number %d bitrate "
"number %d\n",
+ tgt_bitrate,
i4_resolution_id,
br_ctr);
return (IHEVCE_SETUNSUPPORTEDINPUT(error_code));
diff --git a/encoder/ihevce_frame_process.c b/encoder/ihevce_frame_process.c
index fa37272..9cbcddf 100644
--- a/encoder/ihevce_frame_process.c
+++ b/encoder/ihevce_frame_process.c
@@ -4949,15 +4949,20 @@ void ihevce_set_pre_enc_prms(enc_ctxt_t *ps_enc_ctxt)
// if(ps_enc_ctxt->as_sps[i].i1_vui_parameters_present_flag == 1)
{
- ihevce_populate_vui(
- &ps_enc_ctxt->as_sps[i].s_vui_parameters,
- &ps_enc_ctxt->as_sps[i],
- &ps_enc_ctxt->s_runtime_src_prms,
- &ps_enc_ctxt->ps_stat_prms->s_vui_sei_prms,
- i4_resolution_id,
- &ps_enc_ctxt->s_runtime_tgt_params,
- ps_enc_ctxt->ps_stat_prms,
- i4_id);
+ WORD32 error_code = ihevce_populate_vui(
+ &ps_enc_ctxt->as_sps[i].s_vui_parameters,
+ &ps_enc_ctxt->as_sps[i],
+ &ps_enc_ctxt->s_runtime_src_prms,
+ &ps_enc_ctxt->ps_stat_prms->s_vui_sei_prms,
+ i4_resolution_id,
+ &ps_enc_ctxt->s_runtime_tgt_params,
+ ps_enc_ctxt->ps_stat_prms,
+ i4_id);
+ if (error_code)
+ {
+ ((ihevce_hle_ctxt_t *)ps_enc_ctxt->pv_hle_ctxt)->i4_error_code = error_code;
+ return;
+ }
}
}