static void filter(struct vf_priv_s *p, uint8_t *dst[3], uint8_t *src[3], int dst_stride[3], int src_stride[3], int width, int height){

    int x, y, i;



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

        p->frame->data[i]= src[i];

        p->frame->linesize[i]= src_stride[i];

    }



    p->avctx_enc->me_cmp=

    p->avctx_enc->me_sub_cmp= FF_CMP_SAD /*| (p->parity ? FF_CMP_ODD : FF_CMP_EVEN)*/;

    p->frame->quality= p->qp*FF_QP2LAMBDA;

    avcodec_encode_video(p->avctx_enc, p->outbuf, p->outbuf_size, p->frame);

    p->frame_dec = p->avctx_enc->coded_frame;



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

        int is_chroma= !!i;

        int w= width >>is_chroma;

        int h= height>>is_chroma;

        int fils= p->frame_dec->linesize[i];

        int srcs= src_stride[i];



        for(y=0; y<h; y++){

            if((y ^ p->parity) & 1){

                for(x=0; x<w; x++){

                    if((x-2)+(y-1)*w>=0 && (x+2)+(y+1)*w<w*h){ //FIXME either alloc larger images or optimize this

                        uint8_t *filp= &p->frame_dec->data[i][x + y*fils];

                        uint8_t *srcp= &src[i][x + y*srcs];

                        int diff0= filp[-fils] - srcp[-srcs];

                        int diff1= filp[+fils] - srcp[+srcs];

                        int spatial_score= ABS(srcp[-srcs-1] - srcp[+srcs-1])

                                          +ABS(srcp[-srcs  ] - srcp[+srcs  ])

                                          +ABS(srcp[-srcs+1] - srcp[+srcs+1]) - 1;

                        int temp= filp[0];



#define CHECK(j)\

    {   int score= ABS(srcp[-srcs-1+(j)] - srcp[+srcs-1-(j)])\

                 + ABS(srcp[-srcs  +(j)] - srcp[+srcs  -(j)])\

                 + ABS(srcp[-srcs+1+(j)] - srcp[+srcs+1-(j)]);\

        if(score < spatial_score){\

            spatial_score= score;\

            diff0= filp[-fils+(j)] - srcp[-srcs+(j)];\

            diff1= filp[+fils-(j)] - srcp[+srcs-(j)];



                        CHECK(-1) CHECK(-2) }} }}

                        CHECK( 1) CHECK( 2) }} }}

static void filter(struct vf_priv_s *p, uint8_t *dst[3], uint8_t *src[3], int dst_stride[3], int src_stride[3], int width, int height){

    int x, y, i;



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

        p->frame->data[i]= src[i];

        p->frame->linesize[i]= src_stride[i];

    }



    p->avctx_enc->me_cmp=

    p->avctx_enc->me_sub_cmp= FF_CMP_SAD ;

    p->frame->quality= p->qp*FF_QP2LAMBDA;

    avcodec_encode_video(p->avctx_enc, p->outbuf, p->outbuf_size, p->frame);

    p->frame_dec = p->avctx_enc->coded_frame;



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

        int is_chroma= !!i;

        int w= width >>is_chroma;

        int h= height>>is_chroma;

        int fils= p->frame_dec->linesize[i];

        int srcs= src_stride[i];



        for(y=0; y<h; y++){

            if((y ^ p->parity) & 1){

                for(x=0; x<w; x++){

                    if((x-2)+(y-1)*w>=0 && (x+2)+(y+1)*w<w*h){ 

                        uint8_t *filp= &p->frame_dec->data[i][x + y*fils];

                        uint8_t *srcp= &src[i][x + y*srcs];

                        int diff0= filp[-fils] - srcp[-srcs];

                        int diff1= filp[+fils] - srcp[+srcs];

                        int spatial_score= ABS(srcp[-srcs-1] - srcp[+srcs-1])

                                          +ABS(srcp[-srcs  ] - srcp[+srcs  ])

                                          +ABS(srcp[-srcs+1] - srcp[+srcs+1]) - 1;

                        int temp= filp[0];



#define CHECK(j)\

    {   int score= ABS(srcp[-srcs-1+(j)] - srcp[+srcs-1-(j)])\

                 + ABS(srcp[-srcs  +(j)] - srcp[+srcs  -(j)])\

                 + ABS(srcp[-srcs+1+(j)] - srcp[+srcs+1-(j)]);\

        if(score < spatial_score){\

            spatial_score= score;\

            diff0= filp[-fils+(j)] - srcp[-srcs+(j)];\

            diff1= filp[+fils-(j)] - srcp[+srcs-(j)];



                        CHECK(-1) CHECK(-2) }} }}

                        CHECK( 1) CHECK( 2) }} }}

