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

Ramiro Polla ramiro.polla
Thu Aug 13 16:22:08 CEST 2009


On Wed, Aug 12, 2009 at 10:43 PM, Michael Niedermayer<michaelni at gmx.at> wrote:
> 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

Hmm, that felt stupid.

> 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 ...

Attached patch templates the code for BE and LE. It needs another
patch for common.h which is also attached.

Ramiro Polla
-------------- next part --------------
A non-text attachment was scrubbed...
Name: av_clip_uint16.diff
Type: text/x-diff
Size: 582 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090813/1cb0c83f/attachment.diff>
-------------- next part --------------
A non-text attachment was scrubbed...
Name: yuv8_yuv16.diff
Type: text/x-diff
Size: 7135 bytes
Desc: not available
URL: <http://lists.mplayerhq.hu/pipermail/ffmpeg-devel/attachments/20090813/1cb0c83f/attachment-0001.diff>



More information about the ffmpeg-devel mailing list