cosmetics attack, part II: Remove all tabs and prettyprint/reindent the code.

Originally committed as revision 23173 to svn://svn.mplayerhq.hu/mplayer/trunk/libswscale
This commit is contained in:
Diego Biurrun 2007-04-29 13:39:27 +00:00
parent 07d84a4e9f
commit 221b804f34
4 changed files with 2313 additions and 2314 deletions

View File

@ -31,129 +31,129 @@
#include "rgb2rgb.h" #include "rgb2rgb.h"
static uint64_t getSSD(uint8_t *src1, uint8_t *src2, int stride1, int stride2, int w, int h){ static uint64_t getSSD(uint8_t *src1, uint8_t *src2, int stride1, int stride2, int w, int h){
int x,y; int x,y;
uint64_t ssd=0; uint64_t ssd=0;
//printf("%d %d\n", w, h); //printf("%d %d\n", w, h);
for(y=0; y<h; y++){ for (y=0; y<h; y++){
for(x=0; x<w; x++){ for (x=0; x<w; x++){
int d= src1[x + y*stride1] - src2[x + y*stride2]; int d= src1[x + y*stride1] - src2[x + y*stride2];
ssd+= d*d; ssd+= d*d;
//printf("%d", abs(src1[x + y*stride1] - src2[x + y*stride2])/26 ); //printf("%d", abs(src1[x + y*stride1] - src2[x + y*stride2])/26 );
} }
//printf("\n"); //printf("\n");
} }
return ssd; return ssd;
} }
// test by ref -> src -> dst -> out & compare out against ref // test by ref -> src -> dst -> out & compare out against ref
// ref & out are YV12 // ref & out are YV12
static int doTest(uint8_t *ref[3], int refStride[3], int w, int h, int srcFormat, int dstFormat, static int doTest(uint8_t *ref[3], int refStride[3], int w, int h, int srcFormat, int dstFormat,
int srcW, int srcH, int dstW, int dstH, int flags){ int srcW, int srcH, int dstW, int dstH, int flags){
uint8_t *src[3]; uint8_t *src[3];
uint8_t *dst[3]; uint8_t *dst[3];
uint8_t *out[3]; uint8_t *out[3];
int srcStride[3], dstStride[3]; int srcStride[3], dstStride[3];
int i; int i;
uint64_t ssdY, ssdU, ssdV; uint64_t ssdY, ssdU, ssdV;
struct SwsContext *srcContext, *dstContext, *outContext; struct SwsContext *srcContext, *dstContext, *outContext;
int res; int res;
res = 0; res = 0;
for(i=0; i<3; i++){ for (i=0; i<3; i++){
// avoid stride % bpp != 0 // avoid stride % bpp != 0
if(srcFormat==PIX_FMT_RGB24 || srcFormat==PIX_FMT_BGR24) if (srcFormat==PIX_FMT_RGB24 || srcFormat==PIX_FMT_BGR24)
srcStride[i]= srcW*3; srcStride[i]= srcW*3;
else else
srcStride[i]= srcW*4; srcStride[i]= srcW*4;
if(dstFormat==PIX_FMT_RGB24 || dstFormat==PIX_FMT_BGR24) if (dstFormat==PIX_FMT_RGB24 || dstFormat==PIX_FMT_BGR24)
dstStride[i]= dstW*3; dstStride[i]= dstW*3;
else else
dstStride[i]= dstW*4; dstStride[i]= dstW*4;
src[i]= (uint8_t*) malloc(srcStride[i]*srcH); src[i]= (uint8_t*) malloc(srcStride[i]*srcH);
dst[i]= (uint8_t*) malloc(dstStride[i]*dstH); dst[i]= (uint8_t*) malloc(dstStride[i]*dstH);
out[i]= (uint8_t*) malloc(refStride[i]*h); out[i]= (uint8_t*) malloc(refStride[i]*h);
if ((src[i] == NULL) || (dst[i] == NULL) || (out[i] == NULL)) { if ((src[i] == NULL) || (dst[i] == NULL) || (out[i] == NULL)) {
perror("Malloc"); perror("Malloc");
res = -1; res = -1;
goto end; goto end;
} }
} }
dstContext = outContext = NULL; dstContext = outContext = NULL;
srcContext= sws_getContext(w, h, PIX_FMT_YUV420P, srcW, srcH, srcFormat, flags, NULL, NULL, NULL); srcContext= sws_getContext(w, h, PIX_FMT_YUV420P, srcW, srcH, srcFormat, flags, NULL, NULL, NULL);
if (srcContext == NULL) { if (srcContext == NULL) {
fprintf(stderr, "Failed to get %s ---> %s\n", fprintf(stderr, "Failed to get %s ---> %s\n",
sws_format_name(PIX_FMT_YUV420P), sws_format_name(PIX_FMT_YUV420P),
sws_format_name(srcFormat)); sws_format_name(srcFormat));
res = -1; res = -1;
goto end; goto end;
} }
dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL, NULL); dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL, NULL);
if (dstContext == NULL) { if (dstContext == NULL) {
fprintf(stderr, "Failed to get %s ---> %s\n", fprintf(stderr, "Failed to get %s ---> %s\n",
sws_format_name(srcFormat), sws_format_name(srcFormat),
sws_format_name(dstFormat)); sws_format_name(dstFormat));
res = -1; res = -1;
goto end; goto end;
} }
outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUV420P, flags, NULL, NULL, NULL); outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUV420P, flags, NULL, NULL, NULL);
if (outContext == NULL) { if (outContext == NULL) {
fprintf(stderr, "Failed to get %s ---> %s\n", fprintf(stderr, "Failed to get %s ---> %s\n",
sws_format_name(dstFormat), sws_format_name(dstFormat),
sws_format_name(PIX_FMT_YUV420P)); sws_format_name(PIX_FMT_YUV420P));
res = -1; res = -1;
goto end; goto end;
} }
// printf("test %X %X %X -> %X %X %X\n", (int)ref[0], (int)ref[1], (int)ref[2], // printf("test %X %X %X -> %X %X %X\n", (int)ref[0], (int)ref[1], (int)ref[2],
// (int)src[0], (int)src[1], (int)src[2]); // (int)src[0], (int)src[1], (int)src[2]);
sws_scale(srcContext, ref, refStride, 0, h , src, srcStride); sws_scale(srcContext, ref, refStride, 0, h , src, srcStride);
sws_scale(dstContext, src, srcStride, 0, srcH, dst, dstStride); sws_scale(dstContext, src, srcStride, 0, srcH, dst, dstStride);
sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride); sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride);
#if defined(ARCH_X86) #if defined(ARCH_X86)
asm volatile ("emms\n\t"); asm volatile ("emms\n\t");
#endif #endif
ssdY= getSSD(ref[0], out[0], refStride[0], refStride[0], w, h); ssdY= getSSD(ref[0], out[0], refStride[0], refStride[0], w, h);
ssdU= getSSD(ref[1], out[1], refStride[1], refStride[1], (w+1)>>1, (h+1)>>1); ssdU= getSSD(ref[1], out[1], refStride[1], refStride[1], (w+1)>>1, (h+1)>>1);
ssdV= getSSD(ref[2], out[2], refStride[2], refStride[2], (w+1)>>1, (h+1)>>1); ssdV= getSSD(ref[2], out[2], refStride[2], refStride[2], (w+1)>>1, (h+1)>>1);
if(srcFormat == PIX_FMT_GRAY8 || dstFormat==PIX_FMT_GRAY8) ssdU=ssdV=0; //FIXME check that output is really gray if (srcFormat == PIX_FMT_GRAY8 || dstFormat==PIX_FMT_GRAY8) ssdU=ssdV=0; //FIXME check that output is really gray
ssdY/= w*h; ssdY/= w*h;
ssdU/= w*h/4; ssdU/= w*h/4;
ssdV/= w*h/4; ssdV/= w*h/4;
if(ssdY>100 || ssdU>100 || ssdV>100){ if (ssdY>100 || ssdU>100 || ssdV>100){
printf(" %s %dx%d -> %s %4dx%4d flags=%2d SSD=%5lld,%5lld,%5lld\n", printf(" %s %dx%d -> %s %4dx%4d flags=%2d SSD=%5lld,%5lld,%5lld\n",
sws_format_name(srcFormat), srcW, srcH, sws_format_name(srcFormat), srcW, srcH,
sws_format_name(dstFormat), dstW, dstH, sws_format_name(dstFormat), dstW, dstH,
flags, flags,
ssdY, ssdU, ssdV); ssdY, ssdU, ssdV);
} }
end: end:
sws_freeContext(srcContext); sws_freeContext(srcContext);
sws_freeContext(dstContext); sws_freeContext(dstContext);
sws_freeContext(outContext); sws_freeContext(outContext);
for(i=0; i<3; i++){ for (i=0; i<3; i++){
free(src[i]); free(src[i]);
free(dst[i]); free(dst[i]);
free(out[i]); free(out[i]);
} }
return res; return res;
} }
void fast_memcpy(void *a, void *b, int s){ //FIXME void fast_memcpy(void *a, void *b, int s){ //FIXME
@ -161,69 +161,69 @@ void fast_memcpy(void *a, void *b, int s){ //FIXME
} }
static void selfTest(uint8_t *src[3], int stride[3], int w, int h){ static void selfTest(uint8_t *src[3], int stride[3], int w, int h){
enum PixelFormat srcFormat, dstFormat; enum PixelFormat srcFormat, dstFormat;
int srcW, srcH, dstW, dstH; int srcW, srcH, dstW, dstH;
int flags; int flags;
for(srcFormat = 0; srcFormat < PIX_FMT_NB; srcFormat++) { for (srcFormat = 0; srcFormat < PIX_FMT_NB; srcFormat++) {
for(dstFormat = 0; dstFormat < PIX_FMT_NB; dstFormat++) { for (dstFormat = 0; dstFormat < PIX_FMT_NB; dstFormat++) {
printf("%s -> %s\n", printf("%s -> %s\n",
sws_format_name(srcFormat), sws_format_name(srcFormat),
sws_format_name(dstFormat)); sws_format_name(dstFormat));
srcW= w; srcW= w;
srcH= h; srcH= h;
for(dstW=w - w/3; dstW<= 4*w/3; dstW+= w/3){ for (dstW=w - w/3; dstW<= 4*w/3; dstW+= w/3){
for(dstH=h - h/3; dstH<= 4*h/3; dstH+= h/3){ for (dstH=h - h/3; dstH<= 4*h/3; dstH+= h/3){
for(flags=1; flags<33; flags*=2) { for (flags=1; flags<33; flags*=2) {
int res; int res;
res = doTest(src, stride, w, h, srcFormat, dstFormat, res = doTest(src, stride, w, h, srcFormat, dstFormat,
srcW, srcH, dstW, dstH, flags); srcW, srcH, dstW, dstH, flags);
if (res < 0) { if (res < 0) {
dstW = 4 * w / 3; dstW = 4 * w / 3;
dstH = 4 * h / 3; dstH = 4 * h / 3;
flags = 33; flags = 33;
} }
} }
} }
} }
} }
} }
} }
#define W 96 #define W 96
#define H 96 #define H 96
int main(int argc, char **argv){ int main(int argc, char **argv){
uint8_t *rgb_data = malloc (W*H*4); uint8_t *rgb_data = malloc (W*H*4);
uint8_t *rgb_src[3]= {rgb_data, NULL, NULL}; uint8_t *rgb_src[3]= {rgb_data, NULL, NULL};
int rgb_stride[3]={4*W, 0, 0}; int rgb_stride[3]={4*W, 0, 0};
uint8_t *data = malloc (3*W*H); uint8_t *data = malloc (3*W*H);
uint8_t *src[3]= {data, data+W*H, data+W*H*2}; uint8_t *src[3]= {data, data+W*H, data+W*H*2};
int stride[3]={W, W, W}; int stride[3]={W, W, W};
int x, y; int x, y;
struct SwsContext *sws; struct SwsContext *sws;
sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUV420P, 2, NULL, NULL, NULL); sws= sws_getContext(W/12, H/12, PIX_FMT_RGB32, W, H, PIX_FMT_YUV420P, 2, NULL, NULL, NULL);
for(y=0; y<H; y++){ for (y=0; y<H; y++){
for(x=0; x<W*4; x++){ for (x=0; x<W*4; x++){
rgb_data[ x + y*4*W]= random(); rgb_data[ x + y*4*W]= random();
} }
} }
#if defined(ARCH_X86) #if defined(ARCH_X86)
sws_rgb2rgb_init(SWS_CPU_CAPS_MMX*0); sws_rgb2rgb_init(SWS_CPU_CAPS_MMX*0);
#else #else
sws_rgb2rgb_init(0); sws_rgb2rgb_init(0);
#endif #endif
sws_scale(sws, rgb_src, rgb_stride, 0, H , src, stride); sws_scale(sws, rgb_src, rgb_stride, 0, H , src, stride);
#if defined(ARCH_X86) #if defined(ARCH_X86)
asm volatile ("emms\n\t"); asm volatile ("emms\n\t");
#endif #endif
selfTest(src, stride, W, H); selfTest(src, stride, W, H);
return 123; return 123;
} }

