From 7fabef1f014eea1c7b4a0eed789b7a4e8c76ad5f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Reimar=20D=C3=B6ffinger?= Date: Sun, 29 Jan 2012 15:40:48 +0100 Subject: [PATCH] fraps: optimize pseudo-YUV to RGB conversion. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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 --- libavcodec/fraps.c | 11 ++++++++--- 1 file 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; }