Sanitise get_bits macros, part 1

Some of the macros in get_bits.h include a final semicolon,
some do not.  This removes these or adds do {} while(0) around
the macros as appropriate and adds semicolons where needed in
calling code.

Signed-off-by: Mans Rullgard <mans@mansr.com>
(cherry picked from commit bf5f9b528b)
This commit is contained in:
Mans Rullgard 2011-01-23 01:24:46 +00:00 committed by Michael Niedermayer
parent 990f213e57
commit d232e09d51
2 changed files with 77 additions and 74 deletions

View File

@ -127,37 +127,37 @@ for examples see get_bits, show_bits, skip_bits, get_vlc
# define OPEN_READER(name, gb)\ # define OPEN_READER(name, gb)\
unsigned int name##_index= (gb)->index;\ unsigned int name##_index= (gb)->index;\
int name##_cache= 0;\ int name##_cache= 0
# define CLOSE_READER(name, gb)\ # define CLOSE_READER(name, gb)\
(gb)->index= name##_index;\ (gb)->index= name##_index
# ifdef ALT_BITSTREAM_READER_LE # ifdef ALT_BITSTREAM_READER_LE
# define UPDATE_CACHE(name, gb)\ # define UPDATE_CACHE(name, gb)\
name##_cache= AV_RL32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) >> (name##_index&0x07);\ name##_cache= AV_RL32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) >> (name##_index&0x07)
# define SKIP_CACHE(name, gb, num)\ # define SKIP_CACHE(name, gb, num)\
name##_cache >>= (num); name##_cache >>= (num)
# else # else
# define UPDATE_CACHE(name, gb)\ # define UPDATE_CACHE(name, gb)\
name##_cache= AV_RB32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) << (name##_index&0x07);\ name##_cache= AV_RB32( ((const uint8_t *)(gb)->buffer)+(name##_index>>3) ) << (name##_index&0x07)
# define SKIP_CACHE(name, gb, num)\ # define SKIP_CACHE(name, gb, num)\
name##_cache <<= (num); name##_cache <<= (num)
# endif # endif
// FIXME name? // FIXME name?
# define SKIP_COUNTER(name, gb, num)\ # define SKIP_COUNTER(name, gb, num)\
name##_index += (num);\ name##_index += (num)
# define SKIP_BITS(name, gb, num)\ # define SKIP_BITS(name, gb, num)\
{\ do {\
SKIP_CACHE(name, gb, num)\ SKIP_CACHE(name, gb, num);\
SKIP_COUNTER(name, gb, num)\ SKIP_COUNTER(name, gb, num);\
}\ } while (0)
# define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num) # define LAST_SKIP_BITS(name, gb, num) SKIP_COUNTER(name, gb, num)
# define LAST_SKIP_CACHE(name, gb, num) ; # define LAST_SKIP_CACHE(name, gb, num)
# ifdef ALT_BITSTREAM_READER_LE # ifdef ALT_BITSTREAM_READER_LE
# define SHOW_UBITS(name, gb, num)\ # define SHOW_UBITS(name, gb, num)\
@ -192,15 +192,16 @@ static inline void skip_bits_long(GetBitContext *s, int n){
int name##_bit_count=(gb)->bit_count;\ int name##_bit_count=(gb)->bit_count;\
uint32_t name##_cache0= (gb)->cache0;\ uint32_t name##_cache0= (gb)->cache0;\
uint32_t name##_cache1= (gb)->cache1;\ uint32_t name##_cache1= (gb)->cache1;\
uint32_t * name##_buffer_ptr=(gb)->buffer_ptr;\ uint32_t * name##_buffer_ptr=(gb)->buffer_ptr
# define CLOSE_READER(name, gb)\ # define CLOSE_READER(name, gb) do {\
(gb)->bit_count= name##_bit_count;\ (gb)->bit_count= name##_bit_count;\
(gb)->cache0= name##_cache0;\ (gb)->cache0= name##_cache0;\
(gb)->cache1= name##_cache1;\ (gb)->cache1= name##_cache1;\
(gb)->buffer_ptr= name##_buffer_ptr;\ (gb)->buffer_ptr= name##_buffer_ptr;\
} while (0)
# define UPDATE_CACHE(name, gb)\ # define UPDATE_CACHE(name, gb) do {\
if(name##_bit_count > 0){\ if(name##_bit_count > 0){\
const uint32_t next= av_be2ne32( *name##_buffer_ptr );\ const uint32_t next= av_be2ne32( *name##_buffer_ptr );\
name##_cache0 |= NEG_USR32(next,name##_bit_count);\ name##_cache0 |= NEG_USR32(next,name##_bit_count);\
@ -208,6 +209,7 @@ static inline void skip_bits_long(GetBitContext *s, int n){
name##_buffer_ptr++;\ name##_buffer_ptr++;\
name##_bit_count-= 32;\ name##_bit_count-= 32;\
}\ }\
} while (0)
#if ARCH_X86 #if ARCH_X86
# define SKIP_CACHE(name, gb, num)\ # define SKIP_CACHE(name, gb, num)\
@ -216,22 +218,23 @@ static inline void skip_bits_long(GetBitContext *s, int n){
"shll %2, %1 \n\t"\ "shll %2, %1 \n\t"\
: "+r" (name##_cache0), "+r" (name##_cache1)\ : "+r" (name##_cache0), "+r" (name##_cache1)\
: "Ic" ((uint8_t)(num))\ : "Ic" ((uint8_t)(num))\
); )
#else #else
# define SKIP_CACHE(name, gb, num)\ # define SKIP_CACHE(name, gb, num) do {\
name##_cache0 <<= (num);\ name##_cache0 <<= (num);\
name##_cache0 |= NEG_USR32(name##_cache1,num);\ name##_cache0 |= NEG_USR32(name##_cache1,num);\
name##_cache1 <<= (num); name##_cache1 <<= (num);\
} while (0)
#endif #endif
# define SKIP_COUNTER(name, gb, num)\ # define SKIP_COUNTER(name, gb, num)\
name##_bit_count += (num);\ name##_bit_count += (num)
# define SKIP_BITS(name, gb, num)\ # define SKIP_BITS(name, gb, num)\
{\ do {\
SKIP_CACHE(name, gb, num)\ SKIP_CACHE(name, gb, num);\
SKIP_COUNTER(name, gb, num)\ SKIP_COUNTER(name, gb, num);\
}\ } while (0)
# define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num) # define LAST_SKIP_BITS(name, gb, num) SKIP_BITS(name, gb, num)
# define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num) # define LAST_SKIP_CACHE(name, gb, num) SKIP_CACHE(name, gb, num)
@ -250,14 +253,14 @@ static inline int get_bits_count(const GetBitContext *s){
} }
static inline void skip_bits_long(GetBitContext *s, int n){ static inline void skip_bits_long(GetBitContext *s, int n){
OPEN_READER(re, s) OPEN_READER(re, s);
re_bit_count += n; re_bit_count += n;
re_buffer_ptr += re_bit_count>>5; re_buffer_ptr += re_bit_count>>5;
re_bit_count &= 31; re_bit_count &= 31;
re_cache0 = av_be2ne32( re_buffer_ptr[-1] ) << re_bit_count; re_cache0 = av_be2ne32( re_buffer_ptr[-1] ) << re_bit_count;
re_cache1 = 0; re_cache1 = 0;
UPDATE_CACHE(re, s) UPDATE_CACHE(re, s);
CLOSE_READER(re, s) CLOSE_READER(re, s);
} }
#endif #endif
@ -271,22 +274,22 @@ static inline void skip_bits_long(GetBitContext *s, int n){
static inline int get_xbits(GetBitContext *s, int n){ static inline int get_xbits(GetBitContext *s, int n){
register int sign; register int sign;
register int32_t cache; register int32_t cache;
OPEN_READER(re, s) OPEN_READER(re, s);
UPDATE_CACHE(re, s) UPDATE_CACHE(re, s);
cache = GET_CACHE(re,s); cache = GET_CACHE(re,s);
sign=(~cache)>>31; sign=(~cache)>>31;
LAST_SKIP_BITS(re, s, n) LAST_SKIP_BITS(re, s, n);
CLOSE_READER(re, s) CLOSE_READER(re, s);
return (NEG_USR32(sign ^ cache, n) ^ sign) - sign; return (NEG_USR32(sign ^ cache, n) ^ sign) - sign;
} }
static inline int get_sbits(GetBitContext *s, int n){ static inline int get_sbits(GetBitContext *s, int n){
register int tmp; register int tmp;
OPEN_READER(re, s) OPEN_READER(re, s);
UPDATE_CACHE(re, s) UPDATE_CACHE(re, s);
tmp= SHOW_SBITS(re, s, n); tmp= SHOW_SBITS(re, s, n);
LAST_SKIP_BITS(re, s, n) LAST_SKIP_BITS(re, s, n);
CLOSE_READER(re, s) CLOSE_READER(re, s);
return tmp; return tmp;
} }
@ -295,11 +298,11 @@ static inline int get_sbits(GetBitContext *s, int n){
*/ */
static inline unsigned int get_bits(GetBitContext *s, int n){ static inline unsigned int get_bits(GetBitContext *s, int n){
register int tmp; register int tmp;
OPEN_READER(re, s) OPEN_READER(re, s);
UPDATE_CACHE(re, s) UPDATE_CACHE(re, s);
tmp= SHOW_UBITS(re, s, n); tmp= SHOW_UBITS(re, s, n);
LAST_SKIP_BITS(re, s, n) LAST_SKIP_BITS(re, s, n);
CLOSE_READER(re, s) CLOSE_READER(re, s);
return tmp; return tmp;
} }
@ -308,8 +311,8 @@ static inline unsigned int get_bits(GetBitContext *s, int n){
*/ */
static inline unsigned int show_bits(GetBitContext *s, int n){ static inline unsigned int show_bits(GetBitContext *s, int n){
register int tmp; register int tmp;
OPEN_READER(re, s) OPEN_READER(re, s);
UPDATE_CACHE(re, s) UPDATE_CACHE(re, s);
tmp= SHOW_UBITS(re, s, n); tmp= SHOW_UBITS(re, s, n);
// CLOSE_READER(re, s) // CLOSE_READER(re, s)
return tmp; return tmp;
@ -317,10 +320,10 @@ static inline unsigned int show_bits(GetBitContext *s, int n){
static inline void skip_bits(GetBitContext *s, int n){ static inline void skip_bits(GetBitContext *s, int n){
//Note gcc seems to optimize this to s->index+=n for the ALT_READER :)) //Note gcc seems to optimize this to s->index+=n for the ALT_READER :))
OPEN_READER(re, s) OPEN_READER(re, s);
UPDATE_CACHE(re, s) UPDATE_CACHE(re, s);
LAST_SKIP_BITS(re, s, n) LAST_SKIP_BITS(re, s, n);
CLOSE_READER(re, s) CLOSE_READER(re, s);
} }
static inline unsigned int get_bits1(GetBitContext *s){ static inline unsigned int get_bits1(GetBitContext *s){
@ -449,12 +452,12 @@ int init_vlc_sparse(VLC *vlc, int nb_bits, int nb_codes,
void free_vlc(VLC *vlc); void free_vlc(VLC *vlc);
#define INIT_VLC_STATIC(vlc, bits, a,b,c,d,e,f,g, static_size)\ #define INIT_VLC_STATIC(vlc, bits, a,b,c,d,e,f,g, static_size)\
{\ do {\
static VLC_TYPE table[static_size][2];\ static VLC_TYPE table[static_size][2];\
(vlc)->table= table;\ (vlc)->table= table;\
(vlc)->table_allocated= static_size;\ (vlc)->table_allocated= static_size;\
init_vlc(vlc, bits, a,b,c,d,e,f,g, INIT_VLC_USE_NEW_STATIC);\ init_vlc(vlc, bits, a,b,c,d,e,f,g, INIT_VLC_USE_NEW_STATIC);\
} } while (0)
/** /**
@ -464,7 +467,7 @@ void free_vlc(VLC *vlc);
* is undefined. * is undefined.
*/ */
#define GET_VLC(code, name, gb, table, bits, max_depth)\ #define GET_VLC(code, name, gb, table, bits, max_depth)\
{\ do {\
int n, nb_bits;\ int n, nb_bits;\
unsigned int index;\ unsigned int index;\
\ \
@ -473,8 +476,8 @@ void free_vlc(VLC *vlc);
n = table[index][1];\ n = table[index][1];\
\ \
if(max_depth > 1 && n < 0){\ if(max_depth > 1 && n < 0){\
LAST_SKIP_BITS(name, gb, bits)\ LAST_SKIP_BITS(name, gb, bits);\
UPDATE_CACHE(name, gb)\ UPDATE_CACHE(name, gb);\
\ \
nb_bits = -n;\ nb_bits = -n;\
\ \
@ -482,8 +485,8 @@ void free_vlc(VLC *vlc);
code = table[index][0];\ code = table[index][0];\
n = table[index][1];\ n = table[index][1];\
if(max_depth > 2 && n < 0){\ if(max_depth > 2 && n < 0){\
LAST_SKIP_BITS(name, gb, nb_bits)\ LAST_SKIP_BITS(name, gb, nb_bits);\
UPDATE_CACHE(name, gb)\ UPDATE_CACHE(name, gb);\
\ \
nb_bits = -n;\ nb_bits = -n;\
\ \
@ -492,11 +495,11 @@ void free_vlc(VLC *vlc);
n = table[index][1];\ n = table[index][1];\
}\ }\
}\ }\
SKIP_BITS(name, gb, n)\ SKIP_BITS(name, gb, n);\
} } while (0)
#define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\ #define GET_RL_VLC(level, run, name, gb, table, bits, max_depth, need_update)\
{\ do {\
int n, nb_bits;\ int n, nb_bits;\
unsigned int index;\ unsigned int index;\
\ \
@ -505,9 +508,9 @@ void free_vlc(VLC *vlc);
n = table[index].len;\ n = table[index].len;\
\ \
if(max_depth > 1 && n < 0){\ if(max_depth > 1 && n < 0){\
SKIP_BITS(name, gb, bits)\ SKIP_BITS(name, gb, bits);\
if(need_update){\ if(need_update){\
UPDATE_CACHE(name, gb)\ UPDATE_CACHE(name, gb);\
}\ }\
\ \
nb_bits = -n;\ nb_bits = -n;\
@ -517,8 +520,8 @@ void free_vlc(VLC *vlc);
n = table[index].len;\ n = table[index].len;\
}\ }\
run= table[index].run;\ run= table[index].run;\
SKIP_BITS(name, gb, n)\ SKIP_BITS(name, gb, n);\
} } while (0)
/** /**
@ -534,12 +537,12 @@ static av_always_inline int get_vlc2(GetBitContext *s, VLC_TYPE (*table)[2],
{ {
int code; int code;
OPEN_READER(re, s) OPEN_READER(re, s);
UPDATE_CACHE(re, s) UPDATE_CACHE(re, s);
GET_VLC(code, re, s, table, bits, max_depth) GET_VLC(code, re, s, table, bits, max_depth);
CLOSE_READER(re, s) CLOSE_READER(re, s);
return code; return code;
} }

View File

@ -416,16 +416,16 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
block[0] = val; block[0] = val;
/* AC coefs */ /* AC coefs */
i = 0; i = 0;
{OPEN_READER(re, &s->gb) {OPEN_READER(re, &s->gb);
do { do {
UPDATE_CACHE(re, &s->gb); UPDATE_CACHE(re, &s->gb);
GET_VLC(code, re, &s->gb, s->vlcs[1][ac_index].table, 9, 2) GET_VLC(code, re, &s->gb, s->vlcs[1][ac_index].table, 9, 2);
i += ((unsigned)code) >> 4; i += ((unsigned)code) >> 4;
code &= 0xf; code &= 0xf;
if(code){ if(code){
if(code > MIN_CACHE_BITS - 16){ if(code > MIN_CACHE_BITS - 16){
UPDATE_CACHE(re, &s->gb) UPDATE_CACHE(re, &s->gb);
} }
{ {
int cache=GET_CACHE(re,&s->gb); int cache=GET_CACHE(re,&s->gb);
@ -433,7 +433,7 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
level = (NEG_USR32(sign ^ cache,code) ^ sign) - sign; level = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
} }
LAST_SKIP_BITS(re, &s->gb, code) LAST_SKIP_BITS(re, &s->gb, code);
if (i > 63) { if (i > 63) {
av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i); av_log(s->avctx, AV_LOG_ERROR, "error count: %d\n", i);
@ -443,7 +443,7 @@ static int decode_block(MJpegDecodeContext *s, DCTELEM *block,
block[j] = level * quant_matrix[j]; block[j] = level * quant_matrix[j];
} }
}while(i<63); }while(i<63);
CLOSE_READER(re, &s->gb)} CLOSE_READER(re, &s->gb);}
return 0; return 0;
} }
@ -475,17 +475,17 @@ static int decode_block_progressive(MJpegDecodeContext *s, DCTELEM *block, uint8
(*EOBRUN)--; (*EOBRUN)--;
return 0; return 0;
} }
{OPEN_READER(re, &s->gb) {OPEN_READER(re, &s->gb);
for(i=ss;;i++) { for(i=ss;;i++) {
UPDATE_CACHE(re, &s->gb); UPDATE_CACHE(re, &s->gb);
GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2) GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2);
run = ((unsigned) code) >> 4; run = ((unsigned) code) >> 4;
code &= 0xF; code &= 0xF;
if(code) { if(code) {
i += run; i += run;
if(code > MIN_CACHE_BITS - 16){ if(code > MIN_CACHE_BITS - 16){
UPDATE_CACHE(re, &s->gb) UPDATE_CACHE(re, &s->gb);
} }
{ {
int cache=GET_CACHE(re,&s->gb); int cache=GET_CACHE(re,&s->gb);
@ -493,7 +493,7 @@ static int decode_block_progressive(MJpegDecodeContext *s, DCTELEM *block, uint8
level = (NEG_USR32(sign ^ cache,code) ^ sign) - sign; level = (NEG_USR32(sign ^ cache,code) ^ sign) - sign;
} }
LAST_SKIP_BITS(re, &s->gb, code) LAST_SKIP_BITS(re, &s->gb, code);
if (i >= se) { if (i >= se) {
if(i == se){ if(i == se){
@ -525,7 +525,7 @@ static int decode_block_progressive(MJpegDecodeContext *s, DCTELEM *block, uint8
} }
} }
} }
CLOSE_READER(re, &s->gb)} CLOSE_READER(re, &s->gb);}
if(i > *last_nnz) if(i > *last_nnz)
*last_nnz = i; *last_nnz = i;
return 0; return 0;
@ -569,7 +569,7 @@ static int decode_block_refinement(MJpegDecodeContext *s, DCTELEM *block, uint8_
else { else {
for(;;i++) { for(;;i++) {
UPDATE_CACHE(re, &s->gb); UPDATE_CACHE(re, &s->gb);
GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2) GET_VLC(code, re, &s->gb, s->vlcs[2][ac_index].table, 9, 2);
if(code & 0xF) { if(code & 0xF) {
run = ((unsigned) code) >> 4; run = ((unsigned) code) >> 4;
@ -583,7 +583,7 @@ static int decode_block_refinement(MJpegDecodeContext *s, DCTELEM *block, uint8_
if(i == se) { if(i == se) {
if(i > *last_nnz) if(i > *last_nnz)
*last_nnz = i; *last_nnz = i;
CLOSE_READER(re, &s->gb) CLOSE_READER(re, &s->gb);
return 0; return 0;
} }
}else{ }else{