File diff suppressed because it is too large Load Diff

View File

@ -43,63 +43,63 @@ extern "C" {
#define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION) #define LIBSWSCALE_IDENT "SwS" AV_STRINGIFY(LIBSWSCALE_VERSION)
/* values for the flags, the stuff on the command line is different */ /* values for the flags, the stuff on the command line is different */
#define SWS_FAST_BILINEAR 1 #define SWS_FAST_BILINEAR 1
#define SWS_BILINEAR 2 #define SWS_BILINEAR 2
#define SWS_BICUBIC 4 #define SWS_BICUBIC 4
#define SWS_X 8 #define SWS_X 8
#define SWS_POINT 0x10 #define SWS_POINT 0x10
#define SWS_AREA 0x20 #define SWS_AREA 0x20
#define SWS_BICUBLIN 0x40 #define SWS_BICUBLIN 0x40
#define SWS_GAUSS 0x80 #define SWS_GAUSS 0x80
#define SWS_SINC 0x100 #define SWS_SINC 0x100
#define SWS_LANCZOS 0x200 #define SWS_LANCZOS 0x200
#define SWS_SPLINE 0x400 #define SWS_SPLINE 0x400
#define SWS_SRC_V_CHR_DROP_MASK 0x30000 #define SWS_SRC_V_CHR_DROP_MASK 0x30000
#define SWS_SRC_V_CHR_DROP_SHIFT 16 #define SWS_SRC_V_CHR_DROP_SHIFT 16
#define SWS_PARAM_DEFAULT 123456 #define SWS_PARAM_DEFAULT 123456
#define SWS_PRINT_INFO 0x1000 #define SWS_PRINT_INFO 0x1000
//the following 3 flags are not completly implemented //the following 3 flags are not completly implemented
//internal chrominace subsamling info //internal chrominace subsamling info
#define SWS_FULL_CHR_H_INT 0x2000 #define SWS_FULL_CHR_H_INT 0x2000
//input subsampling info //input subsampling info
#define SWS_FULL_CHR_H_INP 0x4000 #define SWS_FULL_CHR_H_INP 0x4000
#define SWS_DIRECT_BGR 0x8000 #define SWS_DIRECT_BGR 0x8000
#define SWS_ACCURATE_RND 0x40000 #define SWS_ACCURATE_RND 0x40000
#define SWS_CPU_CAPS_MMX 0x80000000 #define SWS_CPU_CAPS_MMX 0x80000000
#define SWS_CPU_CAPS_MMX2 0x20000000 #define SWS_CPU_CAPS_MMX2 0x20000000
#define SWS_CPU_CAPS_3DNOW 0x40000000 #define SWS_CPU_CAPS_3DNOW 0x40000000
#define SWS_CPU_CAPS_ALTIVEC 0x10000000 #define SWS_CPU_CAPS_ALTIVEC 0x10000000
#define SWS_MAX_REDUCE_CUTOFF 0.002 #define SWS_MAX_REDUCE_CUTOFF 0.002
#define SWS_CS_ITU709 1 #define SWS_CS_ITU709 1
#define SWS_CS_FCC 4 #define SWS_CS_FCC 4
#define SWS_CS_ITU601 5 #define SWS_CS_ITU601 5
#define SWS_CS_ITU624 5 #define SWS_CS_ITU624 5
#define SWS_CS_SMPTE170M 5 #define SWS_CS_SMPTE170M 5
#define SWS_CS_SMPTE240M 7 #define SWS_CS_SMPTE240M 7
#define SWS_CS_DEFAULT 5 #define SWS_CS_DEFAULT 5
// when used for filters they must have an odd number of elements // when used for filters they must have an odd number of elements
// coeffs cannot be shared between vectors // coeffs cannot be shared between vectors
typedef struct { typedef struct {
double *coeff; double *coeff;
int length; int length;
} SwsVector; } SwsVector;
// vectors can be shared // vectors can be shared
typedef struct { typedef struct {
SwsVector *lumH; SwsVector *lumH;
SwsVector *lumV; SwsVector *lumV;
SwsVector *chrH; SwsVector *chrH;
SwsVector *chrV; SwsVector *chrV;
} SwsFilter; } SwsFilter;
struct SwsContext; struct SwsContext;
@ -107,11 +107,11 @@ struct SwsContext;
void sws_freeContext(struct SwsContext *swsContext); void sws_freeContext(struct SwsContext *swsContext);
struct SwsContext *sws_getContext(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, double *param); SwsFilter *srcFilter, SwsFilter *dstFilter, double *param);
int sws_scale(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY, int sws_scale(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY,
int srcSliceH, uint8_t* dst[], int dstStride[]); int srcSliceH, uint8_t* dst[], int dstStride[]);
int sws_scale_ordered(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY, int sws_scale_ordered(struct SwsContext *context, uint8_t* src[], int srcStride[], int srcSliceY,
int srcSliceH, uint8_t* dst[], int dstStride[]) attribute_deprecated; int srcSliceH, uint8_t* dst[], int dstStride[]) attribute_deprecated;
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_setColorspaceDetails(struct SwsContext *c, const int inv_table[4], int srcRange, const int table[4], int dstRange, int brightness, int contrast, int saturation);
@ -131,15 +131,15 @@ void sws_printVec(SwsVector *a);
void sws_freeVec(SwsVector *a); void sws_freeVec(SwsVector *a);
SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur, SwsFilter *sws_getDefaultFilter(float lumaGBlur, float chromaGBlur,
float lumaSarpen, float chromaSharpen, float lumaSarpen, float chromaSharpen,
float chromaHShift, float chromaVShift, float chromaHShift, float chromaVShift,
int verbose); int verbose);
void sws_freeFilter(SwsFilter *filter); void sws_freeFilter(SwsFilter *filter);
struct SwsContext *sws_getCachedContext(struct SwsContext *context, struct SwsContext *sws_getCachedContext(struct SwsContext *context,
int srcW, int srcH, int srcFormat, int srcW, int srcH, int srcFormat,
int dstW, int dstH, int dstFormat, int flags, int dstW, int dstH, int dstFormat, int flags,
SwsFilter *srcFilter, SwsFilter *dstFilter, double *param); SwsFilter *srcFilter, SwsFilter *dstFilter, double *param);
#ifdef __cplusplus #ifdef __cplusplus
} }

