#ifndef ka_scalers_h
#define ka_scalers_h

#include "ka_scaler.h"

// Merge word aligned 16bpp lines, sc in fraction 16:16, width in words
void merge_lines_565_neon(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_t555_neon(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_a555_neon(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_444_neon(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_565_sh(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_t555_sh(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_a555_sh(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_444_sh(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_565(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_t555(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_a555(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);
void merge_lines_444(uint32_t* pdst, const uint32_t* line0, const uint32_t* line1, uint32_t sc, int width);

void scaleup_line_565_neon(uint16_t* pdst, uint32_t width, const uint16_t* psrc, int x0, int x_mag);
void scaleup_line_555_neon(uint16_t* pdst, uint32_t width, const uint16_t* psrc, int x0, int x_mag);
void scaleup_line_444_neon(uint16_t* pdst, uint32_t width, const uint16_t* psrc, int x0, int x_mag);
void scaleup_line_565_sh(uint16_t* pdst, uint32_t width, const uint16_t* psrc, int x0, int x_mag);
void scaleup_line_555_sh(uint16_t* pdst, uint32_t width, const uint16_t* psrc, int x0, int x_mag);
void scaleup_line_444_sh(uint16_t* pdst, uint32_t width, const uint16_t* psrc, int x0, int x_mag);
void scaleup_line_565(uint16_t* pdst, uint32_t width, const uint16_t* psrc, int x0, int x_mag);
void scaleup_line_555(uint16_t* pdst, uint32_t width, const uint16_t* psrc, int x0, int x_mag);
void scaleup_line_444(uint16_t* pdst, uint32_t width, const uint16_t* psrc, int x0, int x_mag);

void ka_scale_raw_8bpp(ka_scale_t*);
void ka_scale_raw_16bpp(ka_scale_t*);
void ka_scale_raw_16bpp_sh(ka_scale_t*);
void ka_scale_raw_32bpp(ka_scale_t*);

void ka_scale_linear_8bpp_mono(ka_scale_t*);
void ka_scale_linear_12bpp(ka_scale_t*);
void ka_scale_linear_15bpp(ka_scale_t*);
void ka_scale_linear_16bpp(ka_scale_t*);
void ka_scale_linear_32bpp(ka_scale_t*);

void ka_scale_bilinear_8bpp_mono(ka_scale_t*);
void ka_scale_bilinear_12bpp(ka_scale_t*);
void ka_scale_bilinear_t15bpp(ka_scale_t*);
void ka_scale_bilinear_a15bpp(ka_scale_t*);
void ka_scale_bilinear_16bpp(ka_scale_t*);
void ka_scale_bilinear_32bpp(ka_scale_t*);

#endif
