62 #define LUT8_PART(plane, v)                             \ 
   63     AV_LE2NE64C(UINT64_C(0x0000000)<<32 | v) << plane,  \ 
   64     AV_LE2NE64C(UINT64_C(0x1000000)<<32 | v) << plane,  \ 
   65     AV_LE2NE64C(UINT64_C(0x0010000)<<32 | v) << plane,  \ 
   66     AV_LE2NE64C(UINT64_C(0x1010000)<<32 | v) << plane,  \ 
   67     AV_LE2NE64C(UINT64_C(0x0000100)<<32 | v) << plane,  \ 
   68     AV_LE2NE64C(UINT64_C(0x1000100)<<32 | v) << plane,  \ 
   69     AV_LE2NE64C(UINT64_C(0x0010100)<<32 | v) << plane,  \ 
   70     AV_LE2NE64C(UINT64_C(0x1010100)<<32 | v) << plane,  \ 
   71     AV_LE2NE64C(UINT64_C(0x0000001)<<32 | v) << plane,  \ 
   72     AV_LE2NE64C(UINT64_C(0x1000001)<<32 | v) << plane,  \ 
   73     AV_LE2NE64C(UINT64_C(0x0010001)<<32 | v) << plane,  \ 
   74     AV_LE2NE64C(UINT64_C(0x1010001)<<32 | v) << plane,  \ 
   75     AV_LE2NE64C(UINT64_C(0x0000101)<<32 | v) << plane,  \ 
   76     AV_LE2NE64C(UINT64_C(0x1000101)<<32 | v) << plane,  \ 
   77     AV_LE2NE64C(UINT64_C(0x0010101)<<32 | v) << plane,  \ 
   78     AV_LE2NE64C(UINT64_C(0x1010101)<<32 | v) << plane 
   80 #define LUT8(plane) {                           \ 
   81     LUT8_PART(plane, 0x0000000),                \ 
   82     LUT8_PART(plane, 0x1000000),                \ 
   83     LUT8_PART(plane, 0x0010000),                \ 
   84     LUT8_PART(plane, 0x1010000),                \ 
   85     LUT8_PART(plane, 0x0000100),                \ 
   86     LUT8_PART(plane, 0x1000100),                \ 
   87     LUT8_PART(plane, 0x0010100),                \ 
   88     LUT8_PART(plane, 0x1010100),                \ 
   89     LUT8_PART(plane, 0x0000001),                \ 
   90     LUT8_PART(plane, 0x1000001),                \ 
   91     LUT8_PART(plane, 0x0010001),                \ 
   92     LUT8_PART(plane, 0x1010001),                \ 
   93     LUT8_PART(plane, 0x0000101),                \ 
   94     LUT8_PART(plane, 0x1000101),                \ 
   95     LUT8_PART(plane, 0x0010101),                \ 
   96     LUT8_PART(plane, 0x1010101),                \ 
  105 #define LUT32(plane) {                                \ 
  107              0,          0,          0, 1 << plane,   \ 
  108              0,          0, 1 << plane,          0,   \ 
  109              0,          0, 1 << plane, 1 << plane,   \ 
  110              0, 1 << plane,          0,          0,   \ 
  111              0, 1 << plane,          0, 1 << plane,   \ 
  112              0, 1 << plane, 1 << plane,          0,   \ 
  113              0, 1 << plane, 1 << plane, 1 << plane,   \ 
  114     1 << plane,          0,          0,          0,   \ 
  115     1 << plane,          0,          0, 1 << plane,   \ 
  116     1 << plane,          0, 1 << plane,          0,   \ 
  117     1 << plane,          0, 1 << plane, 1 << plane,   \ 
  118     1 << plane, 1 << plane,          0,          0,   \ 
  119     1 << plane, 1 << plane,          0, 1 << plane,   \ 
  120     1 << plane, 1 << plane, 1 << plane,          0,   \ 
  121     1 << plane, 1 << plane, 1 << plane, 1 << plane,   \ 
  138     return x << 16 | x << 8 | x;
 
  158     count = 
FFMIN(palette_size / 3, count);
 
  160         for (i = 0; i < 
count; i++)
 
  161             pal[i] = 0xFF000000 | 
AV_RB24(palette + i*3);
 
  162         if (s->
flags && count >= 32) { 
 
  163             for (i = 0; i < 32; i++)
 
  164                 pal[i + 32] = 0xFF000000 | (
AV_RB24(palette + i*3) & 0xFEFEFE) >> 1;
 
  165             count = 
FFMAX(count, 64);
 
  170         for (i = 0; i < 
count; i++)
 
  175         for (i = 0; i < 
count; i++)
 
  210         buf_size = bytestream_get_be16(&buf);
 
  211         if (buf_size <= 1 || image_size <= 1) {
 
  213                    "Invalid image size received: %u -> image data offset: %d\n",
 
  214                    buf_size, image_size);
 
  219         buf_size = bytestream_get_be16(&buf);
 
  220         if (buf_size <= 1 || palette_size < 0) {
 
  222                    "Invalid palette size received: %u -> palette data offset: %d\n",
 
  223                    buf_size, palette_size);
 
  228     if (buf_size >= 41) {
 
  230         s->
bpp          = bytestream_get_byte(&buf);
 
  231         s->
ham          = bytestream_get_byte(&buf);
 
  232         s->
flags        = bytestream_get_byte(&buf);
 
  234         s->
masking      = bytestream_get_byte(&buf);
 
  235         for (i = 0; i < 16; i++)
 
  236             s->
tvdc[i] = bytestream_get_be16(&buf);
 
  239             if (s->
bpp >= 8 && !s->
ham) {
 
  262         if (!s->
bpp || s->
bpp > 32) {
 
  265         } 
else if (s->
ham >= 8) {
 
  282             ham_count = 8 * (1 << s->
ham);
 
  291                 memset(s->
ham_palbuf, 0, (1 << s->
ham) * 2 * sizeof (uint32_t));
 
  292                 for (i=0; i < 
count; i++) {
 
  298                 for (i=0; i < 
count; i++) {
 
  303             for (i=0; i < 
count; i++) {
 
  304                 uint32_t tmp = i << (8 - s->
ham);
 
  305                 tmp |= tmp >> s->
ham;
 
  310                 s->
ham_palbuf[(i+count*2)*2+1] = 0xFF000000 | tmp;
 
  311                 s->
ham_palbuf[(i+count*3)*2+1] = 0xFF000000 | tmp << 8;
 
  314                 for (i = 0; i < ham_count; i++)
 
  401         uint64_t 
v = 
AV_RN64A(dst) | lut[*buf++];
 
  404     } 
while (--buf_size);
 
  418         unsigned mask = (*buf >> 2) & ~3;
 
  419         dst[0] |= lut[mask++];
 
  420         dst[1] |= lut[mask++];
 
  421         dst[2] |= lut[mask++];
 
  423         mask    = (*buf++ << 2) & 0x3F;
 
  424         dst[4] |= lut[mask++];
 
  425         dst[5] |= lut[mask++];
 
  426         dst[6] |= lut[mask++];
 
  429     } 
while (--buf_size);
 
  432 #define DECODE_HAM_PLANE32(x)       \ 
  433     first       = buf[x] << 1;      \ 
  434     second      = buf[(x)+1] << 1;  \ 
  435     delta      &= pal[first++];     \ 
  436     delta      |= pal[first];       \ 
  438     delta      &= pal[second++];    \ 
  439     delta      |= pal[second];      \ 
  451                                const uint32_t *
const pal, 
unsigned buf_size)
 
  453     uint32_t 
delta = pal[1]; 
 
  455         uint32_t first, second;
 
  462     } 
while (--buf_size);
 
  466                          const uint32_t *
const pal, 
unsigned width)
 
  469         *dst++ = pal[*buf++];
 
  487     for (x = 0; x < dst_size && buf < buf_end;) {
 
  489         const int8_t 
value = *buf++;
 
  491             length = 
FFMIN3(value + 1, dst_size - x, buf_end - buf);
 
  492             memcpy(dst + x, buf, length);
 
  494         } 
else if (value > -128) {
 
  495             length = 
FFMIN(-value + 1, dst_size - x);
 
  496             memset(dst + x, *buf++, length);
 
  504         memset(dst+x, 0, dst_size - x);
 
  506     return buf - buf_start;
 
  509 #define DECODE_RGBX_COMMON(type) \ 
  511         length = bytestream2_get_byte(gb); \ 
  513             length = bytestream2_get_be16(gb); \ 
  518     for (i = 0; i < length; i++) { \ 
  519         *(type *)(dst + y*linesize + x * sizeof(type)) = pixel; \ 
  540         uint32_t 
pixel = 0xFF000000 | bytestream2_get_be24(gb);
 
  541         length = bytestream2_get_byte(gb) & 0x7F;
 
  557         uint32_t 
pixel = bytestream2_get_be16u(gb);
 
  558         length = pixel & 0x7;
 
  575     const uint8_t *src_end = src + src_size;
 
  577     while (src + 5 <= src_end) {
 
  579         opcode = *(int8_t *)src++;
 
  581             int size = opcode + 1;
 
  582             for (i = 0; i < 
size; i++) {
 
  584                 memcpy(dst + 
y*linesize + x * 4, src, length * 4);
 
  596             int size = -opcode + 1;
 
  598             for (i = 0; i < 
size; i++) {
 
  599                 *(uint32_t *)(dst + 
y*linesize + x * 4) = 
pixel;
 
  625     int x = 0, 
y = 0, plane = 0;
 
  629     for (i = 0; i < src_size * 2;) {
 
  630 #define GETNIBBLE ((i & 1) ?  (src[i>>1] & 0xF) : (src[i>>1] >> 4)) 
  635             dst[
y * linesize + x*4 + plane] = 
pixel;
 
  638             if (i >= src_size * 2)
 
  642             d = 
FFMIN(d, width - x);
 
  643             for (j = 0; j < d; j++) {
 
  644                 dst[
y * linesize + x*4 + plane] = 
pixel;
 
  671                         void *
data, 
int *got_frame,
 
  677     const uint8_t *buf_end = buf + buf_size;
 
  701                 for (plane = 0; plane < s->
bpp; plane++) {
 
  702                     for (y = 0; y < avctx->
height && buf < buf_end; y++) {
 
  710                 for (y = 0; y < avctx->
height; y++) {
 
  713                     for (plane = 0; plane < s->
bpp; plane++) {
 
  715                         if (start >= buf_end)
 
  727             for (y = 0; y < avctx->
height && buf < buf_end; y++) {
 
  729                 memcpy(row, buf, 
FFMIN(raw_width, buf_end - buf));
 
  732                     for (x = 0; x < avctx->
width; x++)
 
  733                         row[4 * x + 3] = row[4 * x + 3] & 0xF0 | (row[4 * x + 3] >> 4);
 
  738                 for (y = 0; y < avctx->
height; y++) {
 
  740                     memset(row, 0, avctx->
width);
 
  741                     for (plane = 0; plane < s->
bpp && buf < buf_end; plane++) {
 
  747                 for (y = 0; y < avctx->
height; y++) {
 
  750                     for (plane = 0; plane < s->
bpp && buf < buf_end; plane++) {
 
  757                 for (y = 0; y < avctx->
height; y++) {
 
  759                     memset(row, 0, avctx->
width << 2);
 
  760                     for (plane = 0; plane < s->
bpp && buf < buf_end; plane++) {
 
  769                 for (y = 0; y < avctx->
height && buf_end > 
buf; y++) {
 
  771                     memcpy(row, buf, 
FFMIN(avctx->
width, buf_end - buf));
 
  775                 for (y = 0; y < avctx->
height && buf_end > 
buf; y++) {
 
  788                 for (y = 0; y < avctx->
height; y++) {
 
  790                     memset(row, 0, avctx->
width);
 
  791                     for (plane = 0; plane < s->
bpp; plane++) {
 
  797                 for (y = 0; y < avctx->
height; y++) {
 
  800                     for (plane = 0; plane < s->
bpp; plane++) {
 
  807                 for (y = 0; y < avctx->
height; y++) {
 
  810                     for (plane = 0; plane < s->
bpp; plane++) {
 
  817                 for (y = 0; y < avctx->
height; y++) {
 
  819                     memset(row, 0, avctx->
width << 2);
 
  820                     for (plane = 0; plane < s->
bpp; plane++) {
 
  828                 for (y = 0; y < avctx->
height; y++) {
 
  833                 for (y = 0; y < avctx->
height; y++) {
 
  879 #if CONFIG_IFF_ILBM_DECODER 
  880 AVCodec ff_iff_ilbm_decoder = {
 
  892 #if CONFIG_IFF_BYTERUN1_DECODER 
  893 AVCodec ff_iff_byterun1_decoder = {