int ff_h264_check_intra_pred_mode(H264Context *h, int mode){

    MpegEncContext * const s = &h->s;

    static const int8_t top [7]= {LEFT_DC_PRED8x8, 1,-1,-1};

    static const int8_t left[7]= { TOP_DC_PRED8x8,-1, 2,-1,DC_128_PRED8x8};



    if(mode > 6U) {

        av_log(h->s.avctx, AV_LOG_ERROR, "out of range intra chroma pred mode at %d %d\n", s->mb_x, s->mb_y);

        return -1;

    }



    if(!(h->top_samples_available&0x8000)){

        mode= top[ mode ];

        if(mode<0){

            av_log(h->s.avctx, AV_LOG_ERROR, "top block unavailable for requested intra mode at %d %d\n", s->mb_x, s->mb_y);

            return -1;

        }

    }



    if((h->left_samples_available&0x8080) != 0x8080){

        mode= left[ mode ];

        if(h->left_samples_available&0x8080){ //mad cow disease mode, aka MBAFF + constrained_intra_pred

            mode= ALZHEIMER_DC_L0T_PRED8x8 + (!(h->left_samples_available&0x8000)) + 2*(mode == DC_128_PRED8x8);

        }

        if(mode<0){

            av_log(h->s.avctx, AV_LOG_ERROR, "left block unavailable for requested intra mode at %d %d\n", s->mb_x, s->mb_y);

            return -1;

        }

    }



    return mode;

}

int ff_h264_check_intra_pred_mode(H264Context *h, int mode){

    MpegEncContext * const s = &h->s;

    static const int8_t top [7]= {LEFT_DC_PRED8x8, 1,-1,-1};

    static const int8_t left[7]= { TOP_DC_PRED8x8,-1, 2,-1,DC_128_PRED8x8};



    if(mode > 6U) {

        av_log(h->s.avctx, AV_LOG_ERROR, "out of range intra chroma pred mode at %d %d\n", s->mb_x, s->mb_y);

        return -1;

    }



    if(!(h->top_samples_available&0x8000)){

        mode= top[ mode ];

        if(mode<0){

            av_log(h->s.avctx, AV_LOG_ERROR, "top block unavailable for requested intra mode at %d %d\n", s->mb_x, s->mb_y);

            return -1;

        }

    }



    if((h->left_samples_available&0x8080) != 0x8080){

        mode= left[ mode ];

        if(h->left_samples_available&0x8080){ 

            mode= ALZHEIMER_DC_L0T_PRED8x8 + (!(h->left_samples_available&0x8000)) + 2*(mode == DC_128_PRED8x8);

        }

        if(mode<0){

            av_log(h->s.avctx, AV_LOG_ERROR, "left block unavailable for requested intra mode at %d %d\n", s->mb_x, s->mb_y);

            return -1;

        }

    }



    return mode;

}

int FUNC_0(H264Context *VAR_0, int VAR_1){

    MpegEncContext * const s = &VAR_0->s;

    static const int8_t VAR_2 [7]= {LEFT_DC_PRED8x8, 1,-1,-1};

    static const int8_t VAR_3[7]= { TOP_DC_PRED8x8,-1, 2,-1,DC_128_PRED8x8};



    if(VAR_1 > 6U) {

        av_log(VAR_0->s.avctx, AV_LOG_ERROR, "out of range intra chroma pred VAR_1 at %d %d\n", s->mb_x, s->mb_y);

        return -1;

    }



    if(!(VAR_0->top_samples_available&0x8000)){

        VAR_1= VAR_2[ VAR_1 ];

        if(VAR_1<0){

            av_log(VAR_0->s.avctx, AV_LOG_ERROR, "VAR_2 block unavailable for requested intra VAR_1 at %d %d\n", s->mb_x, s->mb_y);

            return -1;

        }

    }



    if((VAR_0->left_samples_available&0x8080) != 0x8080){

        VAR_1= VAR_3[ VAR_1 ];

        if(VAR_0->left_samples_available&0x8080){ 

            VAR_1= ALZHEIMER_DC_L0T_PRED8x8 + (!(VAR_0->left_samples_available&0x8000)) + 2*(VAR_1 == DC_128_PRED8x8);

        }

        if(VAR_1<0){

            av_log(VAR_0->s.avctx, AV_LOG_ERROR, "VAR_3 block unavailable for requested intra VAR_1 at %d %d\n", s->mb_x, s->mb_y);

            return -1;

        }

    }



    return VAR_1;

}

int FUNC_0(H264Context *VAR_0, int VAR_1){ MpegEncContext * const s = &VAR_0->s; static const int8_t VAR_2 [7]= {LEFT_DC_PRED8x8, 1,-1,-1}; static const int8_t VAR_3[7]= { TOP_DC_PRED8x8,-1, 2,-1,DC_128_PRED8x8}; if(VAR_1 > 6U) { av_log(VAR_0->s.avctx, AV_LOG_ERROR, "out of range intra chroma pred VAR_1 at %d %d\n", s->mb_x, s->mb_y); return -1; } if(!(VAR_0->top_samples_available&0x8000)){ VAR_1= VAR_2[ VAR_1 ]; if(VAR_1<0){ av_log(VAR_0->s.avctx, AV_LOG_ERROR, "VAR_2 block unavailable for requested intra VAR_1 at %d %d\n", s->mb_x, s->mb_y); return -1; } } if((VAR_0->left_samples_available&0x8080) != 0x8080){ VAR_1= VAR_3[ VAR_1 ]; if(VAR_0->left_samples_available&0x8080){ VAR_1= ALZHEIMER_DC_L0T_PRED8x8 + (!(VAR_0->left_samples_available&0x8000)) + 2*(VAR_1 == DC_128_PRED8x8); } if(VAR_1<0){ av_log(VAR_0->s.avctx, AV_LOG_ERROR, "VAR_3 block unavailable for requested intra VAR_1 at %d %d\n", s->mb_x, s->mb_y); return -1; } } return VAR_1; }