From: Mans Rullgard Date: Tue, 11 Oct 2011 11:58:31 +0000 (+0100) Subject: h264: fix invalid shifts in init_cavlc_level_tab() X-Git-Tag: android-x86-4.4-r1~8529^2~5179 X-Git-Url: http://git.osdn.net/view?a=commitdiff_plain;h=8babfc033ecb6332155c1f8879e54dee41d16952;p=android-x86%2Fexternal-ffmpeg.git h264: fix invalid shifts in init_cavlc_level_tab() The level_code expression includes a shift which is invalid in those cases where the value is not used. Moving the calculation to the branch where the result is used avoids these. Signed-off-by: Mans Rullgard --- diff --git a/libavcodec/h264_cavlc.c b/libavcodec/h264_cavlc.c index 9e7c182f18..ca7b9399d3 100644 --- a/libavcodec/h264_cavlc.c +++ b/libavcodec/h264_cavlc.c @@ -238,17 +238,18 @@ static inline int pred_non_zero_count(H264Context *h, int n){ } static av_cold void init_cavlc_level_tab(void){ - int suffix_length, mask; + int suffix_length; unsigned int i; for(suffix_length=0; suffix_length<7; suffix_length++){ for(i=0; i<(1<>(LEVEL_TAB_BITS-prefix-1-suffix_length)) - (1<>1) ^ mask) - mask; if(prefix + 1 + suffix_length <= LEVEL_TAB_BITS){ + int level_code = (prefix << suffix_length) + + (i >> (av_log2(i) - suffix_length)) - (1 << suffix_length); + int mask = -(level_code&1); + level_code = (((2 + level_code) >> 1) ^ mask) - mask; cavlc_level_tab[suffix_length][i][0]= level_code; cavlc_level_tab[suffix_length][i][1]= prefix + 1 + suffix_length; }else if(prefix + 1 <= LEVEL_TAB_BITS){