int ff_h264_check_intra_pred_mode(H264Context *h, int mode, int is_chroma)

{

    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->avctx, AV_LOG_ERROR,

               "out of range intra chroma pred mode at %d %d\n",

               h->mb_x, h->mb_y);

        return -1;

    }



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

        mode = top[mode];

        if (mode < 0) {

            av_log(h->avctx, AV_LOG_ERROR,

                   "top block unavailable for requested intra mode at %d %d\n",

                   h->mb_x, h->mb_y);

            return -1;

        }

    }



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

        mode = left[mode];

        if (is_chroma && (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->avctx, AV_LOG_ERROR,

                   "left block unavailable for requested intra mode at %d %d\n",

                   h->mb_x, h->mb_y);

            return -1;

        }

    }



    return mode;

}

int ff_h264_check_intra_pred_mode(H264Context *h, int mode, int is_chroma)

{

    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->avctx, AV_LOG_ERROR,

               "out of range intra chroma pred mode at %d %d\n",

               h->mb_x, h->mb_y);

        return -1;

    }



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

        mode = top[mode];

        if (mode < 0) {

            av_log(h->avctx, AV_LOG_ERROR,

                   "top block unavailable for requested intra mode at %d %d\n",

                   h->mb_x, h->mb_y);

            return -1;

        }

    }



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

        mode = left[mode];

        if (is_chroma && (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->avctx, AV_LOG_ERROR,

                   "left block unavailable for requested intra mode at %d %d\n",

                   h->mb_x, h->mb_y);

            return -1;

        }

    }



    return mode;

}

int FUNC_0(H264Context *VAR_0, int VAR_1, int VAR_2)

{

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

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



    if (VAR_1 > 6U) {

        av_log(VAR_0->avctx, AV_LOG_ERROR,

               "out of range intra chroma pred VAR_1 at %d %d\n",

               VAR_0->mb_x, VAR_0->mb_y);

        return -1;

    }



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

        VAR_1 = VAR_3[VAR_1];

        if (VAR_1 < 0) {

            av_log(VAR_0->avctx, AV_LOG_ERROR,

                   "VAR_3 block unavailable for requested intra VAR_1 at %d %d\n",

                   VAR_0->mb_x, VAR_0->mb_y);

            return -1;

        }

    }



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

        VAR_1 = VAR_4[VAR_1];

        if (VAR_2 && (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->avctx, AV_LOG_ERROR,

                   "VAR_4 block unavailable for requested intra VAR_1 at %d %d\n",

                   VAR_0->mb_x, VAR_0->mb_y);

            return -1;

        }

    }



    return VAR_1;

}

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