r171 - in experimental/ffmpeg/debian: . patches

Samuel Hocevar sho at alioth.debian.org
Wed Mar 14 14:22:50 CET 2007


Author: sho
Date: 2007-03-09 14:13:32 +0000 (Fri, 09 Mar 2007)
New Revision: 171

Modified:
   experimental/ffmpeg/debian/changelog
   experimental/ffmpeg/debian/patches/040_only_use_maltivec_when_needed.diff
Log:
  * debian/patches/040_only_use_maltivec_when_needed.diff:
    + Upgraded patch to cover libswscale.


Modified: experimental/ffmpeg/debian/changelog
===================================================================
--- experimental/ffmpeg/debian/changelog	2007-03-09 10:01:50 UTC (rev 170)
+++ experimental/ffmpeg/debian/changelog	2007-03-09 14:13:32 UTC (rev 171)
@@ -34,6 +34,9 @@
   * debian/patches/051_asf-misc-security-fixes.diff:
     + Drop patches, applied upstream or no longer relevant.
 
+  * debian/patches/040_only_use_maltivec_when_needed.diff:
+    + Upgraded patch to cover libswscale.
+
   * debian/libavcodec-dev.install:
     + Ship lzo.h and random.h.
 
@@ -42,7 +45,7 @@
     + Readded --enable-libtheora, it's here again.
     + Activate --enable-swscaler (Closes: #399141, #398442).
 
- -- Sam Hocevar (Debian packages) <sam+deb at zoy.org>  Wed,  7 Mar 2007 21:59:19 +0100
+ -- Sam Hocevar (Debian packages) <sam+deb at zoy.org>  Fri,  9 Mar 2007 15:13:16 +0100
 
 ffmpeg (0.cvs20060823-7) unstable; urgency=high
 

Modified: experimental/ffmpeg/debian/patches/040_only_use_maltivec_when_needed.diff
===================================================================
--- experimental/ffmpeg/debian/patches/040_only_use_maltivec_when_needed.diff	2007-03-09 10:01:50 UTC (rev 170)
+++ experimental/ffmpeg/debian/patches/040_only_use_maltivec_when_needed.diff	2007-03-09 14:13:32 UTC (rev 171)
@@ -1,7 +1,7 @@
 Index: ffmpeg-0.cvs20070307/configure
 ===================================================================
---- ffmpeg-0.cvs20070307.orig/configure	2007-03-09 10:56:54.000000000 +0100
-+++ ffmpeg-0.cvs20070307/configure	2007-03-09 10:56:54.000000000 +0100
+--- ffmpeg-0.cvs20070307.orig/configure	2007-03-09 14:28:38.000000000 +0100
++++ ffmpeg-0.cvs20070307/configure	2007-03-09 14:28:38.000000000 +0100
 @@ -1410,11 +1410,13 @@
          if test -n "`$cc -v 2>&1 | grep version | grep Apple`"; then
              add_cflags "-faltivec"
@@ -35,8 +35,8 @@
  echo "LDCONFIG=$LDCONFIG" >> config.mak
 Index: ffmpeg-0.cvs20070307/libavcodec/Makefile
 ===================================================================
---- ffmpeg-0.cvs20070307.orig/libavcodec/Makefile	2007-03-09 10:56:54.000000000 +0100
-+++ ffmpeg-0.cvs20070307/libavcodec/Makefile	2007-03-09 10:58:57.000000000 +0100
+--- ffmpeg-0.cvs20070307.orig/libavcodec/Makefile	2007-03-09 14:28:38.000000000 +0100
++++ ffmpeg-0.cvs20070307/libavcodec/Makefile	2007-03-09 14:28:38.000000000 +0100
 @@ -311,7 +311,8 @@
  OBJS-$(HAVE_XVMC_ACCEL)                += xvmcvideo.o
  
@@ -47,12 +47,18 @@
  endif
  
  # i386 mmx specific stuff
-@@ -386,12 +387,16 @@
-                                           ppc/gmc_altivec.o          \
+@@ -387,11 +388,22 @@
                                            ppc/fdct_altivec.o         \
                                            ppc/float_altivec.o        \
-+OBJS-$(TARGET_ALTIVEC): CFLAGS+= $(ALTIVECFLAGS)
  
++ppc/dsputil_altivec.o: CFLAGS+= $(ALTIVECFLAGS)
++ppc/mpegvideo_altivec.o: CFLAGS+= $(ALTIVECFLAGS)
++ppc/idct_altivec.o: CFLAGS+= $(ALTIVECFLAGS)
++ppc/fft_altivec.o: CFLAGS+= $(ALTIVECFLAGS)
++ppc/gmc_altivec.o: CFLAGS+= $(ALTIVECFLAGS)
++ppc/fdct_altivec.o: CFLAGS+= $(ALTIVECFLAGS)
++ppc/float_altivec.o: CFLAGS+= $(ALTIVECFLAGS)
++
  ifeq ($(TARGET_ALTIVEC),yes)
  OBJS-$(CONFIG_H264_DECODER)            += ppc/h264_altivec.o
  OBJS-$(CONFIG_SNOW_DECODER)            += ppc/snow_altivec.o
@@ -67,7 +73,7 @@
 Index: ffmpeg-0.cvs20070307/libavcodec/dsputil.h
 ===================================================================
 --- ffmpeg-0.cvs20070307.orig/libavcodec/dsputil.h	2007-03-07 14:37:04.000000000 +0100
-+++ ffmpeg-0.cvs20070307/libavcodec/dsputil.h	2007-03-09 10:56:54.000000000 +0100
++++ ffmpeg-0.cvs20070307/libavcodec/dsputil.h	2007-03-09 14:28:38.000000000 +0100
 @@ -556,12 +556,6 @@
  
  extern int mm_flags;
@@ -84,7 +90,7 @@
 Index: ffmpeg-0.cvs20070307/libavcodec/imgresample.c
 ===================================================================
 --- ffmpeg-0.cvs20070307.orig/libavcodec/imgresample.c	2007-03-07 14:37:04.000000000 +0100
-+++ ffmpeg-0.cvs20070307/libavcodec/imgresample.c	2007-03-09 10:56:54.000000000 +0100
++++ ffmpeg-0.cvs20070307/libavcodec/imgresample.c	2007-03-09 14:28:38.000000000 +0100
 @@ -284,133 +284,6 @@
  }
  #endif
@@ -222,7 +228,7 @@
 Index: ffmpeg-0.cvs20070307/libavcodec/imgresample_altivec.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ ffmpeg-0.cvs20070307/libavcodec/imgresample_altivec.c	2007-03-09 10:56:54.000000000 +0100
++++ ffmpeg-0.cvs20070307/libavcodec/imgresample_altivec.c	2007-03-09 14:28:38.000000000 +0100
 @@ -0,0 +1,164 @@
 +/*
 + * High quality image resampling with polyphase filters
@@ -391,7 +397,7 @@
 Index: ffmpeg-0.cvs20070307/libpostproc/Makefile
 ===================================================================
 --- ffmpeg-0.cvs20070307.orig/libpostproc/Makefile	2007-03-07 14:37:04.000000000 +0100
-+++ ffmpeg-0.cvs20070307/libpostproc/Makefile	2007-03-09 10:56:54.000000000 +0100
++++ ffmpeg-0.cvs20070307/libpostproc/Makefile	2007-03-09 14:28:38.000000000 +0100
 @@ -10,8 +10,10 @@
  LIBVERSION=$(SPPVERSION)
  LIBMAJOR=$(SPPMAJOR)
@@ -415,7 +421,7 @@
 Index: ffmpeg-0.cvs20070307/libpostproc/postprocess.c
 ===================================================================
 --- ffmpeg-0.cvs20070307.orig/libpostproc/postprocess.c	2007-03-07 11:17:32.000000000 +0100
-+++ ffmpeg-0.cvs20070307/libpostproc/postprocess.c	2007-03-09 10:56:54.000000000 +0100
++++ ffmpeg-0.cvs20070307/libpostproc/postprocess.c	2007-03-09 14:28:38.000000000 +0100
 @@ -95,10 +95,6 @@
  
  #include "mangle.h" //FIXME should be supressed
@@ -442,7 +448,7 @@
 Index: ffmpeg-0.cvs20070307/libpostproc/postprocess_altivec.c
 ===================================================================
 --- /dev/null	1970-01-01 00:00:00.000000000 +0000
-+++ ffmpeg-0.cvs20070307/libpostproc/postprocess_altivec.c	2007-03-09 10:56:54.000000000 +0100
++++ ffmpeg-0.cvs20070307/libpostproc/postprocess_altivec.c	2007-03-09 14:28:38.000000000 +0100
 @@ -0,0 +1,614 @@
 +/*
 +    Copyright (C) 2001-2003 Michael Niedermayer (michaelni at gmx.at)
@@ -1060,8 +1066,8 @@
 +
 Index: ffmpeg-0.cvs20070307/libpostproc/postprocess_template.c
 ===================================================================
---- ffmpeg-0.cvs20070307.orig/libpostproc/postprocess_template.c	2007-03-09 10:56:54.000000000 +0100
-+++ ffmpeg-0.cvs20070307/libpostproc/postprocess_template.c	2007-03-09 10:56:54.000000000 +0100
+--- ffmpeg-0.cvs20070307.orig/libpostproc/postprocess_template.c	2007-03-09 14:28:38.000000000 +0100
++++ ffmpeg-0.cvs20070307/libpostproc/postprocess_template.c	2007-03-09 14:28:38.000000000 +0100
 @@ -3181,7 +3181,10 @@
  }
  #endif //HAVE_MMX
@@ -1086,3 +1092,863 @@
          QP_STORE_T QPs[], int QPStride, int isColor, PPContext *c2)
  {
          PPContext __attribute__((aligned(8))) c= *c2; //copy to stack for faster access
+Index: ffmpeg-0.cvs20070307/libswscale/swscale.c
+===================================================================
+--- ffmpeg-0.cvs20070307.orig/libswscale/swscale.c	2007-03-07 14:37:07.000000000 +0100
++++ ffmpeg-0.cvs20070307/libswscale/swscale.c	2007-03-09 14:28:38.000000000 +0100
+@@ -849,7 +849,10 @@
+ #undef RENAME
+ #define HAVE_ALTIVEC
+ #define RENAME(a) a ## _altivec
+-#include "swscale_template.c"
++//#include "swscale_template.c"
++int yv12toyuy2_unscaled_altivec(SwsContext *, uint8_t*[], int[], int, int, uint8_t*[], int[]);
++int yv12touyvy_unscaled_altivec(SwsContext *, uint8_t*[], int[], int, int, uint8_t*[], int[]);
++int RENAME(swScale)(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY, int srcSliceH, uint8_t* dst[], int dstStride[]);
+ #endif
+ #endif //ARCH_POWERPC
+ 
+@@ -2241,8 +2244,8 @@
+ 				srcFilter->chrV, dstFilter->chrV, c->param);
+ 
+ #ifdef HAVE_ALTIVEC
+-		c->vYCoeffsBank = av_malloc(sizeof (vector signed short)*c->vLumFilterSize*c->dstH);
+-		c->vCCoeffsBank = av_malloc(sizeof (vector signed short)*c->vChrFilterSize*c->chrDstH);
++		c->vYCoeffsBank = av_malloc(16*c->vLumFilterSize*c->dstH);
++		c->vCCoeffsBank = av_malloc(16*c->vChrFilterSize*c->chrDstH);
+ 
+ 		for (i=0;i<c->vLumFilterSize*c->dstH;i++) {
+                   int j;
+Index: ffmpeg-0.cvs20070307/libswscale/swscale_altivec.c
+===================================================================
+--- /dev/null	1970-01-01 00:00:00.000000000 +0000
++++ ffmpeg-0.cvs20070307/libswscale/swscale_altivec.c	2007-03-09 14:58:04.000000000 +0100
+@@ -0,0 +1,729 @@
++/*
++ * Copyright (C) 2001-2003 Michael Niedermayer <michaelni at gmx.at>
++ *
++ * This file is part of FFmpeg.
++ *
++ * FFmpeg is free software; you can redistribute it and/or modify
++ * it under the terms of the GNU General Public License as published by
++ * the Free Software Foundation; either version 2 of the License, or
++ * (at your option) any later version.
++ *
++ * FFmpeg is distributed in the hope that it will be useful,
++ * but WITHOUT ANY WARRANTY; without even the implied warranty of
++ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
++ * GNU General Public License for more details.
++ *
++ * You should have received a copy of the GNU General Public License
++ * along with FFmpeg; if not, write to the Free Software
++ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
++ *
++ * the C code (not assembly, mmx, ...) of this file can be used
++ * under the LGPL license too
++ */
++
++/*
++  supported Input formats: YV12, I420/IYUV, YUY2, UYVY, BGR32, BGR24, BGR16, BGR15, RGB32, RGB24, Y8/Y800, YVU9/IF09, PAL8
++  supported output formats: YV12, I420/IYUV, YUY2, UYVY, {BGR,RGB}{1,4,8,15,16,24,32}, Y8/Y800, YVU9/IF09
++  {BGR,RGB}{1,4,8,15,16} support dithering
++  
++  unscaled special converters (YV12=I420=IYUV, Y800=Y8)
++  YV12 -> {BGR,RGB}{1,4,8,15,16,24,32}
++  x -> x
++  YUV9 -> YV12
++  YUV9/YV12 -> Y800
++  Y800 -> YUV9/YV12
++  BGR24 -> BGR32 & RGB24 -> RGB32
++  BGR32 -> BGR24 & RGB32 -> RGB24
++  BGR15 -> BGR16
++*/
++
++/* 
++tested special converters (most are tested actually but i didnt write it down ...)
++ YV12 -> BGR16
++ YV12 -> YV12
++ BGR15 -> BGR16
++ BGR16 -> BGR16
++ YVU9 -> YV12
++
++untested special converters
++  YV12/I420 -> BGR15/BGR24/BGR32 (its the yuv2rgb stuff, so it should be ok)
++  YV12/I420 -> YV12/I420
++  YUY2/BGR15/BGR24/BGR32/RGB24/RGB32 -> same format
++  BGR24 -> BGR32 & RGB24 -> RGB32
++  BGR32 -> BGR24 & RGB32 -> RGB24
++  BGR24 -> YV12
++*/
++
++#include <inttypes.h>
++#include <string.h>
++#include <math.h>
++#include <stdio.h>
++#include <unistd.h>
++#include "config.h"
++#include <assert.h>
++#ifdef HAVE_SYS_MMAN_H
++#include <sys/mman.h>
++#if defined(MAP_ANON) && !defined(MAP_ANONYMOUS)
++#define MAP_ANONYMOUS MAP_ANON
++#endif
++#endif
++#include "swscale.h"
++#include "swscale_internal.h"
++#include "x86_cpu.h"
++#include "bswap.h"
++#include "rgb2rgb.h"
++#ifdef USE_FASTMEMCPY
++#include "libvo/fastmemcpy.h"
++#endif
++
++#undef MOVNTQ
++#undef PAVGB
++
++//#undef HAVE_MMX2
++//#define HAVE_3DNOW
++//#undef HAVE_MMX
++//#undef ARCH_X86
++//#define WORDS_BIGENDIAN
++#define DITHER1XBPP
++
++#define FAST_BGR2YV12 // use 7 bit coeffs instead of 15bit
++
++#define RET 0xC3 //near return opcode for X86
++
++#ifdef MP_DEBUG
++#define ASSERT(x) assert(x);
++#else
++#define ASSERT(x) ;
++#endif
++
++#ifdef M_PI
++#define PI M_PI
++#else
++#define PI 3.14159265358979323846
++#endif
++
++#define isSupportedIn(x)  ((x)==PIX_FMT_YUV420P || (x)==PIX_FMT_YUYV422 || (x)==PIX_FMT_UYVY422\
++			|| (x)==PIX_FMT_RGB32|| (x)==PIX_FMT_BGR24|| (x)==PIX_FMT_BGR565|| (x)==PIX_FMT_BGR555\
++			|| (x)==PIX_FMT_BGR32|| (x)==PIX_FMT_RGB24|| (x)==PIX_FMT_RGB565|| (x)==PIX_FMT_RGB555\
++			|| (x)==PIX_FMT_GRAY8 || (x)==PIX_FMT_YUV410P\
++			|| (x)==PIX_FMT_GRAY16BE || (x)==PIX_FMT_GRAY16LE\
++			|| (x)==PIX_FMT_YUV444P || (x)==PIX_FMT_YUV422P || (x)==PIX_FMT_YUV411P\
++			|| (x)==PIX_FMT_PAL8 || (x)==PIX_FMT_BGR8 || (x)==PIX_FMT_RGB8\
++                        || (x)==PIX_FMT_BGR4_BYTE  || (x)==PIX_FMT_RGB4_BYTE)
++#define isSupportedOut(x) ((x)==PIX_FMT_YUV420P || (x)==PIX_FMT_YUYV422 || (x)==PIX_FMT_UYVY422\
++			|| (x)==PIX_FMT_YUV444P || (x)==PIX_FMT_YUV422P || (x)==PIX_FMT_YUV411P\
++			|| isRGB(x) || isBGR(x)\
++			|| (x)==PIX_FMT_NV12 || (x)==PIX_FMT_NV21\
++			|| (x)==PIX_FMT_GRAY16BE || (x)==PIX_FMT_GRAY16LE\
++			|| (x)==PIX_FMT_GRAY8 || (x)==PIX_FMT_YUV410P)
++#define isPacked(x)    ((x)==PIX_FMT_YUYV422 || (x)==PIX_FMT_UYVY422 ||isRGB(x) || isBGR(x))
++
++#define RGB2YUV_SHIFT 16
++#define BY ((int)( 0.098*(1<<RGB2YUV_SHIFT)+0.5))
++#define BV ((int)(-0.071*(1<<RGB2YUV_SHIFT)+0.5))
++#define BU ((int)( 0.439*(1<<RGB2YUV_SHIFT)+0.5))
++#define GY ((int)( 0.504*(1<<RGB2YUV_SHIFT)+0.5))
++#define GV ((int)(-0.368*(1<<RGB2YUV_SHIFT)+0.5))
++#define GU ((int)(-0.291*(1<<RGB2YUV_SHIFT)+0.5))
++#define RY ((int)( 0.257*(1<<RGB2YUV_SHIFT)+0.5))
++#define RV ((int)( 0.439*(1<<RGB2YUV_SHIFT)+0.5))
++#define RU ((int)(-0.148*(1<<RGB2YUV_SHIFT)+0.5))
++
++extern const int32_t Inverse_Table_6_9[8][4];
++
++/*
++NOTES
++Special versions: fast Y 1:1 scaling (no interpolation in y direction)
++
++TODO
++more intelligent missalignment avoidance for the horizontal scaler
++write special vertical cubic upscale version
++Optimize C code (yv12 / minmax)
++add support for packed pixel yuv input & output
++add support for Y8 output
++optimize bgr24 & bgr32
++add BGR4 output support
++write special BGR->BGR scaler
++*/
++
++#if defined(ARCH_X86) && defined (CONFIG_GPL)
++static uint64_t attribute_used __attribute__((aligned(8))) bF8=       0xF8F8F8F8F8F8F8F8LL;
++static uint64_t attribute_used __attribute__((aligned(8))) bFC=       0xFCFCFCFCFCFCFCFCLL;
++static uint64_t __attribute__((aligned(8))) w10=       0x0010001000100010LL;
++static uint64_t attribute_used __attribute__((aligned(8))) w02=       0x0002000200020002LL;
++static uint64_t attribute_used __attribute__((aligned(8))) bm00001111=0x00000000FFFFFFFFLL;
++static uint64_t attribute_used __attribute__((aligned(8))) bm00000111=0x0000000000FFFFFFLL;
++static uint64_t attribute_used __attribute__((aligned(8))) bm11111000=0xFFFFFFFFFF000000LL;
++static uint64_t attribute_used __attribute__((aligned(8))) bm01010101=0x00FF00FF00FF00FFLL;
++
++static volatile uint64_t attribute_used __attribute__((aligned(8))) b5Dither;
++static volatile uint64_t attribute_used __attribute__((aligned(8))) g5Dither;
++static volatile uint64_t attribute_used __attribute__((aligned(8))) g6Dither;
++static volatile uint64_t attribute_used __attribute__((aligned(8))) r5Dither;
++
++static uint64_t __attribute__((aligned(8))) dither4[2]={
++	0x0103010301030103LL,
++	0x0200020002000200LL,};
++
++static uint64_t __attribute__((aligned(8))) dither8[2]={
++	0x0602060206020602LL,
++	0x0004000400040004LL,};
++
++static uint64_t __attribute__((aligned(8))) b16Mask=   0x001F001F001F001FLL;
++static uint64_t attribute_used __attribute__((aligned(8))) g16Mask=   0x07E007E007E007E0LL;
++static uint64_t attribute_used __attribute__((aligned(8))) r16Mask=   0xF800F800F800F800LL;
++static uint64_t __attribute__((aligned(8))) b15Mask=   0x001F001F001F001FLL;
++static uint64_t attribute_used __attribute__((aligned(8))) g15Mask=   0x03E003E003E003E0LL;
++static uint64_t attribute_used __attribute__((aligned(8))) r15Mask=   0x7C007C007C007C00LL;
++
++static uint64_t attribute_used __attribute__((aligned(8))) M24A=   0x00FF0000FF0000FFLL;
++static uint64_t attribute_used __attribute__((aligned(8))) M24B=   0xFF0000FF0000FF00LL;
++static uint64_t attribute_used __attribute__((aligned(8))) M24C=   0x0000FF0000FF0000LL;
++
++#ifdef FAST_BGR2YV12
++static const uint64_t bgr2YCoeff  attribute_used __attribute__((aligned(8))) = 0x000000210041000DULL;
++static const uint64_t bgr2UCoeff  attribute_used __attribute__((aligned(8))) = 0x0000FFEEFFDC0038ULL;
++static const uint64_t bgr2VCoeff  attribute_used __attribute__((aligned(8))) = 0x00000038FFD2FFF8ULL;
++#else
++static const uint64_t bgr2YCoeff  attribute_used __attribute__((aligned(8))) = 0x000020E540830C8BULL;
++static const uint64_t bgr2UCoeff  attribute_used __attribute__((aligned(8))) = 0x0000ED0FDAC23831ULL;
++static const uint64_t bgr2VCoeff  attribute_used __attribute__((aligned(8))) = 0x00003831D0E6F6EAULL;
++#endif /* FAST_BGR2YV12 */
++static const uint64_t bgr2YOffset attribute_used __attribute__((aligned(8))) = 0x1010101010101010ULL;
++static const uint64_t bgr2UVOffset attribute_used __attribute__((aligned(8)))= 0x8080808080808080ULL;
++static const uint64_t w1111       attribute_used __attribute__((aligned(8))) = 0x0001000100010001ULL;
++#endif /* defined(ARCH_X86) */
++
++// clipping helper table for C implementations:
++static unsigned char clip_table[768];
++
++static SwsVector *sws_getConvVec(SwsVector *a, SwsVector *b);
++		  
++extern const uint8_t dither_2x2_4[2][8];
++extern const uint8_t dither_2x2_8[2][8];
++extern const uint8_t dither_8x8_32[8][8];
++extern const uint8_t dither_8x8_73[8][8];
++extern const uint8_t dither_8x8_220[8][8];
++
++static const char * sws_context_to_name(void * ptr) {
++    return "swscaler";
++}
++
++static AVClass sws_context_class = { "SWScaler", sws_context_to_name, NULL };
++
++#if defined(ARCH_X86) && defined (CONFIG_GPL)
++void in_asm_used_var_warning_killer()
++{
++ volatile int i= bF8+bFC+w10+
++ bm00001111+bm00000111+bm11111000+b16Mask+g16Mask+r16Mask+b15Mask+g15Mask+r15Mask+
++ M24A+M24B+M24C+w02 + b5Dither+g5Dither+r5Dither+g6Dither+dither4[0]+dither8[0]+bm01010101;
++ if(i) i=0;
++}
++#endif
++
++static inline void yuv2yuvXinC(int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
++				    int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
++				    uint8_t *dest, uint8_t *uDest, uint8_t *vDest, int dstW, int chrDstW)
++{
++	//FIXME Optimize (just quickly writen not opti..)
++	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];
++
++		dest[i]= av_clip_uint8(val>>19);
++	}
++
++	if(uDest != NULL)
++		for(i=0; i<chrDstW; i++)
++		{
++			int u=1<<18;
++			int v=1<<18;
++			int j;
++			for(j=0; j<chrFilterSize; j++)
++			{
++				u += chrSrc[j][i] * chrFilter[j];
++				v += chrSrc[j][i + 2048] * chrFilter[j];
++			}
++
++			uDest[i]= av_clip_uint8(u>>19);
++			vDest[i]= av_clip_uint8(v>>19);
++		}
++}
++
++static inline void yuv2nv12XinC(int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
++				int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
++				uint8_t *dest, uint8_t *uDest, int dstW, int chrDstW, int dstFormat)
++{
++	//FIXME Optimize (just quickly writen not opti..)
++	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];
++
++		dest[i]= av_clip_uint8(val>>19);
++	}
++
++	if(uDest == NULL)
++		return;
++
++	if(dstFormat == PIX_FMT_NV12)
++		for(i=0; i<chrDstW; i++)
++		{
++			int u=1<<18;
++			int v=1<<18;
++			int j;
++			for(j=0; j<chrFilterSize; j++)
++			{
++				u += chrSrc[j][i] * chrFilter[j];
++				v += chrSrc[j][i + 2048] * chrFilter[j];
++			}
++
++			uDest[2*i]= av_clip_uint8(u>>19);
++			uDest[2*i+1]= av_clip_uint8(v>>19);
++		}
++	else
++		for(i=0; i<chrDstW; i++)
++		{
++			int u=1<<18;
++			int v=1<<18;
++			int j;
++			for(j=0; j<chrFilterSize; j++)
++			{
++				u += chrSrc[j][i] * chrFilter[j];
++				v += chrSrc[j][i + 2048] * chrFilter[j];
++			}
++
++			uDest[2*i]= av_clip_uint8(v>>19);
++			uDest[2*i+1]= av_clip_uint8(u>>19);
++		}
++}
++
++#define YSCALE_YUV_2_PACKEDX_C(type) \
++		for(i=0; i<(dstW>>1); i++){\
++			int j;\
++			int Y1=1<<18;\
++			int Y2=1<<18;\
++			int U=1<<18;\
++			int V=1<<18;\
++			type attribute_unused *r, *b, *g;\
++			const int i2= 2*i;\
++			\
++			for(j=0; j<lumFilterSize; j++)\
++			{\
++				Y1 += lumSrc[j][i2] * lumFilter[j];\
++				Y2 += lumSrc[j][i2+1] * lumFilter[j];\
++			}\
++			for(j=0; j<chrFilterSize; j++)\
++			{\
++				U += chrSrc[j][i] * chrFilter[j];\
++				V += chrSrc[j][i+2048] * chrFilter[j];\
++			}\
++			Y1>>=19;\
++			Y2>>=19;\
++			U >>=19;\
++			V >>=19;\
++			if((Y1|Y2|U|V)&256)\
++			{\
++				if(Y1>255)   Y1=255;\
++				else if(Y1<0)Y1=0;\
++				if(Y2>255)   Y2=255;\
++				else if(Y2<0)Y2=0;\
++				if(U>255)    U=255;\
++				else if(U<0) U=0;\
++				if(V>255)    V=255;\
++				else if(V<0) V=0;\
++			}
++                        
++#define YSCALE_YUV_2_RGBX_C(type) \
++			YSCALE_YUV_2_PACKEDX_C(type)\
++			r = (type *)c->table_rV[V];\
++			g = (type *)(c->table_gU[U] + c->table_gV[V]);\
++			b = (type *)c->table_bU[U];\
++
++#define YSCALE_YUV_2_PACKED2_C \
++		for(i=0; i<(dstW>>1); i++){\
++			const int i2= 2*i;\
++			int Y1= (buf0[i2  ]*yalpha1+buf1[i2  ]*yalpha)>>19;\
++			int Y2= (buf0[i2+1]*yalpha1+buf1[i2+1]*yalpha)>>19;\
++			int U= (uvbuf0[i     ]*uvalpha1+uvbuf1[i     ]*uvalpha)>>19;\
++			int V= (uvbuf0[i+2048]*uvalpha1+uvbuf1[i+2048]*uvalpha)>>19;\
++
++#define YSCALE_YUV_2_RGB2_C(type) \
++			YSCALE_YUV_2_PACKED2_C\
++			type *r, *b, *g;\
++			r = (type *)c->table_rV[V];\
++			g = (type *)(c->table_gU[U] + c->table_gV[V]);\
++			b = (type *)c->table_bU[U];\
++
++#define YSCALE_YUV_2_PACKED1_C \
++		for(i=0; i<(dstW>>1); i++){\
++			const int i2= 2*i;\
++			int Y1= buf0[i2  ]>>7;\
++			int Y2= buf0[i2+1]>>7;\
++			int U= (uvbuf1[i     ])>>7;\
++			int V= (uvbuf1[i+2048])>>7;\
++
++#define YSCALE_YUV_2_RGB1_C(type) \
++			YSCALE_YUV_2_PACKED1_C\
++			type *r, *b, *g;\
++			r = (type *)c->table_rV[V];\
++			g = (type *)(c->table_gU[U] + c->table_gV[V]);\
++			b = (type *)c->table_bU[U];\
++
++#define YSCALE_YUV_2_PACKED1B_C \
++		for(i=0; i<(dstW>>1); i++){\
++			const int i2= 2*i;\
++			int Y1= buf0[i2  ]>>7;\
++			int Y2= buf0[i2+1]>>7;\
++			int U= (uvbuf0[i     ] + uvbuf1[i     ])>>8;\
++			int V= (uvbuf0[i+2048] + uvbuf1[i+2048])>>8;\
++
++#define YSCALE_YUV_2_RGB1B_C(type) \
++			YSCALE_YUV_2_PACKED1B_C\
++			type *r, *b, *g;\
++			r = (type *)c->table_rV[V];\
++			g = (type *)(c->table_gU[U] + c->table_gV[V]);\
++			b = (type *)c->table_bU[U];\
++
++#define YSCALE_YUV_2_ANYRGB_C(func, func2)\
++	switch(c->dstFormat)\
++	{\
++	case PIX_FMT_RGB32:\
++	case PIX_FMT_BGR32:\
++		func(uint32_t)\
++			((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1];\
++			((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2];\
++		}		\
++		break;\
++	case PIX_FMT_RGB24:\
++		func(uint8_t)\
++			((uint8_t*)dest)[0]= r[Y1];\
++			((uint8_t*)dest)[1]= g[Y1];\
++			((uint8_t*)dest)[2]= b[Y1];\
++			((uint8_t*)dest)[3]= r[Y2];\
++			((uint8_t*)dest)[4]= g[Y2];\
++			((uint8_t*)dest)[5]= b[Y2];\
++			dest+=6;\
++		}\
++		break;\
++	case PIX_FMT_BGR24:\
++		func(uint8_t)\
++			((uint8_t*)dest)[0]= b[Y1];\
++			((uint8_t*)dest)[1]= g[Y1];\
++			((uint8_t*)dest)[2]= r[Y1];\
++			((uint8_t*)dest)[3]= b[Y2];\
++			((uint8_t*)dest)[4]= g[Y2];\
++			((uint8_t*)dest)[5]= r[Y2];\
++			dest+=6;\
++		}\
++		break;\
++	case PIX_FMT_RGB565:\
++	case PIX_FMT_BGR565:\
++		{\
++			const int dr1= dither_2x2_8[y&1    ][0];\
++			const int dg1= dither_2x2_4[y&1    ][0];\
++			const int db1= dither_2x2_8[(y&1)^1][0];\
++			const int dr2= dither_2x2_8[y&1    ][1];\
++			const int dg2= dither_2x2_4[y&1    ][1];\
++			const int db2= dither_2x2_8[(y&1)^1][1];\
++			func(uint16_t)\
++				((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];\
++				((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];\
++			}\
++		}\
++		break;\
++	case PIX_FMT_RGB555:\
++	case PIX_FMT_BGR555:\
++		{\
++			const int dr1= dither_2x2_8[y&1    ][0];\
++			const int dg1= dither_2x2_8[y&1    ][1];\
++			const int db1= dither_2x2_8[(y&1)^1][0];\
++			const int dr2= dither_2x2_8[y&1    ][1];\
++			const int dg2= dither_2x2_8[y&1    ][0];\
++			const int db2= dither_2x2_8[(y&1)^1][1];\
++			func(uint16_t)\
++				((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];\
++				((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];\
++			}\
++		}\
++		break;\
++	case PIX_FMT_RGB8:\
++	case PIX_FMT_BGR8:\
++		{\
++			const uint8_t * const d64= dither_8x8_73[y&7];\
++			const uint8_t * const d32= dither_8x8_32[y&7];\
++			func(uint8_t)\
++				((uint8_t*)dest)[i2+0]= r[Y1+d32[(i2+0)&7]] + g[Y1+d32[(i2+0)&7]] + b[Y1+d64[(i2+0)&7]];\
++				((uint8_t*)dest)[i2+1]= r[Y2+d32[(i2+1)&7]] + g[Y2+d32[(i2+1)&7]] + b[Y2+d64[(i2+1)&7]];\
++			}\
++		}\
++		break;\
++	case PIX_FMT_RGB4:\
++	case PIX_FMT_BGR4:\
++		{\
++			const uint8_t * const d64= dither_8x8_73 [y&7];\
++			const uint8_t * const d128=dither_8x8_220[y&7];\
++			func(uint8_t)\
++				((uint8_t*)dest)[i]= r[Y1+d128[(i2+0)&7]] + g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]]\
++				                 + ((r[Y2+d128[(i2+1)&7]] + g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]])<<4);\
++			}\
++		}\
++		break;\
++	case PIX_FMT_RGB4_BYTE:\
++	case PIX_FMT_BGR4_BYTE:\
++		{\
++			const uint8_t * const d64= dither_8x8_73 [y&7];\
++			const uint8_t * const d128=dither_8x8_220[y&7];\
++			func(uint8_t)\
++				((uint8_t*)dest)[i2+0]= r[Y1+d128[(i2+0)&7]] + g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]];\
++				((uint8_t*)dest)[i2+1]= r[Y2+d128[(i2+1)&7]] + g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]];\
++			}\
++		}\
++		break;\
++	case PIX_FMT_MONOBLACK:\
++		{\
++			const uint8_t * const d128=dither_8x8_220[y&7];\
++			uint8_t *g= c->table_gU[128] + c->table_gV[128];\
++			for(i=0; i<dstW-7; i+=8){\
++				int acc;\
++				acc =       g[((buf0[i  ]*yalpha1+buf1[i  ]*yalpha)>>19) + d128[0]];\
++				acc+= acc + g[((buf0[i+1]*yalpha1+buf1[i+1]*yalpha)>>19) + d128[1]];\
++				acc+= acc + g[((buf0[i+2]*yalpha1+buf1[i+2]*yalpha)>>19) + d128[2]];\
++				acc+= acc + g[((buf0[i+3]*yalpha1+buf1[i+3]*yalpha)>>19) + d128[3]];\
++				acc+= acc + g[((buf0[i+4]*yalpha1+buf1[i+4]*yalpha)>>19) + d128[4]];\
++				acc+= acc + g[((buf0[i+5]*yalpha1+buf1[i+5]*yalpha)>>19) + d128[5]];\
++				acc+= acc + g[((buf0[i+6]*yalpha1+buf1[i+6]*yalpha)>>19) + d128[6]];\
++				acc+= acc + g[((buf0[i+7]*yalpha1+buf1[i+7]*yalpha)>>19) + d128[7]];\
++				((uint8_t*)dest)[0]= acc;\
++				dest++;\
++			}\
++\
++/*\
++((uint8_t*)dest)-= dstW>>4;\
++{\
++			int acc=0;\
++			int left=0;\
++			static int top[1024];\
++			static int last_new[1024][1024];\
++			static int last_in3[1024][1024];\
++			static int drift[1024][1024];\
++			int topLeft=0;\
++			int shift=0;\
++			int count=0;\
++			const uint8_t * const d128=dither_8x8_220[y&7];\
++			int error_new=0;\
++			int error_in3=0;\
++			int f=0;\
++			\
++			for(i=dstW>>1; i<dstW; i++){\
++				int in= ((buf0[i  ]*yalpha1+buf1[i  ]*yalpha)>>19);\
++				int in2 = (76309 * (in - 16) + 32768) >> 16;\
++				int in3 = (in2 < 0) ? 0 : ((in2 > 255) ? 255 : in2);\
++				int old= (left*7 + topLeft + top[i]*5 + top[i+1]*3)/20 + in3\
++					+ (last_new[y][i] - in3)*f/256;\
++				int new= old> 128 ? 255 : 0;\
++\
++				error_new+= FFABS(last_new[y][i] - new);\
++				error_in3+= FFABS(last_in3[y][i] - in3);\
++				f= error_new - error_in3*4;\
++				if(f<0) f=0;\
++				if(f>256) f=256;\
++\
++				topLeft= top[i];\
++				left= top[i]= old - new;\
++				last_new[y][i]= new;\
++				last_in3[y][i]= in3;\
++\
++				acc+= acc + (new&1);\
++				if((i&7)==6){\
++					((uint8_t*)dest)[0]= acc;\
++					((uint8_t*)dest)++;\
++				}\
++			}\
++}\
++*/\
++		}\
++		break;\
++	case PIX_FMT_YUYV422:\
++		func2\
++			((uint8_t*)dest)[2*i2+0]= Y1;\
++			((uint8_t*)dest)[2*i2+1]= U;\
++			((uint8_t*)dest)[2*i2+2]= Y2;\
++			((uint8_t*)dest)[2*i2+3]= V;\
++		}		\
++		break;\
++	case PIX_FMT_UYVY422:\
++		func2\
++			((uint8_t*)dest)[2*i2+0]= U;\
++			((uint8_t*)dest)[2*i2+1]= Y1;\
++			((uint8_t*)dest)[2*i2+2]= V;\
++			((uint8_t*)dest)[2*i2+3]= Y2;\
++		}		\
++		break;\
++	}\
++
++
++static inline void yuv2packedXinC(SwsContext *c, int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize,
++				    int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize,
++				    uint8_t *dest, int dstW, int y)
++{
++	int i;
++	switch(c->dstFormat)
++	{
++	case PIX_FMT_BGR32:
++	case PIX_FMT_RGB32:
++		YSCALE_YUV_2_RGBX_C(uint32_t)
++			((uint32_t*)dest)[i2+0]= r[Y1] + g[Y1] + b[Y1];
++			((uint32_t*)dest)[i2+1]= r[Y2] + g[Y2] + b[Y2];
++		}
++		break;
++	case PIX_FMT_RGB24:
++		YSCALE_YUV_2_RGBX_C(uint8_t)
++			((uint8_t*)dest)[0]= r[Y1];
++			((uint8_t*)dest)[1]= g[Y1];
++			((uint8_t*)dest)[2]= b[Y1];
++			((uint8_t*)dest)[3]= r[Y2];
++			((uint8_t*)dest)[4]= g[Y2];
++			((uint8_t*)dest)[5]= b[Y2];
++			dest+=6;
++		}
++		break;
++	case PIX_FMT_BGR24:
++		YSCALE_YUV_2_RGBX_C(uint8_t)
++			((uint8_t*)dest)[0]= b[Y1];
++			((uint8_t*)dest)[1]= g[Y1];
++			((uint8_t*)dest)[2]= r[Y1];
++			((uint8_t*)dest)[3]= b[Y2];
++			((uint8_t*)dest)[4]= g[Y2];
++			((uint8_t*)dest)[5]= r[Y2];
++			dest+=6;
++		}
++		break;
++	case PIX_FMT_RGB565:
++	case PIX_FMT_BGR565:
++		{
++			const int dr1= dither_2x2_8[y&1    ][0];
++			const int dg1= dither_2x2_4[y&1    ][0];
++			const int db1= dither_2x2_8[(y&1)^1][0];
++			const int dr2= dither_2x2_8[y&1    ][1];
++			const int dg2= dither_2x2_4[y&1    ][1];
++			const int db2= dither_2x2_8[(y&1)^1][1];
++			YSCALE_YUV_2_RGBX_C(uint16_t)
++				((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];
++				((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];
++			}
++		}
++		break;
++	case PIX_FMT_RGB555:
++	case PIX_FMT_BGR555:
++		{
++			const int dr1= dither_2x2_8[y&1    ][0];
++			const int dg1= dither_2x2_8[y&1    ][1];
++			const int db1= dither_2x2_8[(y&1)^1][0];
++			const int dr2= dither_2x2_8[y&1    ][1];
++			const int dg2= dither_2x2_8[y&1    ][0];
++			const int db2= dither_2x2_8[(y&1)^1][1];
++			YSCALE_YUV_2_RGBX_C(uint16_t)
++				((uint16_t*)dest)[i2+0]= r[Y1+dr1] + g[Y1+dg1] + b[Y1+db1];
++				((uint16_t*)dest)[i2+1]= r[Y2+dr2] + g[Y2+dg2] + b[Y2+db2];
++			}
++		}
++		break;
++	case PIX_FMT_RGB8:
++	case PIX_FMT_BGR8:
++		{
++			const uint8_t * const d64= dither_8x8_73[y&7];
++			const uint8_t * const d32= dither_8x8_32[y&7];
++			YSCALE_YUV_2_RGBX_C(uint8_t)
++				((uint8_t*)dest)[i2+0]= r[Y1+d32[(i2+0)&7]] + g[Y1+d32[(i2+0)&7]] + b[Y1+d64[(i2+0)&7]];
++				((uint8_t*)dest)[i2+1]= r[Y2+d32[(i2+1)&7]] + g[Y2+d32[(i2+1)&7]] + b[Y2+d64[(i2+1)&7]];
++			}
++		}
++		break;
++	case PIX_FMT_RGB4:
++	case PIX_FMT_BGR4:
++		{
++			const uint8_t * const d64= dither_8x8_73 [y&7];
++			const uint8_t * const d128=dither_8x8_220[y&7];
++			YSCALE_YUV_2_RGBX_C(uint8_t)
++				((uint8_t*)dest)[i]= r[Y1+d128[(i2+0)&7]] + g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]]
++				                  +((r[Y2+d128[(i2+1)&7]] + g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]])<<4);
++			}
++		}
++		break;
++	case PIX_FMT_RGB4_BYTE:
++	case PIX_FMT_BGR4_BYTE:
++		{
++			const uint8_t * const d64= dither_8x8_73 [y&7];
++			const uint8_t * const d128=dither_8x8_220[y&7];
++			YSCALE_YUV_2_RGBX_C(uint8_t)
++				((uint8_t*)dest)[i2+0]= r[Y1+d128[(i2+0)&7]] + g[Y1+d64[(i2+0)&7]] + b[Y1+d128[(i2+0)&7]];
++				((uint8_t*)dest)[i2+1]= r[Y2+d128[(i2+1)&7]] + g[Y2+d64[(i2+1)&7]] + b[Y2+d128[(i2+1)&7]];
++			}
++		}
++		break;
++	case PIX_FMT_MONOBLACK:
++		{
++			const uint8_t * const d128=dither_8x8_220[y&7];
++			uint8_t *g= c->table_gU[128] + c->table_gV[128];
++			int acc=0;
++			for(i=0; i<dstW-1; i+=2){
++				int j;
++				int Y1=1<<18;
++				int Y2=1<<18;
++
++				for(j=0; j<lumFilterSize; j++)
++				{
++					Y1 += lumSrc[j][i] * lumFilter[j];
++					Y2 += lumSrc[j][i+1] * lumFilter[j];
++				}
++				Y1>>=19;
++				Y2>>=19;
++				if((Y1|Y2)&256)
++				{
++					if(Y1>255)   Y1=255;
++					else if(Y1<0)Y1=0;
++					if(Y2>255)   Y2=255;
++					else if(Y2<0)Y2=0;
++				}
++				acc+= acc + g[Y1+d128[(i+0)&7]];
++				acc+= acc + g[Y2+d128[(i+1)&7]];
++				if((i&7)==6){
++					((uint8_t*)dest)[0]= acc;
++					dest++;
++				}
++			}
++		}
++		break;
++	case PIX_FMT_YUYV422:
++		YSCALE_YUV_2_PACKEDX_C(void)
++			((uint8_t*)dest)[2*i2+0]= Y1;
++			((uint8_t*)dest)[2*i2+1]= U;
++			((uint8_t*)dest)[2*i2+2]= Y2;
++			((uint8_t*)dest)[2*i2+3]= V;
++		}
++                break;
++	case PIX_FMT_UYVY422:
++		YSCALE_YUV_2_PACKEDX_C(void)
++			((uint8_t*)dest)[2*i2+0]= U;
++			((uint8_t*)dest)[2*i2+1]= Y1;
++			((uint8_t*)dest)[2*i2+2]= V;
++			((uint8_t*)dest)[2*i2+3]= Y2;
++		}
++                break;
++	}
++}
++
++
++#undef RENAME
++#define HAVE_ALTIVEC
++#define RENAME(a) a ## _altivec
++#include "swscale_template.c"
++
+Index: ffmpeg-0.cvs20070307/libswscale/swscale_altivec_template.c
+===================================================================
+--- ffmpeg-0.cvs20070307.orig/libswscale/swscale_altivec_template.c	2007-03-07 14:37:07.000000000 +0100
++++ ffmpeg-0.cvs20070307/libswscale/swscale_altivec_template.c	2007-03-09 14:28:38.000000000 +0100
+@@ -390,7 +390,7 @@
+   }
+ }
+ 
+-static inline int yv12toyuy2_unscaled_altivec(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
++int yv12toyuy2_unscaled_altivec(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
+      int srcSliceH, uint8_t* dstParam[], int dstStride_a[]) {
+   uint8_t *dst=dstParam[0] + dstStride_a[0]*srcSliceY;
+   // yv12toyuy2( src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0] );
+@@ -469,7 +469,7 @@
+   return srcSliceH;
+ }
+ 
+-static inline int yv12touyvy_unscaled_altivec(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
++int yv12touyvy_unscaled_altivec(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
+      int srcSliceH, uint8_t* dstParam[], int dstStride_a[]) {
+   uint8_t *dst=dstParam[0] + dstStride_a[0]*srcSliceY;
+   // yv12toyuy2( src[0],src[1],src[2],dst,c->srcW,srcSliceH,srcStride[0],srcStride[1],dstStride[0] );
+Index: ffmpeg-0.cvs20070307/libswscale/swscale_internal.h
+===================================================================
+--- ffmpeg-0.cvs20070307.orig/libswscale/swscale_internal.h	2007-03-07 14:37:07.000000000 +0100
++++ ffmpeg-0.cvs20070307/libswscale/swscale_internal.h	2007-03-09 14:28:38.000000000 +0100
+@@ -21,9 +21,11 @@
+ #ifndef SWSCALE_INTERNAL_H
+ #define SWSCALE_INTERNAL_H
+ 
++#ifdef ABI_ALTIVEC
+ #ifdef HAVE_ALTIVEC_H
+ #include <altivec.h>
+ #endif
++#endif
+ 
+ #include "avutil.h"
+ 
+@@ -150,15 +152,20 @@
+ 	uint64_t v_temp       __attribute__((aligned(8)));
+ 
+ #ifdef HAVE_ALTIVEC
++#ifdef ABI_ALTIVEC
++#define VEC(x) vector x
++#else
++#define VEC(x) union { char c[16]; }
++#endif
+ 
+-  vector signed short   CY;
+-  vector signed short   CRV;
+-  vector signed short   CBU;
+-  vector signed short   CGU;
+-  vector signed short   CGV;
+-  vector signed short   OY;
+-  vector unsigned short CSHIFT;
+-  vector signed short *vYCoeffsBank, *vCCoeffsBank;
++  VEC(signed short)   CY;
++  VEC(signed short)   CRV;
++  VEC(signed short)   CBU;
++  VEC(signed short)   CGU;
++  VEC(signed short)   CGV;
++  VEC(signed short)   OY;
++  VEC(unsigned short) CSHIFT;
++  VEC(signed short) *vYCoeffsBank, *vCCoeffsBank;
+ 
+ #endif
+ 
+Index: ffmpeg-0.cvs20070307/libswscale/Makefile
+===================================================================
+--- ffmpeg-0.cvs20070307.orig/libswscale/Makefile	2007-03-07 14:37:07.000000000 +0100
++++ ffmpeg-0.cvs20070307/libswscale/Makefile	2007-03-09 14:28:38.000000000 +0100
+@@ -9,8 +9,10 @@
+ 
+ OBJS= swscale.o rgb2rgb.o
+ 
+-OBJS-$(TARGET_ALTIVEC)     +=  yuv2rgb_altivec.o
++OBJS-$(TARGET_ALTIVEC)     +=  swscale_altivec.o yuv2rgb_altivec.o
+ OBJS-$(CONFIG_GPL)         +=  yuv2rgb.o
++swscale_altivec.o: CFLAGS+= $(ALTIVECFLAGS) -DABI_ALTIVEC
++yuv2rgb_altivec.o: CFLAGS+= $(ALTIVECFLAGS) -DABI_ALTIVEC
+ 
+ HEADERS = swscale.h rgb2rgb.h
+ 
+Index: ffmpeg-0.cvs20070307/libswscale/swscale_template.c
+===================================================================
+--- ffmpeg-0.cvs20070307.orig/libswscale/swscale_template.c	2007-03-09 15:00:41.000000000 +0100
++++ ffmpeg-0.cvs20070307/libswscale/swscale_template.c	2007-03-09 15:01:16.000000000 +0100
+@@ -2936,7 +2936,10 @@
+    }
+ }
+ 
+-static int RENAME(swScale)(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
++#ifndef HAVE_ALTIVEC
++static
++#endif
++int RENAME(swScale)(SwsContext *c, uint8_t* src[], int srcStride[], int srcSliceY,
+              int srcSliceH, uint8_t* dst[], int dstStride[]){
+ 
+ 	/* load a few things into local vars to make the code more readable? and faster */




More information about the Pkg-multimedia-commits mailing list