static int sunrast_decode_frame(AVCodecContext *avctx, void *data,

                                int *got_frame, AVPacket *avpkt)

{

    const uint8_t *buf       = avpkt->data;

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

    AVFrame * const p        = data;

    unsigned int w, h, depth, type, maptype, maplength, stride, x, y, len, alen;

    uint8_t *ptr, *ptr2 = NULL;

    const uint8_t *bufstart = buf;

    int ret;



    if (avpkt->size < 32)

        return AVERROR_INVALIDDATA;



    if (AV_RB32(buf) != RAS_MAGIC) {

        av_log(avctx, AV_LOG_ERROR, "this is not sunras encoded data\n");

        return AVERROR_INVALIDDATA;

    }



    w         = AV_RB32(buf + 4);

    h         = AV_RB32(buf + 8);

    depth     = AV_RB32(buf + 12);

    type      = AV_RB32(buf + 20);

    maptype   = AV_RB32(buf + 24);

    maplength = AV_RB32(buf + 28);

    buf      += 32;



    if (type == RT_EXPERIMENTAL) {

        avpriv_request_sample(avctx, "TIFF/IFF/EXPERIMENTAL (compression) type");

        return AVERROR_PATCHWELCOME;

    }

    if (type > RT_FORMAT_IFF) {

        av_log(avctx, AV_LOG_ERROR, "invalid (compression) type\n");

        return AVERROR_INVALIDDATA;

    }

    if (maptype == RMT_RAW) {

        avpriv_request_sample(avctx, "Unknown colormap type");

        return AVERROR_PATCHWELCOME;

    }

    if (maptype > RMT_RAW) {

        av_log(avctx, AV_LOG_ERROR, "invalid colormap type\n");

        return AVERROR_INVALIDDATA;

    }



    if (type == RT_FORMAT_TIFF || type == RT_FORMAT_IFF) {

        av_log(avctx, AV_LOG_ERROR, "unsupported (compression) type\n");

        return -1;

    }



    switch (depth) {

        case 1:

            avctx->pix_fmt = maplength ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_MONOWHITE;

            break;

        case 4:

            avctx->pix_fmt = maplength ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_NONE;

            break;

        case 8:

            avctx->pix_fmt = maplength ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_GRAY8;

            break;

        case 24:

            avctx->pix_fmt = (type == RT_FORMAT_RGB) ? AV_PIX_FMT_RGB24 : AV_PIX_FMT_BGR24;

            break;

        case 32:

            avctx->pix_fmt = (type == RT_FORMAT_RGB) ? AV_PIX_FMT_0RGB : AV_PIX_FMT_0BGR;

            break;

        default:

            av_log(avctx, AV_LOG_ERROR, "invalid depth\n");

            return AVERROR_INVALIDDATA;

    }



    ret = ff_set_dimensions(avctx, w, h);

    if (ret < 0)

        return ret;



    if ((ret = ff_get_buffer(avctx, p, 0)) < 0)

        return ret;



    p->pict_type = AV_PICTURE_TYPE_I;



    if (buf_end - buf < maplength)

        return AVERROR_INVALIDDATA;



    if (depth > 8 && maplength) {

        av_log(avctx, AV_LOG_WARNING, "useless colormap found or file is corrupted, trying to recover\n");



    } else if (maplength) {

        unsigned int len = maplength / 3;



        if (maplength % 3 || maplength > 768) {

            av_log(avctx, AV_LOG_WARNING, "invalid colormap length\n");

            return AVERROR_INVALIDDATA;

        }



        ptr = p->data[1];

        for (x = 0; x < len; x++, ptr += 4)

            *(uint32_t *)ptr = (0xFFU<<24) + (buf[x]<<16) + (buf[len+x]<<8) + buf[len+len+x];

    }



    buf += maplength;



    if (maplength && depth < 8) {

        ptr = ptr2 = av_malloc_array((w + 15), h);

        if (!ptr)

            return AVERROR(ENOMEM);

        stride = (w + 15 >> 3) * depth;

    } else {

    ptr    = p->data[0];

    stride = p->linesize[0];

    }



    /* scanlines are aligned on 16 bit boundaries */

    len  = (depth * w + 7) >> 3;

    alen = len + (len & 1);



    if (type == RT_BYTE_ENCODED) {

        int value, run;

        uint8_t *end = ptr + h * stride;



        x = 0;

        while (ptr != end && buf < buf_end) {

            run = 1;

            if (buf_end - buf < 1)

                return AVERROR_INVALIDDATA;



            if ((value = *buf++) == RLE_TRIGGER) {

                run = *buf++ + 1;

                if (run != 1)

                    value = *buf++;

            }

            while (run--) {

                if (x < len)

                    ptr[x] = value;

                if (++x >= alen) {

                    x = 0;

                    ptr += stride;

                    if (ptr == end)

                        break;

                }

            }

        }

    } else {

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

            if (buf_end - buf < len)

                break;

            memcpy(ptr, buf, len);

            ptr += stride;

            buf += alen;

        }

    }

    if (avctx->pix_fmt == AV_PIX_FMT_PAL8 && depth < 8) {

        uint8_t *ptr_free = ptr2;

        ptr = p->data[0];

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

            for (x = 0; x < (w + 7 >> 3) * depth; x++) {

                if (depth == 1) {

                    ptr[8*x]   = ptr2[x] >> 7;

                    ptr[8*x+1] = ptr2[x] >> 6 & 1;

                    ptr[8*x+2] = ptr2[x] >> 5 & 1;

                    ptr[8*x+3] = ptr2[x] >> 4 & 1;

                    ptr[8*x+4] = ptr2[x] >> 3 & 1;

                    ptr[8*x+5] = ptr2[x] >> 2 & 1;

                    ptr[8*x+6] = ptr2[x] >> 1 & 1;

                    ptr[8*x+7] = ptr2[x]      & 1;

                } else {

                    ptr[2*x]   = ptr2[x] >> 4;

                    ptr[2*x+1] = ptr2[x] & 0xF;

                }

            }

            ptr  += p->linesize[0];

            ptr2 += (w + 15 >> 3) * depth;

        }

        av_freep(&ptr_free);

    }



    *got_frame = 1;



    return buf - bufstart;

}

