diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2002-01-20 05:30:23 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2002-01-20 05:30:23 +0000 |
commit | 28bf81c90d36a55cf76e2be913c5215ebebf61f2 (patch) | |
tree | c465262f4b3f57b991027ecbc33fe8e1619c6e1a /postproc/swscale.h | |
parent | cbf5fa71c9cf556cb3117b2fd31b3dcf0ce52c49 (diff) | |
download | ffmpeg-28bf81c90d36a55cf76e2be913c5215ebebf61f2.tar.gz |
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
Originally committed as revision 4277 to svn://svn.mplayerhq.hu/mplayer/trunk/postproc
Diffstat (limited to 'postproc/swscale.h')
-rw-r--r-- | postproc/swscale.h | 92 |
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); + |