int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s)

{

    char buf1[32], tuple_type[32];

    int h, w, depth, maxval;



    pnm_get(s, buf1, sizeof(buf1));

    s->type= buf1[1]-'0';

    if(buf1[0] != 'P')

        return AVERROR_INVALIDDATA;



    if (s->type==1 || s->type==4) {

        avctx->pix_fmt = AV_PIX_FMT_MONOWHITE;

    } else if (s->type==2 || s->type==5) {

        if (avctx->codec_id == AV_CODEC_ID_PGMYUV)

            avctx->pix_fmt = AV_PIX_FMT_YUV420P;

        else

            avctx->pix_fmt = AV_PIX_FMT_GRAY8;

    } else if (s->type==3 || s->type==6) {

        avctx->pix_fmt = AV_PIX_FMT_RGB24;

    } else if (s->type==7) {

        w      = -1;

        h      = -1;

        maxval = -1;

        depth  = -1;

        tuple_type[0] = '\0';

        for (;;) {

            pnm_get(s, buf1, sizeof(buf1));

            if (!strcmp(buf1, "WIDTH")) {

                pnm_get(s, buf1, sizeof(buf1));

                w = strtol(buf1, NULL, 10);

            } else if (!strcmp(buf1, "HEIGHT")) {

                pnm_get(s, buf1, sizeof(buf1));

                h = strtol(buf1, NULL, 10);

            } else if (!strcmp(buf1, "DEPTH")) {

                pnm_get(s, buf1, sizeof(buf1));

                depth = strtol(buf1, NULL, 10);

            } else if (!strcmp(buf1, "MAXVAL")) {

                pnm_get(s, buf1, sizeof(buf1));

                maxval = strtol(buf1, NULL, 10);

            } else if (!strcmp(buf1, "TUPLTYPE") ||

                       /* libavcodec used to write invalid files */

                       !strcmp(buf1, "TUPLETYPE")) {

                pnm_get(s, tuple_type, sizeof(tuple_type));

            } else if (!strcmp(buf1, "ENDHDR")) {

                break;

            } else {

                return AVERROR_INVALIDDATA;

            }

        }

        /* check that all tags are present */

        if (w <= 0 || h <= 0 || maxval <= 0 || depth <= 0 || tuple_type[0] == '\0' || av_image_check_size(w, h, 0, avctx) || s->bytestream >= s->bytestream_end)

            return AVERROR_INVALIDDATA;



        avctx->width  = w;

        avctx->height = h;

        s->maxval     = maxval;

        if (depth == 1) {

            if (maxval == 1) {

                avctx->pix_fmt = AV_PIX_FMT_MONOBLACK;

            } else if (maxval < 256) {

                avctx->pix_fmt = AV_PIX_FMT_GRAY8;

            } else {

                avctx->pix_fmt = AV_PIX_FMT_GRAY16;

            }

        } else if (depth == 2) {

            if (maxval == 255)

                avctx->pix_fmt = AV_PIX_FMT_GRAY8A;

        } else if (depth == 3) {

            if (maxval < 256) {

                avctx->pix_fmt = AV_PIX_FMT_RGB24;

            } else {

                avctx->pix_fmt = AV_PIX_FMT_RGB48;

            }

        } else if (depth == 4) {

            if (maxval < 256) {

                avctx->pix_fmt = AV_PIX_FMT_RGBA;

            } else {

                avctx->pix_fmt = AV_PIX_FMT_RGBA64;

            }

        } else {

            return AVERROR_INVALIDDATA;

        }

        return 0;

    } else {

        return AVERROR_INVALIDDATA;

    }

    pnm_get(s, buf1, sizeof(buf1));

    w = atoi(buf1);

    pnm_get(s, buf1, sizeof(buf1));

    h = atoi(buf1);

    if(w <= 0 || h <= 0 || av_image_check_size(w, h, 0, avctx) || s->bytestream >= s->bytestream_end)

        return AVERROR_INVALIDDATA;



    avctx->width  = w;

    avctx->height = h;



    if (avctx->pix_fmt != AV_PIX_FMT_MONOWHITE && avctx->pix_fmt != AV_PIX_FMT_MONOBLACK) {

        pnm_get(s, buf1, sizeof(buf1));

        s->maxval = atoi(buf1);

        if (s->maxval <= 0) {

            av_log(avctx, AV_LOG_ERROR, "Invalid maxval: %d\n", s->maxval);

            s->maxval = 255;

        }

        if (s->maxval >= 256) {

            if (avctx->pix_fmt == AV_PIX_FMT_GRAY8) {

                avctx->pix_fmt = AV_PIX_FMT_GRAY16;

            } else if (avctx->pix_fmt == AV_PIX_FMT_RGB24) {

                avctx->pix_fmt = AV_PIX_FMT_RGB48;

            } else if (avctx->pix_fmt == AV_PIX_FMT_YUV420P && s->maxval < 65536) {

                if (s->maxval < 512)

                    avctx->pix_fmt = AV_PIX_FMT_YUV420P9;

                else if (s->maxval < 1024)

                    avctx->pix_fmt = AV_PIX_FMT_YUV420P10;

                else

                    avctx->pix_fmt = AV_PIX_FMT_YUV420P16;

            } else {

                av_log(avctx, AV_LOG_ERROR, "Unsupported pixel format\n");

                avctx->pix_fmt = AV_PIX_FMT_NONE;

                return AVERROR_INVALIDDATA;

            }

        }

    }else

        s->maxval=1;

    /* more check if YUV420 */

    if (av_pix_fmt_desc_get(avctx->pix_fmt)->flags & AV_PIX_FMT_FLAG_PLANAR) {

        if ((avctx->width & 1) != 0)

            return AVERROR_INVALIDDATA;

        h = (avctx->height * 2);

        if ((h % 3) != 0)

            return AVERROR_INVALIDDATA;

        h /= 3;

        avctx->height = h;

    }

    return 0;

}

int ff_pnm_decode_header(AVCodecContext *avctx, PNMContext * const s)

{

    char buf1[32], tuple_type[32];

    int h, w, depth, maxval;



    pnm_get(s, buf1, sizeof(buf1));

    s->type= buf1[1]-'0';

    if(buf1[0] != 'P')

        return AVERROR_INVALIDDATA;



    if (s->type==1 || s->type==4) {

        avctx->pix_fmt = AV_PIX_FMT_MONOWHITE;

    } else if (s->type==2 || s->type==5) {

        if (avctx->codec_id == AV_CODEC_ID_PGMYUV)

            avctx->pix_fmt = AV_PIX_FMT_YUV420P;

        else

            avctx->pix_fmt = AV_PIX_FMT_GRAY8;

    } else if (s->type==3 || s->type==6) {

        avctx->pix_fmt = AV_PIX_FMT_RGB24;

    } else if (s->type==7) {

        w      = -1;

        h      = -1;

        maxval = -1;

        depth  = -1;

        tuple_type[0] = '\0';

        for (;;) {

            pnm_get(s, buf1, sizeof(buf1));

            if (!strcmp(buf1, "WIDTH")) {

                pnm_get(s, buf1, sizeof(buf1));

                w = strtol(buf1, NULL, 10);

            } else if (!strcmp(buf1, "HEIGHT")) {

                pnm_get(s, buf1, sizeof(buf1));

                h = strtol(buf1, NULL, 10);

            } else if (!strcmp(buf1, "DEPTH")) {

                pnm_get(s, buf1, sizeof(buf1));

                depth = strtol(buf1, NULL, 10);

            } else if (!strcmp(buf1, "MAXVAL")) {

                pnm_get(s, buf1, sizeof(buf1));

                maxval = strtol(buf1, NULL, 10);

            } else if (!strcmp(buf1, "TUPLTYPE") ||

                       

                       !strcmp(buf1, "TUPLETYPE")) {

                pnm_get(s, tuple_type, sizeof(tuple_type));

            } else if (!strcmp(buf1, "ENDHDR")) {

                break;

            } else {

                return AVERROR_INVALIDDATA;

            }

        }

        

        if (w <= 0 || h <= 0 || maxval <= 0 || depth <= 0 || tuple_type[0] == '\0' || av_image_check_size(w, h, 0, avctx) || s->bytestream >= s->bytestream_end)

            return AVERROR_INVALIDDATA;



        avctx->width  = w;

        avctx->height = h;

        s->maxval     = maxval;

        if (depth == 1) {

            if (maxval == 1) {

                avctx->pix_fmt = AV_PIX_FMT_MONOBLACK;

            } else if (maxval < 256) {

                avctx->pix_fmt = AV_PIX_FMT_GRAY8;

            } else {

                avctx->pix_fmt = AV_PIX_FMT_GRAY16;

            }

        } else if (depth == 2) {

            if (maxval == 255)

                avctx->pix_fmt = AV_PIX_FMT_GRAY8A;

        } else if (depth == 3) {

            if (maxval < 256) {

                avctx->pix_fmt = AV_PIX_FMT_RGB24;

            } else {

                avctx->pix_fmt = AV_PIX_FMT_RGB48;

            }

        } else if (depth == 4) {

            if (maxval < 256) {

                avctx->pix_fmt = AV_PIX_FMT_RGBA;

            } else {

                avctx->pix_fmt = AV_PIX_FMT_RGBA64;

            }

        } else {

            return AVERROR_INVALIDDATA;

        }

        return 0;

    } else {

        return AVERROR_INVALIDDATA;

    }

    pnm_get(s, buf1, sizeof(buf1));

    w = atoi(buf1);

    pnm_get(s, buf1, sizeof(buf1));

    h = atoi(buf1);

    if(w <= 0 || h <= 0 || av_image_check_size(w, h, 0, avctx) || s->bytestream >= s->bytestream_end)

        return AVERROR_INVALIDDATA;



    avctx->width  = w;

    avctx->height = h;



    if (avctx->pix_fmt != AV_PIX_FMT_MONOWHITE && avctx->pix_fmt != AV_PIX_FMT_MONOBLACK) {

        pnm_get(s, buf1, sizeof(buf1));

        s->maxval = atoi(buf1);

        if (s->maxval <= 0) {

            av_log(avctx, AV_LOG_ERROR, "Invalid maxval: %d\n", s->maxval);

            s->maxval = 255;

        }

        if (s->maxval >= 256) {

            if (avctx->pix_fmt == AV_PIX_FMT_GRAY8) {

                avctx->pix_fmt = AV_PIX_FMT_GRAY16;

            } else if (avctx->pix_fmt == AV_PIX_FMT_RGB24) {

                avctx->pix_fmt = AV_PIX_FMT_RGB48;

            } else if (avctx->pix_fmt == AV_PIX_FMT_YUV420P && s->maxval < 65536) {

                if (s->maxval < 512)

                    avctx->pix_fmt = AV_PIX_FMT_YUV420P9;

                else if (s->maxval < 1024)

                    avctx->pix_fmt = AV_PIX_FMT_YUV420P10;

                else

                    avctx->pix_fmt = AV_PIX_FMT_YUV420P16;

            } else {

                av_log(avctx, AV_LOG_ERROR, "Unsupported pixel format\n");

                avctx->pix_fmt = AV_PIX_FMT_NONE;

                return AVERROR_INVALIDDATA;

            }

        }

    }else

        s->maxval=1;

    

    if (av_pix_fmt_desc_get(avctx->pix_fmt)->flags & AV_PIX_FMT_FLAG_PLANAR) {

        if ((avctx->width & 1) != 0)

            return AVERROR_INVALIDDATA;

        h = (avctx->height * 2);

        if ((h % 3) != 0)

            return AVERROR_INVALIDDATA;

        h /= 3;

        avctx->height = h;

    }

    return 0;

}

int FUNC_0(AVCodecContext *VAR_0, PNMContext * const VAR_1)

{

    char VAR_2[32], VAR_3[32];

    int VAR_4, VAR_5, VAR_6, VAR_7;



    pnm_get(VAR_1, VAR_2, sizeof(VAR_2));

    VAR_1->type= VAR_2[1]-'0';

    if(VAR_2[0] != 'P')

        return AVERROR_INVALIDDATA;



    if (VAR_1->type==1 || VAR_1->type==4) {

        VAR_0->pix_fmt = AV_PIX_FMT_MONOWHITE;

    } else if (VAR_1->type==2 || VAR_1->type==5) {

        if (VAR_0->codec_id == AV_CODEC_ID_PGMYUV)

            VAR_0->pix_fmt = AV_PIX_FMT_YUV420P;

        else

            VAR_0->pix_fmt = AV_PIX_FMT_GRAY8;

    } else if (VAR_1->type==3 || VAR_1->type==6) {

        VAR_0->pix_fmt = AV_PIX_FMT_RGB24;

    } else if (VAR_1->type==7) {

        VAR_5      = -1;

        VAR_4      = -1;

        VAR_7 = -1;

        VAR_6  = -1;

        VAR_3[0] = '\0';

        for (;;) {

            pnm_get(VAR_1, VAR_2, sizeof(VAR_2));

            if (!strcmp(VAR_2, "WIDTH")) {

                pnm_get(VAR_1, VAR_2, sizeof(VAR_2));

                VAR_5 = strtol(VAR_2, NULL, 10);

            } else if (!strcmp(VAR_2, "HEIGHT")) {

                pnm_get(VAR_1, VAR_2, sizeof(VAR_2));

                VAR_4 = strtol(VAR_2, NULL, 10);

            } else if (!strcmp(VAR_2, "DEPTH")) {

                pnm_get(VAR_1, VAR_2, sizeof(VAR_2));

                VAR_6 = strtol(VAR_2, NULL, 10);

            } else if (!strcmp(VAR_2, "MAXVAL")) {

                pnm_get(VAR_1, VAR_2, sizeof(VAR_2));

                VAR_7 = strtol(VAR_2, NULL, 10);

            } else if (!strcmp(VAR_2, "TUPLTYPE") ||

                       

                       !strcmp(VAR_2, "TUPLETYPE")) {

                pnm_get(VAR_1, VAR_3, sizeof(VAR_3));

            } else if (!strcmp(VAR_2, "ENDHDR")) {

                break;

            } else {

                return AVERROR_INVALIDDATA;

            }

        }

        

        if (VAR_5 <= 0 || VAR_4 <= 0 || VAR_7 <= 0 || VAR_6 <= 0 || VAR_3[0] == '\0' || av_image_check_size(VAR_5, VAR_4, 0, VAR_0) || VAR_1->bytestream >= VAR_1->bytestream_end)

            return AVERROR_INVALIDDATA;



        VAR_0->width  = VAR_5;

        VAR_0->height = VAR_4;

        VAR_1->VAR_7     = VAR_7;

        if (VAR_6 == 1) {

            if (VAR_7 == 1) {

                VAR_0->pix_fmt = AV_PIX_FMT_MONOBLACK;

            } else if (VAR_7 < 256) {

                VAR_0->pix_fmt = AV_PIX_FMT_GRAY8;

            } else {

                VAR_0->pix_fmt = AV_PIX_FMT_GRAY16;

            }

        } else if (VAR_6 == 2) {

            if (VAR_7 == 255)

                VAR_0->pix_fmt = AV_PIX_FMT_GRAY8A;

        } else if (VAR_6 == 3) {

            if (VAR_7 < 256) {

                VAR_0->pix_fmt = AV_PIX_FMT_RGB24;

            } else {

                VAR_0->pix_fmt = AV_PIX_FMT_RGB48;

            }

        } else if (VAR_6 == 4) {

            if (VAR_7 < 256) {

                VAR_0->pix_fmt = AV_PIX_FMT_RGBA;

            } else {

                VAR_0->pix_fmt = AV_PIX_FMT_RGBA64;

            }

        } else {

            return AVERROR_INVALIDDATA;

        }

        return 0;

    } else {

        return AVERROR_INVALIDDATA;

    }

    pnm_get(VAR_1, VAR_2, sizeof(VAR_2));

    VAR_5 = atoi(VAR_2);

    pnm_get(VAR_1, VAR_2, sizeof(VAR_2));

    VAR_4 = atoi(VAR_2);

    if(VAR_5 <= 0 || VAR_4 <= 0 || av_image_check_size(VAR_5, VAR_4, 0, VAR_0) || VAR_1->bytestream >= VAR_1->bytestream_end)

        return AVERROR_INVALIDDATA;



    VAR_0->width  = VAR_5;

    VAR_0->height = VAR_4;



    if (VAR_0->pix_fmt != AV_PIX_FMT_MONOWHITE && VAR_0->pix_fmt != AV_PIX_FMT_MONOBLACK) {

        pnm_get(VAR_1, VAR_2, sizeof(VAR_2));

        VAR_1->VAR_7 = atoi(VAR_2);

        if (VAR_1->VAR_7 <= 0) {

            av_log(VAR_0, AV_LOG_ERROR, "Invalid VAR_7: %d\n", VAR_1->VAR_7);

            VAR_1->VAR_7 = 255;

        }

        if (VAR_1->VAR_7 >= 256) {

            if (VAR_0->pix_fmt == AV_PIX_FMT_GRAY8) {

                VAR_0->pix_fmt = AV_PIX_FMT_GRAY16;

            } else if (VAR_0->pix_fmt == AV_PIX_FMT_RGB24) {

                VAR_0->pix_fmt = AV_PIX_FMT_RGB48;

            } else if (VAR_0->pix_fmt == AV_PIX_FMT_YUV420P && VAR_1->VAR_7 < 65536) {

                if (VAR_1->VAR_7 < 512)

                    VAR_0->pix_fmt = AV_PIX_FMT_YUV420P9;

                else if (VAR_1->VAR_7 < 1024)

                    VAR_0->pix_fmt = AV_PIX_FMT_YUV420P10;

                else

                    VAR_0->pix_fmt = AV_PIX_FMT_YUV420P16;

            } else {

                av_log(VAR_0, AV_LOG_ERROR, "Unsupported pixel format\n");

                VAR_0->pix_fmt = AV_PIX_FMT_NONE;

                return AVERROR_INVALIDDATA;

            }

        }

    }else

        VAR_1->VAR_7=1;

    

    if (av_pix_fmt_desc_get(VAR_0->pix_fmt)->flags & AV_PIX_FMT_FLAG_PLANAR) {

        if ((VAR_0->width & 1) != 0)

            return AVERROR_INVALIDDATA;

        VAR_4 = (VAR_0->height * 2);

        if ((VAR_4 % 3) != 0)

            return AVERROR_INVALIDDATA;

        VAR_4 /= 3;

        VAR_0->height = VAR_4;

    }

    return 0;

}

int FUNC_0(AVCodecContext *VAR_0, PNMContext * const VAR_1)
{ char VAR_2[32], VAR_3[32]; int VAR_4, VAR_5, VAR_6, VAR_7; pnm_get(VAR_1, VAR_2, sizeof(VAR_2)); VAR_1->type= VAR_2[1]-'0'; if(VAR_2[0] != 'P')
return AVERROR_INVALIDDATA; if (VAR_1->type==1 || VAR_1->type==4) { VAR_0->pix_fmt = AV_PIX_FMT_MONOWHITE; } else if (VAR_1->type==2 || VAR_1->type==5) { if (VAR_0->codec_id == AV_CODEC_ID_PGMYUV)
VAR_0->pix_fmt = AV_PIX_FMT_YUV420P; else
VAR_0->pix_fmt = AV_PIX_FMT_GRAY8; } else if (VAR_1->type==3 || VAR_1->type==6) { VAR_0->pix_fmt = AV_PIX_FMT_RGB24; } else if (VAR_1->type==7) { VAR_5      = -1; VAR_4      = -1; VAR_7 = -1; VAR_6  = -1; VAR_3[0] = '\0'; for (;;) { pnm_get(VAR_1, VAR_2, sizeof(VAR_2)); if (!strcmp(VAR_2, "WIDTH")) { pnm_get(VAR_1, VAR_2, sizeof(VAR_2)); VAR_5 = strtol(VAR_2, NULL, 10); } else if (!strcmp(VAR_2, "HEIGHT")) { pnm_get(VAR_1, VAR_2, sizeof(VAR_2)); VAR_4 = strtol(VAR_2, NULL, 10); } else if (!strcmp(VAR_2, "DEPTH")) { pnm_get(VAR_1, VAR_2, sizeof(VAR_2)); VAR_6 = strtol(VAR_2, NULL, 10); } else if (!strcmp(VAR_2, "MAXVAL")) { pnm_get(VAR_1, VAR_2, sizeof(VAR_2)); VAR_7 = strtol(VAR_2, NULL, 10); } else if (!strcmp(VAR_2, "TUPLTYPE") || !strcmp(VAR_2, "TUPLETYPE")) { pnm_get(VAR_1, VAR_3, sizeof(VAR_3)); } else if (!strcmp(VAR_2, "ENDHDR")) { break; } else { return AVERROR_INVALIDDATA; } } if (VAR_5 <= 0 || VAR_4 <= 0 || VAR_7 <= 0 || VAR_6 <= 0 || VAR_3[0] == '\0' || av_image_check_size(VAR_5, VAR_4, 0, VAR_0) || VAR_1->bytestream >= VAR_1->bytestream_end)
return AVERROR_INVALIDDATA; VAR_0->width  = VAR_5; VAR_0->height = VAR_4; VAR_1->VAR_7     = VAR_7; if (VAR_6 == 1) { if (VAR_7 == 1) { VAR_0->pix_fmt = AV_PIX_FMT_MONOBLACK; } else if (VAR_7 < 256) { VAR_0->pix_fmt = AV_PIX_FMT_GRAY8; } else { VAR_0->pix_fmt = AV_PIX_FMT_GRAY16; } } else if (VAR_6 == 2) { if (VAR_7 == 255)
VAR_0->pix_fmt = AV_PIX_FMT_GRAY8A; } else if (VAR_6 == 3) { if (VAR_7 < 256) { VAR_0->pix_fmt = AV_PIX_FMT_RGB24; } else { VAR_0->pix_fmt = AV_PIX_FMT_RGB48; } } else if (VAR_6 == 4) { if (VAR_7 < 256) { VAR_0->pix_fmt = AV_PIX_FMT_RGBA; } else { VAR_0->pix_fmt = AV_PIX_FMT_RGBA64; } } else { return AVERROR_INVALIDDATA; } return 0; } else { return AVERROR_INVALIDDATA; } pnm_get(VAR_1, VAR_2, sizeof(VAR_2)); VAR_5 = atoi(VAR_2); pnm_get(VAR_1, VAR_2, sizeof(VAR_2)); VAR_4 = atoi(VAR_2); if(VAR_5 <= 0 || VAR_4 <= 0 || av_image_check_size(VAR_5, VAR_4, 0, VAR_0) || VAR_1->bytestream >= VAR_1->bytestream_end)
return AVERROR_INVALIDDATA; VAR_0->width  = VAR_5; VAR_0->height = VAR_4; if (VAR_0->pix_fmt != AV_PIX_FMT_MONOWHITE && VAR_0->pix_fmt != AV_PIX_FMT_MONOBLACK) { pnm_get(VAR_1, VAR_2, sizeof(VAR_2)); VAR_1->VAR_7 = atoi(VAR_2); if (VAR_1->VAR_7 <= 0) { av_log(VAR_0, AV_LOG_ERROR, "Invalid VAR_7: %d\n", VAR_1->VAR_7); VAR_1->VAR_7 = 255; } if (VAR_1->VAR_7 >= 256) { if (VAR_0->pix_fmt == AV_PIX_FMT_GRAY8) { VAR_0->pix_fmt = AV_PIX_FMT_GRAY16; } else if (VAR_0->pix_fmt == AV_PIX_FMT_RGB24) { VAR_0->pix_fmt = AV_PIX_FMT_RGB48; } else if (VAR_0->pix_fmt == AV_PIX_FMT_YUV420P && VAR_1->VAR_7 < 65536) { if (VAR_1->VAR_7 < 512)
VAR_0->pix_fmt = AV_PIX_FMT_YUV420P9; else if (VAR_1->VAR_7 < 1024)
VAR_0->pix_fmt = AV_PIX_FMT_YUV420P10; else
VAR_0->pix_fmt = AV_PIX_FMT_YUV420P16; } else { av_log(VAR_0, AV_LOG_ERROR, "Unsupported pixel format\n"); VAR_0->pix_fmt = AV_PIX_FMT_NONE; return AVERROR_INVALIDDATA; } } }else VAR_1->VAR_7=1; if (av_pix_fmt_desc_get(VAR_0->pix_fmt)->flags & AV_PIX_FMT_FLAG_PLANAR) { if ((VAR_0->width & 1) != 0)
return AVERROR_INVALIDDATA; VAR_4 = (VAR_0->height * 2); if ((VAR_4 % 3) != 0)
return AVERROR_INVALIDDATA; VAR_4 /= 3; VAR_0->height = VAR_4; } return 0; }