static void FUNC_0(struct vf_priv_s *VAR_0, uint8_t *VAR_1[3], uint8_t *VAR_2[3], int VAR_3[3], int VAR_4[3], int VAR_5, int VAR_6){

    int VAR_7, VAR_8, VAR_9;



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

        VAR_0->frame->data[VAR_9]= VAR_2[VAR_9];

        VAR_0->frame->linesize[VAR_9]= VAR_4[VAR_9];

    }



    VAR_0->avctx_enc->me_cmp=

    VAR_0->avctx_enc->me_sub_cmp= FF_CMP_SAD ;

    VAR_0->frame->quality= VAR_0->qp*FF_QP2LAMBDA;

    avcodec_encode_video(VAR_0->avctx_enc, VAR_0->outbuf, VAR_0->outbuf_size, VAR_0->frame);

    VAR_0->frame_dec = VAR_0->avctx_enc->coded_frame;



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

        int VAR_10= !!VAR_9;

        int VAR_11= VAR_5 >>VAR_10;

        int VAR_12= VAR_6>>VAR_10;

        int VAR_13= VAR_0->frame_dec->linesize[VAR_9];

        int VAR_14= VAR_4[VAR_9];



        for(VAR_8=0; VAR_8<VAR_12; VAR_8++){

            if((VAR_8 ^ VAR_0->parity) & 1){

                for(VAR_7=0; VAR_7<VAR_11; VAR_7++){

                    if((VAR_7-2)+(VAR_8-1)*VAR_11>=0 && (VAR_7+2)+(VAR_8+1)*VAR_11<VAR_11*VAR_12){ 

                        uint8_t *filp= &VAR_0->frame_dec->data[VAR_9][VAR_7 + VAR_8*VAR_13];

                        uint8_t *srcp= &VAR_2[VAR_9][VAR_7 + VAR_8*VAR_14];

                        int VAR_15= filp[-VAR_13] - srcp[-VAR_14];

                        int VAR_16= filp[+VAR_13] - srcp[+VAR_14];

                        int VAR_17= ABS(srcp[-VAR_14-1] - srcp[+VAR_14-1])

                                          +ABS(srcp[-VAR_14  ] - srcp[+VAR_14  ])

                                          +ABS(srcp[-VAR_14+1] - srcp[+VAR_14+1]) - 1;

                        int VAR_18= filp[0];



#define CHECK(j)\

    {   int VAR_19= ABS(srcp[-VAR_14-1+(j)] - srcp[+VAR_14-1-(j)])\

                 + ABS(srcp[-VAR_14  +(j)] - srcp[+VAR_14  -(j)])\

                 + ABS(srcp[-VAR_14+1+(j)] - srcp[+VAR_14+1-(j)]);\

        if(VAR_19 < VAR_17){\

            VAR_17= VAR_19;\

            VAR_15= filp[-VAR_13+(j)] - srcp[-VAR_14+(j)];\

            VAR_16= filp[+VAR_13-(j)] - srcp[+VAR_14-(j)];



                        CHECK(-1) CHECK(-2) }} }}

                        CHECK( 1) CHECK( 2) }} }}

static void FUNC_0(struct vf_priv_s *VAR_0, uint8_t *VAR_1[3], uint8_t *VAR_2[3], int VAR_3[3], int VAR_4[3], int VAR_5, int VAR_6){ int VAR_7, VAR_8, VAR_9; for(VAR_9=0; VAR_9<3; VAR_9++){ VAR_0->frame->data[VAR_9]= VAR_2[VAR_9]; VAR_0->frame->linesize[VAR_9]= VAR_4[VAR_9]; } VAR_0->avctx_enc->me_cmp=
VAR_0->avctx_enc->me_sub_cmp= FF_CMP_SAD ; VAR_0->frame->quality= VAR_0->qp*FF_QP2LAMBDA; avcodec_encode_video(VAR_0->avctx_enc, VAR_0->outbuf, VAR_0->outbuf_size, VAR_0->frame); VAR_0->frame_dec = VAR_0->avctx_enc->coded_frame; for(VAR_9=0; VAR_9<3; VAR_9++){ int VAR_10= !!VAR_9; int VAR_11= VAR_5 >>VAR_10; int VAR_12= VAR_6>>VAR_10; int VAR_13= VAR_0->frame_dec->linesize[VAR_9]; int VAR_14= VAR_4[VAR_9]; for(VAR_8=0; VAR_8<VAR_12; VAR_8++){ if((VAR_8 ^ VAR_0->parity) & 1){ for(VAR_7=0; VAR_7<VAR_11; VAR_7++){ if((VAR_7-2)+(VAR_8-1)*VAR_11>=0 && (VAR_7+2)+(VAR_8+1)*VAR_11<VAR_11*VAR_12){ uint8_t *filp= &VAR_0->frame_dec->data[VAR_9][VAR_7 + VAR_8*VAR_13]; uint8_t *srcp= &VAR_2[VAR_9][VAR_7 + VAR_8*VAR_14]; int VAR_15= filp[-VAR_13] - srcp[-VAR_14]; int VAR_16= filp[+VAR_13] - srcp[+VAR_14]; int VAR_17= ABS(srcp[-VAR_14-1] - srcp[+VAR_14-1])
+ABS(srcp[-VAR_14  ] - srcp[+VAR_14  ])
+ABS(srcp[-VAR_14+1] - srcp[+VAR_14+1]) - 1; int VAR_18= filp[0]; #define CHECK(j)\
{   int VAR_19= ABS(srcp[-VAR_14-1+(j)] - srcp[+VAR_14-1-(j)])\ + ABS(srcp[-VAR_14  +(j)] - srcp[+VAR_14  -(j)])\
+ ABS(srcp[-VAR_14+1+(j)] - srcp[+VAR_14+1-(j)]);\ if(VAR_19 < VAR_17){\ VAR_17= VAR_19;\ VAR_15= filp[-VAR_13+(j)] - srcp[-VAR_14+(j)];\ VAR_16= filp[+VAR_13-(j)] - srcp[+VAR_14-(j)]; CHECK(-1) CHECK(-2) }} }} CHECK( 1) CHECK( 2) }} }}