diff postproc/swscale.h @ 4276:9199d15cb4e0

removed global vars so that multiple swscalers can be used experimental upscaling mode (-sws 3) general convolution filters support (unfinished) bugfix for bicubic upscaling assertion checking if defined MP_DEBUG checking of the input/output size instead of segfault if its very large
author michael
date Sun, 20 Jan 2002 05:30:23 +0000
parents e87c59969d17
children 1f8ceb12284d
line wrap: on
line diff
--- a/postproc/swscale.h	Sun Jan 20 01:35:02 2002 +0000
+++ b/postproc/swscale.h	Sun Jan 20 05:30:23 2002 +0000
@@ -1,14 +1,90 @@
 
-#define SWS_FAST_BILINEAR 0
-#define SWS_BILINEAR 1
-#define SWS_BICUBIC 2
+/* values for the flags, the stuff on the command line is different */
+#define SWS_FAST_BILINEAR 1
+#define SWS_BILINEAR 2
+#define SWS_BICUBIC  4
+#define SWS_X        8
+#define SWS_FULL_UV_IPOL 0x100
+#define SWS_PRINT_INFO 0x1000
+
+#define SWS_MAX_SIZE 2000
+
+/* this struct should be aligned on at least 32-byte boundary */
+typedef struct{
+	int srcW, srcH, dstW, dstH;
+	int chrDstW, chrDstH;
+	int lumXInc, chrXInc;
+	int lumYInc, chrYInc;
+	int dstFormat, srcFormat;
+	int16_t __attribute__((aligned(8))) *lumPixBuf[SWS_MAX_SIZE];
+	int16_t __attribute__((aligned(8))) *chrPixBuf[SWS_MAX_SIZE];
+	int16_t __attribute__((aligned(8))) hLumFilter[SWS_MAX_SIZE*5];
+	int16_t __attribute__((aligned(8))) hLumFilterPos[SWS_MAX_SIZE];
+	int16_t __attribute__((aligned(8))) hChrFilter[SWS_MAX_SIZE*5];
+	int16_t __attribute__((aligned(8))) hChrFilterPos[SWS_MAX_SIZE];
+	int16_t __attribute__((aligned(8))) vLumFilter[SWS_MAX_SIZE*5];
+	int16_t __attribute__((aligned(8))) vLumFilterPos[SWS_MAX_SIZE];
+	int16_t __attribute__((aligned(8))) vChrFilter[SWS_MAX_SIZE*5];
+	int16_t __attribute__((aligned(8))) vChrFilterPos[SWS_MAX_SIZE];
+
+// Contain simply the values from v(Lum|Chr)Filter just nicely packed for mmx
+	int16_t __attribute__((aligned(8))) lumMmxFilter[SWS_MAX_SIZE*20];
+	int16_t __attribute__((aligned(8))) chrMmxFilter[SWS_MAX_SIZE*20];
+
+	int hLumFilterSize;
+	int hChrFilterSize;
+	int vLumFilterSize;
+	int vChrFilterSize;
+	int vLumBufSize;
+	int vChrBufSize;
+
+	uint8_t __attribute__((aligned(32))) funnyYCode[10000];
+	uint8_t __attribute__((aligned(32))) funnyUVCode[10000];
+
+	int canMMX2BeUsed;
+
+	int lastInLumBuf;
+	int lastInChrBuf;
+	int lumBufIndex;
+	int chrBufIndex;
+	int dstY;
+	int flags;
+} SwsContext;
+//FIXME check init (where 0)
+
+typedef struct {
+	double *lumH;
+	double *lumV;
+	double *chrH;
+	double *chrV;
+	int length;
+} SwsFilter;
+
 
 // *** bilinear scaling and yuv->rgb & yuv->yuv conversion of yv12 slices:
 // *** Note: it's called multiple times while decoding a frame, first time y==0
-// *** Designed to upscale, but may work for downscale too.
 // dstbpp == 12 -> yv12 output
-void SwScale_YV12slice(unsigned char* srcptr[],int stride[], int srcSliceY,
-			     int srcSliceH, uint8_t* dstptr[], int dststride, int dstbpp,
+// will use sws_flags
+void SwScale_YV12slice(unsigned char* src[],int srcStride[], int srcSliceY,
+			     int srcSliceH, uint8_t* dst[], int dstStride, int dstbpp,
 			     int srcW, int srcH, int dstW, int dstH);
-// generating tables
-void SwScale_Init();
\ No newline at end of file
+
+// Obsolete, will be removed soon
+void SwScale_Init();
+
+
+
+void freeSwsContext(SwsContext swsContext);
+
+SwsContext *getSwsContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat, int flags,
+			 SwsFilter *srcFilter, SwsFilter *dstFilter);
+
+extern void (*swScale)(SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY,
+             int srcSliceH, uint8_t* dst[], int dstStride[]);
+
+double *getGaussian(double variance, double quality);
+
+void normalize(double *coeff, int length, double height);
+
+double *conv(double *a, int aLength, double *b, int bLength);
+