From bbd3dc49ffc0ae2eb3ed665652093619e360312a Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Fri, 27 Apr 2012 04:53:56 +0200 Subject: [PATCH] swr: unroll audioconvert core C function 36k->32k decicycles Signed-off-by: Michael Niedermayer --- libswresample/audioconvert.c | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/libswresample/audioconvert.c b/libswresample/audioconvert.c index ba47188bb3..7598bba05d 100644 --- a/libswresample/audioconvert.c +++ b/libswresample/audioconvert.c @@ -47,9 +47,16 @@ struct AudioConvert { #define CONV_FUNC(ofmt, otype, ifmt, expr)\ static void CONV_FUNC_NAME(ofmt, ifmt)(uint8_t *po, const uint8_t *pi, int is, int os, uint8_t *end)\ {\ - do{\ + uint8_t *end2 = end - 3*os;\ + while(po < end2){\ *(otype*)po = expr; pi += is; po += os;\ - }while(po < end);\ + *(otype*)po = expr; pi += is; po += os;\ + *(otype*)po = expr; pi += is; po += os;\ + *(otype*)po = expr; pi += is; po += os;\ + }\ + while(po < end){\ + *(otype*)po = expr; pi += is; po += os;\ + }\ } //FIXME put things below under ifdefs so we do not waste space for cases no codec will need