static int ptx_decode_frame(AVCodecContext *avctx, void *data, int *data_size,

                            AVPacket *avpkt) {

    const uint8_t *buf = avpkt->data;

    const uint8_t *buf_end = avpkt->data + avpkt->size;

    PTXContext * const s = avctx->priv_data;

    AVFrame *picture = data;

    AVFrame * const p = &s->picture;

    unsigned int offset, w, h, y, stride, bytes_per_pixel;

    uint8_t *ptr;



    if (buf_end - buf < 14)

        return AVERROR_INVALIDDATA;

    offset          = AV_RL16(buf);

    w               = AV_RL16(buf+8);

    h               = AV_RL16(buf+10);

    bytes_per_pixel = AV_RL16(buf+12) >> 3;



    if (bytes_per_pixel != 2) {

        av_log_ask_for_sample(avctx, "Image format is not RGB15.\n");

        return -1;

    }



    avctx->pix_fmt = PIX_FMT_RGB555;



    if (buf_end - buf < offset)

        return AVERROR_INVALIDDATA;

    if (offset != 0x2c)

        av_log_ask_for_sample(avctx, "offset != 0x2c\n");



    buf += offset;



    if (p->data[0])

        avctx->release_buffer(avctx, p);



    if (av_image_check_size(w, h, 0, avctx))

        return -1;

    if (w != avctx->width || h != avctx->height)

        avcodec_set_dimensions(avctx, w, h);

    if (avctx->get_buffer(avctx, p) < 0) {

        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");

        return -1;

    }



    p->pict_type = AV_PICTURE_TYPE_I;



    ptr    = p->data[0];

    stride = p->linesize[0];



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

        if (buf_end - buf < w * bytes_per_pixel)

            break;

#if HAVE_BIGENDIAN

        unsigned int x;

        for (x=0; x<w*bytes_per_pixel; x+=bytes_per_pixel)

            AV_WN16(ptr+x, AV_RL16(buf+x));

#else

        memcpy(ptr, buf, w*bytes_per_pixel);

#endif

        ptr += stride;

        buf += w*bytes_per_pixel;

    }



    *picture = s->picture;

    *data_size = sizeof(AVPicture);



    return offset + w*h*bytes_per_pixel;

}

static int ptx_decode_frame(AVCodecContext *avctx, void *data, int *data_size,

                            AVPacket *avpkt) {

    const uint8_t *buf = avpkt->data;

    const uint8_t *buf_end = avpkt->data + avpkt->size;

    PTXContext * const s = avctx->priv_data;

    AVFrame *picture = data;

    AVFrame * const p = &s->picture;

    unsigned int offset, w, h, y, stride, bytes_per_pixel;

    uint8_t *ptr;



    if (buf_end - buf < 14)

        return AVERROR_INVALIDDATA;

    offset          = AV_RL16(buf);

    w               = AV_RL16(buf+8);

    h               = AV_RL16(buf+10);

    bytes_per_pixel = AV_RL16(buf+12) >> 3;



    if (bytes_per_pixel != 2) {

        av_log_ask_for_sample(avctx, "Image format is not RGB15.\n");

        return -1;

    }



    avctx->pix_fmt = PIX_FMT_RGB555;



    if (buf_end - buf < offset)

        return AVERROR_INVALIDDATA;

    if (offset != 0x2c)

        av_log_ask_for_sample(avctx, "offset != 0x2c\n");



    buf += offset;



    if (p->data[0])

        avctx->release_buffer(avctx, p);



    if (av_image_check_size(w, h, 0, avctx))

        return -1;

    if (w != avctx->width || h != avctx->height)

        avcodec_set_dimensions(avctx, w, h);

    if (avctx->get_buffer(avctx, p) < 0) {

        av_log(avctx, AV_LOG_ERROR, "get_buffer() failed\n");

        return -1;

    }



    p->pict_type = AV_PICTURE_TYPE_I;



    ptr    = p->data[0];

    stride = p->linesize[0];



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

        if (buf_end - buf < w * bytes_per_pixel)

            break;

#if HAVE_BIGENDIAN

        unsigned int x;

        for (x=0; x<w*bytes_per_pixel; x+=bytes_per_pixel)

            AV_WN16(ptr+x, AV_RL16(buf+x));

#else

        memcpy(ptr, buf, w*bytes_per_pixel);

#endif

        ptr += stride;

        buf += w*bytes_per_pixel;

    }



    *picture = s->picture;

    *data_size = sizeof(AVPicture);



    return offset + w*h*bytes_per_pixel;

}

static int FUNC_0(AVCodecContext *VAR_0, void *VAR_1, int *VAR_2,

                            AVPacket *VAR_3) {

    const uint8_t *VAR_4 = VAR_3->VAR_1;

    const uint8_t *VAR_5 = VAR_3->VAR_1 + VAR_3->size;

    PTXContext * const s = VAR_0->priv_data;

    AVFrame *picture = VAR_1;

    AVFrame * const p = &s->picture;

    unsigned int VAR_6, VAR_7, VAR_8, VAR_9, VAR_10, VAR_11;

    uint8_t *ptr;



    if (VAR_5 - VAR_4 < 14)

        return AVERROR_INVALIDDATA;

    VAR_6          = AV_RL16(VAR_4);

    VAR_7               = AV_RL16(VAR_4+8);

    VAR_8               = AV_RL16(VAR_4+10);

    VAR_11 = AV_RL16(VAR_4+12) >> 3;



    if (VAR_11 != 2) {

        av_log_ask_for_sample(VAR_0, "Image format is not RGB15.\n");

        return -1;

    }



    VAR_0->pix_fmt = PIX_FMT_RGB555;



    if (VAR_5 - VAR_4 < VAR_6)

        return AVERROR_INVALIDDATA;

    if (VAR_6 != 0x2c)

        av_log_ask_for_sample(VAR_0, "VAR_6 != 0x2c\n");



    VAR_4 += VAR_6;



    if (p->VAR_1[0])

        VAR_0->release_buffer(VAR_0, p);



    if (av_image_check_size(VAR_7, VAR_8, 0, VAR_0))

        return -1;

    if (VAR_7 != VAR_0->width || VAR_8 != VAR_0->height)

        avcodec_set_dimensions(VAR_0, VAR_7, VAR_8);

    if (VAR_0->get_buffer(VAR_0, p) < 0) {

        av_log(VAR_0, AV_LOG_ERROR, "get_buffer() failed\n");

        return -1;

    }



    p->pict_type = AV_PICTURE_TYPE_I;



    ptr    = p->VAR_1[0];

    VAR_10 = p->linesize[0];



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

        if (VAR_5 - VAR_4 < VAR_7 * VAR_11)

            break;

#if HAVE_BIGENDIAN

        unsigned int x;

        for (x=0; x<VAR_7*VAR_11; x+=VAR_11)

            AV_WN16(ptr+x, AV_RL16(VAR_4+x));

#else

        memcpy(ptr, VAR_4, VAR_7*VAR_11);

#endif

        ptr += VAR_10;

        VAR_4 += VAR_7*VAR_11;

    }



    *picture = s->picture;

    *VAR_2 = sizeof(AVPicture);



    return VAR_6 + VAR_7*VAR_8*VAR_11;

}

static int FUNC_0(AVCodecContext *VAR_0, void *VAR_1, int *VAR_2,
AVPacket *VAR_3) { const uint8_t *VAR_4 = VAR_3->VAR_1; const uint8_t *VAR_5 = VAR_3->VAR_1 + VAR_3->size; PTXContext * const s = VAR_0->priv_data; AVFrame *picture = VAR_1; AVFrame * const p = &s->picture; unsigned int VAR_6, VAR_7, VAR_8, VAR_9, VAR_10, VAR_11; uint8_t *ptr; if (VAR_5 - VAR_4 < 14)
return AVERROR_INVALIDDATA; VAR_6          = AV_RL16(VAR_4); VAR_7               = AV_RL16(VAR_4+8); VAR_8               = AV_RL16(VAR_4+10); VAR_11 = AV_RL16(VAR_4+12) >> 3; if (VAR_11 != 2) { av_log_ask_for_sample(VAR_0, "Image format is not RGB15.\n"); return -1; } VAR_0->pix_fmt = PIX_FMT_RGB555; if (VAR_5 - VAR_4 < VAR_6)
return AVERROR_INVALIDDATA; if (VAR_6 != 0x2c)
av_log_ask_for_sample(VAR_0, "VAR_6 != 0x2c\n"); VAR_4 += VAR_6; if (p->VAR_1[0])
VAR_0->release_buffer(VAR_0, p); if (av_image_check_size(VAR_7, VAR_8, 0, VAR_0))
return -1; if (VAR_7 != VAR_0->width || VAR_8 != VAR_0->height)
avcodec_set_dimensions(VAR_0, VAR_7, VAR_8); if (VAR_0->get_buffer(VAR_0, p) < 0) { av_log(VAR_0, AV_LOG_ERROR, "get_buffer() failed\n"); return -1; } p->pict_type = AV_PICTURE_TYPE_I; ptr    = p->VAR_1[0]; VAR_10 = p->linesize[0]; for (VAR_9=0; VAR_9<VAR_8; VAR_9++) { if (VAR_5 - VAR_4 < VAR_7 * VAR_11)
break; #if HAVE_BIGENDIAN
unsigned int x; for (x=0; x<VAR_7*VAR_11; x+=VAR_11) AV_WN16(ptr+x, AV_RL16(VAR_4+x)); #else
memcpy(ptr, VAR_4, VAR_7*VAR_11); #endif
ptr += VAR_10; VAR_4 += VAR_7*VAR_11; } *picture = s->picture; *VAR_2 = sizeof(AVPicture); return VAR_6 + VAR_7*VAR_8*VAR_11; }