#include <errno.h>
#include <inttypes.h>
#include <limits.h>
#include <math.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include "attributes.h"
#include "error.h"
#include "macros.h"
#include "mem.h"
#include "config.h"
#include "intmath.h"
#include "internal.h"
Go to the source code of this file.
Macros
#define
RSHIFT(
a,
b) ((
a) > 0 ? ((
a) + ((1<<(
b))>>1))>>(
b) : ((
a) + ((1<<(
b))>>1)-1)>>(
b))
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable as absolute values of their type.
More...
#define
FFABSU(
a) ((
a) <= 0 ? -(unsigned)(
a) : (unsigned)(
a))
#define
FFABS64U(
a) ((
a) <= 0 ? -(uint64_t)(
a) : (uint64_t)(
a))
Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
More...
Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form.
More...
Functions
Clip a signed integer value into the amin-amax range.
More...
Clip a signed 64bit integer value into the amin-amax range.
More...
Clip a signed integer value into the 0-255 range.
More...
Clip a signed integer value into the -128,127 range.
More...
Clip a signed integer value into the 0-65535 range.
More...
Clip a signed integer value into the -32768,32767 range.
More...
Clip a signed 64-bit integer value into the -2147483648,2147483647 range.
More...
Clip a signed integer into the -(2^p),(2^p-1) range.
More...
Clip a signed integer to an unsigned power of two range.
More...
Clear high bits from an unsigned integer starting with specific bit position.
More...
Add two signed 32-bit values with saturation.
More...
Add a doubled value to another value with saturation at both stages.
More...
Subtract two signed 32-bit values with saturation.
More...
Subtract a doubled value from another value with saturation at both stages.
More...
Add two signed 64-bit values with saturation.
More...
Subtract two signed 64-bit values with saturation.
More...
Clip a float value into the amin-amax range.
More...
Clip a double value into the amin-amax range.
More...
Count number of bits set to one in x.
More...
Count number of bits set to one in x.
More...
Detailed Description
common internal and external API header
Definition in file common.h.
Macro Definition Documentation
◆ RSHIFT
)
((
a) > 0 ? ((
a) + ((1<<(
b))>>1))>>(
b) : ((
a) + ((1<<(
b))>>1)-1)>>(
b))
◆ ROUNDED_DIV
)
(((
a)>=0 ? (
a) + ((
b)>>1) : (
a) - ((
b)>>1))/(
b))
◆ AV_CEIL_RSHIFT
#define AV_CEIL_RSHIFT
(
a,
)
Value:
: ((
a) + (1<<(
b)) - 1) >> (
b))
Definition at line 58 of file common.h.
◆ FF_CEIL_RSHIFT
◆ FFUDIV
)
(((
a)>0 ?(
a):(
a)-(
b)+1) / (
b))
◆ FFUMOD
◆ FFABS
#define FFABS
(
a )
((
a) >= 0 ? (
a) : (-(
a)))
Absolute value, Note, INT_MIN / INT64_MIN result in undefined behavior as they are not representable as absolute values of their type.
This is the same as with *abs()
- See also
- FFNABS()
Definition at line 72 of file common.h.
◆ FFSIGN
#define FFSIGN
(
a )
((
a) > 0 ? 1 : -1)
◆ FFNABS
#define FFNABS
(
a )
((
a) <= 0 ? (
a) : (-(
a)))
Negative Absolute value.
this works for all integers of all types. As with many macros, this evaluates its argument twice, it thus must not have a sideeffect, that is FFNABS(x++) has undefined behavior.
Definition at line 81 of file common.h.
◆ FFABSU
#define FFABSU
(
a )
((
a) <= 0 ? -(unsigned)(
a) : (unsigned)(
a))
Unsigned Absolute value.
This takes the absolute value of a signed int and returns it as a unsigned. This also works with INT_MIN which would otherwise not be representable As with many macros, this evaluates its argument twice.
Definition at line 89 of file common.h.
◆ FFABS64U
#define FFABS64U
(
a )
((
a) <= 0 ? -(uint64_t)(
a) : (uint64_t)(
a))
◆ av_ceil_log2
◆ av_clip
◆ av_clip64
◆ av_clip_uint8
◆ av_clip_int8
◆ av_clip_uint16
◆ av_clip_int16
◆ av_clipl_int32
◆ av_clip_intp2
◆ av_clip_uintp2
◆ av_mod_uintp2
◆ av_sat_add32
◆ av_sat_dadd32
◆ av_sat_sub32
◆ av_sat_dsub32
◆ av_sat_add64
◆ av_sat_sub64
◆ av_clipf
◆ av_clipd
◆ av_popcount
◆ av_popcount64
◆ av_parity
◆ GET_UTF8
Value:
{\
uint32_t top = (
val & 128) >> 1;\
if ((
val & 0xc0) == 0x80 ||
val >= 0xFE)\
unsigned
int tmp = (GET_BYTE) - 128;\
top <<= 5;\
}\
val &= (top << 1) - 1;\
}
Convert a UTF-8 character (up to 4 bytes) to its 32-bit UCS-4 encoded form.
- Parameters
-
val Output value, must be an lvalue of type uint32_t.
GET_BYTE Expression reading one byte from the input. Evaluated up to 7 times (4 for the currently assigned Unicode range). With a memory buffer input, this could be *ptr++, or if you want to make sure that *ptr stops at the end of a NULL terminated string then *ptr ? *ptr++ : 0
ERROR Expression to be evaluated on invalid input, typically a goto statement.
- Warning
- ERROR should not contain a loop control statement which could interact with the internal while loop, and should force an exit from the macro code (e.g. through a goto or a return) in order to prevent undefined results.
Definition at line 472 of file common.h.
◆ GET_UTF16
Value:
{\
unsigned
int hi =
val - 0xD800;\
if (hi < 0x800) {\
val = (GET_16BIT) - 0xDC00;\
if (
val > 0x3FFU || hi > 0x3FFU)\
val += (hi<<10) + 0x10000;\
}\
}\
Convert a UTF-16 character (2 or 4 bytes) to its 32-bit UCS-4 encoded form.
- Parameters
-
val Output value, must be an lvalue of type uint32_t.
GET_16BIT Expression returning two bytes of UTF-16 data converted to native byte order. Evaluated one or two times.
ERROR Expression to be evaluated on invalid input, typically a goto statement.
Definition at line 497 of file common.h.
◆ PUT_UTF8
Value: {\
if (in < 0x80) {\
tmp = in;\
PUT_BYTE\
} else {\
shift = (bytes - 1) * 6;\
tmp = (256 - (256 >> bytes)) | (in >>
shift);\
PUT_BYTE\
shift -= 6;\
tmp = 0x80 | ((in >>
shift) & 0x3f);\
PUT_BYTE\
}\
}\
}
Convert a 32-bit Unicode character to its UTF-8 encoded form (up to 4 bytes long).
- Parameters
-
val is an input-only argument and should be of type uint32_t. It holds a UCS-4 encoded Unicode character that is to be converted to UTF-8. If val is given as a function it is executed only once.
tmp is a temporary variable and should be of type uint8_t. It represents an intermediate value during conversion that is to be output by PUT_BYTE.
PUT_BYTE writes the converted UTF-8 bytes to any proper destination. It could be a function or a statement, and uses tmp as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be executed up to 4 times for values in the valid UTF-8 range and up to 7 times in the general case, depending on the length of the converted Unicode character.
Definition at line 525 of file common.h.
◆ PUT_UTF16
Value: {\
if (in < 0x10000) {\
tmp = in;\
PUT_16BIT\
} else {\
tmp = 0xD800 | ((in - 0x10000) >> 10);\
PUT_16BIT\
tmp = 0xDC00 | ((in - 0x10000) & 0x3FF);\
PUT_16BIT\
}\
}\
Convert a 32-bit Unicode character to its UTF-16 encoded form (2 or 4 bytes).
- Parameters
-
val is an input-only argument and should be of type uint32_t. It holds a UCS-4 encoded Unicode character that is to be converted to UTF-16. If val is given as a function it is executed only once.
tmp is a temporary variable and should be of type uint16_t. It represents an intermediate value during conversion that is to be output by PUT_16BIT.
PUT_16BIT writes the converted UTF-16 data to any proper destination in desired endianness. It could be a function or a statement, and uses tmp as the input byte. For example, PUT_BYTE could be "*output++ = tmp;" PUT_BYTE will be executed 1 or 2 times depending on input character.
Definition at line 559 of file common.h.
Function Documentation
◆ av_clip_c()
Clip a signed integer value into the amin-amax range.
- Parameters
-
a value to clip
amin minimum value of the clip range
amax maximum value of the clip range
- Returns
- clipped value
Definition at line 176 of file common.h.
◆ av_clip64_c()
Clip a signed 64bit integer value into the amin-amax range.
- Parameters
-
a value to clip
amin minimum value of the clip range
amax maximum value of the clip range
- Returns
- clipped value
Definition at line 193 of file common.h.
◆ av_clip_uint8_c()
Clip a signed integer value into the 0-255 range.
- Parameters
-
a value to clip
- Returns
- clipped value
Definition at line 208 of file common.h.
◆ av_clip_int8_c()
Clip a signed integer value into the -128,127 range.
- Parameters
-
a value to clip
- Returns
- clipped value
Definition at line 219 of file common.h.
◆ av_clip_uint16_c()
Clip a signed integer value into the 0-65535 range.
- Parameters
-
a value to clip
- Returns
- clipped value
Definition at line 230 of file common.h.
◆ av_clip_int16_c()
Clip a signed integer value into the -32768,32767 range.
- Parameters
-
a value to clip
- Returns
- clipped value
Definition at line 241 of file common.h.
◆ av_clipl_int32_c()
Clip a signed 64-bit integer value into the -2147483648,2147483647 range.
- Parameters
-
a value to clip
- Returns
- clipped value
Definition at line 252 of file common.h.
◆ av_clip_intp2_c()
Clip a signed integer into the -(2^p),(2^p-1) range.
- Parameters
-
a value to clip
p bit position to clip at
- Returns
- clipped value
Definition at line 264 of file common.h.
◆ av_clip_uintp2_c()
Clip a signed integer to an unsigned power of two range.
- Parameters
-
a value to clip
p bit position to clip at
- Returns
- clipped value
Definition at line 278 of file common.h.
Referenced by cas_slice16(), color_balance16(), color_balance16_p(), colorcontrast_slice16(), colorcontrast_slice16p(), colorcorrect_slice16(), do_output16(), export_row16(), filter(), filter_frame(), lerp16(), limitdiff16(), monochrome_slice16(), normalize(), parse_band_ext(), postprocess_chroma(), temperature_slice16(), temperature_slice16p(), vibrance_slice16(), vibrance_slice16p(), and write_words().
◆ av_mod_uintp2_c()
Clear high bits from an unsigned integer starting with specific bit position.
- Parameters
-
a value to clip
p bit position to clip at
- Returns
- clipped value
Definition at line 290 of file common.h.
◆ av_sat_add32_c()
Add two signed 32-bit values with saturation.
- Parameters
-
a one value
b another value
- Returns
- sum with signed saturation
Definition at line 302 of file common.h.
◆ av_sat_dadd32_c()
Add a doubled value to another value with saturation at both stages.
- Parameters
-
a first value
b value doubled and added to a
- Returns
- sum sat(a + sat(2*b)) with signed saturation
Definition at line 314 of file common.h.
◆ av_sat_sub32_c()
Subtract two signed 32-bit values with saturation.
- Parameters
-
a one value
b another value
- Returns
- difference with signed saturation
Definition at line 326 of file common.h.
◆ av_sat_dsub32_c()
Subtract a doubled value from another value with saturation at both stages.
- Parameters
-
a first value
b value doubled and subtracted from a
- Returns
- difference sat(a - sat(2*b)) with signed saturation
Definition at line 338 of file common.h.
◆ av_sat_add64_c()
Add two signed 64-bit values with saturation.
- Parameters
-
a one value
b another value
- Returns
- sum with signed saturation
Definition at line 350 of file common.h.
◆ av_sat_sub64_c()
Subtract two signed 64-bit values with saturation.
- Parameters
-
a one value
b another value
- Returns
- difference with signed saturation
Definition at line 369 of file common.h.
◆ av_clipf_c()
Clip a float value into the amin-amax range.
If a is nan or -inf amin will be returned. If a is +inf amax will be returned.
- Parameters
-
a value to clip
amin minimum value of the clip range
amax maximum value of the clip range
- Returns
- clipped value
Definition at line 391 of file common.h.
◆ av_clipd_c()
Clip a double value into the amin-amax range.
If a is nan or -inf amin will be returned. If a is +inf amax will be returned.
- Parameters
-
a value to clip
amin minimum value of the clip range
amax maximum value of the clip range
- Returns
- clipped value
Definition at line 408 of file common.h.
◆ av_ceil_log2_c()
◆ av_popcount_c()
Count number of bits set to one in x.
- Parameters
-
x value to count bits of
- Returns
- the number of bits set to one in x
Definition at line 430 of file common.h.
◆ av_popcount64_c()
Count number of bits set to one in x.
- Parameters
-
x value to count bits of
- Returns
- the number of bits set to one in x
Definition at line 444 of file common.h.
◆ av_parity_c()