67 (
const si32 *sp,
float *dp,
float mul,
ui32 width) = NULL;
71 (
const si32 *sp,
float *dp,
float mul,
ui32 width) = NULL;
75 (
const float *sp,
si32 *dp,
float mul,
ui32 width) = NULL;
79 (
const float *sp,
si32 *dp,
float mul,
ui32 width) = NULL;
93 (
const float *r,
const float *g,
const float *b,
94 float *y,
float *cb,
float *cr,
ui32 repeat) = NULL;
98 (
const float *y,
const float *cb,
const float *cr,
99 float *r,
float *g,
float *b,
ui32 repeat) = NULL;
110#if !defined(OJPH_ENABLE_WASM_SIMD) || !defined(OJPH_EMSCRIPTEN)
123 #ifndef OJPH_DISABLE_SIMD
125 #if (defined(OJPH_ARCH_X86_64) || defined(OJPH_ARCH_I386))
127 #ifndef OJPH_DISABLE_SSE
139 #ifndef OJPH_DISABLE_SSE2
151 #ifndef OJPH_DISABLE_AVX
163 #ifndef OJPH_DISABLE_AVX2
173 #elif defined(OJPH_ARCH_ARM)
204 float(2.0*
double(ALPHA_BF)*(1.0-
double(ALPHA_BF))/
double(ALPHA_GF));
206 float(2.0*
double(ALPHA_RF)*(1.0-
double(ALPHA_RF))/
double(ALPHA_GF));
212#if !defined(OJPH_ENABLE_WASM_SIMD) || !defined(OJPH_EMSCRIPTEN)
224 const si32 *sp = src_line->
i32 + src_line_offset;
225 si32 *dp = dst_line->
i32 + dst_line_offset;
227 for (
ui32 i = width; i > 0; --i)
232 const si32 *sp = src_line->
i32 + src_line_offset;
233 si64 *dp = dst_line->
i64 + dst_line_offset;
234 for (
ui32 i = width; i > 0; --i)
235 *dp++ = *sp++ + shift;
242 const si64 *sp = src_line->
i64 + src_line_offset;
243 si32 *dp = dst_line->
i32 + dst_line_offset;
244 for (
ui32 i = width; i > 0; --i)
245 *dp++ = (
si32)(*sp++ + shift);
259 const si32 *sp = src_line->
i32 + src_line_offset;
260 si32 *dp = dst_line->
i32 + dst_line_offset;
262 for (
ui32 i = width; i > 0; --i) {
263 const si32 v = *sp++;
264 *dp++ = v >= 0 ? v : (- v - s);
269 const si32 *sp = src_line->
i32 + src_line_offset;
270 si64 *dp = dst_line->
i64 + dst_line_offset;
271 for (
ui32 i = width; i > 0; --i) {
272 const si64 v = *sp++;
273 *dp++ = v >= 0 ? v : (- v - shift);
281 const si64 *sp = src_line->
i64 + src_line_offset;
282 si32 *dp = dst_line->
i32 + dst_line_offset;
283 for (
ui32 i = width; i > 0; --i) {
284 const si64 v = *sp++;
285 *dp++ = (
si32)(v >= 0 ? v : (- v - shift));
294 for (
ui32 i = width; i > 0; --i)
295 *dp++ = (
float)*sp++ * mul - 0.5f;
302 for (
ui32 i = width; i > 0; --i)
303 *dp++ = (
float)*sp++ * mul;
310 for (
ui32 i = width; i > 0; --i)
318 for (
ui32 i = width; i > 0; --i)
344 for (
ui32 i = repeat; i > 0; --i)
346 si32 rr = *rp++, gg = *gp++, bb = *bp++;
347 *yp++ = (rr + (gg << 1) + bb) >> 2;
362 for (
ui32 i = repeat; i > 0; --i)
364 si64 rr = *rp++, gg = *gp++, bb = *bp++;
365 *yp++ = (rr + (gg << 1) + bb) >> 2;
394 for (
ui32 i = repeat; i > 0; --i)
396 si32 yy = *yp++, cbb = *cbp++, crr = *crp++;
397 si32 gg = yy - ((cbb + crr) >> 2);
413 for (
ui32 i = repeat; i > 0; --i)
415 si64 yy = *yp++, cbb = *cbp++, crr = *crp++;
416 si64 gg = yy - ((cbb + crr) >> 2);
417 *rp++ = (
si32)(crr + gg);
419 *bp++ = (
si32)(cbb + gg);
426 float *y,
float *cb,
float *cr,
ui32 repeat)
428 for (
ui32 i = repeat; i > 0; --i)
440 float *r,
float *g,
float *b,
ui32 repeat)
442 for (
ui32 i = repeat; i > 0; --i)
void wasm_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul, ui32 width)
void(* cnvrt_float_to_si32)(const float *sp, si32 *dp, float mul, ui32 width)
void sse2_rct_backward(const line_buf *y, const line_buf *cb, const line_buf *cr, line_buf *r, line_buf *g, line_buf *b, ui32 repeat)
void wasm_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void avx2_rct_forward(const line_buf *r, const line_buf *g, const line_buf *b, line_buf *y, line_buf *cb, line_buf *cr, ui32 repeat)
void wasm_rev_convert_nlt_type3(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, si64 shift, ui32 width)
void(* rct_forward)(const line_buf *r, const line_buf *g, const line_buf *b, line_buf *y, line_buf *cb, line_buf *cr, ui32 repeat)
void wasm_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul, ui32 width)
void avx_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul, ui32 width)
void(* cnvrt_si32_to_float_shftd)(const si32 *sp, float *dp, float mul, ui32 width)
void(* ict_forward)(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void gen_rct_forward(const line_buf *r, const line_buf *g, const line_buf *b, line_buf *y, line_buf *cb, line_buf *cr, ui32 repeat)
void avx_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void gen_rct_backward(const line_buf *y, const line_buf *cb, const line_buf *cr, line_buf *r, line_buf *g, line_buf *b, ui32 repeat)
void sse2_rev_convert(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, si64 shift, ui32 width)
void avx_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul, ui32 width)
void avx2_rct_backward(const line_buf *y, const line_buf *cb, const line_buf *cr, line_buf *r, line_buf *g, line_buf *b, ui32 repeat)
void(* ict_backward)(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void sse2_rev_convert_nlt_type3(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, si64 shift, ui32 width)
void wasm_rev_convert(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, si64 shift, ui32 width)
void gen_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul, ui32 width)
void init_colour_transform_functions()
void gen_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void sse_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul, ui32 width)
void wasm_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul, ui32 width)
void sse2_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul, ui32 width)
void(* cnvrt_float_to_si32_shftd)(const float *sp, si32 *dp, float mul, ui32 width)
void(* rct_backward)(const line_buf *r, const line_buf *g, const line_buf *b, line_buf *y, line_buf *cb, line_buf *cr, ui32 repeat)
void gen_rev_convert_nlt_type3(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, si64 shift, ui32 width)
void sse_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void avx2_rev_convert(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, si64 shift, ui32 width)
void avx_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul, ui32 width)
static bool colour_transform_functions_initialized
void wasm_rct_backward(const line_buf *y, const line_buf *cb, const line_buf *cr, line_buf *r, line_buf *g, line_buf *b, ui32 repeat)
void sse_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul, ui32 width)
void wasm_rct_forward(const line_buf *r, const line_buf *g, const line_buf *b, line_buf *y, line_buf *cb, line_buf *cr, ui32 repeat)
void wasm_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void(* cnvrt_si32_to_float)(const si32 *sp, float *dp, float mul, ui32 width)
void avx2_rev_convert_nlt_type3(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, si64 shift, ui32 width)
void gen_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul, ui32 width)
void gen_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void wasm_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul, ui32 width)
void gen_rev_convert(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, si64 shift, ui32 width)
void gen_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul, ui32 width)
void sse2_rct_forward(const line_buf *r, const line_buf *g, const line_buf *b, line_buf *y, line_buf *cb, line_buf *cr, ui32 repeat)
void avx_cnvrt_float_to_si32_shftd(const float *sp, si32 *dp, float mul, ui32 width)
void avx_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void sse2_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul, ui32 width)
void sse_cnvrt_si32_to_float(const si32 *sp, float *dp, float mul, ui32 width)
void(* rev_convert_nlt_type3)(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, si64 shift, ui32 width)
void(* rev_convert)(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, si64 shift, ui32 width)
void gen_cnvrt_si32_to_float_shftd(const si32 *sp, float *dp, float mul, ui32 width)
void sse_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void sse_cnvrt_float_to_si32(const float *sp, si32 *dp, float mul, ui32 width)
static si32 ojph_round(float val)
OJPH_EXPORT int get_cpu_ext_level()
static const float GAMMA_CR2R
static const float BETA_CbF
static const float GAMMA_CB2B
static const float ALPHA_RF
static const float GAMMA_CB2G
static const float GAMMA_CR2G
static const float ALPHA_BF
static const float BETA_CrF
static const float ALPHA_GF