Commit fe51b5ce authored by Sebastian Vater's avatar Sebastian Vater Committed by Ronald S. Bultje

Move some branches outside looped code. Should improve the generated asm (and

thus performance) slightly.

Patch by Sebastian Vater <cdgs.basty googlemail com>.

Originally committed as revision 22975 to svn://svn.ffmpeg.org/ffmpeg/trunk
parent 473147be
......@@ -140,16 +140,23 @@ static int decode_frame_ilbm(AVCodecContext *avctx,
return -1;
}
if (avctx->pix_fmt == PIX_FMT_PAL8) {
for(y = 0; y < avctx->height; y++ ) {
uint8_t *row = &s->frame.data[0][ y*s->frame.linesize[0] ];
memset(row, 0, avctx->pix_fmt == PIX_FMT_PAL8 ? avctx->width : (avctx->width * 4));
memset(row, 0, avctx->width);
for (plane = 0; plane < avctx->bits_per_coded_sample && buf < buf_end; plane++) {
if (avctx->pix_fmt == PIX_FMT_PAL8) {
decodeplane8(row, buf, FFMIN(s->planesize, buf_end - buf), avctx->bits_per_coded_sample, plane);
buf += s->planesize;
}
}
} else { // PIX_FMT_BGR32
for(y = 0; y < avctx->height; y++ ) {
uint8_t *row = &s->frame.data[0][y*s->frame.linesize[0]];
memset(row, 0, avctx->width << 2);
for (plane = 0; plane < avctx->bits_per_coded_sample && buf < buf_end; plane++) {
decodeplane32((uint32_t *) row, buf, FFMIN(s->planesize, buf_end - buf), avctx->bits_per_coded_sample, plane);
}
buf += s->planesize;
}
}
}
......@@ -173,10 +180,11 @@ static int decode_frame_byterun1(AVCodecContext *avctx,
return -1;
}
if (avctx->codec_tag == MKTAG('I','L','B','M')) { //interleaved
if (avctx->pix_fmt == PIX_FMT_PAL8) {
for(y = 0; y < avctx->height ; y++ ) {
uint8_t *row = &s->frame.data[0][ y*s->frame.linesize[0] ];
if (avctx->codec_tag == MKTAG('I','L','B','M')) { //interleaved
memset(row, 0, avctx->pix_fmt == PIX_FMT_PAL8 ? avctx->width : (avctx->width * 4));
memset(row, 0, avctx->width);
for (plane = 0; plane < avctx->bits_per_coded_sample; plane++) {
for(x = 0; x < s->planesize && buf < buf_end; ) {
int8_t value = *buf++;
......@@ -193,13 +201,36 @@ static int decode_frame_byterun1(AVCodecContext *avctx,
}
x += length;
}
if (avctx->pix_fmt == PIX_FMT_PAL8) {
decodeplane8(row, s->planebuf, s->planesize, avctx->bits_per_coded_sample, plane);
}
}
} else { //PIX_FMT_BGR32
for(y = 0; y < avctx->height ; y++ ) {
uint8_t *row = &s->frame.data[0][y*s->frame.linesize[0]];
memset(row, 0, avctx->width << 2);
for (plane = 0; plane < avctx->bits_per_coded_sample; plane++) {
for(x = 0; x < s->planesize && buf < buf_end; ) {
int8_t value = *buf++;
unsigned length;
if (value >= 0) {
length = value + 1;
memcpy(s->planebuf + x, buf, FFMIN3(length, s->planesize - x, buf_end - buf));
buf += length;
} else if (value > -128) {
length = -value + 1;
memset(s->planebuf + x, *buf++, FFMIN(length, s->planesize - x));
} else { // noop
continue;
}
x += length;
}
decodeplane32((uint32_t *) row, s->planebuf, s->planesize, avctx->bits_per_coded_sample, plane);
}
}
}
} else {
for(y = 0; y < avctx->height ; y++ ) {
uint8_t *row = &s->frame.data[0][y*s->frame.linesize[0]];
for(x = 0; x < avctx->width && buf < buf_end; ) {
int8_t value = *buf++;
unsigned length;
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment