]> git.sesse.net Git - ffmpeg/blobdiff - postproc/swscale.h
10l
[ffmpeg] / postproc / swscale.h
index 1440745078870cc0ff21cfcf5d1d001f7b62fb7c..3bcb432430cecceaabf0e83c300d5f3c1ee695f6 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2001-2002 Michael Niedermayer <michaelni@gmx.at>
+    Copyright (C) 2001-2003 Michael Niedermayer <michaelni@gmx.at>
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 */
 
+#ifndef SWSCALE_H
+#define SWSCALE_H
+
+/**
+ * @file swscale.h
+ * @brief 
+ *     external api for the swscale stuff
+ */
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
 /* values for the flags, the stuff on the command line is different */
 #define SWS_FAST_BILINEAR 1
 #define SWS_BILINEAR 2
 #define SWS_X        8
 #define SWS_POINT    0x10
 #define SWS_AREA     0x20
+#define SWS_BICUBLIN 0x40
+#define SWS_GAUSS    0x80
+#define SWS_SINC     0x100
+#define SWS_LANCZOS  0x200
+#define SWS_SPLINE   0x400
+
+#define SWS_SRC_V_CHR_DROP_MASK                0x30000
+#define SWS_SRC_V_CHR_DROP_SHIFT       16
 
-//the following 4 flags are not completly implemented
+#define SWS_PARAM_MASK                 0x3FC0000
+#define SWS_PARAM_SHIFT                        18
+
+#define SWS_PRINT_INFO         0x1000
+
+//the following 3 flags are not completly implemented
 //internal chrominace subsamling info
-#define SWS_FULL_CHR_V         0x100
-#define SWS_FULL_CHR_H_INT     0x200
+#define SWS_FULL_CHR_H_INT     0x2000
 //input subsampling info
-#define SWS_FULL_CHR_H_INP     0x400
-#define SWS_DIRECT_BGR         0x800
+#define SWS_FULL_CHR_H_INP     0x4000
+#define SWS_DIRECT_BGR         0x8000
 
-#define SWS_PRINT_INFO 0x1000
+#define SWS_CPU_CAPS_MMX   0x80000000
+#define SWS_CPU_CAPS_MMX2  0x20000000
+#define SWS_CPU_CAPS_3DNOW 0x40000000
+#define SWS_CPU_CAPS_ALTIVEC 0x10000000
 
 #define SWS_MAX_REDUCE_CUTOFF 0.002
 
-/* this struct should be aligned on at least 32-byte boundary */
-typedef struct{
-       int srcW, srcH, dstW, dstH;
-       int chrSrcW, chrSrcH, chrDstW, chrDstH;
-       int lumXInc, chrXInc;
-       int lumYInc, chrYInc;
-       int dstFormat, srcFormat;
-
-       int16_t **lumPixBuf;
-       int16_t **chrPixBuf;
-       int16_t *hLumFilter;
-       int16_t *hLumFilterPos;
-       int16_t *hChrFilter;
-       int16_t *hChrFilterPos;
-       int16_t *vLumFilter;
-       int16_t *vLumFilterPos;
-       int16_t *vChrFilter;
-       int16_t *vChrFilterPos;
-
-// Contain simply the values from v(Lum|Chr)Filter just nicely packed for mmx
-       int16_t  *lumMmxFilter;
-       int16_t  *chrMmxFilter;
-       uint8_t formatConvBuffer[4000]; //FIXME dynamic alloc, but we have to change alot of code for this to be usefull
-
-       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)
+#define SWS_CS_ITU709          1
+#define SWS_CS_FCC             4
+#define SWS_CS_ITU601          5
+#define SWS_CS_ITU624          5
+#define SWS_CS_SMPTE170M       5
+#define SWS_CS_SMPTE240M       7
+#define SWS_CS_DEFAULT                 5
+
+
 
 // when used for filters they must have an odd number of elements
 // coeffs cannot be shared between vectors
@@ -96,40 +89,42 @@ typedef struct {
        SwsVector *chrV;
 } SwsFilter;
 
+struct SwsContext;
 
-// *** 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);
+void sws_freeContext(struct SwsContext *swsContext);
 
-// Obsolete, will be removed soon
-void SwScale_Init();
-
-
-
-void freeSwsContext(SwsContext *swsContext);
-
-SwsContext *getSwsContextFromCmdLine(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat);
-SwsContext *getSwsContext(int srcW, int srcH, int srcFormat, int dstW, int dstH, int dstFormat, int flags,
+struct SwsContext *sws_getContext(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[]);
-
-SwsVector *getGaussianVec(double variance, double quality);
-SwsVector *getConstVec(double c, int length);
-SwsVector *getIdentityVec(void);
-void scaleVec(SwsVector *a, double scalar);
-void normalizeVec(SwsVector *a, double height);
-void convVec(SwsVector *a, SwsVector *b);
-void addVec(SwsVector *a, SwsVector *b);
-void subVec(SwsVector *a, SwsVector *b);
-void shiftVec(SwsVector *a, int shift);
-SwsVector *cloneVec(SwsVector *a);
-
-void printVec(SwsVector *a);
-void freeVec(SwsVector *a);
-
+int sws_scale(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY,
+                           int srcSliceH, uint8_t* dst[], int dstStride[]);
+int sws_scale_ordered(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY,
+                           int srcSliceH, uint8_t* dst[], int dstStride[]);
+
+
+int sws_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], int srcRange, const int table[4], int dstRange, int brightness, int contrast, int saturation);
+int sws_getColorspaceDetails(struct SwsContext *c, int **inv_table, int *srcRange, int **table, int *dstRange, int *brightness, int *contrast, int *saturation);
+SwsVector *sws_getGaussianVec(double variance, double quality);
+SwsVector *sws_getConstVec(double c, int length);
+SwsVector *sws_getIdentityVec(void);
+void sws_scaleVec(SwsVector *a, double scalar);
+void sws_normalizeVec(SwsVector *a, double height);
+void sws_convVec(SwsVector *a, SwsVector *b);
+void sws_addVec(SwsVector *a, SwsVector *b);
+void sws_subVec(SwsVector *a, SwsVector *b);
+void sws_shiftVec(SwsVector *a, int shift);
+SwsVector *sws_cloneVec(SwsVector *a);
+
+void sws_printVec(SwsVector *a);
+void sws_freeVec(SwsVector *a);
+
+SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, 
+                               float lumaSarpen, float chromaSharpen,
+                               float chromaHShift, float chromaVShift,
+                               int verbose);
+void sws_freeFilter(SwsFilter *filter);
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif