Commit 3278ea67 authored by Martin Vignali's avatar Martin Vignali

avcodec/qtrle : 32bpp dec copy two raw argb value at the same time

benchmark on x86_64 :
38 fps -> 40 fps
parent 5496a734
......@@ -346,7 +346,7 @@ static void qtrle_decode_24bpp(QtrleContext *s, int row_ptr, int lines_to_change
static void qtrle_decode_32bpp(QtrleContext *s, int row_ptr, int lines_to_change)
{
int rle_code;
int rle_code, rle_code_half;
int pixel_ptr;
int row_inc = s->frame->linesize[0];
unsigned int argb;
......@@ -379,9 +379,14 @@ static void qtrle_decode_32bpp(QtrleContext *s, int row_ptr, int lines_to_change
CHECK_PIXEL_PTR(rle_code * 4);
/* copy pixels directly to output */
while (rle_code--) {
argb = bytestream2_get_ne32(&s->g);
AV_WN32A(rgb + pixel_ptr, argb);
rle_code_half = rle_code / 2;
while (rle_code_half--) { /* copy 2 argb raw value at the same time */
AV_WN64A(rgb + pixel_ptr, bytestream2_get_ne64(&s->g));
pixel_ptr += 8;
}
if (rle_code % 2 != 0){ /* not even raw value */
AV_WN32A(rgb + pixel_ptr, bytestream2_get_ne32(&s->g));
pixel_ptr += 4;
}
}
......
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