static int decode_rle(uint8_t *bitmap, int linesize, int w, int h,
                      const uint8_t *buf, int start, int buf_size, int is_8bit)
{
    GetBitContext gb;
    int bit_len;
    int x, y, len, color;
    uint8_t *d;
    if (start >= buf_size)
    bit_len = (buf_size - start) * 8;
    init_get_bits(&gb, buf + start, bit_len);
    x = 0;
    y = 0;
    d = bitmap;
    for(;;) {
        if (get_bits_count(&gb) > bit_len)
        if (is_8bit)
            len = decode_run_8bit(&gb, &color);
        else
            len = decode_run_2bit(&gb, &color);
        len = FFMIN(len, w - x);
        memset(d + x, color, len);
        x += len;
        if (x >= w) {
            y++;
            if (y >= h)
                break;
            d += linesize;
            x = 0;
            /* byte align */
            align_get_bits(&gb);
        }
    }
    return 0;
}
static int decode_rle(uint8_t *bitmap, int linesize, int w, int h,
                      const uint8_t *buf, int start, int buf_size, int is_8bit)
{
    GetBitContext gb;
    int bit_len;
    int x, y, len, color;
    uint8_t *d;
    if (start >= buf_size)
    bit_len = (buf_size - start) * 8;
    init_get_bits(&gb, buf + start, bit_len);
    x = 0;
    y = 0;
    d = bitmap;
    for(;;) {
        if (get_bits_count(&gb) > bit_len)
        if (is_8bit)
            len = decode_run_8bit(&gb, &color);
        else
            len = decode_run_2bit(&gb, &color);
        len = FFMIN(len, w - x);
        memset(d + x, color, len);
        x += len;
        if (x >= w) {
            y++;
            if (y >= h)
                break;
            d += linesize;
            x = 0;
            
            align_get_bits(&gb);
        }
    }
    return 0;
}
static int FUNC_0(uint8_t *VAR_0, int VAR_1, int VAR_2, int VAR_3,
                      const uint8_t *VAR_4, int VAR_5, int VAR_6, int VAR_7)
{
    GetBitContext gb;
    int VAR_8;
    int VAR_9, VAR_10, VAR_11, VAR_12;
    uint8_t *d;
    if (VAR_5 >= VAR_6)
    VAR_8 = (VAR_6 - VAR_5) * 8;
    init_get_bits(&gb, VAR_4 + VAR_5, VAR_8);
    VAR_9 = 0;
    VAR_10 = 0;
    d = VAR_0;
    for(;;) {
        if (get_bits_count(&gb) > VAR_8)
        if (VAR_7)
            VAR_11 = decode_run_8bit(&gb, &VAR_12);
        else
            VAR_11 = decode_run_2bit(&gb, &VAR_12);
        VAR_11 = FFMIN(VAR_11, VAR_2 - VAR_9);
        memset(d + VAR_9, VAR_12, VAR_11);
        VAR_9 += VAR_11;
        if (VAR_9 >= VAR_2) {
            VAR_10++;
            if (VAR_10 >= VAR_3)
                break;
            d += VAR_1;
            VAR_9 = 0;
            
            align_get_bits(&gb);
        }
    }
    return 0;
}
static int FUNC_0(uint8_t *VAR_0, int VAR_1, int VAR_2, int VAR_3,
const uint8_t *VAR_4, int VAR_5, int VAR_6, int VAR_7)
{ GetBitContext gb; int VAR_8; int VAR_9, VAR_10, VAR_11, VAR_12; uint8_t *d; if (VAR_5 >= VAR_6)
VAR_8 = (VAR_6 - VAR_5) * 8; init_get_bits(&gb, VAR_4 + VAR_5, VAR_8); VAR_9 = 0; VAR_10 = 0; d = VAR_0; for(;;) { if (get_bits_count(&gb) > VAR_8)
if (VAR_7)
VAR_11 = decode_run_8bit(&gb, &VAR_12); else
VAR_11 = decode_run_2bit(&gb, &VAR_12); VAR_11 = FFMIN(VAR_11, VAR_2 - VAR_9); memset(d + VAR_9, VAR_12, VAR_11); VAR_9 += VAR_11; if (VAR_9 >= VAR_2) { VAR_10++; if (VAR_10 >= VAR_3)
break; d += VAR_1; VAR_9 = 0; align_get_bits(&gb); } } return 0; }