static int sunrast_decode_frame(AVCodecContext *avctx, void *data,

                                int *got_frame, AVPacket *avpkt)

{

    const uint8_t *buf       = avpkt->data;

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

    AVFrame * const p        = data;

    unsigned int w, h, depth, type, maptype, maplength, stride, x, y, len, alen;

    uint8_t *ptr, *ptr2 = NULL;

    const uint8_t *bufstart = buf;

    int ret;



    if (avpkt->size < 32)

        return AVERROR_INVALIDDATA;



    if (AV_RB32(buf) != RAS_MAGIC) {

        av_log(avctx, AV_LOG_ERROR, "this is not sunras encoded data\n");

        return AVERROR_INVALIDDATA;

    }



    w         = AV_RB32(buf + 4);

    h         = AV_RB32(buf + 8);

    depth     = AV_RB32(buf + 12);

    type      = AV_RB32(buf + 20);

    maptype   = AV_RB32(buf + 24);

    maplength = AV_RB32(buf + 28);

    buf      += 32;



    if (type == RT_EXPERIMENTAL) {

        avpriv_request_sample(avctx, "TIFF/IFF/EXPERIMENTAL (compression) type");

        return AVERROR_PATCHWELCOME;

    }

    if (type > RT_FORMAT_IFF) {

        av_log(avctx, AV_LOG_ERROR, "invalid (compression) type\n");

        return AVERROR_INVALIDDATA;

    }

    if (maptype == RMT_RAW) {

        avpriv_request_sample(avctx, "Unknown colormap type");

        return AVERROR_PATCHWELCOME;

    }

    if (maptype > RMT_RAW) {

        av_log(avctx, AV_LOG_ERROR, "invalid colormap type\n");

        return AVERROR_INVALIDDATA;

    }



    if (type == RT_FORMAT_TIFF || type == RT_FORMAT_IFF) {

        av_log(avctx, AV_LOG_ERROR, "unsupported (compression) type\n");

        return -1;

    }



    switch (depth) {

        case 1:

            avctx->pix_fmt = maplength ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_MONOWHITE;

            break;

        case 4:

            avctx->pix_fmt = maplength ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_NONE;

            break;

        case 8:

            avctx->pix_fmt = maplength ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_GRAY8;

            break;

        case 24:

            avctx->pix_fmt = (type == RT_FORMAT_RGB) ? AV_PIX_FMT_RGB24 : AV_PIX_FMT_BGR24;

            break;

        case 32:

            avctx->pix_fmt = (type == RT_FORMAT_RGB) ? AV_PIX_FMT_0RGB : AV_PIX_FMT_0BGR;

            break;

        default:

            av_log(avctx, AV_LOG_ERROR, "invalid depth\n");

            return AVERROR_INVALIDDATA;

    }



    ret = ff_set_dimensions(avctx, w, h);

    if (ret < 0)

        return ret;



    if ((ret = ff_get_buffer(avctx, p, 0)) < 0)

        return ret;



    p->pict_type = AV_PICTURE_TYPE_I;



    if (buf_end - buf < maplength)

        return AVERROR_INVALIDDATA;



    if (depth > 8 && maplength) {

        av_log(avctx, AV_LOG_WARNING, "useless colormap found or file is corrupted, trying to recover\n");



    } else if (maplength) {

        unsigned int len = maplength / 3;



        if (maplength % 3 || maplength > 768) {

            av_log(avctx, AV_LOG_WARNING, "invalid colormap length\n");

            return AVERROR_INVALIDDATA;

        }



        ptr = p->data[1];

        for (x = 0; x < len; x++, ptr += 4)

            *(uint32_t *)ptr = (0xFFU<<24) + (buf[x]<<16) + (buf[len+x]<<8) + buf[len+len+x];

    }



    buf += maplength;



    if (maplength && depth < 8) {

        ptr = ptr2 = av_malloc_array((w + 15), h);

        if (!ptr)

            return AVERROR(ENOMEM);

        stride = (w + 15 >> 3) * depth;

    } else {

    ptr    = p->data[0];

    stride = p->linesize[0];

    }



    

    len  = (depth * w + 7) >> 3;

    alen = len + (len & 1);



    if (type == RT_BYTE_ENCODED) {

        int value, run;

        uint8_t *end = ptr + h * stride;



        x = 0;

        while (ptr != end && buf < buf_end) {

            run = 1;

            if (buf_end - buf < 1)

                return AVERROR_INVALIDDATA;



            if ((value = *buf++) == RLE_TRIGGER) {

                run = *buf++ + 1;

                if (run != 1)

                    value = *buf++;

            }

            while (run--) {

                if (x < len)

                    ptr[x] = value;

                if (++x >= alen) {

                    x = 0;

                    ptr += stride;

                    if (ptr == end)

                        break;

                }

            }

        }

    } else {

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

            if (buf_end - buf < len)

                break;

            memcpy(ptr, buf, len);

            ptr += stride;

            buf += alen;

        }

    }

    if (avctx->pix_fmt == AV_PIX_FMT_PAL8 && depth < 8) {

        uint8_t *ptr_free = ptr2;

        ptr = p->data[0];

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

            for (x = 0; x < (w + 7 >> 3) * depth; x++) {

                if (depth == 1) {

                    ptr[8*x]   = ptr2[x] >> 7;

                    ptr[8*x+1] = ptr2[x] >> 6 & 1;

                    ptr[8*x+2] = ptr2[x] >> 5 & 1;

                    ptr[8*x+3] = ptr2[x] >> 4 & 1;

                    ptr[8*x+4] = ptr2[x] >> 3 & 1;

                    ptr[8*x+5] = ptr2[x] >> 2 & 1;

                    ptr[8*x+6] = ptr2[x] >> 1 & 1;

                    ptr[8*x+7] = ptr2[x]      & 1;

                } else {

                    ptr[2*x]   = ptr2[x] >> 4;

                    ptr[2*x+1] = ptr2[x] & 0xF;

                }

            }

            ptr  += p->linesize[0];

            ptr2 += (w + 15 >> 3) * depth;

        }

        av_freep(&ptr_free);

    }



    *got_frame = 1;



    return buf - bufstart;

}

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;

    AVFrame * const p        = VAR_1;

    unsigned int VAR_6, VAR_7, VAR_8, VAR_9, VAR_10, VAR_11, VAR_12, VAR_13, VAR_14, VAR_19, VAR_16;

    uint8_t *ptr, *ptr2 = NULL;

    const uint8_t *VAR_17 = VAR_4;

    int VAR_18;



    if (VAR_3->size < 32)

        return AVERROR_INVALIDDATA;



    if (AV_RB32(VAR_4) != RAS_MAGIC) {

        av_log(VAR_0, AV_LOG_ERROR, "this is not sunras encoded VAR_1\n");

        return AVERROR_INVALIDDATA;

    }



    VAR_6         = AV_RB32(VAR_4 + 4);

    VAR_7         = AV_RB32(VAR_4 + 8);

    VAR_8     = AV_RB32(VAR_4 + 12);

    VAR_9      = AV_RB32(VAR_4 + 20);

    VAR_10   = AV_RB32(VAR_4 + 24);

    VAR_11 = AV_RB32(VAR_4 + 28);

    VAR_4      += 32;



    if (VAR_9 == RT_EXPERIMENTAL) {

        avpriv_request_sample(VAR_0, "TIFF/IFF/EXPERIMENTAL (compression) VAR_9");

        return AVERROR_PATCHWELCOME;

    }

    if (VAR_9 > RT_FORMAT_IFF) {

        av_log(VAR_0, AV_LOG_ERROR, "invalid (compression) VAR_9\n");

        return AVERROR_INVALIDDATA;

    }

    if (VAR_10 == RMT_RAW) {

        avpriv_request_sample(VAR_0, "Unknown colormap VAR_9");

        return AVERROR_PATCHWELCOME;

    }

    if (VAR_10 > RMT_RAW) {

        av_log(VAR_0, AV_LOG_ERROR, "invalid colormap VAR_9\n");

        return AVERROR_INVALIDDATA;

    }



    if (VAR_9 == RT_FORMAT_TIFF || VAR_9 == RT_FORMAT_IFF) {

        av_log(VAR_0, AV_LOG_ERROR, "unsupported (compression) VAR_9\n");

        return -1;

    }



    switch (VAR_8) {

        case 1:

            VAR_0->pix_fmt = VAR_11 ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_MONOWHITE;

            break;

        case 4:

            VAR_0->pix_fmt = VAR_11 ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_NONE;

            break;

        case 8:

            VAR_0->pix_fmt = VAR_11 ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_GRAY8;

            break;

        case 24:

            VAR_0->pix_fmt = (VAR_9 == RT_FORMAT_RGB) ? AV_PIX_FMT_RGB24 : AV_PIX_FMT_BGR24;

            break;

        case 32:

            VAR_0->pix_fmt = (VAR_9 == RT_FORMAT_RGB) ? AV_PIX_FMT_0RGB : AV_PIX_FMT_0BGR;

            break;

        default:

            av_log(VAR_0, AV_LOG_ERROR, "invalid VAR_8\n");

            return AVERROR_INVALIDDATA;

    }



    VAR_18 = ff_set_dimensions(VAR_0, VAR_6, VAR_7);

    if (VAR_18 < 0)

        return VAR_18;



    if ((VAR_18 = ff_get_buffer(VAR_0, p, 0)) < 0)

        return VAR_18;



    p->pict_type = AV_PICTURE_TYPE_I;



    if (VAR_5 - VAR_4 < VAR_11)

        return AVERROR_INVALIDDATA;



    if (VAR_8 > 8 && VAR_11) {

        av_log(VAR_0, AV_LOG_WARNING, "useless colormap found or file is corrupted, trying to recover\n");



    } else if (VAR_11) {

        unsigned int VAR_19 = VAR_11 / 3;



        if (VAR_11 % 3 || VAR_11 > 768) {

            av_log(VAR_0, AV_LOG_WARNING, "invalid colormap length\n");

            return AVERROR_INVALIDDATA;

        }



        ptr = p->VAR_1[1];

        for (VAR_13 = 0; VAR_13 < VAR_19; VAR_13++, ptr += 4)

            *(uint32_t *)ptr = (0xFFU<<24) + (VAR_4[VAR_13]<<16) + (VAR_4[VAR_19+VAR_13]<<8) + VAR_4[VAR_19+VAR_19+VAR_13];

    }



    VAR_4 += VAR_11;



    if (VAR_11 && VAR_8 < 8) {

        ptr = ptr2 = av_malloc_array((VAR_6 + 15), VAR_7);

        if (!ptr)

            return AVERROR(ENOMEM);

        VAR_12 = (VAR_6 + 15 >> 3) * VAR_8;

    } else {

    ptr    = p->VAR_1[0];

    VAR_12 = p->linesize[0];

    }



    

    VAR_19  = (VAR_8 * VAR_6 + 7) >> 3;

    VAR_16 = VAR_19 + (VAR_19 & 1);



    if (VAR_9 == RT_BYTE_ENCODED) {

        int VAR_19, VAR_20;

        uint8_t *end = ptr + VAR_7 * VAR_12;



        VAR_13 = 0;

        while (ptr != end && VAR_4 < VAR_5) {

            VAR_20 = 1;

            if (VAR_5 - VAR_4 < 1)

                return AVERROR_INVALIDDATA;



            if ((VAR_19 = *VAR_4++) == RLE_TRIGGER) {

                VAR_20 = *VAR_4++ + 1;

                if (VAR_20 != 1)

                    VAR_19 = *VAR_4++;

            }

            while (VAR_20--) {

                if (VAR_13 < VAR_19)

                    ptr[VAR_13] = VAR_19;

                if (++VAR_13 >= VAR_16) {

                    VAR_13 = 0;

                    ptr += VAR_12;

                    if (ptr == end)

                        break;

                }

            }

        }

    } else {

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

            if (VAR_5 - VAR_4 < VAR_19)

                break;

            memcpy(ptr, VAR_4, VAR_19);

            ptr += VAR_12;

            VAR_4 += VAR_16;

        }

    }

    if (VAR_0->pix_fmt == AV_PIX_FMT_PAL8 && VAR_8 < 8) {

        uint8_t *ptr_free = ptr2;

        ptr = p->VAR_1[0];

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

            for (VAR_13 = 0; VAR_13 < (VAR_6 + 7 >> 3) * VAR_8; VAR_13++) {

                if (VAR_8 == 1) {

                    ptr[8*VAR_13]   = ptr2[VAR_13] >> 7;

                    ptr[8*VAR_13+1] = ptr2[VAR_13] >> 6 & 1;

                    ptr[8*VAR_13+2] = ptr2[VAR_13] >> 5 & 1;

                    ptr[8*VAR_13+3] = ptr2[VAR_13] >> 4 & 1;

                    ptr[8*VAR_13+4] = ptr2[VAR_13] >> 3 & 1;

                    ptr[8*VAR_13+5] = ptr2[VAR_13] >> 2 & 1;

                    ptr[8*VAR_13+6] = ptr2[VAR_13] >> 1 & 1;

                    ptr[8*VAR_13+7] = ptr2[VAR_13]      & 1;

                } else {

                    ptr[2*VAR_13]   = ptr2[VAR_13] >> 4;

                    ptr[2*VAR_13+1] = ptr2[VAR_13] & 0xF;

                }

            }

            ptr  += p->linesize[0];

            ptr2 += (VAR_6 + 15 >> 3) * VAR_8;

        }

        av_freep(&ptr_free);

    }



    *VAR_2 = 1;



    return VAR_4 - VAR_17;

}

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; AVFrame * const p        = VAR_1; unsigned int VAR_6, VAR_7, VAR_8, VAR_9, VAR_10, VAR_11, VAR_12, VAR_13, VAR_14, VAR_19, VAR_16; uint8_t *ptr, *ptr2 = NULL; const uint8_t *VAR_17 = VAR_4; int VAR_18; if (VAR_3->size < 32)
return AVERROR_INVALIDDATA; if (AV_RB32(VAR_4) != RAS_MAGIC) { av_log(VAR_0, AV_LOG_ERROR, "this is not sunras encoded VAR_1\n"); return AVERROR_INVALIDDATA; } VAR_6         = AV_RB32(VAR_4 + 4); VAR_7         = AV_RB32(VAR_4 + 8); VAR_8     = AV_RB32(VAR_4 + 12); VAR_9      = AV_RB32(VAR_4 + 20); VAR_10   = AV_RB32(VAR_4 + 24); VAR_11 = AV_RB32(VAR_4 + 28); VAR_4      += 32; if (VAR_9 == RT_EXPERIMENTAL) { avpriv_request_sample(VAR_0, "TIFF/IFF/EXPERIMENTAL (compression) VAR_9"); return AVERROR_PATCHWELCOME; } if (VAR_9 > RT_FORMAT_IFF) { av_log(VAR_0, AV_LOG_ERROR, "invalid (compression) VAR_9\n"); return AVERROR_INVALIDDATA; } if (VAR_10 == RMT_RAW) { avpriv_request_sample(VAR_0, "Unknown colormap VAR_9"); return AVERROR_PATCHWELCOME; } if (VAR_10 > RMT_RAW) { av_log(VAR_0, AV_LOG_ERROR, "invalid colormap VAR_9\n"); return AVERROR_INVALIDDATA; } if (VAR_9 == RT_FORMAT_TIFF || VAR_9 == RT_FORMAT_IFF) { av_log(VAR_0, AV_LOG_ERROR, "unsupported (compression) VAR_9\n"); return -1; } switch (VAR_8) { case 1:
VAR_0->pix_fmt = VAR_11 ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_MONOWHITE; break; case 4:
VAR_0->pix_fmt = VAR_11 ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_NONE; break; case 8:
VAR_0->pix_fmt = VAR_11 ? AV_PIX_FMT_PAL8 : AV_PIX_FMT_GRAY8; break; case 24:
VAR_0->pix_fmt = (VAR_9 == RT_FORMAT_RGB) ? AV_PIX_FMT_RGB24 : AV_PIX_FMT_BGR24; break; case 32:
VAR_0->pix_fmt = (VAR_9 == RT_FORMAT_RGB) ? AV_PIX_FMT_0RGB : AV_PIX_FMT_0BGR; break; default:
av_log(VAR_0, AV_LOG_ERROR, "invalid VAR_8\n"); return AVERROR_INVALIDDATA; } VAR_18 = ff_set_dimensions(VAR_0, VAR_6, VAR_7); if (VAR_18 < 0)
return VAR_18; if ((VAR_18 = ff_get_buffer(VAR_0, p, 0)) < 0)
return VAR_18; p->pict_type = AV_PICTURE_TYPE_I; if (VAR_5 - VAR_4 < VAR_11)
return AVERROR_INVALIDDATA; if (VAR_8 > 8 && VAR_11) { av_log(VAR_0, AV_LOG_WARNING, "useless colormap found or file is corrupted, trying to recover\n"); } else if (VAR_11) { unsigned int VAR_19 = VAR_11 / 3; if (VAR_11 % 3 || VAR_11 > 768) { av_log(VAR_0, AV_LOG_WARNING, "invalid colormap length\n"); return AVERROR_INVALIDDATA; } ptr = p->VAR_1[1]; for (VAR_13 = 0; VAR_13 < VAR_19; VAR_13++, ptr += 4) *(uint32_t *)ptr = (0xFFU<<24) + (VAR_4[VAR_13]<<16) + (VAR_4[VAR_19+VAR_13]<<8) + VAR_4[VAR_19+VAR_19+VAR_13]; } VAR_4 += VAR_11; if (VAR_11 && VAR_8 < 8) { ptr = ptr2 = av_malloc_array((VAR_6 + 15), VAR_7); if (!ptr)
return AVERROR(ENOMEM); VAR_12 = (VAR_6 + 15 >> 3) * VAR_8; } else { ptr    = p->VAR_1[0]; VAR_12 = p->linesize[0]; } VAR_19  = (VAR_8 * VAR_6 + 7) >> 3; VAR_16 = VAR_19 + (VAR_19 & 1); if (VAR_9 == RT_BYTE_ENCODED) { int VAR_19, VAR_20; uint8_t *end = ptr + VAR_7 * VAR_12; VAR_13 = 0; while (ptr != end && VAR_4 < VAR_5) { VAR_20 = 1; if (VAR_5 - VAR_4 < 1)
return AVERROR_INVALIDDATA; if ((VAR_19 = *VAR_4++) == RLE_TRIGGER) { VAR_20 = *VAR_4++ + 1; if (VAR_20 != 1)
VAR_19 = *VAR_4++; } while (VAR_20--) { if (VAR_13 < VAR_19)
ptr[VAR_13] = VAR_19; if (++VAR_13 >= VAR_16) { VAR_13 = 0; ptr += VAR_12; if (ptr == end)
break; } } } } else { for (VAR_14 = 0; VAR_14 < VAR_7; VAR_14++) { if (VAR_5 - VAR_4 < VAR_19)
break; memcpy(ptr, VAR_4, VAR_19); ptr += VAR_12; VAR_4 += VAR_16; } } if (VAR_0->pix_fmt == AV_PIX_FMT_PAL8 && VAR_8 < 8) { uint8_t *ptr_free = ptr2; ptr = p->VAR_1[0]; for (VAR_14=0; VAR_14<VAR_7; VAR_14++) { for (VAR_13 = 0; VAR_13 < (VAR_6 + 7 >> 3) * VAR_8; VAR_13++) { if (VAR_8 == 1) { ptr[8*VAR_13]   = ptr2[VAR_13] >> 7; ptr[8*VAR_13+1] = ptr2[VAR_13] >> 6 & 1; ptr[8*VAR_13+2] = ptr2[VAR_13] >> 5 & 1; ptr[8*VAR_13+3] = ptr2[VAR_13] >> 4 & 1; ptr[8*VAR_13+4] = ptr2[VAR_13] >> 3 & 1; ptr[8*VAR_13+5] = ptr2[VAR_13] >> 2 & 1; ptr[8*VAR_13+6] = ptr2[VAR_13] >> 1 & 1; ptr[8*VAR_13+7] = ptr2[VAR_13]      & 1; } else { ptr[2*VAR_13]   = ptr2[VAR_13] >> 4; ptr[2*VAR_13+1] = ptr2[VAR_13] & 0xF; } } ptr  += p->linesize[0]; ptr2 += (VAR_6 + 15 >> 3) * VAR_8; } av_freep(&ptr_free); } *VAR_2 = 1; return VAR_4 - VAR_17; }