28 #define RT_BYTE_ENCODED 2
29 #define RT_FORMAT_RGB 3
30 #define RT_FORMAT_TIFF 4
31 #define RT_FORMAT_IFF 5
48 const uint8_t *buf = avpkt->
data;
49 const uint8_t *buf_end = avpkt->
data + avpkt->
size;
53 unsigned int w, h,
depth, type, maptype, maplength,
stride, x, y,
len, alen;
55 const uint8_t *bufstart = buf;
60 if (
AV_RB32(buf) != 0x59a66a95) {
118 if (buf_end - buf < maplength)
121 if (depth != 8 && maplength) {
122 av_log(avctx,
AV_LOG_WARNING,
"useless colormap found or file is corrupted, trying to recover\n");
124 }
else if (depth == 8) {
125 unsigned int len = maplength / 3;
131 if (maplength % 3 || maplength > 768) {
137 for (x=0; x<
len; x++, ptr+=4)
138 *(uint32_t *)ptr = (buf[x]<<16) + (buf[len+x]<<8) + buf[len+len+x];
147 len = (depth * w + 7) >> 3;
148 alen = len + (len&1);
152 uint8_t *end = ptr + h*
stride;
155 while (ptr != end && buf < buf_end) {
157 if (buf_end - buf < 1)
160 if ((value = *buf++) == 0x80) {
177 for (y=0; y<h; y++) {
178 if (buf_end - buf < len)
180 memcpy(ptr, buf, len);
189 return buf - bufstart;