Originally committed as revision 18270 to svn://svn.ffmpeg.org/ffmpeg/trunk
release/0.6
Reimar Döffinger 16 years ago
parent 1548839e51
commit 9aaacc246a
  1. 66
      libavcodec/interplayvideo.c

@ -389,35 +389,35 @@ static int ipvideo_decode_block_opcode_0x9(IpvideoContext *s)
if (P[0] <= P[1]) { if (P[0] <= P[1]) {
if (P[2] <= P[3]) { if (P[2] <= P[3]) {
/* 1 of 4 colors for each pixel, need 16 more bytes */ /* 1 of 4 colors for each pixel, need 16 more bytes */
CHECK_STREAM_PTR(16); CHECK_STREAM_PTR(16);
for (y = 0; y < 8; y++) { for (y = 0; y < 8; y++) {
/* get the next set of 8 2-bit flags */ /* get the next set of 8 2-bit flags */
int flags = bytestream_get_le16(&s->stream_ptr); int flags = bytestream_get_le16(&s->stream_ptr);
for (x = 0; x < 8; x++, flags >>= 2) { for (x = 0; x < 8; x++, flags >>= 2) {
*s->pixel_ptr++ = P[flags & 0x03]; *s->pixel_ptr++ = P[flags & 0x03];
}
s->pixel_ptr += s->line_inc;
} }
s->pixel_ptr += s->line_inc;
}
} else { } else {
uint32_t flags; uint32_t flags;
/* 1 of 4 colors for each 2x2 block, need 4 more bytes */ /* 1 of 4 colors for each 2x2 block, need 4 more bytes */
CHECK_STREAM_PTR(4); CHECK_STREAM_PTR(4);
flags = bytestream_get_le32(&s->stream_ptr); flags = bytestream_get_le32(&s->stream_ptr);
for (y = 0; y < 8; y += 2) { for (y = 0; y < 8; y += 2) {
for (x = 0; x < 8; x += 2, flags >>= 2) { for (x = 0; x < 8; x += 2, flags >>= 2) {
s->pixel_ptr[x ] = s->pixel_ptr[x ] =
s->pixel_ptr[x + 1 ] = s->pixel_ptr[x + 1 ] =
s->pixel_ptr[x + s->stride] = s->pixel_ptr[x + s->stride] =
s->pixel_ptr[x + 1 + s->stride] = P[flags & 0x03]; s->pixel_ptr[x + 1 + s->stride] = P[flags & 0x03];
}
s->pixel_ptr += s->stride * 2;
} }
s->pixel_ptr += s->stride * 2;
}
} }
} else { } else {
@ -428,21 +428,21 @@ static int ipvideo_decode_block_opcode_0x9(IpvideoContext *s)
flags = bytestream_get_le64(&s->stream_ptr); flags = bytestream_get_le64(&s->stream_ptr);
if (P[2] <= P[3]) { if (P[2] <= P[3]) {
for (y = 0; y < 8; y++) { for (y = 0; y < 8; y++) {
for (x = 0; x < 8; x += 2, flags >>= 2) { for (x = 0; x < 8; x += 2, flags >>= 2) {
s->pixel_ptr[x ] = s->pixel_ptr[x ] =
s->pixel_ptr[x + 1] = P[flags & 0x03]; s->pixel_ptr[x + 1] = P[flags & 0x03];
}
s->pixel_ptr += s->stride;
} }
s->pixel_ptr += s->stride;
}
} else { } else {
for (y = 0; y < 8; y += 2) { for (y = 0; y < 8; y += 2) {
for (x = 0; x < 8; x++, flags >>= 2) { for (x = 0; x < 8; x++, flags >>= 2) {
s->pixel_ptr[x ] = s->pixel_ptr[x ] =
s->pixel_ptr[x + s->stride] = P[flags & 0x03]; s->pixel_ptr[x + s->stride] = P[flags & 0x03];
}
s->pixel_ptr += s->stride * 2;
} }
s->pixel_ptr += s->stride * 2;
}
} }
} }

Loading…
Cancel
Save