mirror of https://git.ffmpeg.org/ffmpeg.git
avcodec/qtrle : 32bpp dec copy two raw argb value at the same time
benchmark on x86_64 : 38 fps -> 40 fps
This commit is contained in:
parent
5496a73488
commit
3278ea67c8
|
@ -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,10 +379,15 @@ 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);
|
||||
pixel_ptr += 4;
|
||||
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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue