一、av_clip宏定义
av_clip是宏,定义在FFmpeg源码(本文演示用的FFmpeg源码版本为7.0.1)的头文件libavutil/common.h中。当标识符“av_clip”没有由#define定义过时,编译代码段:#define av_clip av_clip_c,指定标识符av_clip来代替av_clip_c:
#ifndef av_clip
# define av_clip av_clip_c
#endif
av_clip_c是函数,定义在libavutil/common.h中:
/**
* Clip a signed integer value into the amin-amax range.
* @param a value to clip
* @param amin minimum value of the clip range
* @param amax maximum value of the clip range
* @return clipped value
*/
static av_always_inline av_const int av_clip_c(int a, int amin, int amax)
{
#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
if (amin > amax) abort();
#endif
if (a < amin) return amin;
else if (a > amax) return amax;
else return a;
}
该函数作用是:将有符号整数值a裁剪到amin到amax范围内。当形参a的值在形参amin到形参amax之间时,该函数返回a的值;当a小于admin,该函数返回admin的值;当a大于amax,该函数返回amax。
所以av_clip宏定义等价于av_clip_c函数,作用就是将有符号整数值a裁剪到amin到amax范围内。
二、av_clip64宏定义
av_clip64是宏,定义在头文件libavutil/common.h中。当标识符“av_clip64”没有由#define定义过时,编译代码段:#define av_clip64 av_clip64_c,指定标识符av_clip64来代替av_clip64_c:
#ifndef av_clip64
# define av_clip64 av_clip64_c
#endif
av_clip64_c是函数,定义在libavutil/common.h中:
/**
* Clip a signed 64bit integer value into the amin-amax range.
* @param a value to clip
* @param amin minimum value of the clip range
* @param amax maximum value of the clip range
* @return clipped value
*/
static av_always_inline av_const int64_t av_clip64_c(int64_t a, int64_t amin, int64_t amax)
{
#if defined(HAVE_AV_CONFIG_H) && defined(ASSERT_LEVEL) && ASSERT_LEVEL >= 2
if (amin > amax) abort();
#endif
if (a < amin) return amin;
else if (a > amax) return amax;
else return a;
}
该函数作用是:将带符号的64位整数值a裁剪到amin到amax范围内。当形参a的值在形参amin到形参amax之间时,该函数返回a的值;当a小于admin,该函数返回admin的值;当a大于amax,该函数返回amax。
所以av_clip64宏定义等价于av_clip64_c函数,作用就是将带符号的64位整数值a裁剪到amin到amax范围内。