[FFmpeg-devel] [PATCH] yuv8->yuv16 vertical scaler.

Michael Niedermayer michaelni
Thu Aug 13 03:43:36 CEST 2009


On Wed, Aug 12, 2009 at 09:38:38PM -0300, Ramiro Polla wrote:
> $subj

>  swscale.c          |   66 +++++++++++++++++++++++++++++++++++++++++++++++++++++
>  swscale_template.c |   20 ++++++++++++++++
>  2 files changed, 86 insertions(+)
> e97c6ae96069d3e1b576d547dd8674b278b94efd  0002-yuv8-yuv16-vertical-scaler.patch
> From 7bb251a34a9121dcdbb522b8446a3cd6aec4a2b3 Mon Sep 17 00:00:00 2001
> From: Ramiro Polla <ramiro.polla at gmail.com>
> Date: Wed, 12 Aug 2009 20:10:05 -0300
> Subject: [PATCH] yuv8->yuv16 vertical scaler.
> 
> ---
>  swscale.c          |   66 ++++++++++++++++++++++++++++++++++++++++++++++++++++
>  swscale_template.c |   20 +++++++++++++++
>  2 files changed, 86 insertions(+), 0 deletions(-)
> 
> diff --git a/swscale.c b/swscale.c
> index 6e0535c..1880bbf 100644
> --- a/swscale.c
> +++ b/swscale.c
> @@ -474,6 +474,72 @@ const char *sws_format_name(enum PixelFormat format)
>      }
>  }
>  
> +static inline void yuv2yuvX16inC(const int16_t *lumFilter, const int16_t **lumSrc, int lumFilterSize,
> +                                 const int16_t *chrFilter, const int16_t **chrSrc, int chrFilterSize,
> +                                 const int16_t **alpSrc, uint8_t *dest, uint8_t *uDest, uint8_t *vDest, uint8_t *aDest, int dstW, int chrDstW,
> +                                 enum PixelFormat dstFormat)
> +{
> +    //FIXME Optimize (just quickly written not optimized..)
> +    int i;
> +    for (i=0; i<dstW; i++)
> +    {
> +        int val=1<<18;
> +        int j;
> +        for (j=0; j<lumFilterSize; j++)
> +            val += lumSrc[j][i] * lumFilter[j];
> +
> +        if (isBE(dstFormat)) {
> +            dest[2*i+0]= av_clip_uint8(val>>19);
> +            dest[2*i+1]= 0;
> +        } else {
> +            dest[2*i+0]= 0;
> +            dest[2*i+1]= av_clip_uint8(val>>19);
> +        }

its

dest[2*i+0]= 
dest[2*i+1]= av_clip_uint8(val>>19);

white-> white 0xFF -> 0xFFFF

but you should not throw bits away thus it really should be writing 16bit 

also this touches at the "how to handle non native endian formats" issue,
checking in the inner loop instead of a seperate bswap loop may or may not
be wise ...

[...]
-- 
Michael     GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB

Asymptotically faster algorithms should always be preferred if you have
asymptotical amounts of data
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 189 bytes
Desc: Digital signature
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090813/037f5f61/attachment.pgp>



More information about the ffmpeg-devel mailing list