Commit 1550f45a authored by Mans Rullgard's avatar Mans Rullgard Committed by Ronald S. Bultje

Add av_clip_uintp2() function

Signed-off-by: 's avatarMans Rullgard <mans@mansr.com>
parent 2c9a5172
...@@ -1329,9 +1329,7 @@ static av_always_inline void filter_level_for_mb(VP8Context *s, VP8Macroblock *m ...@@ -1329,9 +1329,7 @@ static av_always_inline void filter_level_for_mb(VP8Context *s, VP8Macroblock *m
filter_level += s->lf_delta.mode[mb->mode]; filter_level += s->lf_delta.mode[mb->mode];
} }
/* Like av_clip for inputs 0 and max, where max is equal to (2^n-1) */ filter_level = av_clip_uintp2(filter_level, 6);
#define POW2CLIP(x,max) (((x) & ~max) ? (-(x))>>31 & max : (x));
filter_level = POW2CLIP(filter_level, 63);
interior_limit = filter_level; interior_limit = filter_level;
if (s->filter.sharpness) { if (s->filter.sharpness) {
......
...@@ -169,6 +169,18 @@ static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a) ...@@ -169,6 +169,18 @@ static av_always_inline av_const int32_t av_clipl_int32_c(int64_t a)
else return a; else return a;
} }
/**
* Clip a signed integer to an unsigned power of two range.
* @param a value to clip
* @param p bit position to clip at
* @return clipped value
*/
static av_always_inline av_const unsigned av_clip_uintp2_c(int a, int p)
{
if (a & ~((1<<p) - 1)) return -a >> 31 & ((1<<p) - 1);
else return a;
}
/** /**
* Clip a float value into the amin-amax range. * Clip a float value into the amin-amax range.
* @param a value to clip * @param a value to clip
...@@ -362,6 +374,9 @@ static av_always_inline av_const int av_popcount_c(uint32_t x) ...@@ -362,6 +374,9 @@ static av_always_inline av_const int av_popcount_c(uint32_t x)
#ifndef av_clipl_int32 #ifndef av_clipl_int32
# define av_clipl_int32 av_clipl_int32_c # define av_clipl_int32 av_clipl_int32_c
#endif #endif
#ifndef av_clip_uintp2
# define av_clip_uintp2 av_clip_uintp2_c
#endif
#ifndef av_clipf #ifndef av_clipf
# define av_clipf av_clipf_c # define av_clipf av_clipf_c
#endif #endif
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment