void  pp_postprocess(const uint8_t * src[3], const int srcStride[3],

                     uint8_t * dst[3], const int dstStride[3],

                     int width, int height,

                     const QP_STORE_T *QP_store,  int QPStride,

                     pp_mode *vm,  void *vc, int pict_type)

{

    int mbWidth = (width+15)>>4;

    int mbHeight= (height+15)>>4;

    PPMode *mode = vm;

    PPContext *c = vc;

    int minStride= FFMAX(FFABS(srcStride[0]), FFABS(dstStride[0]));

    int absQPStride = FFABS(QPStride);



    // c->stride and c->QPStride are always positive

    if(c->stride < minStride || c->qpStride < absQPStride)

        reallocBuffers(c, width, height,

                       FFMAX(minStride, c->stride),

                       FFMAX(c->qpStride, absQPStride));



    if(!QP_store || (mode->lumMode & FORCE_QUANT)){

        int i;

        QP_store= c->forcedQPTable;

        absQPStride = QPStride = 0;

        if(mode->lumMode & FORCE_QUANT)

            for(i=0; i<mbWidth; i++) c->forcedQPTable[i]= mode->forcedQuant;

        else

            for(i=0; i<mbWidth; i++) c->forcedQPTable[i]= 1;

    }



    if(pict_type & PP_PICT_TYPE_QP2){

        int i;

        const int count= FFMAX(mbHeight * absQPStride, mbWidth);

        for(i=0; i<(count>>2); i++){

            ((uint32_t*)c->stdQPTable)[i] = (((const uint32_t*)QP_store)[i]>>1) & 0x7F7F7F7F;

        }

        for(i<<=2; i<count; i++){

            c->stdQPTable[i] = QP_store[i]>>1;

        }

        QP_store= c->stdQPTable;

        QPStride= absQPStride;

    }



    if(0){

        int x,y;

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

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

                av_log(c, AV_LOG_INFO, "%2d ", QP_store[x + y*QPStride]);

            }

            av_log(c, AV_LOG_INFO, "\n");

        }

        av_log(c, AV_LOG_INFO, "\n");

    }



    if((pict_type&7)!=3){

        if (QPStride >= 0){

            int i;

            const int count= FFMAX(mbHeight * QPStride, mbWidth);

            for(i=0; i<(count>>2); i++){

                ((uint32_t*)c->nonBQPTable)[i] = ((const uint32_t*)QP_store)[i] & 0x3F3F3F3F;

            }

            for(i<<=2; i<count; i++){

                c->nonBQPTable[i] = QP_store[i] & 0x3F;

            }

        } else {

            int i,j;

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

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

                    c->nonBQPTable[i*absQPStride+j] = QP_store[i*QPStride+j] & 0x3F;

                }

            }

        }

    }



    av_log(c, AV_LOG_DEBUG, "using npp filters 0x%X/0x%X\n",

           mode->lumMode, mode->chromMode);



    postProcess(src[0], srcStride[0], dst[0], dstStride[0],

                width, height, QP_store, QPStride, 0, mode, c);



    if (!(src[1] && src[2] && dst[1] && dst[2]))

        return;



    width  = (width )>>c->hChromaSubSample;

    height = (height)>>c->vChromaSubSample;



    if(mode->chromMode){

        postProcess(src[1], srcStride[1], dst[1], dstStride[1],

                    width, height, QP_store, QPStride, 1, mode, c);

        postProcess(src[2], srcStride[2], dst[2], dstStride[2],

                    width, height, QP_store, QPStride, 2, mode, c);

    }

    else if(srcStride[1] == dstStride[1] && srcStride[2] == dstStride[2]){

        linecpy(dst[1], src[1], height, srcStride[1]);

        linecpy(dst[2], src[2], height, srcStride[2]);

    }else{

        int y;

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

            memcpy(&(dst[1][y*dstStride[1]]), &(src[1][y*srcStride[1]]), width);

            memcpy(&(dst[2][y*dstStride[2]]), &(src[2][y*srcStride[2]]), width);

        }

    }

}

void  pp_postprocess(const uint8_t * src[3], const int srcStride[3],

                     uint8_t * dst[3], const int dstStride[3],

                     int width, int height,

                     const QP_STORE_T *QP_store,  int QPStride,

                     pp_mode *vm,  void *vc, int pict_type)

{

    int mbWidth = (width+15)>>4;

    int mbHeight= (height+15)>>4;

    PPMode *mode = vm;

    PPContext *c = vc;

    int minStride= FFMAX(FFABS(srcStride[0]), FFABS(dstStride[0]));

    int absQPStride = FFABS(QPStride);



    

    if(c->stride < minStride || c->qpStride < absQPStride)

        reallocBuffers(c, width, height,

                       FFMAX(minStride, c->stride),

                       FFMAX(c->qpStride, absQPStride));



    if(!QP_store || (mode->lumMode & FORCE_QUANT)){

        int i;

        QP_store= c->forcedQPTable;

        absQPStride = QPStride = 0;

        if(mode->lumMode & FORCE_QUANT)

            for(i=0; i<mbWidth; i++) c->forcedQPTable[i]= mode->forcedQuant;

        else

            for(i=0; i<mbWidth; i++) c->forcedQPTable[i]= 1;

    }



    if(pict_type & PP_PICT_TYPE_QP2){

        int i;

        const int count= FFMAX(mbHeight * absQPStride, mbWidth);

        for(i=0; i<(count>>2); i++){

            ((uint32_t*)c->stdQPTable)[i] = (((const uint32_t*)QP_store)[i]>>1) & 0x7F7F7F7F;

        }

        for(i<<=2; i<count; i++){

            c->stdQPTable[i] = QP_store[i]>>1;

        }

        QP_store= c->stdQPTable;

        QPStride= absQPStride;

    }



    if(0){

        int x,y;

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

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

                av_log(c, AV_LOG_INFO, "%2d ", QP_store[x + y*QPStride]);

            }

            av_log(c, AV_LOG_INFO, "\n");

        }

        av_log(c, AV_LOG_INFO, "\n");

    }



    if((pict_type&7)!=3){

        if (QPStride >= 0){

            int i;

            const int count= FFMAX(mbHeight * QPStride, mbWidth);

            for(i=0; i<(count>>2); i++){

                ((uint32_t*)c->nonBQPTable)[i] = ((const uint32_t*)QP_store)[i] & 0x3F3F3F3F;

            }

            for(i<<=2; i<count; i++){

                c->nonBQPTable[i] = QP_store[i] & 0x3F;

            }

        } else {

            int i,j;

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

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

                    c->nonBQPTable[i*absQPStride+j] = QP_store[i*QPStride+j] & 0x3F;

                }

            }

        }

    }



    av_log(c, AV_LOG_DEBUG, "using npp filters 0x%X/0x%X\n",

           mode->lumMode, mode->chromMode);



    postProcess(src[0], srcStride[0], dst[0], dstStride[0],

                width, height, QP_store, QPStride, 0, mode, c);



    if (!(src[1] && src[2] && dst[1] && dst[2]))

        return;



    width  = (width )>>c->hChromaSubSample;

    height = (height)>>c->vChromaSubSample;



    if(mode->chromMode){

        postProcess(src[1], srcStride[1], dst[1], dstStride[1],

                    width, height, QP_store, QPStride, 1, mode, c);

        postProcess(src[2], srcStride[2], dst[2], dstStride[2],

                    width, height, QP_store, QPStride, 2, mode, c);

    }

    else if(srcStride[1] == dstStride[1] && srcStride[2] == dstStride[2]){

        linecpy(dst[1], src[1], height, srcStride[1]);

        linecpy(dst[2], src[2], height, srcStride[2]);

    }else{

        int y;

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

            memcpy(&(dst[1][y*dstStride[1]]), &(src[1][y*srcStride[1]]), width);

            memcpy(&(dst[2][y*dstStride[2]]), &(src[2][y*srcStride[2]]), width);

        }

    }

}

                ((uint32_t*)c->nonBQPTable)[i] = ((const uint32_t*)QP_store)[i] & 0x3F3F3F3F;
void  FUNC_0(const uint8_t * VAR_0[3], const int VAR_1[3],

                     uint8_t * VAR_2[3], const int VAR_3[3],

                     int VAR_4, int VAR_5,

                     const QP_STORE_T *VAR_6,  int VAR_7,

                     pp_mode *VAR_8,  void *VAR_9, int VAR_10)

{

    int VAR_11 = (VAR_4+15)>>4;

    int VAR_12= (VAR_5+15)>>4;

    PPMode *mode = VAR_8;

    PPContext *c = VAR_9;

    int VAR_13= FFMAX(FFABS(VAR_1[0]), FFABS(VAR_3[0]));

    int VAR_14 = FFABS(VAR_7);



    

    if(c->stride < VAR_13 || c->qpStride < VAR_14)

        reallocBuffers(c, VAR_4, VAR_5,

                       FFMAX(VAR_13, c->stride),

                       FFMAX(c->qpStride, VAR_14));



    if(!VAR_6 || (mode->lumMode & FORCE_QUANT)){

        int VAR_19;

        VAR_6= c->forcedQPTable;

        VAR_14 = VAR_7 = 0;

        if(mode->lumMode & FORCE_QUANT)

            for(VAR_19=0; VAR_19<VAR_11; VAR_19++) c->forcedQPTable[VAR_19]= mode->forcedQuant;

        else

            for(VAR_19=0; VAR_19<VAR_11; VAR_19++) c->forcedQPTable[VAR_19]= 1;

    }



    if(VAR_10 & PP_PICT_TYPE_QP2){

        int VAR_19;

        const int VAR_19= FFMAX(VAR_12 * VAR_14, VAR_11);

        for(VAR_19=0; VAR_19<(VAR_19>>2); VAR_19++){

            ((uint32_t*)c->stdQPTable)[VAR_19] = (((const uint32_t*)VAR_6)[VAR_19]>>1) & 0x7F7F7F7F;

        }

        for(VAR_19<<=2; VAR_19<VAR_19; VAR_19++){

            c->stdQPTable[VAR_19] = VAR_6[VAR_19]>>1;

        }

        VAR_6= c->stdQPTable;

        VAR_7= VAR_14;

    }



    if(0){

        int VAR_17,VAR_20;

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

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

                av_log(c, AV_LOG_INFO, "%2d ", VAR_6[VAR_17 + VAR_20*VAR_7]);

            }

            av_log(c, AV_LOG_INFO, "\n");

        }

        av_log(c, AV_LOG_INFO, "\n");

    }



    if((VAR_10&7)!=3){

        if (VAR_7 >= 0){

            int VAR_19;

            const int VAR_19= FFMAX(VAR_12 * VAR_7, VAR_11);

            for(VAR_19=0; VAR_19<(VAR_19>>2); VAR_19++){

                ((uint32_t*)c->nonBQPTable)[VAR_19] = ((const uint32_t*)VAR_6)[VAR_19] & 0x3F3F3F3F;

            }

            for(VAR_19<<=2; VAR_19<VAR_19; VAR_19++){

                c->nonBQPTable[VAR_19] = VAR_6[VAR_19] & 0x3F;

            }

        } else {

            int VAR_19,VAR_19;

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

                for(VAR_19=0; VAR_19<VAR_14; VAR_19++) {

                    c->nonBQPTable[VAR_19*VAR_14+VAR_19] = VAR_6[VAR_19*VAR_7+VAR_19] & 0x3F;

                }

            }

        }

    }



    av_log(c, AV_LOG_DEBUG, "using npp filters 0x%X/0x%X\n",

           mode->lumMode, mode->chromMode);



    postProcess(VAR_0[0], VAR_1[0], VAR_2[0], VAR_3[0],

                VAR_4, VAR_5, VAR_6, VAR_7, 0, mode, c);



    if (!(VAR_0[1] && VAR_0[2] && VAR_2[1] && VAR_2[2]))

        return;



    VAR_4  = (VAR_4 )>>c->hChromaSubSample;

    VAR_5 = (VAR_5)>>c->vChromaSubSample;



    if(mode->chromMode){

        postProcess(VAR_0[1], VAR_1[1], VAR_2[1], VAR_3[1],

                    VAR_4, VAR_5, VAR_6, VAR_7, 1, mode, c);

        postProcess(VAR_0[2], VAR_1[2], VAR_2[2], VAR_3[2],

                    VAR_4, VAR_5, VAR_6, VAR_7, 2, mode, c);

    }

    else if(VAR_1[1] == VAR_3[1] && VAR_1[2] == VAR_3[2]){

        linecpy(VAR_2[1], VAR_0[1], VAR_5, VAR_1[1]);

        linecpy(VAR_2[2], VAR_0[2], VAR_5, VAR_1[2]);

    }else{

        int VAR_20;

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

            memcpy(&(VAR_2[1][VAR_20*VAR_3[1]]), &(VAR_0[1][VAR_20*VAR_1[1]]), VAR_4);

            memcpy(&(VAR_2[2][VAR_20*VAR_3[2]]), &(VAR_0[2][VAR_20*VAR_1[2]]), VAR_4);

        }

    }

}

