
#ifndef ka_drawers_h
#define ka_drawers_h

#include "ka_drawer.h"

// lookup table used by 8bpp routines
extern uint8_t ka_Yc0_Table_8bit[256+224*2];
extern uint8_t* ka_rgb_colour_table;
extern uint8_t* ka_yuv_colour_table;
extern uint8_t* ka_grey_table;

// utility functions
void ka_yuv_correction_neon(uint8_t* dst, uint8_t* src, int size, int fact, int add);
void ka_yuv_correcthalf_neon(uint8_t* dst, uint8_t* src, int size, int fact, int add);
void ka_uv_correction_neon(uint16_t* dst, uint8_t* src1, uint8_t* src2, int size, int fac, int add);
void ka_uv_correcthalf_neon(uint16_t* dst, uint8_t* src, uint8_t* src2, int size, int fac, int add);

// Y, in this case rgb = bgr
void ka_drawy_z05_grey(const ka_paint_t* paint);
void ka_drawy_z1_grey(const ka_paint_t* paint);
void ka_drawy_z2_grey(const ka_paint_t* paint);
void ka_drawy_z3_grey(const ka_paint_t* paint);
void ka_drawy_z4_grey(const ka_paint_t* paint);

void ka_drawy_z05_8bpp(const ka_paint_t* paint);
void ka_drawy_z1_8bpp(const ka_paint_t* paint);
void ka_drawy_z2_8bpp(const ka_paint_t* paint);
void ka_drawy_z3_8bpp(const ka_paint_t* paint);
void ka_drawy_z4_8bpp(const ka_paint_t* paint);

void ka_drawy_z05_tbgr12(const ka_paint_t* paint);
void ka_drawy_z1_tbgr12(const ka_paint_t* paint);
void ka_drawy_z2_tbgr12(const ka_paint_t* paint);
void ka_drawy_z3_tbgr12(const ka_paint_t* paint);
void ka_drawy_z4_tbgr12(const ka_paint_t* paint);

void ka_drawy_z05_abgr12(const ka_paint_t* paint);
void ka_drawy_z1_abgr12(const ka_paint_t* paint);
void ka_drawy_z2_abgr12(const ka_paint_t* paint);
void ka_drawy_z3_abgr12(const ka_paint_t* paint);
void ka_drawy_z4_abgr12(const ka_paint_t* paint);

void ka_drawy_z05_tbgr15(const ka_paint_t* paint);
void ka_drawy_z1_tbgr15(const ka_paint_t* paint);
void ka_drawy_z2_tbgr15(const ka_paint_t* paint);
void ka_drawy_z3_tbgr15(const ka_paint_t* paint);
void ka_drawy_z4_tbgr15(const ka_paint_t* paint);

void ka_drawy_z05_abgr15(const ka_paint_t* paint);
void ka_drawy_z1_abgr15(const ka_paint_t* paint);
void ka_drawy_z2_abgr15(const ka_paint_t* paint);
void ka_drawy_z3_abgr15(const ka_paint_t* paint);
void ka_drawy_z4_abgr15(const ka_paint_t* paint);

void ka_drawy_z05_bgr16(const ka_paint_t* paint);
void ka_drawy_z1_bgr16(const ka_paint_t* paint);
void ka_drawy_z2_bgr16(const ka_paint_t* paint);
void ka_drawy_z3_bgr16(const ka_paint_t* paint);
void ka_drawy_z4_bgr16(const ka_paint_t* paint);

void ka_drawy_z05_tbgr32(const ka_paint_t* paint);
void ka_drawy_z1_tbgr32(const ka_paint_t* paint);
void ka_drawy_z2_tbgr32(const ka_paint_t* paint);
void ka_drawy_z3_tbgr32(const ka_paint_t* paint);
void ka_drawy_z4_tbgr32(const ka_paint_t* paint);

void ka_drawy_z05_abgr32(const ka_paint_t* paint);
void ka_drawy_z1_abgr32(const ka_paint_t* paint);
void ka_drawy_z2_abgr32(const ka_paint_t* paint);
void ka_drawy_z3_abgr32(const ka_paint_t* paint);
void ka_drawy_z4_abgr32(const ka_paint_t* paint);

void ka_drawy_z1_NV12(const ka_paint_t* paint);
void ka_drawy_z1_NV21(const ka_paint_t* paint);
void ka_drawy_z1_UYVY(const ka_paint_t* paint);
void ka_drawy_z1_YUY2(const ka_paint_t* paint);
void ka_drawy_z1_YV12(const ka_paint_t* paint);
void ka_drawy_z1_YV16(const ka_paint_t* paint);

// YUV420
void ka_drawyuv420_z05_8bpp(const ka_paint_t* paint);
void ka_drawyuv420_z1_8bpp(const ka_paint_t* paint);
void ka_drawyuv420_z2_8bpp(const ka_paint_t* paint);
void ka_drawyuv420_z3_8bpp(const ka_paint_t* paint);
void ka_drawyuv420_z4_8bpp(const ka_paint_t* paint);

void ka_drawyuv420_z05_tbgr12(const ka_paint_t* paint);
void ka_drawyuv420_z1_tbgr12(const ka_paint_t* paint);
void ka_drawyuv420_z1_tbgr12_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_tbgr12(const ka_paint_t* paint);
void ka_drawyuv420_z2_tbgr12_hq(const ka_paint_t* paint);
void ka_drawyuv420_z3_tbgr12(const ka_paint_t* paint);
void ka_drawyuv420_z4_tbgr12(const ka_paint_t* paint);

void ka_drawyuv420_z05_abgr12(const ka_paint_t* paint);
void ka_drawyuv420_z1_abgr12(const ka_paint_t* paint);
void ka_drawyuv420_z1_abgr12_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_abgr12(const ka_paint_t* paint);
void ka_drawyuv420_z2_abgr12_hq(const ka_paint_t* paint);
void ka_drawyuv420_z3_abgr12(const ka_paint_t* paint);
void ka_drawyuv420_z4_abgr12(const ka_paint_t* paint);

void ka_drawyuv420_z05_trgb12(const ka_paint_t* paint);
void ka_drawyuv420_z1_trgb12(const ka_paint_t* paint);
void ka_drawyuv420_z1_trgb12_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_trgb12(const ka_paint_t* paint);
void ka_drawyuv420_z2_trgb12_hq(const ka_paint_t* paint);
void ka_drawyuv420_z3_trgb12(const ka_paint_t* paint);
void ka_drawyuv420_z4_trgb12(const ka_paint_t* paint);

void ka_drawyuv420_z05_argb12(const ka_paint_t* paint);
void ka_drawyuv420_z1_argb12(const ka_paint_t* paint);
void ka_drawyuv420_z1_argb12_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_argb12(const ka_paint_t* paint);
void ka_drawyuv420_z2_argb12_hq(const ka_paint_t* paint);
void ka_drawyuv420_z3_argb12(const ka_paint_t* paint);
void ka_drawyuv420_z4_argb12(const ka_paint_t* paint);

void ka_drawyuv420_z05_tbgr15(const ka_paint_t* paint);
void ka_drawyuv420_z1_tbgr15(const ka_paint_t* paint);
void ka_drawyuv420_z1_tbgr15_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_tbgr15(const ka_paint_t* paint);
void ka_drawyuv420_z2_tbgr15_hq(const ka_paint_t* paint);
void ka_drawyuv420_z3_tbgr15(const ka_paint_t* paint);
void ka_drawyuv420_z4_tbgr15(const ka_paint_t* paint);

void ka_drawyuv420_z05_abgr15(const ka_paint_t* paint);
void ka_drawyuv420_z1_abgr15(const ka_paint_t* paint);
void ka_drawyuv420_z1_abgr15_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_abgr15(const ka_paint_t* paint);
void ka_drawyuv420_z2_abgr15_hq(const ka_paint_t* paint);
void ka_drawyuv420_z3_abgr15(const ka_paint_t* paint);
void ka_drawyuv420_z4_abgr15(const ka_paint_t* paint);

void ka_drawyuv420_z05_trgb15(const ka_paint_t* paint);
void ka_drawyuv420_z1_trgb15(const ka_paint_t* paint);
void ka_drawyuv420_z1_trgb15_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_trgb15(const ka_paint_t* paint);
void ka_drawyuv420_z2_trgb15_hq(const ka_paint_t* paint);
void ka_drawyuv420_z3_trgb15(const ka_paint_t* paint);
void ka_drawyuv420_z4_trgb15(const ka_paint_t* paint);

void ka_drawyuv420_z05_argb15(const ka_paint_t* paint);
void ka_drawyuv420_z1_argb15(const ka_paint_t* paint);
void ka_drawyuv420_z1_argb15_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_argb15(const ka_paint_t* paint);
void ka_drawyuv420_z2_argb15_hq(const ka_paint_t* paint);
void ka_drawyuv420_z3_argb15(const ka_paint_t* paint);
void ka_drawyuv420_z4_argb15(const ka_paint_t* paint);

void ka_drawyuv420_z05_bgr16(const ka_paint_t* paint);
void ka_drawyuv420_z1_bgr16(const ka_paint_t* paint);
void ka_drawyuv420_z1_bgr16_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_bgr16(const ka_paint_t* paint);
void ka_drawyuv420_z2_bgr16_hq(const ka_paint_t* paint);
void ka_drawyuv420_z3_bgr16(const ka_paint_t* paint);
void ka_drawyuv420_z4_bgr16(const ka_paint_t* paint);

void ka_drawyuv420_z05_rgb16(const ka_paint_t* paint);
void ka_drawyuv420_z1_rgb16(const ka_paint_t* paint);
void ka_drawyuv420_z1_rgb16_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_rgb16(const ka_paint_t* paint);
void ka_drawyuv420_z2_rgb16_hq(const ka_paint_t* paint);
void ka_drawyuv420_z3_rgb16(const ka_paint_t* paint);
void ka_drawyuv420_z4_rgb16(const ka_paint_t* paint);

void ka_drawyuv420_z05_tbgr32(const ka_paint_t* paint);
void ka_drawyuv420_z1_tbgr32(const ka_paint_t* paint);
void ka_drawyuv420_z1_tbgr32_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_tbgr32(const ka_paint_t* paint);
void ka_drawyuv420_z3_tbgr32(const ka_paint_t* paint);
void ka_drawyuv420_z4_tbgr32(const ka_paint_t* paint);

void ka_drawyuv420_z05_abgr32(const ka_paint_t* paint);
void ka_drawyuv420_z1_abgr32(const ka_paint_t* paint);
void ka_drawyuv420_z1_abgr32_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_abgr32(const ka_paint_t* paint);
void ka_drawyuv420_z3_abgr32(const ka_paint_t* paint);
void ka_drawyuv420_z4_abgr32(const ka_paint_t* paint);

void ka_drawyuv420_z05_trgb32(const ka_paint_t* paint);
void ka_drawyuv420_z1_trgb32(const ka_paint_t* paint);
void ka_drawyuv420_z1_trgb32_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_trgb32(const ka_paint_t* paint);
void ka_drawyuv420_z3_trgb32(const ka_paint_t* paint);
void ka_drawyuv420_z4_trgb32(const ka_paint_t* paint);

void ka_drawyuv420_z05_argb32(const ka_paint_t* paint);
void ka_drawyuv420_z1_argb32(const ka_paint_t* paint);
void ka_drawyuv420_z1_argb32_neon(const ka_paint_t* paint);
void ka_drawyuv420_z2_argb32(const ka_paint_t* paint);
void ka_drawyuv420_z3_argb32(const ka_paint_t* paint);
void ka_drawyuv420_z4_argb32(const ka_paint_t* paint);

void ka_drawyuv420_z1_NV12(const ka_paint_t* paint);
void ka_drawyuv420_z1_NV21(const ka_paint_t* paint);
void ka_drawyuv420_z1_UYVY(const ka_paint_t* paint);
void ka_drawyuv420_z1_YUY2(const ka_paint_t* paint);
void ka_drawyuv420_z1_YV12(const ka_paint_t* paint);
void ka_drawyuv420_z1_YV16(const ka_paint_t* paint);

void ka_drawyuv420_z1_NV12_neon(const ka_paint_t* paint);
void ka_drawyuv420_z1_NV21_neon(const ka_paint_t* paint);
void ka_drawyuv420_z1_YV12_neon(const ka_paint_t* paint);
void ka_drawyuv420_z1_YV16_neon(const ka_paint_t* paint);

// YUV422
void ka_drawyuv422_z05_8bpp(const ka_paint_t* paint);
void ka_drawyuv422_z1_8bpp(const ka_paint_t* paint);
void ka_drawyuv422_z2_8bpp(const ka_paint_t* paint);
void ka_drawyuv422_z3_8bpp(const ka_paint_t* paint);
void ka_drawyuv422_z4_8bpp(const ka_paint_t* paint);

void ka_drawyuv422_z05_tbgr12(const ka_paint_t* paint);
void ka_drawyuv422_z1_tbgr12(const ka_paint_t* paint);
void ka_drawyuv422_z1_tbgr12_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_tbgr12(const ka_paint_t* paint);
void ka_drawyuv422_z2_tbgr12_hq(const ka_paint_t* paint);
void ka_drawyuv422_z3_tbgr12(const ka_paint_t* paint);
void ka_drawyuv422_z4_tbgr12(const ka_paint_t* paint);

void ka_drawyuv422_z05_abgr12(const ka_paint_t* paint);
void ka_drawyuv422_z1_abgr12(const ka_paint_t* paint);
void ka_drawyuv422_z1_abgr12_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_abgr12(const ka_paint_t* paint);
void ka_drawyuv422_z2_abgr12_hq(const ka_paint_t* paint);
void ka_drawyuv422_z3_abgr12(const ka_paint_t* paint);
void ka_drawyuv422_z4_abgr12(const ka_paint_t* paint);

void ka_drawyuv422_z05_trgb12(const ka_paint_t* paint);
void ka_drawyuv422_z1_trgb12(const ka_paint_t* paint);
void ka_drawyuv422_z1_trgb12_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_trgb12(const ka_paint_t* paint);
void ka_drawyuv422_z2_trgb12_hq(const ka_paint_t* paint);
void ka_drawyuv422_z3_trgb12(const ka_paint_t* paint);
void ka_drawyuv422_z4_trgb12(const ka_paint_t* paint);

void ka_drawyuv422_z05_argb12(const ka_paint_t* paint);
void ka_drawyuv422_z1_argb12(const ka_paint_t* paint);
void ka_drawyuv422_z1_argb12_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_argb12(const ka_paint_t* paint);
void ka_drawyuv422_z2_argb12_hq(const ka_paint_t* paint);
void ka_drawyuv422_z3_argb12(const ka_paint_t* paint);
void ka_drawyuv422_z4_argb12(const ka_paint_t* paint);

void ka_drawyuv422_z05_tbgr15(const ka_paint_t* paint);
void ka_drawyuv422_z1_tbgr15(const ka_paint_t* paint);
void ka_drawyuv422_z1_tbgr15_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_tbgr15(const ka_paint_t* paint);
void ka_drawyuv422_z2_tbgr15_hq(const ka_paint_t* paint);
void ka_drawyuv422_z3_tbgr15(const ka_paint_t* paint);
void ka_drawyuv422_z4_tbgr15(const ka_paint_t* paint);

void ka_drawyuv422_z05_abgr15(const ka_paint_t* paint);
void ka_drawyuv422_z1_abgr15(const ka_paint_t* paint);
void ka_drawyuv422_z1_abgr15_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_abgr15(const ka_paint_t* paint);
void ka_drawyuv422_z2_abgr15_hq(const ka_paint_t* paint);
void ka_drawyuv422_z3_abgr15(const ka_paint_t* paint);
void ka_drawyuv422_z4_abgr15(const ka_paint_t* paint);

void ka_drawyuv422_z05_trgb15(const ka_paint_t* paint);
void ka_drawyuv422_z1_trgb15(const ka_paint_t* paint);
void ka_drawyuv422_z1_trgb15_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_trgb15(const ka_paint_t* paint);
void ka_drawyuv422_z2_trgb15_hq(const ka_paint_t* paint);
void ka_drawyuv422_z3_trgb15(const ka_paint_t* paint);
void ka_drawyuv422_z4_trgb15(const ka_paint_t* paint);

void ka_drawyuv422_z05_argb15(const ka_paint_t* paint);
void ka_drawyuv422_z1_argb15(const ka_paint_t* paint);
void ka_drawyuv422_z1_argb15_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_argb15(const ka_paint_t* paint);
void ka_drawyuv422_z2_argb15_hq(const ka_paint_t* paint);
void ka_drawyuv422_z3_argb15(const ka_paint_t* paint);
void ka_drawyuv422_z4_argb15(const ka_paint_t* paint);

void ka_drawyuv422_z05_bgr16(const ka_paint_t* paint);
void ka_drawyuv422_z1_bgr16(const ka_paint_t* paint);
void ka_drawyuv422_z1_bgr16_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_bgr16(const ka_paint_t* paint);
void ka_drawyuv422_z2_bgr16_hq(const ka_paint_t* paint);
void ka_drawyuv422_z3_bgr16(const ka_paint_t* paint);
void ka_drawyuv422_z4_bgr16(const ka_paint_t* paint);

void ka_drawyuv422_z05_rgb16(const ka_paint_t* paint);
void ka_drawyuv422_z1_rgb16(const ka_paint_t* paint);
void ka_drawyuv422_z1_rgb16_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_rgb16(const ka_paint_t* paint);
void ka_drawyuv422_z2_rgb16_hq(const ka_paint_t* paint);
void ka_drawyuv422_z3_rgb16(const ka_paint_t* paint);
void ka_drawyuv422_z4_rgb16(const ka_paint_t* paint);

void ka_drawyuv422_z05_tbgr32(const ka_paint_t* paint);
void ka_drawyuv422_z1_tbgr32(const ka_paint_t* paint);
void ka_drawyuv422_z1_tbgr32_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_tbgr32(const ka_paint_t* paint);
void ka_drawyuv422_z3_tbgr32(const ka_paint_t* paint);
void ka_drawyuv422_z4_tbgr32(const ka_paint_t* paint);

void ka_drawyuv422_z05_abgr32(const ka_paint_t* paint);
void ka_drawyuv422_z1_abgr32(const ka_paint_t* paint);
void ka_drawyuv422_z1_abgr32_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_abgr32(const ka_paint_t* paint);
void ka_drawyuv422_z3_abgr32(const ka_paint_t* paint);
void ka_drawyuv422_z4_abgr32(const ka_paint_t* paint);

void ka_drawyuv422_z05_trgb32(const ka_paint_t* paint);
void ka_drawyuv422_z1_trgb32(const ka_paint_t* paint);
void ka_drawyuv422_z1_trgb32_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_trgb32(const ka_paint_t* paint);
void ka_drawyuv422_z3_trgb32(const ka_paint_t* paint);
void ka_drawyuv422_z4_trgb32(const ka_paint_t* paint);

void ka_drawyuv422_z05_argb32(const ka_paint_t* paint);
void ka_drawyuv422_z1_argb32(const ka_paint_t* paint);
void ka_drawyuv422_z1_argb32_neon(const ka_paint_t* paint);
void ka_drawyuv422_z2_argb32(const ka_paint_t* paint);
void ka_drawyuv422_z3_argb32(const ka_paint_t* paint);
void ka_drawyuv422_z4_argb32(const ka_paint_t* paint);

void ka_drawyuv422_z1_NV12(const ka_paint_t* paint);
void ka_drawyuv422_z1_NV21(const ka_paint_t* paint);
void ka_drawyuv422_z1_UYVY(const ka_paint_t* paint);
void ka_drawyuv422_z1_YUY2(const ka_paint_t* paint);
void ka_drawyuv422_z1_YV12(const ka_paint_t* paint);
void ka_drawyuv422_z1_YV16(const ka_paint_t* paint);

void ka_drawyuv422_z1_NV12_neon(const ka_paint_t* paint);
void ka_drawyuv422_z1_NV21_neon(const ka_paint_t* paint);
void ka_drawyuv422_z1_YV12_neon(const ka_paint_t* paint);
void ka_drawyuv422_z1_YV16_neon(const ka_paint_t* paint);

// YUV444
void ka_drawyuv444_z05_8bpp(const ka_paint_t* paint);
void ka_drawyuv444_z1_8bpp(const ka_paint_t* paint);
void ka_drawyuv444_z2_8bpp(const ka_paint_t* paint);
void ka_drawyuv444_z3_8bpp(const ka_paint_t* paint);
void ka_drawyuv444_z4_8bpp(const ka_paint_t* paint);

void ka_drawyuv444_z05_tbgr12(const ka_paint_t* paint);
void ka_drawyuv444_z1_tbgr12(const ka_paint_t* paint);
void ka_drawyuv444_z1_tbgr12_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_tbgr12(const ka_paint_t* paint);
void ka_drawyuv444_z2_tbgr12_hq(const ka_paint_t* paint);
void ka_drawyuv444_z3_tbgr12(const ka_paint_t* paint);
void ka_drawyuv444_z4_tbgr12(const ka_paint_t* paint);

void ka_drawyuv444_z05_abgr12(const ka_paint_t* paint);
void ka_drawyuv444_z1_abgr12(const ka_paint_t* paint);
void ka_drawyuv444_z1_abgr12_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_abgr12(const ka_paint_t* paint);
void ka_drawyuv444_z2_abgr12_hq(const ka_paint_t* paint);
void ka_drawyuv444_z3_abgr12(const ka_paint_t* paint);
void ka_drawyuv444_z4_abgr12(const ka_paint_t* paint);

void ka_drawyuv444_z05_trgb12(const ka_paint_t* paint);
void ka_drawyuv444_z1_trgb12(const ka_paint_t* paint);
void ka_drawyuv444_z1_trgb12_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_trgb12(const ka_paint_t* paint);
void ka_drawyuv444_z2_trgb12_hq(const ka_paint_t* paint);
void ka_drawyuv444_z3_trgb12(const ka_paint_t* paint);
void ka_drawyuv444_z4_trgb12(const ka_paint_t* paint);

void ka_drawyuv444_z05_argb12(const ka_paint_t* paint);
void ka_drawyuv444_z1_argb12(const ka_paint_t* paint);
void ka_drawyuv444_z1_argb12_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_argb12(const ka_paint_t* paint);
void ka_drawyuv444_z2_argb12_hq(const ka_paint_t* paint);
void ka_drawyuv444_z3_argb12(const ka_paint_t* paint);
void ka_drawyuv444_z4_argb12(const ka_paint_t* paint);

void ka_drawyuv444_z05_tbgr15(const ka_paint_t* paint);
void ka_drawyuv444_z1_tbgr15(const ka_paint_t* paint);
void ka_drawyuv444_z1_tbgr15_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_tbgr15(const ka_paint_t* paint);
void ka_drawyuv444_z2_tbgr15_hq(const ka_paint_t* paint);
void ka_drawyuv444_z3_tbgr15(const ka_paint_t* paint);
void ka_drawyuv444_z4_tbgr15(const ka_paint_t* paint);

void ka_drawyuv444_z05_abgr15(const ka_paint_t* paint);
void ka_drawyuv444_z1_abgr15(const ka_paint_t* paint);
void ka_drawyuv444_z1_abgr15_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_abgr15(const ka_paint_t* paint);
void ka_drawyuv444_z2_abgr15_hq(const ka_paint_t* paint);
void ka_drawyuv444_z3_abgr15(const ka_paint_t* paint);
void ka_drawyuv444_z4_abgr15(const ka_paint_t* paint);

void ka_drawyuv444_z05_trgb15(const ka_paint_t* paint);
void ka_drawyuv444_z1_trgb15(const ka_paint_t* paint);
void ka_drawyuv444_z1_trgb15_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_trgb15(const ka_paint_t* paint);
void ka_drawyuv444_z2_trgb15_hq(const ka_paint_t* paint);
void ka_drawyuv444_z3_trgb15(const ka_paint_t* paint);
void ka_drawyuv444_z4_trgb15(const ka_paint_t* paint);

void ka_drawyuv444_z05_argb15(const ka_paint_t* paint);
void ka_drawyuv444_z1_argb15(const ka_paint_t* paint);
void ka_drawyuv444_z1_argb15_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_argb15(const ka_paint_t* paint);
void ka_drawyuv444_z2_argb15_hq(const ka_paint_t* paint);
void ka_drawyuv444_z3_argb15(const ka_paint_t* paint);
void ka_drawyuv444_z4_argb15(const ka_paint_t* paint);

void ka_drawyuv444_z05_bgr16(const ka_paint_t* paint);
void ka_drawyuv444_z1_bgr16(const ka_paint_t* paint);
void ka_drawyuv444_z1_bgr16_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_bgr16(const ka_paint_t* paint);
void ka_drawyuv444_z2_bgr16_hq(const ka_paint_t* paint);
void ka_drawyuv444_z3_bgr16(const ka_paint_t* paint);
void ka_drawyuv444_z4_bgr16(const ka_paint_t* paint);

void ka_drawyuv444_z05_rgb16(const ka_paint_t* paint);
void ka_drawyuv444_z1_rgb16(const ka_paint_t* paint);
void ka_drawyuv444_z1_rgb16_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_rgb16(const ka_paint_t* paint);
void ka_drawyuv444_z2_rgb16_hq(const ka_paint_t* paint);
void ka_drawyuv444_z3_rgb16(const ka_paint_t* paint);
void ka_drawyuv444_z4_rgb16(const ka_paint_t* paint);

void ka_drawyuv444_z05_tbgr32(const ka_paint_t* paint);
void ka_drawyuv444_z1_tbgr32(const ka_paint_t* paint);
void ka_drawyuv444_z1_tbgr32_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_tbgr32(const ka_paint_t* paint);
void ka_drawyuv444_z3_tbgr32(const ka_paint_t* paint);
void ka_drawyuv444_z4_tbgr32(const ka_paint_t* paint);

void ka_drawyuv444_z05_abgr32(const ka_paint_t* paint);
void ka_drawyuv444_z1_abgr32(const ka_paint_t* paint);
void ka_drawyuv444_z1_abgr32_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_abgr32(const ka_paint_t* paint);
void ka_drawyuv444_z3_abgr32(const ka_paint_t* paint);
void ka_drawyuv444_z4_abgr32(const ka_paint_t* paint);

void ka_drawyuv444_z05_trgb32(const ka_paint_t* paint);
void ka_drawyuv444_z1_trgb32(const ka_paint_t* paint);
void ka_drawyuv444_z1_trgb32_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_trgb32(const ka_paint_t* paint);
void ka_drawyuv444_z3_trgb32(const ka_paint_t* paint);
void ka_drawyuv444_z4_trgb32(const ka_paint_t* paint);

void ka_drawyuv444_z05_argb32(const ka_paint_t* paint);
void ka_drawyuv444_z1_argb32(const ka_paint_t* paint);
void ka_drawyuv444_z1_argb32_neon(const ka_paint_t* paint);
void ka_drawyuv444_z2_argb32(const ka_paint_t* paint);
void ka_drawyuv444_z3_argb32(const ka_paint_t* paint);
void ka_drawyuv444_z4_argb32(const ka_paint_t* paint);

void ka_drawyuv444_z1_NV12(const ka_paint_t* paint);
void ka_drawyuv444_z1_NV21(const ka_paint_t* paint);
void ka_drawyuv444_z1_UYVY(const ka_paint_t* paint);
void ka_drawyuv444_z1_YUY2(const ka_paint_t* paint);
void ka_drawyuv444_z1_YV12(const ka_paint_t* paint);
void ka_drawyuv444_z1_YV16(const ka_paint_t* paint);

void ka_drawyuv444_z1_NV12_neon(const ka_paint_t* paint);
void ka_drawyuv444_z1_NV21_neon(const ka_paint_t* paint);
void ka_drawyuv444_z1_YV12_neon(const ka_paint_t* paint);
void ka_drawyuv444_z1_YV16_neon(const ka_paint_t* paint);

// RGB
void ka_drawbgr_z05_8bpp(const ka_paint_t* paint);
void ka_drawbgr_z1_8bpp(const ka_paint_t* paint);
void ka_drawbgr_z2_8bpp(const ka_paint_t* paint);
void ka_drawbgr_z3_8bpp(const ka_paint_t* paint);
void ka_drawbgr_z4_8bpp(const ka_paint_t* paint);

void ka_drawbgr_z05_tbgr12(const ka_paint_t* paint);
void ka_drawbgr_z1_tbgr12(const ka_paint_t* paint);
void ka_drawbgr_z2_tbgr12(const ka_paint_t* paint);
void ka_drawbgr_z3_tbgr12(const ka_paint_t* paint);
void ka_drawbgr_z4_tbgr12(const ka_paint_t* paint);

void ka_drawbgr_z05_abgr12(const ka_paint_t* paint);
void ka_drawbgr_z1_abgr12(const ka_paint_t* paint);
void ka_drawbgr_z2_abgr12(const ka_paint_t* paint);
void ka_drawbgr_z3_abgr12(const ka_paint_t* paint);
void ka_drawbgr_z4_abgr12(const ka_paint_t* paint);

void ka_drawbgr_z05_trgb12(const ka_paint_t* paint);
void ka_drawbgr_z1_trgb12(const ka_paint_t* paint);
void ka_drawbgr_z2_trgb12(const ka_paint_t* paint);
void ka_drawbgr_z3_trgb12(const ka_paint_t* paint);
void ka_drawbgr_z4_trgb12(const ka_paint_t* paint);

