![]() |
![]() |
![]() |
Liboil Reference Manual | ![]() |
---|---|---|---|---|
void oil_clip_f32 (float *dest, int dstr, const float *src, int sstr, int n, const float *s2_1, const float *s3_1); void oil_clip_f64 (double *dest, int dstr, const double *src, int sstr, int n, const double *s2_1, const double *s3_1); void oil_clip_s16 (int16_t *dest, int dstr, const int16_t *src, int sstr, int n, const int16_t *s2_1, const int16_t *s3_1); void oil_clip_s32 (int32_t *dest, int dstr, const int32_t *src, int sstr, int n, const int32_t *s2_1, const int32_t *s3_1); void oil_clip_s8 (int8_t *dest, int dstr, const int8_t *src, int sstr, int n, const int8_t *s2_1, const int8_t *s3_1); void oil_clip_u16 (uint16_t *dest, int dstr, const uint16_t *src, int sstr, int n, const uint16_t *s2_1, const uint16_t *s3_1); void oil_clip_u32 (uint32_t *dest, int dstr, const uint32_t *src, int sstr, int n, const uint32_t *s2_1, const uint32_t *s3_1); void oil_clip_u8 (uint8_t *dest, int dstr, const uint8_t *src, int sstr, int n, const uint8_t *s2_1, const uint8_t *s3_1); void oil_dequantize8x8_s16 (int16_t *d_8x8, int dstr, const int16_t *s1_8x8, int sstr1, const int16_t *s2_8x8, int sstr2); void oil_diffsquaresum_f64 (double *d_1, const double *src1, int sstr1, const double *src2, int sstr2, int n); void oil_md5 (uint32_t *i_4, const uint32_t *s_16); void oil_mix_u8 (uint8_t *dest, const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, int n); void oil_null (); void oil_scanlinescale2_u8 (uint8_t *d, const uint8_t *s, int n); void oil_sincos_f64 (double *dest1, double *dest2, int n, const double *s1_1, const double *s2_1); void oil_utf8_validate (int32_t *d_1, const uint8_t *s, int n); void oil_diff8x8_s16_u8 (int16_t *d_8x8, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, int ss2); void oil_diff8x8_average_s16_u8 (int16_t *d_8x8, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, int ss2, const uint8_t *s3_8x8, int ss3); void oil_err_inter8x8_u8_avg (uint32_t *d_1, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, const uint8_t *s3_8x8, int ss2); void oil_recon8x8_inter (uint8_t *d_8x8, int ds, const uint8_t *s1_8x8, int ss1, const int16_t *s2_8x8); void oil_err_intra8x8_u8 (uint32_t *d_1, const uint8_t *s1_8x8, int ss1); void oil_recon8x8_intra (uint8_t *d_8x8, int ds, const int16_t *s_8x8); void oil_colsad8x8_u8 (uint32_t *d_1, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, int ss2); void oil_composite_over_u8 (uint8_t *i_n, const uint8_t *s1_n, int n); void oil_diff8x8_const128_s16_u8 (int16_t *d_8x8, const uint8_t *s1_8x8, int ss1); void oil_copy8x8_u8 (uint8_t *d_8x8, int ds, const uint8_t *s_8x8, int ss); void oil_err_inter8x8_u8 (uint32_t *d_1, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, int ss2); void oil_fdct8x8theora (const int16_t *s_8x8, int16_t *d_8x8); void oil_rowsad8x8_u8 (uint32_t *d_1, const uint8_t *s1_8x8, const uint8_t *s2_8x8); void oil_recon8x8_inter2 (uint8_t *d_8x8, int ds, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, int ss2, const int16_t *s3_8x8); void oil_composite_add_u8 (uint8_t *i_n, const uint8_t *s1_n, int n); void oil_sad8x8_u8_avg (uint32_t *d_1, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, const uint8_t *s3_8x8, int ss2);
void oil_clip_f32 (float *dest, int dstr, const float *src, int sstr, int n, const float *s2_1, const float *s3_1);
Clips each value in src to the range [s2_1,s3_1] and places the result in dest.
dest : | |
dstr : | |
src : | |
sstr : | |
n : | |
s2_1 : | |
s3_1 : |
void oil_clip_f64 (double *dest, int dstr, const double *src, int sstr, int n, const double *s2_1, const double *s3_1);
Clips each value in src to the range [s2_1,s3_1] and places the result in dest.
dest : | |
dstr : | |
src : | |
sstr : | |
n : | |
s2_1 : | |
s3_1 : |
void oil_clip_s16 (int16_t *dest, int dstr, const int16_t *src, int sstr, int n, const int16_t *s2_1, const int16_t *s3_1);
Clips each value in src to the range [s2_1,s3_1] and places the result in dest.
dest : | |
dstr : | |
src : | |
sstr : | |
n : | |
s2_1 : | |
s3_1 : |
void oil_clip_s32 (int32_t *dest, int dstr, const int32_t *src, int sstr, int n, const int32_t *s2_1, const int32_t *s3_1);
Clips each value in src to the range [s2_1,s3_1] and places the result in dest.
dest : | |
dstr : | |
src : | |
sstr : | |
n : | |
s2_1 : | |
s3_1 : |
void oil_clip_s8 (int8_t *dest, int dstr, const int8_t *src, int sstr, int n, const int8_t *s2_1, const int8_t *s3_1);
Clips each value in src to the range [s2_1,s3_1] and places the result in dest.
dest : | |
dstr : | |
src : | |
sstr : | |
n : | |
s2_1 : | |
s3_1 : |
void oil_clip_u16 (uint16_t *dest, int dstr, const uint16_t *src, int sstr, int n, const uint16_t *s2_1, const uint16_t *s3_1);
Clips each value in src to the range [s2_1,s3_1] and places the result in dest.
dest : | |
dstr : | |
src : | |
sstr : | |
n : | |
s2_1 : | |
s3_1 : |
void oil_clip_u32 (uint32_t *dest, int dstr, const uint32_t *src, int sstr, int n, const uint32_t *s2_1, const uint32_t *s3_1);
Clips each value in src to the range [s2_1,s3_1] and places the result in dest.
dest : | |
dstr : | |
src : | |
sstr : | |
n : | |
s2_1 : | |
s3_1 : |
void oil_clip_u8 (uint8_t *dest, int dstr, const uint8_t *src, int sstr, int n, const uint8_t *s2_1, const uint8_t *s3_1);
Clips each value in src to the range [s2_1,s3_1] and places the result in dest.
dest : | |
dstr : | |
src : | |
sstr : | |
n : | |
s2_1 : | |
s3_1 : |
void oil_dequantize8x8_s16 (int16_t *d_8x8, int dstr, const int16_t *s1_8x8, int sstr1, const int16_t *s2_8x8, int sstr2);
Multiplies each element in s1_8x8 by the corresponding element in s2_8x8 and places the result in d_8x8.
d_8x8 : | |
dstr : | |
s1_8x8 : | |
sstr1 : | |
s2_8x8 : | |
sstr2 : |
void oil_diffsquaresum_f64 (double *d_1, const double *src1, int sstr1, const double *src2, int sstr2, int n);
Calculates the sum of squared differences between src1 and src2 and places the result in d_1.
d_1 : | |
src1 : | |
sstr1 : | |
src2 : | |
sstr2 : | |
n : |
void oil_md5 (uint32_t *i_4, const uint32_t *s_16);
Performs an MD5 checksum iteration. The iteration operates on the 64 bytes contained in s_16, and changes the hash contained in i_4. This only implements a portion of the MD5 algorithm. The full MD5 algorithm requires initializing the hash with a specific value and additional handling of bytes at the end of the stream.
See also the md5 example in the Liboil source code.
FIXME: need a reference here
i_4 : | |
s_16 : |
void oil_mix_u8 (uint8_t *dest, const uint8_t *src1, const uint8_t *src2, const uint8_t *src3, int n);
Performs the compisiting operation DEST = (SRC2 IN MASK) OVER SRC1, except it is done incorrectly, so this function should not be used.
FIXME: This function is broken.
dest : | DEST |
src1 : | SRC1 |
src2 : | SRC2 |
src3 : | MASK |
n : |
void oil_null ();
Does nothing, and does it fast.
This function is useful for testing the overhead of calling a Liboil function.
void oil_scanlinescale2_u8 (uint8_t *d, const uint8_t *s, int n);
Upsamples the source array by a factor of two. That is, if the values in s are A,B,C,D,E, the values written to d are A,A,B,B,C,C,D,D,E,E. Note that n is the number of elements written to d, and that half of s is not used.
d : | destination array |
s : | source array |
n : | number of elements |
void oil_sincos_f64 (double *dest1, double *dest2, int n, const double *s1_1, const double *s2_1);
Calculates sin(x) and cos(x) and places the results in dest1 and dest2 respectively. Values for x start at s1_1 and are incremented by s2_1 for each destination element.
dest1 : | |
dest2 : | |
n : | |
s1_1 : | |
s2_1 : |
void oil_utf8_validate (int32_t *d_1, const uint8_t *s, int n);
Checks s for valid UTF-8 characters. If the entire s array represents valid UTF-8 characters, n is written to d_1. Otherwise, the index in the array of the beginning of the first invalid UTF-8 character is written to d_1.
d_1 : | |
s : | |
n : |
void oil_diff8x8_s16_u8 (int16_t *d_8x8, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, int ss2);
Calculates the difference of each value in s1_8x8 and s2_8x8 and places the result in d_8x8. Note that the destination type is larger than the source type.
d_8x8 : | |
s1_8x8 : | |
ss1 : | |
s2_8x8 : | |
ss2 : |
void oil_diff8x8_average_s16_u8 (int16_t *d_8x8, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, int ss2, const uint8_t *s3_8x8, int ss3);
Calculates the difference of each value in s1_8x8 and the average of s2_8x8 and s3_8x8, and places the result in d_8x8. Note that the destination type is larger than the source type.
d_8x8 : | |
s1_8x8 : | |
ss1 : | |
s2_8x8 : | |
ss2 : | |
s3_8x8 : | |
ss3 : |
void oil_err_inter8x8_u8_avg (uint32_t *d_1, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, const uint8_t *s3_8x8, int ss2);
Calculates an intermediate 8x8 block where each element is the difference between s1_8x8 and the average of s2_8x8 and s3_8x8. The sum of squares of the difference of each element in the intermediate block and the mean of the intermediate block is placed into d_1. This result is 64 times the variance of the mean of the intermediate block.
FIXME: This function is broken, since the reference function uses ss2 as the stride for both s2_8x8 and s3_8x8.
d_1 : | |
s1_8x8 : | |
ss1 : | |
s2_8x8 : | |
s3_8x8 : | |
ss2 : |
void oil_recon8x8_inter (uint8_t *d_8x8, int ds, const uint8_t *s1_8x8, int ss1, const int16_t *s2_8x8);
Adds each element in s1_8x8 and s2_8x8, clamps to the range [0,255], and places the result in the destination array.
d_8x8 : | |
ds : | |
s1_8x8 : | |
ss1 : | |
s2_8x8 : |
void oil_err_intra8x8_u8 (uint32_t *d_1, const uint8_t *s1_8x8, int ss1);
Calculates the sum of squared differences from the mean over s1_8x8 and places the result in d_1. This result is 64 times the variance of the mean of s1_8x8.
d_1 : | |
s1_8x8 : | |
ss1 : |
void oil_recon8x8_intra (uint8_t *d_8x8, int ds, const int16_t *s_8x8);
Adds 128 to each value in the source array, clamps to the range [0,255], and places the result in the destination array.
d_8x8 : | |
ds : | |
s_8x8 : |
void oil_colsad8x8_u8 (uint32_t *d_1, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, int ss2);
Divides the 8x8 block into 16 1x4 regions, and calculates the sum of absolute differences between s1_8x8 and s2_8x8 for each region. The maximum of the results in each region is placed in d_1.
d_1 : | |
s1_8x8 : | |
ss1 : | |
s2_8x8 : | |
ss2 : |
void oil_composite_over_u8 (uint8_t *i_n, const uint8_t *s1_n, int n);
Performs the compositing operation DEST = SRC OVER DEST.
i_n : | DEST |
s1_n : | SRC |
n : | number of elements |
void oil_diff8x8_const128_s16_u8 (int16_t *d_8x8, const uint8_t *s1_8x8, int ss1);
Subtracts 128 from each value in s1_8x8 and places the result in d_8x8. Note that the destination type is larger than the source type.
d_8x8 : | |
s1_8x8 : | |
ss1 : |
void oil_copy8x8_u8 (uint8_t *d_8x8, int ds, const uint8_t *s_8x8, int ss);
Copies an 8x8 block.
d_8x8 : | |
ds : | |
s_8x8 : | |
ss : |
void oil_err_inter8x8_u8 (uint32_t *d_1, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, int ss2);
Calculates an intermediate 8x8 block where each element is the difference between s1_8x8 and s2_8x8. The sum of squares of the difference of each element in the intermediate block and the mean of the intermediate block is placed into d_1. This result is equal to 64 times the variance of the mean of the intermediate block.
d_1 : | |
s1_8x8 : | |
ss1 : | |
s2_8x8 : | |
ss2 : |
void oil_fdct8x8theora (const int16_t *s_8x8, int16_t *d_8x8);
Calculates the FDCT transformation of s_8x8 according to the Theora specification and places the result in d_8x8.
Note that the source and destination arrays are reversed compared to normal Liboil order.
s_8x8 : | |
d_8x8 : |
void oil_rowsad8x8_u8 (uint32_t *d_1, const uint8_t *s1_8x8, const uint8_t *s2_8x8);
Calculates the sum of absolute differences between s1_8x8 and s1_8s8 for the first 4 elements of the first row, and the sum of absolute differences for the last 4 elements of the first row, and places the maximum of those values in dest.
FIXME: This function is declared incorrectly.
d_1 : | |
s1_8x8 : | |
s2_8x8 : |
void oil_recon8x8_inter2 (uint8_t *d_8x8, int ds, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, int ss2, const int16_t *s3_8x8);
Adds each element in s1_8x8 and s2_8x8, divides by 2, and adds to s3_8x8, clamps to the range [0,255], and places the result in the destination array.
d_8x8 : | |
ds : | |
s1_8x8 : | |
ss1 : | |
s2_8x8 : | |
ss2 : | |
s3_8x8 : |
void oil_composite_add_u8 (uint8_t *i_n, const uint8_t *s1_n, int n);
Performs the compositing operation DEST = SRC ADD DEST.
i_n : | DEST |
s1_n : | SRC |
n : | number of elements |
void oil_sad8x8_u8_avg (uint32_t *d_1, const uint8_t *s1_8x8, int ss1, const uint8_t *s2_8x8, const uint8_t *s3_8x8, int ss2);
Calculates the sum of absolute differences between s1_8x8 and the average of s2_8x8 and s3_8x8.
FIXME: This function is broken because the reference function assumes the stride for s3_8x8 is ss2.
d_1 : | |
s1_8x8 : | |
ss1 : | |
s2_8x8 : | |
s3_8x8 : | |
ss2 : |