summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWonsik Kim <wonsik@google.com>2016-04-12 15:20:08 +0900
committerIvan Kutepov <its.kutepov@gmail.com>2017-11-11 17:57:19 +0300
commit674cd04d4271831de2f75257118cf5e330c4a4d8 (patch)
treecd83e6122b00c13f615f563c600da5fbc1cf8bcd
parentb04757a01d5a681ecb47cf0cc5e702b40e7e9b91 (diff)
downloadandroid_external_libavc-674cd04d4271831de2f75257118cf5e330c4a4d8.tar.gz
android_external_libavc-674cd04d4271831de2f75257118cf5e330c4a4d8.tar.bz2
android_external_libavc-674cd04d4271831de2f75257118cf5e330c4a4d8.zip
DO NOT MERGE Handle level/profile/num_ref_frames/num_reorder change at the same resolution
Cherry pick of Change-Id: Ifa78c3125ab207ce5e39166f4891cba0d3a4e39c which went into master (post-n). This needed backporting to M so that the final fix for 35583675 could be integrated. Bug: 35583675 Test: ran POC without failure Change-Id: I0d248212aaf6635f34a70ad36657416a0c623d32 (cherry picked from commit 142221a3f993adca0c7db7f4b65d76cd9fd72a38)
-rw-r--r--decoder/ih264d_parse_headers.c44
1 files changed, 43 insertions, 1 deletions
diff --git a/decoder/ih264d_parse_headers.c b/decoder/ih264d_parse_headers.c
index 5b17695..d8c37a6 100644
--- a/decoder/ih264d_parse_headers.c
+++ b/decoder/ih264d_parse_headers.c
@@ -496,7 +496,7 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
UWORD32 u2_crop_offset_y = 0;
UWORD32 u2_crop_offset_uv = 0;
WORD32 ret;
-
+ UWORD32 u4_num_reorder_frames;
/* High profile related syntax element */
WORD32 i4_i;
/* G050 */
@@ -570,6 +570,18 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
}
+ if((ps_dec->i4_header_decoded & 1) && (ps_seq->u1_profile_idc != u1_profile_idc))
+ {
+ ps_dec->u1_res_changed = 1;
+ return IVD_RES_CHANGED;
+ }
+
+ if((ps_dec->i4_header_decoded & 1) && (ps_seq->u1_level_idc != u1_level_idc))
+ {
+ ps_dec->u1_res_changed = 1;
+ return IVD_RES_CHANGED;
+ }
+
ps_seq->u1_profile_idc = u1_profile_idc;
ps_seq->u1_level_idc = u1_level_idc;
ps_seq->u1_seq_parameter_set_id = u1_seq_parameter_set_id;
@@ -736,6 +748,14 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
{
return ERROR_NUM_REF;
}
+
+ /* Compare with older num_ref_frames is header is already once */
+ if((ps_dec->i4_header_decoded & 1) && (ps_seq->u1_num_ref_frames != u4_temp))
+ {
+ ps_dec->u1_res_changed = 1;
+ return IVD_RES_CHANGED;
+ }
+
ps_seq->u1_num_ref_frames = u4_temp;
COPYTHECONTEXT("SPS: num_ref_frames",ps_seq->u1_num_ref_frames);
@@ -907,6 +927,17 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
}
+ /* Backup u4_num_reorder_frames if header is already decoded */
+ if((ps_dec->i4_header_decoded & 1) &&
+ (1 == ps_seq->u1_vui_parameters_present_flag) &&
+ (1 == ps_seq->s_vui.u1_bitstream_restriction_flag))
+ {
+ u4_num_reorder_frames = ps_seq->s_vui.u4_num_reorder_frames;
+ }
+ else
+ {
+ u4_num_reorder_frames = -1;
+ }
if(1 == ps_seq->u1_vui_parameters_present_flag)
{
ret = ih264d_parse_vui_parametres(&ps_seq->s_vui, ps_bitstrm);
@@ -914,6 +945,17 @@ WORD32 ih264d_parse_sps(dec_struct_t *ps_dec, dec_bit_stream_t *ps_bitstrm)
return ret;
}
+ /* Compare older u4_num_reorder_frames with the new one if header is already decoded */
+ if((ps_dec->i4_header_decoded & 1) &&
+ (-1 != (WORD32)u4_num_reorder_frames) &&
+ (1 == ps_seq->u1_vui_parameters_present_flag) &&
+ (1 == ps_seq->s_vui.u1_bitstream_restriction_flag) &&
+ (ps_seq->s_vui.u4_num_reorder_frames != u4_num_reorder_frames))
+ {
+ ps_dec->u1_res_changed = 1;
+ return IVD_RES_CHANGED;
+ }
+
/* In case bitstream read has exceeded the filled size, then
return an error */
if (ps_bitstrm->u4_ofst > ps_bitstrm->u4_max_ofst)