|
-
- /* 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
- // dstbpp == 12 -> yv12 output
- // 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);
-
- // 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);
|