summaryrefslogtreecommitdiffstats
path: root/postproc/swscale.h
diff options
context:
space:
mode:
authormichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-20 05:30:23 +0000
committermichael <michael@b3059339-0415-0410-9bf9-f77b7e298cf2>2002-01-20 05:30:23 +0000
commite016034afc0ee81765527ec850759b5902677d7d (patch)
tree21a580d69ff07c25b283b09100772f6ef30fa705 /postproc/swscale.h
parentff84d71eec3950b774498c2e91eb9af165a15842 (diff)
downloadmpv-e016034afc0ee81765527ec850759b5902677d7d.tar.bz2
mpv-e016034afc0ee81765527ec850759b5902677d7d.tar.xz
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 git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@4277 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'postproc/swscale.h')
-rw-r--r--postproc/swscale.h92
1 files changed, 84 insertions, 8 deletions
diff --git a/postproc/swscale.h b/postproc/swscale.h
index 2757ba5f20..8c6c0543d3 100644
--- a/postproc/swscale.h
+++ b/postproc/swscale.h
@@ -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);
+