View File

@ -40,114 +40,114 @@ typedef int (*SwsFunc)(struct SwsContext *context, uint8_t* src[], int srcStride
/* this struct should be aligned on at least 32-byte boundary */ /* this struct should be aligned on at least 32-byte boundary */
typedef struct SwsContext{ typedef struct SwsContext{
/** /**
* info on struct for av_log * info on struct for av_log
*/ */
AVClass *av_class; AVClass *av_class;
/** /**
* *
* Note the src,dst,srcStride,dstStride will be copied, in the sws_scale() warper so they can freely be modified here * Note the src,dst,srcStride,dstStride will be copied, in the sws_scale() warper so they can freely be modified here
*/ */
SwsFunc swScale; SwsFunc swScale;
int srcW, srcH, dstH; int srcW, srcH, dstH;
int chrSrcW, chrSrcH, chrDstW, chrDstH; int chrSrcW, chrSrcH, chrDstW, chrDstH;
int lumXInc, chrXInc; int lumXInc, chrXInc;
int lumYInc, chrYInc; int lumYInc, chrYInc;
int dstFormat, srcFormat; ///< format 4:2:0 type is always YV12 int dstFormat, srcFormat; ///< format 4:2:0 type is always YV12
int origDstFormat, origSrcFormat; ///< format int origDstFormat, origSrcFormat; ///< format
int chrSrcHSubSample, chrSrcVSubSample; int chrSrcHSubSample, chrSrcVSubSample;
int chrIntHSubSample, chrIntVSubSample; int chrIntHSubSample, chrIntVSubSample;
int chrDstHSubSample, chrDstVSubSample; int chrDstHSubSample, chrDstVSubSample;
int vChrDrop; int vChrDrop;
int sliceDir; int sliceDir;
double param[2]; double param[2];
int16_t **lumPixBuf; int16_t **lumPixBuf;
int16_t **chrPixBuf; int16_t **chrPixBuf;
int16_t *hLumFilter; int16_t *hLumFilter;
int16_t *hLumFilterPos; int16_t *hLumFilterPos;
int16_t *hChrFilter; int16_t *hChrFilter;
int16_t *hChrFilterPos; int16_t *hChrFilterPos;
int16_t *vLumFilter; int16_t *vLumFilter;
int16_t *vLumFilterPos; int16_t *vLumFilterPos;
int16_t *vChrFilter; int16_t *vChrFilter;
int16_t *vChrFilterPos; int16_t *vChrFilterPos;
uint8_t formatConvBuffer[4000]; //FIXME dynamic alloc, but we have to change a lot of code for this to be useful uint8_t formatConvBuffer[4000]; //FIXME dynamic alloc, but we have to change a lot of code for this to be useful
int hLumFilterSize; int hLumFilterSize;
int hChrFilterSize; int hChrFilterSize;
int vLumFilterSize; int vLumFilterSize;
int vChrFilterSize; int vChrFilterSize;
int vLumBufSize; int vLumBufSize;
int vChrBufSize; int vChrBufSize;
uint8_t *funnyYCode; uint8_t *funnyYCode;
uint8_t *funnyUVCode; uint8_t *funnyUVCode;
int32_t *lumMmx2FilterPos; int32_t *lumMmx2FilterPos;
int32_t *chrMmx2FilterPos; int32_t *chrMmx2FilterPos;
int16_t *lumMmx2Filter; int16_t *lumMmx2Filter;
int16_t *chrMmx2Filter; int16_t *chrMmx2Filter;
int canMMX2BeUsed; int canMMX2BeUsed;
int lastInLumBuf; int lastInLumBuf;
int lastInChrBuf; int lastInChrBuf;
int lumBufIndex; int lumBufIndex;
int chrBufIndex; int chrBufIndex;
int dstY; int dstY;
int flags; int flags;
void * yuvTable; // pointer to the yuv->rgb table start so it can be freed() void * yuvTable; // pointer to the yuv->rgb table start so it can be freed()
uint8_t * table_rV[256]; uint8_t * table_rV[256];
uint8_t * table_gU[256]; uint8_t * table_gU[256];
int table_gV[256]; int table_gV[256];
uint8_t * table_bU[256]; uint8_t * table_bU[256];
//Colorspace stuff //Colorspace stuff
int contrast, brightness, saturation; // for sws_getColorspaceDetails int contrast, brightness, saturation; // for sws_getColorspaceDetails
int srcColorspaceTable[4]; int srcColorspaceTable[4];
int dstColorspaceTable[4]; int dstColorspaceTable[4];
int srcRange, dstRange; int srcRange, dstRange;
#define RED_DITHER "0*8" #define RED_DITHER "0*8"
#define GREEN_DITHER "1*8" #define GREEN_DITHER "1*8"
#define BLUE_DITHER "2*8" #define BLUE_DITHER "2*8"
#define Y_COEFF "3*8" #define Y_COEFF "3*8"
#define VR_COEFF "4*8" #define VR_COEFF "4*8"
#define UB_COEFF "5*8" #define UB_COEFF "5*8"
#define VG_COEFF "6*8" #define VG_COEFF "6*8"
#define UG_COEFF "7*8" #define UG_COEFF "7*8"
#define Y_OFFSET "8*8" #define Y_OFFSET "8*8"
#define U_OFFSET "9*8" #define U_OFFSET "9*8"
#define V_OFFSET "10*8" #define V_OFFSET "10*8"
#define LUM_MMX_FILTER_OFFSET "11*8" #define LUM_MMX_FILTER_OFFSET "11*8"
#define CHR_MMX_FILTER_OFFSET "11*8+4*4*256" #define CHR_MMX_FILTER_OFFSET "11*8+4*4*256"
#define DSTW_OFFSET "11*8+4*4*256*2" //do not change, its hardcoded in the asm #define DSTW_OFFSET "11*8+4*4*256*2" //do not change, its hardcoded in the asm
#define ESP_OFFSET "11*8+4*4*256*2+8" #define ESP_OFFSET "11*8+4*4*256*2+8"
#define VROUNDER_OFFSET "11*8+4*4*256*2+16" #define VROUNDER_OFFSET "11*8+4*4*256*2+16"
#define U_TEMP "11*8+4*4*256*2+24" #define U_TEMP "11*8+4*4*256*2+24"
#define V_TEMP "11*8+4*4*256*2+32" #define V_TEMP "11*8+4*4*256*2+32"
uint64_t redDither __attribute__((aligned(8))); uint64_t redDither __attribute__((aligned(8)));
uint64_t greenDither __attribute__((aligned(8))); uint64_t greenDither __attribute__((aligned(8)));
uint64_t blueDither __attribute__((aligned(8))); uint64_t blueDither __attribute__((aligned(8)));
uint64_t yCoeff __attribute__((aligned(8))); uint64_t yCoeff __attribute__((aligned(8)));
uint64_t vrCoeff __attribute__((aligned(8))); uint64_t vrCoeff __attribute__((aligned(8)));
uint64_t ubCoeff __attribute__((aligned(8))); uint64_t ubCoeff __attribute__((aligned(8)));
uint64_t vgCoeff __attribute__((aligned(8))); uint64_t vgCoeff __attribute__((aligned(8)));
uint64_t ugCoeff __attribute__((aligned(8))); uint64_t ugCoeff __attribute__((aligned(8)));
uint64_t yOffset __attribute__((aligned(8))); uint64_t yOffset __attribute__((aligned(8)));
uint64_t uOffset __attribute__((aligned(8))); uint64_t uOffset __attribute__((aligned(8)));
uint64_t vOffset __attribute__((aligned(8))); uint64_t vOffset __attribute__((aligned(8)));
int32_t lumMmxFilter[4*MAX_FILTER_SIZE]; int32_t lumMmxFilter[4*MAX_FILTER_SIZE];
int32_t chrMmxFilter[4*MAX_FILTER_SIZE]; int32_t chrMmxFilter[4*MAX_FILTER_SIZE];
int dstW; int dstW;
uint64_t esp __attribute__((aligned(8))); uint64_t esp __attribute__((aligned(8)));
uint64_t vRounder __attribute__((aligned(8))); uint64_t vRounder __attribute__((aligned(8)));
uint64_t u_temp __attribute__((aligned(8))); uint64_t u_temp __attribute__((aligned(8)));
uint64_t v_temp __attribute__((aligned(8))); uint64_t v_temp __attribute__((aligned(8)));
#ifdef HAVE_ALTIVEC #ifdef HAVE_ALTIVEC
@ -158,7 +158,7 @@ typedef struct SwsContext{
vector signed short CGV; vector signed short CGV;
vector signed short OY; vector signed short OY;
vector unsigned short CSHIFT; vector unsigned short CSHIFT;
vector signed short *vYCoeffsBank, *vCCoeffsBank; vector signed short *vYCoeffsBank, *vCCoeffsBank;
#endif #endif
@ -171,21 +171,21 @@ int yuv2rgb_c_init_tables (SwsContext *c, const int inv_table[4], int fullRange,
char *sws_format_name(int format); char *sws_format_name(int format);
//FIXME replace this with something faster //FIXME replace this with something faster
#define isPlanarYUV(x) ((x)==PIX_FMT_YUV410P || (x)==PIX_FMT_YUV420P \ #define isPlanarYUV(x) ((x)==PIX_FMT_YUV410P || (x)==PIX_FMT_YUV420P \
|| (x)==PIX_FMT_YUV411P || (x)==PIX_FMT_YUV422P \ || (x)==PIX_FMT_YUV411P || (x)==PIX_FMT_YUV422P \
|| (x)==PIX_FMT_YUV444P || (x)==PIX_FMT_NV12 \ || (x)==PIX_FMT_YUV444P || (x)==PIX_FMT_NV12 \
|| (x)==PIX_FMT_NV21) || (x)==PIX_FMT_NV21)
#define isYUV(x) ((x)==PIX_FMT_UYVY422 || (x)==PIX_FMT_YUYV422 || isPlanarYUV(x)) #define isYUV(x) ((x)==PIX_FMT_UYVY422 || (x)==PIX_FMT_YUYV422 || isPlanarYUV(x))
#define isGray(x) ((x)==PIX_FMT_GRAY8 || (x)==PIX_FMT_GRAY16BE || (x)==PIX_FMT_GRAY16LE) #define isGray(x) ((x)==PIX_FMT_GRAY8 || (x)==PIX_FMT_GRAY16BE || (x)==PIX_FMT_GRAY16LE)
#define isGray16(x) ((x)==PIX_FMT_GRAY16BE || (x)==PIX_FMT_GRAY16LE) #define isGray16(x) ((x)==PIX_FMT_GRAY16BE || (x)==PIX_FMT_GRAY16LE)
#define isRGB(x) ((x)==PIX_FMT_BGR32 || (x)==PIX_FMT_RGB24 \ #define isRGB(x) ((x)==PIX_FMT_BGR32 || (x)==PIX_FMT_RGB24 \
|| (x)==PIX_FMT_RGB565 || (x)==PIX_FMT_RGB555 \ || (x)==PIX_FMT_RGB565 || (x)==PIX_FMT_RGB555 \
|| (x)==PIX_FMT_RGB8 || (x)==PIX_FMT_RGB4 || (x)==PIX_FMT_RGB4_BYTE \ || (x)==PIX_FMT_RGB8 || (x)==PIX_FMT_RGB4 || (x)==PIX_FMT_RGB4_BYTE \
|| (x)==PIX_FMT_MONOBLACK) || (x)==PIX_FMT_MONOBLACK)
#define isBGR(x) ((x)==PIX_FMT_RGB32 || (x)==PIX_FMT_BGR24 \ #define isBGR(x) ((x)==PIX_FMT_RGB32 || (x)==PIX_FMT_BGR24 \
|| (x)==PIX_FMT_BGR565 || (x)==PIX_FMT_BGR555 \ || (x)==PIX_FMT_BGR565 || (x)==PIX_FMT_BGR555 \
|| (x)==PIX_FMT_BGR8 || (x)==PIX_FMT_BGR4 || (x)==PIX_FMT_BGR4_BYTE \ || (x)==PIX_FMT_BGR8 || (x)==PIX_FMT_BGR4 || (x)==PIX_FMT_BGR4_BYTE \
|| (x)==PIX_FMT_MONOBLACK) || (x)==PIX_FMT_MONOBLACK)
static inline int fmt_depth(int fmt) static inline int fmt_depth(int fmt)
{ {