yuv2yuvX16_c_template(const int16_t *lumFilter, const int32_t **lumSrc,

                      int lumFilterSize, const int16_t *chrFilter,

                      const int32_t **chrUSrc, const int32_t **chrVSrc,

                      int chrFilterSize, const int32_t **alpSrc,

                      uint16_t *dest[4], int dstW, int chrDstW,

                      int big_endian, int output_bits)

{

    //FIXME Optimize (just quickly written not optimized..)

    int i;

    int dword= output_bits == 16;

    uint16_t *yDest = dest[0], *uDest = dest[1], *vDest = dest[2],

             *aDest = CONFIG_SWSCALE_ALPHA ? dest[3] : NULL;

    int shift = 11 + 4*dword + 16 - output_bits;



#define output_pixel(pos, val) \

    if (big_endian) { \

        if (output_bits == 16) { \

            AV_WB16(pos, av_clip_uint16(val >> shift)); \

        } else { \

            AV_WB16(pos, av_clip_uintp2(val >> shift, output_bits)); \

        } \

    } else { \

        if (output_bits == 16) { \

            AV_WL16(pos, av_clip_uint16(val >> shift)); \

        } else { \

            AV_WL16(pos, av_clip_uintp2(val >> shift, output_bits)); \

        } \

    }

    for (i = 0; i < dstW; i++) {

        int val = 1 << (26-output_bits + 4*dword);

        int j;



        for (j = 0; j < lumFilterSize; j++)

            val += (dword ? lumSrc[j][i] : ((int16_t**)lumSrc)[j][i]) * lumFilter[j];



        output_pixel(&yDest[i], val);

    }



    if (uDest) {

        for (i = 0; i < chrDstW; i++) {

            int u = 1 << (26-output_bits + 4*dword);

            int v = 1 << (26-output_bits + 4*dword);

            int j;



            for (j = 0; j < chrFilterSize; j++) {

                u += (dword ? chrUSrc[j][i] : ((int16_t**)chrUSrc)[j][i]) * chrFilter[j];

                v += (dword ? chrVSrc[j][i] : ((int16_t**)chrVSrc)[j][i]) * chrFilter[j];

            }



            output_pixel(&uDest[i], u);

            output_pixel(&vDest[i], v);

        }

    }



    if (CONFIG_SWSCALE_ALPHA && aDest) {

        for (i = 0; i < dstW; i++) {

            int val = 1 << (26-output_bits + 4*dword);

            int j;



            for (j = 0; j < lumFilterSize; j++)

                val += (dword ? alpSrc[j][i] : ((int16_t**)alpSrc)[j][i]) * lumFilter[j];



            output_pixel(&aDest[i], val);

        }

    }

#undef output_pixel

}

yuv2yuvX16_c_template(const int16_t *lumFilter, const int32_t **lumSrc,

                      int lumFilterSize, const int16_t *chrFilter,

                      const int32_t **chrUSrc, const int32_t **chrVSrc,

                      int chrFilterSize, const int32_t **alpSrc,

                      uint16_t *dest[4], int dstW, int chrDstW,

                      int big_endian, int output_bits)

{

    

    int i;

    int dword= output_bits == 16;

    uint16_t *yDest = dest[0], *uDest = dest[1], *vDest = dest[2],

             *aDest = CONFIG_SWSCALE_ALPHA ? dest[3] : NULL;

    int shift = 11 + 4*dword + 16 - output_bits;



#define output_pixel(pos, val) \

    if (big_endian) { \

        if (output_bits == 16) { \

            AV_WB16(pos, av_clip_uint16(val >> shift)); \

        } else { \

            AV_WB16(pos, av_clip_uintp2(val >> shift, output_bits)); \

        } \

    } else { \

        if (output_bits == 16) { \

            AV_WL16(pos, av_clip_uint16(val >> shift)); \

        } else { \

            AV_WL16(pos, av_clip_uintp2(val >> shift, output_bits)); \

        } \

    }

    for (i = 0; i < dstW; i++) {

        int val = 1 << (26-output_bits + 4*dword);

        int j;



        for (j = 0; j < lumFilterSize; j++)

            val += (dword ? lumSrc[j][i] : ((int16_t**)lumSrc)[j][i]) * lumFilter[j];



        output_pixel(&yDest[i], val);

    }



    if (uDest) {

        for (i = 0; i < chrDstW; i++) {

            int u = 1 << (26-output_bits + 4*dword);

            int v = 1 << (26-output_bits + 4*dword);

            int j;



            for (j = 0; j < chrFilterSize; j++) {

                u += (dword ? chrUSrc[j][i] : ((int16_t**)chrUSrc)[j][i]) * chrFilter[j];

                v += (dword ? chrVSrc[j][i] : ((int16_t**)chrVSrc)[j][i]) * chrFilter[j];

            }



            output_pixel(&uDest[i], u);

            output_pixel(&vDest[i], v);

        }

    }



    if (CONFIG_SWSCALE_ALPHA && aDest) {

        for (i = 0; i < dstW; i++) {

            int val = 1 << (26-output_bits + 4*dword);

            int j;



            for (j = 0; j < lumFilterSize; j++)

                val += (dword ? alpSrc[j][i] : ((int16_t**)alpSrc)[j][i]) * lumFilter[j];



            output_pixel(&aDest[i], val);

        }

    }

#undef output_pixel

}

    int shift = 11 + 4*dword + 16 - output_bits;         int val = 1 << (26-output_bits + 4*dword);             val += (dword ? lumSrc[j][i] : ((int16_t**)lumSrc)[j][i]) * lumFilter[j];             int u = 1 << (26-output_bits + 4*dword);             int v = 1 << (26-output_bits + 4*dword);                 u += (dword ? chrUSrc[j][i] : ((int16_t**)chrUSrc)[j][i]) * chrFilter[j];                 v += (dword ? chrVSrc[j][i] : ((int16_t**)chrVSrc)[j][i]) * chrFilter[j];             int val = 1 << (26-output_bits + 4*dword);                 val += (dword ? alpSrc[j][i] : ((int16_t**)alpSrc)[j][i]) * lumFilter[j];
FUNC_0(const int16_t *VAR_0, const int32_t **VAR_1,

                      int VAR_2, const int16_t *VAR_3,

                      const int32_t **VAR_4, const int32_t **VAR_5,

                      int VAR_6, const int32_t **VAR_7,

                      uint16_t *VAR_8[4], int VAR_9, int VAR_10,

                      int VAR_11, int VAR_12)

{

    

    int VAR_13;

    int VAR_14= VAR_12 == 16;

    uint16_t *yDest = VAR_8[0], *uDest = VAR_8[1], *vDest = VAR_8[2],

             *aDest = CONFIG_SWSCALE_ALPHA ? VAR_8[3] : NULL;

    int VAR_15 = 11 + 4*VAR_14 + 16 - VAR_12;



#define output_pixel(pos, VAR_20) \

    if (VAR_11) { \

        if (VAR_12 == 16) { \

            AV_WB16(pos, av_clip_uint16(VAR_20 >> VAR_15)); \

        } else { \

            AV_WB16(pos, av_clip_uintp2(VAR_20 >> VAR_15, VAR_12)); \

        } \

    } else { \

        if (VAR_12 == 16) { \

            AV_WL16(pos, av_clip_uint16(VAR_20 >> VAR_15)); \

        } else { \

            AV_WL16(pos, av_clip_uintp2(VAR_20 >> VAR_15, VAR_12)); \

        } \

    }

    for (VAR_13 = 0; VAR_13 < VAR_9; VAR_13++) {

        int VAR_20 = 1 << (26-VAR_12 + 4*VAR_14);

        int VAR_20;



        for (VAR_20 = 0; VAR_20 < VAR_2; VAR_20++)

            VAR_20 += (VAR_14 ? VAR_1[VAR_20][VAR_13] : ((int16_t**)VAR_1)[VAR_20][VAR_13]) * VAR_0[VAR_20];



        output_pixel(&yDest[VAR_13], VAR_20);

    }



    if (uDest) {

        for (VAR_13 = 0; VAR_13 < VAR_10; VAR_13++) {

            int VAR_18 = 1 << (26-VAR_12 + 4*VAR_14);

            int VAR_19 = 1 << (26-VAR_12 + 4*VAR_14);

            int VAR_20;



            for (VAR_20 = 0; VAR_20 < VAR_6; VAR_20++) {

                VAR_18 += (VAR_14 ? VAR_4[VAR_20][VAR_13] : ((int16_t**)VAR_4)[VAR_20][VAR_13]) * VAR_3[VAR_20];

                VAR_19 += (VAR_14 ? VAR_5[VAR_20][VAR_13] : ((int16_t**)VAR_5)[VAR_20][VAR_13]) * VAR_3[VAR_20];

            }



            output_pixel(&uDest[VAR_13], VAR_18);

            output_pixel(&vDest[VAR_13], VAR_19);

        }

    }



    if (CONFIG_SWSCALE_ALPHA && aDest) {

        for (VAR_13 = 0; VAR_13 < VAR_9; VAR_13++) {

            int VAR_20 = 1 << (26-VAR_12 + 4*VAR_14);

            int VAR_20;



            for (VAR_20 = 0; VAR_20 < VAR_2; VAR_20++)

                VAR_20 += (VAR_14 ? VAR_7[VAR_20][VAR_13] : ((int16_t**)VAR_7)[VAR_20][VAR_13]) * VAR_0[VAR_20];



            output_pixel(&aDest[VAR_13], VAR_20);

        }

    }

#undef output_pixel

}

FUNC_0(const int16_t *VAR_0, const int32_t **VAR_1,
int VAR_2, const int16_t *VAR_3,
const int32_t **VAR_4, const int32_t **VAR_5,
int VAR_6, const int32_t **VAR_7,
uint16_t *VAR_8[4], int VAR_9, int VAR_10,
int VAR_11, int VAR_12)
{ int VAR_13; int VAR_14= VAR_12 == 16; uint16_t *yDest = VAR_8[0], *uDest = VAR_8[1], *vDest = VAR_8[2],
*aDest = CONFIG_SWSCALE_ALPHA ? VAR_8[3] : NULL; int VAR_15 = 11 + 4*VAR_14 + 16 - VAR_12; #define output_pixel(pos, VAR_20) \
if (VAR_11) { \ if (VAR_12 == 16) { \ AV_WB16(pos, av_clip_uint16(VAR_20 >> VAR_15)); \ } else { \ AV_WB16(pos, av_clip_uintp2(VAR_20 >> VAR_15, VAR_12)); \ } \ } else { \ if (VAR_12 == 16) { \ AV_WL16(pos, av_clip_uint16(VAR_20 >> VAR_15)); \ } else { \ AV_WL16(pos, av_clip_uintp2(VAR_20 >> VAR_15, VAR_12)); \ } \ } for (VAR_13 = 0; VAR_13 < VAR_9; VAR_13++) { int VAR_20 = 1 << (26-VAR_12 + 4*VAR_14); int VAR_20; for (VAR_20 = 0; VAR_20 < VAR_2; VAR_20++) VAR_20 += (VAR_14 ? VAR_1[VAR_20][VAR_13] : ((int16_t**)VAR_1)[VAR_20][VAR_13]) * VAR_0[VAR_20]; output_pixel(&yDest[VAR_13], VAR_20); } if (uDest) { for (VAR_13 = 0; VAR_13 < VAR_10; VAR_13++) { int VAR_18 = 1 << (26-VAR_12 + 4*VAR_14); int VAR_19 = 1 << (26-VAR_12 + 4*VAR_14); int VAR_20; for (VAR_20 = 0; VAR_20 < VAR_6; VAR_20++) { VAR_18 += (VAR_14 ? VAR_4[VAR_20][VAR_13] : ((int16_t**)VAR_4)[VAR_20][VAR_13]) * VAR_3[VAR_20]; VAR_19 += (VAR_14 ? VAR_5[VAR_20][VAR_13] : ((int16_t**)VAR_5)[VAR_20][VAR_13]) * VAR_3[VAR_20]; } output_pixel(&uDest[VAR_13], VAR_18); output_pixel(&vDest[VAR_13], VAR_19); } } if (CONFIG_SWSCALE_ALPHA && aDest) { for (VAR_13 = 0; VAR_13 < VAR_9; VAR_13++) { int VAR_20 = 1 << (26-VAR_12 + 4*VAR_14); int VAR_20; for (VAR_20 = 0; VAR_20 < VAR_2; VAR_20++) VAR_20 += (VAR_14 ? VAR_7[VAR_20][VAR_13] : ((int16_t**)VAR_7)[VAR_20][VAR_13]) * VAR_0[VAR_20]; output_pixel(&aDest[VAR_13], VAR_20); } } #undef output_pixel
}