void  FUNC_0(const uint8_t * VAR_0[3], const int VAR_1[3],
uint8_t * VAR_2[3], const int VAR_3[3],
int VAR_4, int VAR_5,
const QP_STORE_T *VAR_6,  int VAR_7,
pp_mode *VAR_8,  void *VAR_9, int VAR_10)
{ int VAR_11 = (VAR_4+15)>>4; int VAR_12= (VAR_5+15)>>4; PPMode *mode = VAR_8; PPContext *c = VAR_9; int VAR_13= FFMAX(FFABS(VAR_1[0]), FFABS(VAR_3[0])); int VAR_14 = FFABS(VAR_7); if(c->stride < VAR_13 || c->qpStride < VAR_14)
reallocBuffers(c, VAR_4, VAR_5,
FFMAX(VAR_13, c->stride),
FFMAX(c->qpStride, VAR_14)); if(!VAR_6 || (mode->lumMode & FORCE_QUANT)){ int VAR_19; VAR_6= c->forcedQPTable; VAR_14 = VAR_7 = 0; if(mode->lumMode & FORCE_QUANT)
for(VAR_19=0; VAR_19<VAR_11; VAR_19++) c->forcedQPTable[VAR_19]= mode->forcedQuant; else
for(VAR_19=0; VAR_19<VAR_11; VAR_19++) c->forcedQPTable[VAR_19]= 1; } if(VAR_10 & PP_PICT_TYPE_QP2){ int VAR_19; const int VAR_19= FFMAX(VAR_12 * VAR_14, VAR_11); for(VAR_19=0; VAR_19<(VAR_19>>2); VAR_19++){ ((uint32_t*)c->stdQPTable)[VAR_19] = (((const uint32_t*)VAR_6)[VAR_19]>>1) & 0x7F7F7F7F; } for(VAR_19<<=2; VAR_19<VAR_19; VAR_19++){ c->stdQPTable[VAR_19] = VAR_6[VAR_19]>>1; } VAR_6= c->stdQPTable; VAR_7= VAR_14; } if(0){ int VAR_17,VAR_20; for(VAR_20=0; VAR_20<VAR_12; VAR_20++){ for(VAR_17=0; VAR_17<VAR_11; VAR_17++){ av_log(c, AV_LOG_INFO, "%2d ", VAR_6[VAR_17 + VAR_20*VAR_7]); } av_log(c, AV_LOG_INFO, "\n"); } av_log(c, AV_LOG_INFO, "\n"); } if((VAR_10&7)!=3){ if (VAR_7 >= 0){ int VAR_19; const int VAR_19= FFMAX(VAR_12 * VAR_7, VAR_11); for(VAR_19=0; VAR_19<(VAR_19>>2); VAR_19++){ ((uint32_t*)c->nonBQPTable)[VAR_19] = ((const uint32_t*)VAR_6)[VAR_19] & 0x3F3F3F3F; } for(VAR_19<<=2; VAR_19<VAR_19; VAR_19++){ c->nonBQPTable[VAR_19] = VAR_6[VAR_19] & 0x3F; } } else { int VAR_19,VAR_19; for(VAR_19=0; VAR_19<VAR_12; VAR_19++) { for(VAR_19=0; VAR_19<VAR_14; VAR_19++) { c->nonBQPTable[VAR_19*VAR_14+VAR_19] = VAR_6[VAR_19*VAR_7+VAR_19] & 0x3F; } } } } av_log(c, AV_LOG_DEBUG, "using npp filters 0x%X/0x%X\n",
mode->lumMode, mode->chromMode); postProcess(VAR_0[0], VAR_1[0], VAR_2[0], VAR_3[0],
VAR_4, VAR_5, VAR_6, VAR_7, 0, mode, c); if (!(VAR_0[1] && VAR_0[2] && VAR_2[1] && VAR_2[2]))
return; VAR_4  = (VAR_4 )>>c->hChromaSubSample; VAR_5 = (VAR_5)>>c->vChromaSubSample; if(mode->chromMode){ postProcess(VAR_0[1], VAR_1[1], VAR_2[1], VAR_3[1],
VAR_4, VAR_5, VAR_6, VAR_7, 1, mode, c); postProcess(VAR_0[2], VAR_1[2], VAR_2[2], VAR_3[2],
VAR_4, VAR_5, VAR_6, VAR_7, 2, mode, c); } else if(VAR_1[1] == VAR_3[1] && VAR_1[2] == VAR_3[2]){ linecpy(VAR_2[1], VAR_0[1], VAR_5, VAR_1[1]); linecpy(VAR_2[2], VAR_0[2], VAR_5, VAR_1[2]); }else{ int VAR_20; for(VAR_20=0; VAR_20<VAR_5; VAR_20++){ memcpy(&(VAR_2[1][VAR_20*VAR_3[1]]), &(VAR_0[1][VAR_20*VAR_1[1]]), VAR_4); memcpy(&(VAR_2[2][VAR_20*VAR_3[2]]), &(VAR_0[2][VAR_20*VAR_1[2]]), VAR_4); } } }