X-Git-Url: https://git.sesse.net/?a=blobdiff_plain;f=libavcodec%2Fgolomb.h;h=59b4f9eca072b65f95cf463738d69ec76b49d9f8;hb=e161e007be2ca2df1e560470f94d4038dd841d67;hp=f2bc7fda60d9922bd98d8934644749211ccfaa5d;hpb=5b21bdabe43611385d1d55a21d5b1f607b133d29;p=ffmpeg diff --git a/libavcodec/golomb.h b/libavcodec/golomb.h index f2bc7fda60d..59b4f9eca07 100644 --- a/libavcodec/golomb.h +++ b/libavcodec/golomb.h @@ -21,14 +21,14 @@ */ /** - * @file golomb.h + * @file libavcodec/golomb.h * @brief * exp golomb vlc stuff * @author Michael Niedermayer and Alex Beregszaszi */ -#ifndef FFMPEG_GOLOMB_H -#define FFMPEG_GOLOMB_H +#ifndef AVCODEC_GOLOMB_H +#define AVCODEC_GOLOMB_H #include #include "bitstream.h" @@ -74,6 +74,24 @@ static inline int get_ue_golomb(GetBitContext *gb){ } } + /** + * read unsigned exp golomb code, constraint to a max of 31. + * the return value is undefined if the stored value exceeds 31. + */ +static inline int get_ue_golomb_31(GetBitContext *gb){ + unsigned int buf; + + OPEN_READER(re, gb); + UPDATE_CACHE(re, gb); + buf=GET_CACHE(re, gb); + + buf >>= 32 - 9; + LAST_SKIP_BITS(re, gb, ff_golomb_vlc_len[buf]); + CLOSE_READER(re, gb); + + return ff_ue_golomb_vlc_code[buf]; +} + static inline int svq3_get_ue_golomb(GetBitContext *gb){ uint32_t buf; @@ -255,7 +273,7 @@ static inline int get_ur_golomb_jpegls(GetBitContext *gb, int k, int limit, int log= av_log2(buf); - if(log > 31-11){ + if(log - k >= 32-MIN_CACHE_BITS+(MIN_CACHE_BITS==32) && 32-log < limit){ buf >>= log - k; buf += (30-log)< 31) { put_bits(pb, 31, 0); @@ -504,4 +522,4 @@ static inline void set_sr_golomb_flac(PutBitContext *pb, int i, int k, int limit set_ur_golomb_jpegls(pb, v, k, limit, esc_len); } -#endif /* FFMPEG_GOLOMB_H */ +#endif /* AVCODEC_GOLOMB_H */