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