changeset 4401:8d00348d0d6b

nearest neighbor / sdl emulation ;) scaling (-sws 4)
author michael
date Mon, 28 Jan 2002 23:57:18 +0000
parents 1187542d84d8
children 67abbf501b02
files postproc/swscale.c postproc/swscale.h
diffstat 2 files changed, 26 insertions(+), 2 deletions(-) [+]
line wrap: on
line diff
--- a/postproc/swscale.c	Mon Jan 28 23:46:42 2002 +0000
+++ b/postproc/swscale.c	Mon Jan 28 23:57:18 2002 +0000
@@ -69,10 +69,13 @@
 
 TODO
 more intelligent missalignment avoidance for the horizontal scaler
-dither in C
 change the distance of the u & v buffer
 write special vertical cubic upscale version
 Optimize C code (yv12 / minmax)
+add support for packed pixel yuv input & output
+add support for Y8 input & output
+add BGR4 output support
+add BGR32 / BGR24 input support
 */
 
 #define ABS(a) ((a) > 0 ? (a) : (-(a)))
@@ -600,6 +603,7 @@
 		case 1: flags|= SWS_BILINEAR; break;
 		case 2: flags|= SWS_BICUBIC; break;
 		case 3: flags|= SWS_X; break;
+		case 4: flags|= SWS_POINT; break;
 		default:flags|= SWS_BILINEAR; break;
 	}
 
@@ -639,6 +643,23 @@
 		}
 
 	}
+	else if(flags&SWS_POINT) // lame looking point sampling mode
+	{
+		int i;
+		int xDstInSrc;
+		filterSize= 1;
+		filter= (double*)memalign(8, dstW*sizeof(double)*filterSize);
+		
+		xDstInSrc= xInc/2 - 0x8000;
+		for(i=0; i<dstW; i++)
+		{
+			int xx= (xDstInSrc>>16) - (filterSize>>1) + 1;
+
+			(*filterPos)[i]= xx;
+			filter[i]= 1.0;
+			xDstInSrc+= xInc;
+		}
+	}
 	else if(xInc <= (1<<16) || (flags&SWS_FAST_BILINEAR)) // upscale
 	{
 		int i;
@@ -1203,6 +1224,8 @@
 			fprintf(stderr, "\nSwScaler: BILINEAR scaler ");
 		else if(flags&SWS_BICUBIC)
 			fprintf(stderr, "\nSwScaler: BICUBIC scaler ");
+		else if(flags&SWS_POINT)
+			fprintf(stderr, "\nSwScaler: POINT scaler ");
 		else
 			fprintf(stderr, "\nSwScaler: ehh flags invalid?! ");
 
@@ -1430,7 +1453,7 @@
 static SwsVector *getShiftedVec(SwsVector *a, int shift){
 	int length= a->length + ABS(shift)*2;
 	double *coeff= memalign(sizeof(double), length*sizeof(double));
-	int i, j;
+	int i;
 	SwsVector *vec= malloc(sizeof(SwsVector));
 
 	vec->coeff= coeff;
--- a/postproc/swscale.h	Mon Jan 28 23:46:42 2002 +0000
+++ b/postproc/swscale.h	Mon Jan 28 23:57:18 2002 +0000
@@ -21,6 +21,7 @@
 #define SWS_BILINEAR 2
 #define SWS_BICUBIC  4
 #define SWS_X        8
+#define SWS_POINT    0x10
 #define SWS_FULL_UV_IPOL 0x100
 #define SWS_PRINT_INFO 0x1000