74 bool is_signed,
ui32 width,
const nlt_rec *rec) = NULL;
85 ui32 bit_depth,
bool is_signed,
ui32 width) = NULL;
100 ui32 bit_depth,
bool is_signed,
ui32 width) = NULL;
105 ui32 bit_depth,
bool is_signed,
ui32 width,
const nlt_rec *rec) = NULL;
124 (
const float *r,
const float *g,
const float *b,
125 float *y,
float *cb,
float *cr,
ui32 repeat) = NULL;
129 (
const float *y,
const float *cb,
const float *cr,
130 float *r,
float *g,
float *b,
ui32 repeat) = NULL;
135 static std::once_flag colour_transform_functions_init_flag;
136 std::call_once(colour_transform_functions_init_flag, []() {
137#if !defined(OJPH_ENABLE_WASM_SIMD) || !defined(OJPH_EMSCRIPTEN)
154 #ifndef OJPH_DISABLE_SIMD
156 #if (defined(OJPH_ARCH_X86_64) || defined(OJPH_ARCH_I386))
158 #ifndef OJPH_DISABLE_SSE
166 #ifndef OJPH_DISABLE_SSE2
184 #ifndef OJPH_DISABLE_AVX
192 #ifndef OJPH_DISABLE_AVX2
210 #elif defined(OJPH_ARCH_ARM)
212 #elif defined(OJPH_ARCH_PPC64LE)
263 float(2.0*
double(ALPHA_BF)*(1.0-
double(ALPHA_BF))/
double(ALPHA_GF));
265 float(2.0*
double(ALPHA_RF)*(1.0-
double(ALPHA_RF))/
double(ALPHA_GF));
272 template<
int NLT_TYPE>
286 const float* sp = src_line->f32;
287 si32* dp = dst_line->i32 + dst_line_offset;
290 float d_min = rec->
fd_min;
291 float d_max = rec->
fd_max;
292 float delta = rec->
delta;
299 const float half = (float)(1ULL << (rec->
get_bit_depth() - 1));
300 for (
int i = (
int)width; i > 0; --i) {
301 float t = *sp++ + 0.5f;
304 ui32 k = (
ui32)floorf((t - d_min) * inv_delta);
305 float d_k = d_min + (float)k * delta;
307 float t_kp1 = lut[k + 1];
308 float z = t_k + (t - d_k) * inv_delta * (t_kp1 - t_k);
310 si32 v = ojph_round(z * mul - half);
312 v = (v >= 0) ? v : (
si32)(-(
ui32)v - bias);
318 for (
int i = (
int)width; i > 0; --i) {
319 float t = *sp++ + 0.5f;
322 ui32 k = (
ui32)floorf((t - d_min) * inv_delta);
323 float d_k = d_min + (float)k * delta;
325 float t_kp1 = lut[k + 1];
326 float z = t_k + (t - d_k) * inv_delta * (t_kp1 - t_k);
328 si32 v = ojph_round(z * mul);
344 if (rec->
get_type() == nl::OJPH_NLT_LUT_STYLE_NLT)
346 dst_line_offset, bit_depth, is_signed, width, rec);
350 else if (rec->
get_type() == nl::OJPH_NLT_BINARY_COMPLEMENT_PLUS_LUT)
352 dst_line_offset, bit_depth, is_signed, width, rec);
358 template<
int NLT_TYPE>
371 assert(bit_depth <= 32);
373 float ft_min = rec->
ft_min;
374 float ft_max = rec->
ft_max;
375 float delta = rec->
delta;
379 const si32* sp = src_line->i32 + src_line_offset;
380 float* dp = dst_line->f32;
384 for (
int i = (
int)width; i > 0; --i) {
387 v = (v >= 0) ? v : (
si32)(-(
ui32)v - bias);
388 float t = (float)v * mul + 0.5f;
392 ui32 k = (
ui32)floorf((t - ft_min) * inv_delta);
393 float d_k = ft_min + (float)k * delta;
395 float t_kp1 = lut[k + 1];
396 float y = t_k + (t - d_k) * inv_delta * (t_kp1 - t_k);
403 for (
int i = (
int)width; i > 0; --i) {
405 float t = (float)v * mul;
409 ui32 k = (
ui32)floorf((t - ft_min) * inv_delta);
410 float d_k = ft_min + (float)k * delta;
412 float t_kp1 = lut[k + 1];
413 float y = t_k + (t - d_k) * inv_delta * (t_kp1 - t_k);
428 template<
int NLT_TYPE>
441 assert(bit_depth <= 32);
443 float ft_min = rec->
ft_min;
444 float ft_max = rec->
ft_max;
445 float fd_min = rec->
fd_min;
446 float delta = rec->
delta;
451 const si32* sp = src_line->i32 + src_line_offset;
452 float* dp = dst_line->f32;
456 for (
int i = (
int)width; i > 0; --i) {
459 v = (v >= 0) ? v : (
si32)(-(
ui32)v - bias);
460 float t = (float)v * mul + 0.5f;
464 ui32 k = (
ui32)floorf((t - ft_min) * inv_delta);
467 float y1 = lut[k + 1];
468 float y2 = lut[k + 2];
470 { y0 = y1; y1 = y2; ++k; }
471 float y = fd_min + (float)k * delta +
472 (y1 > y0 ? (t - y0) * delta / (y1 - y0) : 0.0f);
479 for (
int i = (
int)width; i > 0; --i) {
481 float t = (float)v * mul;
485 ui32 k = (
ui32)floorf((t - ft_min) * inv_delta);
488 float y1 = lut[k + 1];
489 float y2 = lut[k + 2];
491 { y0 = y1; y1 = y2; ++k; }
492 float y = fd_min + (float)k * delta +
493 (y1 > y0 ? (t - y0) * delta / (y1 - y0) : 0.0f);
508 template<
int NLT_TYPE>
521 assert(bit_depth <= 32);
524 float ft_min = rec->
ft_min;
525 float ft_max = rec->
ft_max;
526 float fd_min = rec->
fd_min;
527 float delta = rec->
delta;
533 const si32* sp = src_line->i32 + src_line_offset;
534 float* dp = dst_line->f32;
538 for (
int i = (
int)width; i > 0; --i) {
541 v = (v >= 0) ? v : (
si32)(-(
ui32)v - bias);
542 float t = (float)v * mul + 0.5f;
546 ui32 k = (
ui32)floorf((t - ft_min) * inv_delta);
553 ui32 mid = (lo + hi) >> 1;
562 float y = fd_min + (float)lo * delta +
563 (y1 > y0 ? (t - y0) * delta / (y1 - y0) : 0.0f);
570 for (
int i = (
int)width; i > 0; --i) {
572 float t = (float)v * mul;
576 ui32 k = (
ui32)floorf((t - ft_min) * inv_delta);
583 ui32 mid = (lo + hi) >> 1;
592 float y = fd_min + (float)lo * delta +
593 (y1 > y0 ? (t - y0) * delta / (y1 - y0) : 0.0f);
610 if (rec->
get_type() == nl::OJPH_NLT_LUT_STYLE_NLT)
614 src_line_offset, dst_line, bit_depth, is_signed, width, rec);
617 src_line_offset, dst_line, bit_depth, is_signed, width, rec);
620 src_line_offset, dst_line, bit_depth, is_signed, width, rec);
625 else if (rec->
get_type() == nl::OJPH_NLT_BINARY_COMPLEMENT_PLUS_LUT)
629 src_line_offset, dst_line, bit_depth, is_signed, width, rec);
632 src_line_offset, dst_line, bit_depth, is_signed, width, rec);
635 src_line_offset, dst_line, bit_depth, is_signed, width, rec);
684#if !defined(OJPH_ENABLE_WASM_SIMD) || !defined(OJPH_EMSCRIPTEN)
696 const si32 *sp = src_line->i32 + src_line_offset;
697 si32 *dp = dst_line->i32 + dst_line_offset;
699 for (
ui32 i = width; i > 0; --i)
704 const si32 *sp = src_line->i32 + src_line_offset;
705 si64 *dp = dst_line->i64 + dst_line_offset;
706 for (
ui32 i = width; i > 0; --i)
707 *dp++ = *sp++ + shift;
714 const si64 *sp = src_line->i64 + src_line_offset;
715 si32 *dp = dst_line->i32 + dst_line_offset;
716 for (
ui32 i = width; i > 0; --i)
717 *dp++ = (
si32)(*sp++ + shift);
731 const si32 *sp = src_line->i32 + src_line_offset;
732 si32 *dp = dst_line->i32 + dst_line_offset;
734 for (
ui32 i = width; i > 0; --i) {
735 const si32 v = *sp++;
736 *dp++ = v >= 0 ? v : (- v - s);
741 const si32 *sp = src_line->i32 + src_line_offset;
742 si64 *dp = dst_line->i64 + dst_line_offset;
743 for (
ui32 i = width; i > 0; --i) {
744 const si64 v = *sp++;
745 *dp++ = v >= 0 ? v : (- v - shift);
753 const si64 *sp = src_line->i64 + src_line_offset;
754 si32 *dp = dst_line->i32 + dst_line_offset;
755 for (
ui32 i = width; i > 0; --i) {
756 const si64 v = *sp++;
757 *dp++ = (
si32)(v >= 0 ? v : (- v - shift));
763 template<
bool NLT_TYPE3>
767 ui32 bit_depth,
bool is_signed,
ui32 width)
774 assert(bit_depth <= 32);
775 const float* sp = src_line->f32;
776 si32* dp = dst_line->i32 + dst_line_offset;
783 si32 neg_limit = (
si32)INT_MIN >> (32 - bit_depth);
784 float mul = (float)(1ull << bit_depth);
785 float fl_up_lim = -(float)neg_limit;
786 float fl_low_lim = (float)neg_limit;
787 si32 s32_up_lim = INT_MAX >> (32 - bit_depth);
788 si32 s32_low_lim = INT_MIN >> (32 - bit_depth);
792 const ui32 bias = (
ui32)(1ULL << (bit_depth - 1)) + 1u;
793 for (
int i = (
int)width; i > 0; --i) {
794 float t = *sp++ * mul;
795 si32 v = ojph_round(t);
796 v = t >= fl_low_lim ? v : s32_low_lim;
797 v = t < fl_up_lim ? v : s32_up_lim;
799 v = (v >= 0) ? v : (
si32)(-(
ui32)v - bias);
805 const si32 half = (
si32)(1ULL << (bit_depth - 1));
806 for (
int i = (
int)width; i > 0; --i) {
807 float t = *sp++ * mul;
808 si32 v = ojph_round(t);
809 v = t >= fl_low_lim ? v : s32_low_lim;
810 v = t < fl_up_lim ? v : s32_up_lim;
819 ui32 bit_depth,
bool is_signed,
ui32 width)
822 dst_line_offset, bit_depth, is_signed, width);
828 ui32 bit_depth,
bool is_signed,
ui32 width)
831 dst_line_offset, bit_depth, is_signed, width);
835 template<
bool NLT_TYPE3>
839 ui32 bit_depth,
bool is_signed,
ui32 width)
846 assert(bit_depth <= 32);
847 float mul = (float)(1.0 / (
double)(1ULL << bit_depth));
849 const si32* sp = src_line->i32 + src_line_offset;
850 float* dp = dst_line->f32;
853 const ui32 bias = (
ui32)(1ULL << (bit_depth - 1)) + 1u;
854 for (
int i = (
int)width; i > 0; --i) {
857 v = (v >= 0) ? v : (
si32)(-(
ui32)v - bias);
858 *dp++ = (float)v * mul;
863 const si32 half = (
si32)(1ULL << (bit_depth - 1));
864 for (
int i = (
int)width; i > 0; --i) {
867 *dp++ = (float)v * mul;
875 ui32 bit_depth,
bool is_signed,
ui32 width)
878 dst_line, bit_depth, is_signed, width);
884 ui32 bit_depth,
bool is_signed,
ui32 width)
887 dst_line, bit_depth, is_signed, width);
910 const si32 *rp = r->i32, * gp = g->i32, * bp = b->i32;
911 si32 *yp = y->i32, * cbp = cb->i32, * crp = cr->i32;
912 for (
ui32 i = repeat; i > 0; --i)
914 si32 rr = *rp++, gg = *gp++, bb = *bp++;
915 *yp++ = (rr + 2 * gg + bb) >> 2;
928 const si32 *rp = r->i32, *gp = g->i32, *bp = b->i32;
929 si64 *yp = y->i64, *cbp = cb->i64, *crp = cr->i64;
930 for (
ui32 i = repeat; i > 0; --i)
932 si64 rr = *rp++, gg = *gp++, bb = *bp++;
933 *yp++ = (rr + 2 * gg + bb) >> 2;
960 const si32 *yp = y->i32, *cbp = cb->i32, *crp = cr->i32;
961 si32 *rp = r->i32, *gp = g->i32, *bp = b->i32;
962 for (
ui32 i = repeat; i > 0; --i)
964 si32 yy = *yp++, cbb = *cbp++, crr = *crp++;
965 si32 gg = yy - ((cbb + crr) >> 2);
979 const si64 *yp = y->i64, *cbp = cb->i64, *crp = cr->i64;
980 si32 *rp = r->i32, *gp = g->i32, *bp = b->i32;
981 for (
ui32 i = repeat; i > 0; --i)
983 si64 yy = *yp++, cbb = *cbp++, crr = *crp++;
984 si64 gg = yy - ((cbb + crr) >> 2);
985 *rp++ = (
si32)(crr + gg);
987 *bp++ = (
si32)(cbb + gg);
994 float *y,
float *cb,
float *cr,
ui32 repeat)
996 for (
ui32 i = repeat; i > 0; --i)
1008 float *r,
float *g,
float *b,
ui32 repeat)
1010 for (
ui32 i = repeat; i > 0; --i)
void gen_rev_decode_nlt(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
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 sse2_irv_convert_to_integer(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
void wasm_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void wasm_irv_convert_to_integer(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
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 vsx_irv_convert_to_float_nlt_type3(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width)
void wasm_irv_convert_to_integer_nlt_type3(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
void sse2_irv_convert_to_float_nlt_type3(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width)
void(*) ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void sse2_irv_convert_to_integer_nlt_type3(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
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(*) rev_decode_nlt(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, const ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
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 vsx_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void(*) irv_convert_to_float_nlt_type3(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, 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)
static void local_gen_irv_convert_to_float_nlt0or3(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width)
void gen_irv_convert_to_integer(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
void(*) irv_convert_to_integer_nlt_type3(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
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(*) 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(*) irv_convert_to_float_nlt(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
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_irv_convert_to_float(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width)
void vsx_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 vsx_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
void init_colour_transform_functions()
void vsx_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 gen_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
static void local_gen_irv_convert_to_integer_nlt2or4(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
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(*) irv_convert_to_integer_nlt(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
void(*) irv_convert_to_integer(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
void vsx_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_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_irv_convert_to_float_nlt_type3(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, 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 avx2_irv_convert_to_float(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width)
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 avx2_irv_convert_to_integer_nlt(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
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(*) 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_irv_convert_to_integer_nlt(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
void wasm_ict_forward(const float *r, const float *g, const float *b, float *y, float *cb, float *cr, ui32 repeat)
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_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
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 sse2_irv_convert_to_integer_nlt(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
void(*) rev_encode_nlt(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
static void local_gen_irv_convert_to_float_nlt2or4_precise_search(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
void avx2_irv_convert_to_float_nlt(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
void(*) irv_convert_to_float(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width)
void vsx_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 avx2_irv_convert_to_integer(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
void avx2_irv_convert_to_float_nlt_type3(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, 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 sse2_irv_convert_to_float_nlt(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
static void local_gen_irv_convert_to_float_nlt2or4(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
void avx_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void gen_irv_convert_to_float_nlt(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
void avx2_irv_convert_to_integer_nlt_type3(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
void(*) ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
void vsx_irv_convert_to_float(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width)
void vsx_irv_convert_to_integer(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
void wasm_irv_convert_to_float(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width)
void gen_rev_encode_nlt(const line_buf *src_line, const ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
void vsx_irv_convert_to_integer_nlt_type3(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
void sse_ict_backward(const float *y, const float *cb, const float *cr, float *r, float *g, float *b, ui32 repeat)
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_irv_convert_to_integer_nlt_type3(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
void gen_irv_convert_to_float_nlt_type3(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width)
static void local_gen_irv_convert_to_integer_nlt0or3(const line_buf *src_line, line_buf *dst_line, ui32 dst_line_offset, ui32 bit_depth, bool is_signed, ui32 width)
static void local_gen_irv_convert_to_float_nlt2or4_precise_1step(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width, const nlt_rec *rec)
void sse2_irv_convert_to_float(const line_buf *src_line, ui32 src_line_offset, line_buf *dst_line, ui32 bit_depth, bool is_signed, ui32 width)
@ PPC_CPU_EXT_LEVEL_ARCH_2_07
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
ui8 get_bit_depth() const
ojph::param_nlt::nonlinearity nonlinearity
ui16 * precise_enc_dec_indices
float * approx_enc_points