summaryrefslogtreecommitdiff
path: root/libavcodec/fraps.c
diff options
context:
space:
mode:
authorReimar Döffinger <Reimar.Doeffinger@gmx.de>2012-01-29 15:40:48 +0100
committerReimar Döffinger <Reimar.Doeffinger@gmx.de>2012-01-29 17:34:22 +0100
commit7fabef1f014eea1c7b4a0eed789b7a4e8c76ad5f (patch)
tree02f14980d871e171a27508705da394d90631b141 /libavcodec/fraps.c
parent7df9937fcc6a91ce4763dfa1ea6fc331f7e77295 (diff)
fraps: optimize pseudo-YUV to RGB conversion.
With gcc 4.6 this part of the code is ca. 4x faster, resulting in an overall speedup of around 5% for fate-fraps-v5 sample. Signed-off-by: Reimar Döffinger <Reimar.Doeffinger@gmx.de>
Diffstat (limited to 'libavcodec/fraps.c')
-rw-r--r--libavcodec/fraps.c11
1 files changed, 8 insertions, 3 deletions
diff --git a/libavcodec/fraps.c b/libavcodec/fraps.c
index 99387b5eed..27df547504 100644
--- a/libavcodec/fraps.c
+++ b/libavcodec/fraps.c
@@ -140,6 +140,7 @@ static int decode_frame(AVCodecContext *avctx,
uint32_t offs[4];
int i, j, is_chroma;
const int planes = 3;
+ uint8_t *out;
header = AV_RL32(buf);
@@ -281,12 +282,16 @@ static int decode_frame(AVCodecContext *avctx,
return -1;
}
}
+ out = f->data[0];
// convert pseudo-YUV into real RGB
for(j = 0; j < avctx->height; j++){
- for(i = 0; i < avctx->width; i++){
- f->data[0][0 + i*3 + j*f->linesize[0]] += f->data[0][1 + i*3 + j*f->linesize[0]];
- f->data[0][2 + i*3 + j*f->linesize[0]] += f->data[0][1 + i*3 + j*f->linesize[0]];
+ uint8_t *line_end = out + 3*avctx->width;
+ while (out < line_end) {
+ out[0] += out[1];
+ out[2] += out[1];
+ out += 3;
}
+ out += f->linesize[0] - 3*avctx->width;
}
break;
}