diff options
author | Shubham Tandle <shubham.tandle@ittiam.com> | 2018-09-11 13:17:15 +0530 |
---|---|---|
committer | Rohit Yengisetty <rngy@google.com> | 2018-10-16 17:30:33 -0700 |
commit | b5634fc59ecc5f13a840604ab5c29d1d9f207f47 (patch) | |
tree | 2e3ee3a98e172388f756c398df2f37db691fef57 | |
parent | a2a0d866166d9c000896478433df46cd72dcb3a9 (diff) | |
download | libhevc-b5634fc59ecc5f13a840604ab5c29d1d9f207f47.tar.gz |
Add limits check for the CTB position in a frame
Bug: 113260892
Bug: 113261108
Bug: 113261310
The decoder does not support tile position > 255.
Added error checks to ensure the same.
Test: re-run POC
Change-Id: Id359c172c8630ded2fb3f47c447f373cd2d1bc34
(cherry picked from commit 5a3dafc3248edcd2df5e2fdafaca61b6acbc44b1)
-rw-r--r-- | decoder/ihevcd_parse_headers.c | 30 |
1 files changed, 23 insertions, 7 deletions
diff --git a/decoder/ihevcd_parse_headers.c b/decoder/ihevcd_parse_headers.c index 6a02cbd..58b2cfe 100644 --- a/decoder/ihevcd_parse_headers.c +++ b/decoder/ihevcd_parse_headers.c @@ -1911,16 +1911,32 @@ IHEVCD_ERROR_T ihevcd_parse_pps(codec_t *ps_codec) ps_pps->i1_tiles_enabled_flag = value; /* When tiles are enabled and width or height is >= 4096, - * CTB Size should at least be 32. 16x16 CTBs can result - * in tile position greater than 255 for 4096, + * CTB Size should at least be 32 while if width or height is >= 8192, + * CTB Size should at least be 64 and so on. 16x16 CTBs can result + * in tile position greater than 255 for 4096 while 32x32 CTBs can result + * in tile position greater than 255 for 8192, * which decoder does not support. */ - if((ps_pps->i1_tiles_enabled_flag) && - (ps_sps->i1_log2_ctb_size == 4) && - ((ps_sps->i2_pic_width_in_luma_samples >= 4096) || - (ps_sps->i2_pic_height_in_luma_samples >= 4096))) + if (ps_pps->i1_tiles_enabled_flag) { - return IHEVCD_INVALID_HEADER; + if((ps_sps->i1_log2_ctb_size == 4) && + ((ps_sps->i2_pic_width_in_luma_samples >= 4096) || + (ps_sps->i2_pic_height_in_luma_samples >= 4096))) + { + return IHEVCD_INVALID_HEADER; + } + if((ps_sps->i1_log2_ctb_size == 5) && + ((ps_sps->i2_pic_width_in_luma_samples >= 8192) || + (ps_sps->i2_pic_height_in_luma_samples >= 8192))) + { + return IHEVCD_INVALID_HEADER; + } + if((ps_sps->i1_log2_ctb_size == 6) && + ((ps_sps->i2_pic_width_in_luma_samples >= 16384) || + (ps_sps->i2_pic_height_in_luma_samples >= 16384))) + { + return IHEVCD_INVALID_HEADER; + } } BITS_PARSE("entropy_coding_sync_enabled_flag", value, ps_bitstrm, 1); |