void ka_drawbgr_z05_argb12(const ka_paint_t* paint);
void ka_drawbgr_z1_argb12(const ka_paint_t* paint);
void ka_drawbgr_z2_argb12(const ka_paint_t* paint);
void ka_drawbgr_z3_argb12(const ka_paint_t* paint);
void ka_drawbgr_z4_argb12(const ka_paint_t* paint);

void ka_drawbgr_z05_tbgr15(const ka_paint_t* paint);
void ka_drawbgr_z1_tbgr15(const ka_paint_t* paint);
void ka_drawbgr_z2_tbgr15(const ka_paint_t* paint);
void ka_drawbgr_z3_tbgr15(const ka_paint_t* paint);
void ka_drawbgr_z4_tbgr15(const ka_paint_t* paint);

void ka_drawbgr_z05_abgr15(const ka_paint_t* paint);
void ka_drawbgr_z1_abgr15(const ka_paint_t* paint);
void ka_drawbgr_z2_abgr15(const ka_paint_t* paint);
void ka_drawbgr_z3_abgr15(const ka_paint_t* paint);
void ka_drawbgr_z4_abgr15(const ka_paint_t* paint);

void ka_drawbgr_z05_trgb15(const ka_paint_t* paint);
void ka_drawbgr_z1_trgb15(const ka_paint_t* paint);
void ka_drawbgr_z2_trgb15(const ka_paint_t* paint);
void ka_drawbgr_z3_trgb15(const ka_paint_t* paint);
void ka_drawbgr_z4_trgb15(const ka_paint_t* paint);

void ka_drawbgr_z05_argb15(const ka_paint_t* paint);
void ka_drawbgr_z1_argb15(const ka_paint_t* paint);
void ka_drawbgr_z2_argb15(const ka_paint_t* paint);
void ka_drawbgr_z3_argb15(const ka_paint_t* paint);
void ka_drawbgr_z4_argb15(const ka_paint_t* paint);

void ka_drawbgr_z05_bgr16(const ka_paint_t* paint);
void ka_drawbgr_z1_bgr16(const ka_paint_t* paint);
void ka_drawbgr_z2_bgr16(const ka_paint_t* paint);
void ka_drawbgr_z3_bgr16(const ka_paint_t* paint);
void ka_drawbgr_z4_bgr16(const ka_paint_t* paint);

void ka_drawbgr_z05_rgb16(const ka_paint_t* paint);
void ka_drawbgr_z1_rgb16(const ka_paint_t* paint);
void ka_drawbgr_z2_rgb16(const ka_paint_t* paint);
void ka_drawbgr_z3_rgb16(const ka_paint_t* paint);
void ka_drawbgr_z4_rgb16(const ka_paint_t* paint);

void ka_drawbgr_z05_tbgr32(const ka_paint_t* paint);
void ka_drawbgr_z1_tbgr32(const ka_paint_t* paint);
void ka_drawbgr_z2_tbgr32(const ka_paint_t* paint);
void ka_drawbgr_z3_tbgr32(const ka_paint_t* paint);
void ka_drawbgr_z4_tbgr32(const ka_paint_t* paint);

void ka_drawbgr_z05_abgr32(const ka_paint_t* paint);
void ka_drawbgr_z1_abgr32(const ka_paint_t* paint);
void ka_drawbgr_z2_abgr32(const ka_paint_t* paint);
void ka_drawbgr_z3_abgr32(const ka_paint_t* paint);
void ka_drawbgr_z4_abgr32(const ka_paint_t* paint);

void ka_drawbgr_z05_trgb32(const ka_paint_t* paint);
void ka_drawbgr_z1_trgb32(const ka_paint_t* paint);
void ka_drawbgr_z2_trgb32(const ka_paint_t* paint);
void ka_drawbgr_z3_trgb32(const ka_paint_t* paint);
void ka_drawbgr_z4_trgb32(const ka_paint_t* paint);

void ka_drawbgr_z05_argb32(const ka_paint_t* paint);
void ka_drawbgr_z1_argb32(const ka_paint_t* paint);
void ka_drawbgr_z2_argb32(const ka_paint_t* paint);
void ka_drawbgr_z3_argb32(const ka_paint_t* paint);
void ka_drawbgr_z4_argb32(const ka_paint_t* paint);

#endif
