void ff_snow_pred_block(SnowContext *s, uint8_t *dst, uint8_t *tmp, int stride, int sx, int sy, int b_w, int b_h, BlockNode *block, int plane_index, int w, int h){

    if(block->type & BLOCK_INTRA){

        int x, y;

        const unsigned color  = block->color[plane_index];

        const unsigned color4 = color*0x01010101;

        if(b_w==32){

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

                *(uint32_t*)&dst[0 + y*stride]= color4;

                *(uint32_t*)&dst[4 + y*stride]= color4;

                *(uint32_t*)&dst[8 + y*stride]= color4;

                *(uint32_t*)&dst[12+ y*stride]= color4;

                *(uint32_t*)&dst[16+ y*stride]= color4;

                *(uint32_t*)&dst[20+ y*stride]= color4;

                *(uint32_t*)&dst[24+ y*stride]= color4;

                *(uint32_t*)&dst[28+ y*stride]= color4;

            }

        }else if(b_w==16){

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

                *(uint32_t*)&dst[0 + y*stride]= color4;

                *(uint32_t*)&dst[4 + y*stride]= color4;

                *(uint32_t*)&dst[8 + y*stride]= color4;

                *(uint32_t*)&dst[12+ y*stride]= color4;

            }

        }else if(b_w==8){

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

                *(uint32_t*)&dst[0 + y*stride]= color4;

                *(uint32_t*)&dst[4 + y*stride]= color4;

            }

        }else if(b_w==4){

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

                *(uint32_t*)&dst[0 + y*stride]= color4;

            }

        }else{

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

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

                    dst[x + y*stride]= color;

                }

            }

        }

    }else{

        uint8_t *src= s->last_picture[block->ref]->data[plane_index];

        const int scale= plane_index ?  (2*s->mv_scale)>>s->chroma_h_shift : 2*s->mv_scale;

        int mx= block->mx*scale;

        int my= block->my*scale;

        const int dx= mx&15;

        const int dy= my&15;

        const int tab_index= 3 - (b_w>>2) + (b_w>>4);

        sx += (mx>>4) - (HTAPS_MAX/2-1);

        sy += (my>>4) - (HTAPS_MAX/2-1);

        src += sx + sy*stride;

        if(   (unsigned)sx >= FFMAX(w - b_w - (HTAPS_MAX-2), 0)

           || (unsigned)sy >= FFMAX(h - b_h - (HTAPS_MAX-2), 0)){

            s->vdsp.emulated_edge_mc(tmp + MB_SIZE, src, stride, b_w+HTAPS_MAX-1, b_h+HTAPS_MAX-1, sx, sy, w, h);

            src= tmp + MB_SIZE;

        }



        av_assert2(s->chroma_h_shift == s->chroma_v_shift); // only one mv_scale



        av_assert2(b_w>1 && b_h>1);

        av_assert2((tab_index>=0 && tab_index<4) || b_w==32);

        if((dx&3) || (dy&3) || !(b_w == b_h || 2*b_w == b_h || b_w == 2*b_h) || (b_w&(b_w-1)) || !s->plane[plane_index].fast_mc )

            mc_block(&s->plane[plane_index], dst, src, stride, b_w, b_h, dx, dy);

        else if(b_w==32){

            int y;

            for(y=0; y<b_h; y+=16){

                s->h264qpel.put_h264_qpel_pixels_tab[0][dy+(dx>>2)](dst + y*stride, src + 3 + (y+3)*stride,stride);

                s->h264qpel.put_h264_qpel_pixels_tab[0][dy+(dx>>2)](dst + 16 + y*stride, src + 19 + (y+3)*stride,stride);

            }

        }else if(b_w==b_h)

            s->h264qpel.put_h264_qpel_pixels_tab[tab_index  ][dy+(dx>>2)](dst,src + 3 + 3*stride,stride);

        else if(b_w==2*b_h){

            s->h264qpel.put_h264_qpel_pixels_tab[tab_index+1][dy+(dx>>2)](dst    ,src + 3       + 3*stride,stride);

            s->h264qpel.put_h264_qpel_pixels_tab[tab_index+1][dy+(dx>>2)](dst+b_h,src + 3 + b_h + 3*stride,stride);

        }else{

            av_assert2(2*b_w==b_h);

            s->h264qpel.put_h264_qpel_pixels_tab[tab_index  ][dy+(dx>>2)](dst           ,src + 3 + 3*stride           ,stride);

            s->h264qpel.put_h264_qpel_pixels_tab[tab_index  ][dy+(dx>>2)](dst+b_w*stride,src + 3 + 3*stride+b_w*stride,stride);

        }

    }

}

void ff_snow_pred_block(SnowContext *s, uint8_t *dst, uint8_t *tmp, int stride, int sx, int sy, int b_w, int b_h, BlockNode *block, int plane_index, int w, int h){

    if(block->type & BLOCK_INTRA){

        int x, y;

        const unsigned color  = block->color[plane_index];

        const unsigned color4 = color*0x01010101;

        if(b_w==32){

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

                *(uint32_t*)&dst[0 + y*stride]= color4;

                *(uint32_t*)&dst[4 + y*stride]= color4;

                *(uint32_t*)&dst[8 + y*stride]= color4;

                *(uint32_t*)&dst[12+ y*stride]= color4;

                *(uint32_t*)&dst[16+ y*stride]= color4;

                *(uint32_t*)&dst[20+ y*stride]= color4;

                *(uint32_t*)&dst[24+ y*stride]= color4;

                *(uint32_t*)&dst[28+ y*stride]= color4;

            }

        }else if(b_w==16){

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

                *(uint32_t*)&dst[0 + y*stride]= color4;

                *(uint32_t*)&dst[4 + y*stride]= color4;

                *(uint32_t*)&dst[8 + y*stride]= color4;

                *(uint32_t*)&dst[12+ y*stride]= color4;

            }

        }else if(b_w==8){

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

                *(uint32_t*)&dst[0 + y*stride]= color4;

                *(uint32_t*)&dst[4 + y*stride]= color4;

            }

        }else if(b_w==4){

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

                *(uint32_t*)&dst[0 + y*stride]= color4;

            }

        }else{

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

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

                    dst[x + y*stride]= color;

                }

            }

        }

    }else{

        uint8_t *src= s->last_picture[block->ref]->data[plane_index];

        const int scale= plane_index ?  (2*s->mv_scale)>>s->chroma_h_shift : 2*s->mv_scale;

        int mx= block->mx*scale;

        int my= block->my*scale;

        const int dx= mx&15;

        const int dy= my&15;

        const int tab_index= 3 - (b_w>>2) + (b_w>>4);

        sx += (mx>>4) - (HTAPS_MAX/2-1);

        sy += (my>>4) - (HTAPS_MAX/2-1);

        src += sx + sy*stride;

        if(   (unsigned)sx >= FFMAX(w - b_w - (HTAPS_MAX-2), 0)

           || (unsigned)sy >= FFMAX(h - b_h - (HTAPS_MAX-2), 0)){

            s->vdsp.emulated_edge_mc(tmp + MB_SIZE, src, stride, b_w+HTAPS_MAX-1, b_h+HTAPS_MAX-1, sx, sy, w, h);

            src= tmp + MB_SIZE;

        }



        av_assert2(s->chroma_h_shift == s->chroma_v_shift); 



        av_assert2(b_w>1 && b_h>1);

        av_assert2((tab_index>=0 && tab_index<4) || b_w==32);

        if((dx&3) || (dy&3) || !(b_w == b_h || 2*b_w == b_h || b_w == 2*b_h) || (b_w&(b_w-1)) || !s->plane[plane_index].fast_mc )

            mc_block(&s->plane[plane_index], dst, src, stride, b_w, b_h, dx, dy);

        else if(b_w==32){

            int y;

            for(y=0; y<b_h; y+=16){

                s->h264qpel.put_h264_qpel_pixels_tab[0][dy+(dx>>2)](dst + y*stride, src + 3 + (y+3)*stride,stride);

                s->h264qpel.put_h264_qpel_pixels_tab[0][dy+(dx>>2)](dst + 16 + y*stride, src + 19 + (y+3)*stride,stride);

            }

        }else if(b_w==b_h)

            s->h264qpel.put_h264_qpel_pixels_tab[tab_index  ][dy+(dx>>2)](dst,src + 3 + 3*stride,stride);

        else if(b_w==2*b_h){

            s->h264qpel.put_h264_qpel_pixels_tab[tab_index+1][dy+(dx>>2)](dst    ,src + 3       + 3*stride,stride);

            s->h264qpel.put_h264_qpel_pixels_tab[tab_index+1][dy+(dx>>2)](dst+b_h,src + 3 + b_h + 3*stride,stride);

        }else{

            av_assert2(2*b_w==b_h);

            s->h264qpel.put_h264_qpel_pixels_tab[tab_index  ][dy+(dx>>2)](dst           ,src + 3 + 3*stride           ,stride);

            s->h264qpel.put_h264_qpel_pixels_tab[tab_index  ][dy+(dx>>2)](dst+b_w*stride,src + 3 + 3*stride+b_w*stride,stride);

        }

    }

}

void ff_snow_pred_block(SnowContext *s, uint8_t *dst, uint8_t *tmp, int stride, int sx, int sy, int b_w, int b_h, BlockNode *block, int plane_index, int w, int h){
void FUNC_0(SnowContext *VAR_0, uint8_t *VAR_1, uint8_t *VAR_2, int VAR_3, int VAR_4, int VAR_5, int VAR_6, int VAR_7, BlockNode *VAR_8, int VAR_9, int VAR_10, int VAR_11){

    if(VAR_8->type & BLOCK_INTRA){

        int VAR_12, VAR_22;

        const unsigned VAR_14  = VAR_8->VAR_14[VAR_9];

        const unsigned VAR_15 = VAR_14*0x01010101;

        if(VAR_6==32){

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

                *(uint32_t*)&VAR_1[0 + VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[4 + VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[8 + VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[12+ VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[16+ VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[20+ VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[24+ VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[28+ VAR_22*VAR_3]= VAR_15;

            }

        }else if(VAR_6==16){

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

                *(uint32_t*)&VAR_1[0 + VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[4 + VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[8 + VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[12+ VAR_22*VAR_3]= VAR_15;

            }

        }else if(VAR_6==8){

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

                *(uint32_t*)&VAR_1[0 + VAR_22*VAR_3]= VAR_15;

                *(uint32_t*)&VAR_1[4 + VAR_22*VAR_3]= VAR_15;

            }

        }else if(VAR_6==4){

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

                *(uint32_t*)&VAR_1[0 + VAR_22*VAR_3]= VAR_15;

            }

        }else{

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

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

                    VAR_1[VAR_12 + VAR_22*VAR_3]= VAR_14;

                }

            }

        }

    }else{

        uint8_t *src= VAR_0->last_picture[VAR_8->ref]->data[VAR_9];

        const int VAR_16= VAR_9 ?  (2*VAR_0->mv_scale)>>VAR_0->chroma_h_shift : 2*VAR_0->mv_scale;

        int VAR_17= VAR_8->VAR_17*VAR_16;

        int VAR_18= VAR_8->VAR_18*VAR_16;

        const int VAR_19= VAR_17&15;

        const int VAR_20= VAR_18&15;

        const int VAR_21= 3 - (VAR_6>>2) + (VAR_6>>4);

        VAR_4 += (VAR_17>>4) - (HTAPS_MAX/2-1);

        VAR_5 += (VAR_18>>4) - (HTAPS_MAX/2-1);

        src += VAR_4 + VAR_5*VAR_3;

        if(   (unsigned)VAR_4 >= FFMAX(VAR_10 - VAR_6 - (HTAPS_MAX-2), 0)

           || (unsigned)VAR_5 >= FFMAX(VAR_11 - VAR_7 - (HTAPS_MAX-2), 0)){

            VAR_0->vdsp.emulated_edge_mc(VAR_2 + MB_SIZE, src, VAR_3, VAR_6+HTAPS_MAX-1, VAR_7+HTAPS_MAX-1, VAR_4, VAR_5, VAR_10, VAR_11);

            src= VAR_2 + MB_SIZE;

        }



        av_assert2(VAR_0->chroma_h_shift == VAR_0->chroma_v_shift); 



        av_assert2(VAR_6>1 && VAR_7>1);

        av_assert2((VAR_21>=0 && VAR_21<4) || VAR_6==32);

        if((VAR_19&3) || (VAR_20&3) || !(VAR_6 == VAR_7 || 2*VAR_6 == VAR_7 || VAR_6 == 2*VAR_7) || (VAR_6&(VAR_6-1)) || !VAR_0->plane[VAR_9].fast_mc )

            mc_block(&VAR_0->plane[VAR_9], VAR_1, src, VAR_3, VAR_6, VAR_7, VAR_19, VAR_20);

        else if(VAR_6==32){

            int VAR_22;

            for(VAR_22=0; VAR_22<VAR_7; VAR_22+=16){

                VAR_0->h264qpel.put_h264_qpel_pixels_tab[0][VAR_20+(VAR_19>>2)](VAR_1 + VAR_22*VAR_3, src + 3 + (VAR_22+3)*VAR_3,VAR_3);

                VAR_0->h264qpel.put_h264_qpel_pixels_tab[0][VAR_20+(VAR_19>>2)](VAR_1 + 16 + VAR_22*VAR_3, src + 19 + (VAR_22+3)*VAR_3,VAR_3);

            }

        }else if(VAR_6==VAR_7)

            VAR_0->h264qpel.put_h264_qpel_pixels_tab[VAR_21  ][VAR_20+(VAR_19>>2)](VAR_1,src + 3 + 3*VAR_3,VAR_3);

        else if(VAR_6==2*VAR_7){

            VAR_0->h264qpel.put_h264_qpel_pixels_tab[VAR_21+1][VAR_20+(VAR_19>>2)](VAR_1    ,src + 3       + 3*VAR_3,VAR_3);

            VAR_0->h264qpel.put_h264_qpel_pixels_tab[VAR_21+1][VAR_20+(VAR_19>>2)](VAR_1+VAR_7,src + 3 + VAR_7 + 3*VAR_3,VAR_3);

        }else{

            av_assert2(2*VAR_6==VAR_7);

            VAR_0->h264qpel.put_h264_qpel_pixels_tab[VAR_21  ][VAR_20+(VAR_19>>2)](VAR_1           ,src + 3 + 3*VAR_3           ,VAR_3);

            VAR_0->h264qpel.put_h264_qpel_pixels_tab[VAR_21  ][VAR_20+(VAR_19>>2)](VAR_1+VAR_6*VAR_3,src + 3 + 3*VAR_3+VAR_6*VAR_3,VAR_3);

        }

    }

}

void FUNC_0(SnowContext *VAR_0, uint8_t *VAR_1, uint8_t *VAR_2, int VAR_3, int VAR_4, int VAR_5, int VAR_6, int VAR_7, BlockNode *VAR_8, int VAR_9, int VAR_10, int VAR_11){ if(VAR_8->type & BLOCK_INTRA){ int VAR_12, VAR_22; const unsigned VAR_14  = VAR_8->VAR_14[VAR_9]; const unsigned VAR_15 = VAR_14*0x01010101; if(VAR_6==32){ for(VAR_22=0; VAR_22 < VAR_7; VAR_22++){ *(uint32_t*)&VAR_1[0 + VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[4 + VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[8 + VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[12+ VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[16+ VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[20+ VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[24+ VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[28+ VAR_22*VAR_3]= VAR_15; } }else if(VAR_6==16){ for(VAR_22=0; VAR_22 < VAR_7; VAR_22++){ *(uint32_t*)&VAR_1[0 + VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[4 + VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[8 + VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[12+ VAR_22*VAR_3]= VAR_15; } }else if(VAR_6==8){ for(VAR_22=0; VAR_22 < VAR_7; VAR_22++){ *(uint32_t*)&VAR_1[0 + VAR_22*VAR_3]= VAR_15; *(uint32_t*)&VAR_1[4 + VAR_22*VAR_3]= VAR_15; } }else if(VAR_6==4){ for(VAR_22=0; VAR_22 < VAR_7; VAR_22++){ *(uint32_t*)&VAR_1[0 + VAR_22*VAR_3]= VAR_15; } }else{ for(VAR_22=0; VAR_22 < VAR_7; VAR_22++){ for(VAR_12=0; VAR_12 < VAR_6; VAR_12++){ VAR_1[VAR_12 + VAR_22*VAR_3]= VAR_14; } } } }else{ uint8_t *src= VAR_0->last_picture[VAR_8->ref]->data[VAR_9]; const int VAR_16= VAR_9 ?  (2*VAR_0->mv_scale)>>VAR_0->chroma_h_shift : 2*VAR_0->mv_scale; int VAR_17= VAR_8->VAR_17*VAR_16; int VAR_18= VAR_8->VAR_18*VAR_16; const int VAR_19= VAR_17&15; const int VAR_20= VAR_18&15; const int VAR_21= 3 - (VAR_6>>2) + (VAR_6>>4); VAR_4 += (VAR_17>>4) - (HTAPS_MAX/2-1); VAR_5 += (VAR_18>>4) - (HTAPS_MAX/2-1); src += VAR_4 + VAR_5*VAR_3; if(   (unsigned)VAR_4 >= FFMAX(VAR_10 - VAR_6 - (HTAPS_MAX-2), 0)
|| (unsigned)VAR_5 >= FFMAX(VAR_11 - VAR_7 - (HTAPS_MAX-2), 0)){ VAR_0->vdsp.emulated_edge_mc(VAR_2 + MB_SIZE, src, VAR_3, VAR_6+HTAPS_MAX-1, VAR_7+HTAPS_MAX-1, VAR_4, VAR_5, VAR_10, VAR_11); src= VAR_2 + MB_SIZE; } av_assert2(VAR_0->chroma_h_shift == VAR_0->chroma_v_shift); av_assert2(VAR_6>1 && VAR_7>1); av_assert2((VAR_21>=0 && VAR_21<4) || VAR_6==32); if((VAR_19&3) || (VAR_20&3) || !(VAR_6 == VAR_7 || 2*VAR_6 == VAR_7 || VAR_6 == 2*VAR_7) || (VAR_6&(VAR_6-1)) || !VAR_0->plane[VAR_9].fast_mc )
mc_block(&VAR_0->plane[VAR_9], VAR_1, src, VAR_3, VAR_6, VAR_7, VAR_19, VAR_20); else if(VAR_6==32){ int VAR_22; for(VAR_22=0; VAR_22<VAR_7; VAR_22+=16){ VAR_0->h264qpel.put_h264_qpel_pixels_tab[0][VAR_20+(VAR_19>>2)](VAR_1 + VAR_22*VAR_3, src + 3 + (VAR_22+3)*VAR_3,VAR_3); VAR_0->h264qpel.put_h264_qpel_pixels_tab[0][VAR_20+(VAR_19>>2)](VAR_1 + 16 + VAR_22*VAR_3, src + 19 + (VAR_22+3)*VAR_3,VAR_3); } }else if(VAR_6==VAR_7) VAR_0->h264qpel.put_h264_qpel_pixels_tab[VAR_21  ][VAR_20+(VAR_19>>2)](VAR_1,src + 3 + 3*VAR_3,VAR_3); else if(VAR_6==2*VAR_7){ VAR_0->h264qpel.put_h264_qpel_pixels_tab[VAR_21+1][VAR_20+(VAR_19>>2)](VAR_1    ,src + 3       + 3*VAR_3,VAR_3); VAR_0->h264qpel.put_h264_qpel_pixels_tab[VAR_21+1][VAR_20+(VAR_19>>2)](VAR_1+VAR_7,src + 3 + VAR_7 + 3*VAR_3,VAR_3); }else{ av_assert2(2*VAR_6==VAR_7); VAR_0->h264qpel.put_h264_qpel_pixels_tab[VAR_21  ][VAR_20+(VAR_19>>2)](VAR_1           ,src + 3 + 3*VAR_3           ,VAR_3); VAR_0->h264qpel.put_h264_qpel_pixels_tab[VAR_21  ][VAR_20+(VAR_19>>2)](VAR_1+VAR_6*VAR_3,src + 3 + 3*VAR_3+VAR_6*VAR_3,VAR_3); } } }