Fix in handling header decode errors
If header decode was unsuccessful, do not try decoding a frame
Also, initialize pic_wd, pic_ht for reinitialization when
decoder is created with smaller dimensions
Bug: 28886651
Bug: 35219737
Change-Id: I8c06d9052910e47fce2e6fe25ad318d4c83d2c50
(cherry picked from commit 2b9fa9ace2dbedfbac026fc9b6ab6cdac7f68c27)
(cherry picked from commit c2395cd7cc0c286a66de674032dd2ed26500aef4)
diff --git a/decoder/impeg2d_api_main.c b/decoder/impeg2d_api_main.c
index 1bae457..31d1357 100644
--- a/decoder/impeg2d_api_main.c
+++ b/decoder/impeg2d_api_main.c
@@ -3052,7 +3052,8 @@
bytes_remaining -= ps_dec_op->s_ivd_video_decode_op_t.u4_num_bytes_consumed;
}
- if((1 != ps_dec_state->u2_decode_header) && ((bytes_remaining > 0) || ps_dec_state->u1_flushfrm))
+ if((1 != ps_dec_state->u2_decode_header) &&
+ (((bytes_remaining > 0) && (1 == ps_dec_state->u2_header_done)) || ps_dec_state->u1_flushfrm))
{
if(ps_dec_state->u1_flushfrm)
{
diff --git a/decoder/impeg2d_dec_hdr.c b/decoder/impeg2d_dec_hdr.c
index 747d4b5..2c2f24b 100644
--- a/decoder/impeg2d_dec_hdr.c
+++ b/decoder/impeg2d_dec_hdr.c
@@ -189,7 +189,9 @@
|| (ps_dec->u2_vertical_size > ps_dec->u2_create_max_height))
{
IMPEG2D_ERROR_CODES_T e_error = IMPEG2D_UNSUPPORTED_DIMENSIONS;
- return SET_IVD_FATAL_ERROR(e_error);
+ ps_dec->u2_reinit_max_height = ps_dec->u2_vertical_size;
+ ps_dec->u2_reinit_max_width = ps_dec->u2_horizontal_size;
+ return e_error;
}
diff --git a/decoder/impeg2d_decoder.c b/decoder/impeg2d_decoder.c
index 7bc3253..e9b31a0 100644
--- a/decoder/impeg2d_decoder.c
+++ b/decoder/impeg2d_decoder.c
@@ -123,7 +123,14 @@
if(ps_op->s_ivd_video_decode_op_t.u4_error_code == 0)
ps_op->s_ivd_video_decode_op_t.u4_error_code = e_error;
+ if (IMPEG2D_UNSUPPORTED_DIMENSIONS == e_error)
+ {
+ ps_op->s_ivd_video_decode_op_t.u4_num_bytes_consumed = 0;
+ ps_dec->u2_header_done = 0;
+ ps_op->s_ivd_video_decode_op_t.u4_pic_ht = ps_dec->u2_reinit_max_height;
+ ps_op->s_ivd_video_decode_op_t.u4_pic_wd = ps_dec->u2_reinit_max_width;
+ }
impeg2d_next_code(ps_dec, SEQUENCE_HEADER_CODE);
return;
}