static void predict_plane(SnowContext *s, DWTELEM *buf, int plane_index, int add){

    Plane *p= &s->plane[plane_index];

    const int mb_w= s->mb_band.width;

    const int mb_h= s->mb_band.height;

    const int mb_stride= s->mb_band.stride;

    int x, y, mb_x, mb_y;

    int scale      = plane_index ?  s->mv_scale : 2*s->mv_scale;

    int block_w    = plane_index ?  8 : 16;

    uint8_t *obmc  = plane_index ? obmc16 : obmc32;

    int obmc_stride= plane_index ? 16 : 32;

    int ref_stride= s->last_picture.linesize[plane_index];

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

    int w= p->width;

    int h= p->height;

    

if(s->avctx->debug&512){

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

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

            if(add) buf[x + y*w]+= 128*256;

            else    buf[x + y*w]-= 128*256;

        }

    }

    

    return;

}

    for(mb_y=-1; mb_y<=mb_h; mb_y++){

        for(mb_x=-1; mb_x<=mb_w; mb_x++){

            int index= clip(mb_x, 0, mb_w-1) + clip(mb_y, 0, mb_h-1)*mb_stride;



            add_xblock(buf, ref, obmc, 

                       block_w*mb_x - block_w/2, 

                       block_w*mb_y - block_w/2,

                       2*block_w, 2*block_w,

                       s->mv_band[0].buf[index]*scale, s->mv_band[1].buf[index]*scale,

                       w, h,

                       w, ref_stride, obmc_stride, 

                       s->mb_band.buf[index], add);



        }

    }

}

static void predict_plane(SnowContext *s, DWTELEM *buf, int plane_index, int add){

    Plane *p= &s->plane[plane_index];

    const int mb_w= s->mb_band.width;

    const int mb_h= s->mb_band.height;

    const int mb_stride= s->mb_band.stride;

    int x, y, mb_x, mb_y;

    int scale      = plane_index ?  s->mv_scale : 2*s->mv_scale;

    int block_w    = plane_index ?  8 : 16;

    uint8_t *obmc  = plane_index ? obmc16 : obmc32;

    int obmc_stride= plane_index ? 16 : 32;

    int ref_stride= s->last_picture.linesize[plane_index];

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

    int w= p->width;

    int h= p->height;

    

if(s->avctx->debug&512){

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

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

            if(add) buf[x + y*w]+= 128*256;

            else    buf[x + y*w]-= 128*256;

        }

    }

    

    return;

}

    for(mb_y=-1; mb_y<=mb_h; mb_y++){

        for(mb_x=-1; mb_x<=mb_w; mb_x++){

            int index= clip(mb_x, 0, mb_w-1) + clip(mb_y, 0, mb_h-1)*mb_stride;



            add_xblock(buf, ref, obmc, 

                       block_w*mb_x - block_w/2, 

                       block_w*mb_y - block_w/2,

                       2*block_w, 2*block_w,

                       s->mv_band[0].buf[index]*scale, s->mv_band[1].buf[index]*scale,

                       w, h,

                       w, ref_stride, obmc_stride, 

                       s->mb_band.buf[index], add);



        }

    }

}

static void FUNC_0(SnowContext *VAR_0, DWTELEM *VAR_1, int VAR_2, int VAR_3){

    Plane *p= &VAR_0->plane[VAR_2];

    const int VAR_4= VAR_0->mb_band.width;

    const int VAR_5= VAR_0->mb_band.height;

    const int VAR_6= VAR_0->mb_band.stride;

    int VAR_7, VAR_8, VAR_9, VAR_10;

    int VAR_11      = VAR_2 ?  VAR_0->mv_scale : 2*VAR_0->mv_scale;

    int VAR_12    = VAR_2 ?  8 : 16;

    uint8_t *obmc  = VAR_2 ? obmc16 : obmc32;

    int VAR_13= VAR_2 ? 16 : 32;

    int VAR_14= VAR_0->last_picture.linesize[VAR_2];

    uint8_t *ref  = VAR_0->last_picture.data[VAR_2];

    int VAR_15= p->width;

    int VAR_16= p->height;

    

if(VAR_0->avctx->debug&512){

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

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

            if(VAR_3) VAR_1[VAR_7 + VAR_8*VAR_15]+= 128*256;

            else    VAR_1[VAR_7 + VAR_8*VAR_15]-= 128*256;

        }

    }

    

    return;

}

    for(VAR_10=-1; VAR_10<=VAR_5; VAR_10++){

        for(VAR_9=-1; VAR_9<=VAR_4; VAR_9++){

            int VAR_17= clip(VAR_9, 0, VAR_4-1) + clip(VAR_10, 0, VAR_5-1)*VAR_6;



            add_xblock(VAR_1, ref, obmc, 

                       VAR_12*VAR_9 - VAR_12/2, 

                       VAR_12*VAR_10 - VAR_12/2,

                       2*VAR_12, 2*VAR_12,

                       VAR_0->mv_band[0].VAR_1[VAR_17]*VAR_11, VAR_0->mv_band[1].VAR_1[VAR_17]*VAR_11,

                       VAR_15, VAR_16,

                       VAR_15, VAR_14, VAR_13, 

                       VAR_0->mb_band.VAR_1[VAR_17], VAR_3);



        }

    }

}

static void FUNC_0(SnowContext *VAR_0, DWTELEM *VAR_1, int VAR_2, int VAR_3){ Plane *p= &VAR_0->plane[VAR_2]; const int VAR_4= VAR_0->mb_band.width; const int VAR_5= VAR_0->mb_band.height; const int VAR_6= VAR_0->mb_band.stride; int VAR_7, VAR_8, VAR_9, VAR_10; int VAR_11      = VAR_2 ?  VAR_0->mv_scale : 2*VAR_0->mv_scale; int VAR_12    = VAR_2 ?  8 : 16; uint8_t *obmc  = VAR_2 ? obmc16 : obmc32; int VAR_13= VAR_2 ? 16 : 32; int VAR_14= VAR_0->last_picture.linesize[VAR_2]; uint8_t *ref  = VAR_0->last_picture.data[VAR_2]; int VAR_15= p->width; int VAR_16= p->height; if(VAR_0->avctx->debug&512){ for(VAR_8=0; VAR_8<VAR_16; VAR_8++){ for(VAR_7=0; VAR_7<VAR_15; VAR_7++){ if(VAR_3) VAR_1[VAR_7 + VAR_8*VAR_15]+= 128*256; else    VAR_1[VAR_7 + VAR_8*VAR_15]-= 128*256; } } return; } for(VAR_10=-1; VAR_10<=VAR_5; VAR_10++){ for(VAR_9=-1; VAR_9<=VAR_4; VAR_9++){ int VAR_17= clip(VAR_9, 0, VAR_4-1) + clip(VAR_10, 0, VAR_5-1)*VAR_6; add_xblock(VAR_1, ref, obmc,
VAR_12*VAR_9 - VAR_12/2,
VAR_12*VAR_10 - VAR_12/2,
2*VAR_12, 2*VAR_12,
VAR_0->mv_band[0].VAR_1[VAR_17]*VAR_11, VAR_0->mv_band[1].VAR_1[VAR_17]*VAR_11,
VAR_15, VAR_16,
VAR_15, VAR_14, VAR_13,
VAR_0->mb_band.VAR_1[VAR_17], VAR_3); } } }