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){

	uint8_t *src[3];

	uint8_t *dst[3];

	uint8_t *out[3];

	int srcStride[3], dstStride[3];

	int i;

	uint64_t ssdY, ssdU, ssdV;

	struct SwsContext *srcContext, *dstContext, *outContext;

	int res;



	res = 0;

	for(i=0; i<3; i++){

		// avoid stride % bpp != 0

		if(srcFormat==PIX_FMT_RGB24 || srcFormat==PIX_FMT_BGR24)

			srcStride[i]= srcW*3;

		else

			srcStride[i]= srcW*4;



		if(dstFormat==PIX_FMT_RGB24 || dstFormat==PIX_FMT_BGR24)

			dstStride[i]= dstW*3;

		else

			dstStride[i]= dstW*4;



		src[i]= (uint8_t*) malloc(srcStride[i]*srcH);

		dst[i]= (uint8_t*) malloc(dstStride[i]*dstH);

		out[i]= (uint8_t*) malloc(refStride[i]*h);

		if ((src[i] == NULL) || (dst[i] == NULL) || (out[i] == NULL)) {

			perror("Malloc");

			res = -1;



			goto end;

		}

	}



	dstContext = outContext = NULL;

	srcContext= sws_getContext(w, h, PIX_FMT_YUV420P, srcW, srcH, srcFormat, flags, NULL, NULL, NULL);

	if (srcContext == NULL) {

		fprintf(stderr, "Failed to get %s ---> %s\n",

				sws_format_name(PIX_FMT_YUV420P),

				sws_format_name(srcFormat));

		res = -1;



		goto end;

	}

	dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL, NULL);

	if (dstContext == NULL) {

		fprintf(stderr, "Failed to get %s ---> %s\n",

				sws_format_name(srcFormat),

				sws_format_name(dstFormat));

		res = -1;



		goto end;

	}

	outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUV420P, flags, NULL, NULL, NULL);

	if (outContext == NULL) {

		fprintf(stderr, "Failed to get %s ---> %s\n",

				sws_format_name(dstFormat),

				sws_format_name(PIX_FMT_YUV420P));

		res = -1;



		goto end;

	}

//	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]);



	sws_scale(srcContext, ref, refStride, 0, h   , src, srcStride);

	sws_scale(dstContext, src, srcStride, 0, srcH, dst, dstStride);

	sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride);



#if defined(ARCH_X86)

	asm volatile ("emms\n\t");

#endif



	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);

	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



	ssdY/= w*h;

	ssdU/= w*h/4;

	ssdV/= w*h/4;



	if(ssdY>100 || ssdU>100 || ssdV>100){

		printf(" %s %dx%d -> %s %4dx%4d flags=%2d SSD=%5lld,%5lld,%5lld\n",

			sws_format_name(srcFormat), srcW, srcH,

			sws_format_name(dstFormat), dstW, dstH,

			flags,

			ssdY, ssdU, ssdV);

	}



	end:



	sws_freeContext(srcContext);

	sws_freeContext(dstContext);

	sws_freeContext(outContext);



	for(i=0; i<3; i++){

		free(src[i]);

		free(dst[i]);

		free(out[i]);

	}



	return res;

}

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){

	uint8_t *src[3];

	uint8_t *dst[3];

	uint8_t *out[3];

	int srcStride[3], dstStride[3];

	int i;

	uint64_t ssdY, ssdU, ssdV;

	struct SwsContext *srcContext, *dstContext, *outContext;

	int res;



	res = 0;

	for(i=0; i<3; i++){

		

		if(srcFormat==PIX_FMT_RGB24 || srcFormat==PIX_FMT_BGR24)

			srcStride[i]= srcW*3;

		else

			srcStride[i]= srcW*4;



		if(dstFormat==PIX_FMT_RGB24 || dstFormat==PIX_FMT_BGR24)

			dstStride[i]= dstW*3;

		else

			dstStride[i]= dstW*4;



		src[i]= (uint8_t*) malloc(srcStride[i]*srcH);

		dst[i]= (uint8_t*) malloc(dstStride[i]*dstH);

		out[i]= (uint8_t*) malloc(refStride[i]*h);

		if ((src[i] == NULL) || (dst[i] == NULL) || (out[i] == NULL)) {

			perror("Malloc");

			res = -1;



			goto end;

		}

	}



	dstContext = outContext = NULL;

	srcContext= sws_getContext(w, h, PIX_FMT_YUV420P, srcW, srcH, srcFormat, flags, NULL, NULL, NULL);

	if (srcContext == NULL) {

		fprintf(stderr, "Failed to get %s ---> %s\n",

				sws_format_name(PIX_FMT_YUV420P),

				sws_format_name(srcFormat));

		res = -1;



		goto end;

	}

	dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL, NULL);

	if (dstContext == NULL) {

		fprintf(stderr, "Failed to get %s ---> %s\n",

				sws_format_name(srcFormat),

				sws_format_name(dstFormat));

		res = -1;



		goto end;

	}

	outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUV420P, flags, NULL, NULL, NULL);

	if (outContext == NULL) {

		fprintf(stderr, "Failed to get %s ---> %s\n",

				sws_format_name(dstFormat),

				sws_format_name(PIX_FMT_YUV420P));

		res = -1;



		goto end;

	}







	sws_scale(srcContext, ref, refStride, 0, h   , src, srcStride);

	sws_scale(dstContext, src, srcStride, 0, srcH, dst, dstStride);

	sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride);



#if defined(ARCH_X86)

	asm volatile ("emms\n\t");

#endif



	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);

	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; 



	ssdY/= w*h;

	ssdU/= w*h/4;

	ssdV/= w*h/4;



	if(ssdY>100 || ssdU>100 || ssdV>100){

		printf(" %s %dx%d -> %s %4dx%4d flags=%2d SSD=%5lld,%5lld,%5lld\n",

			sws_format_name(srcFormat), srcW, srcH,

			sws_format_name(dstFormat), dstW, dstH,

			flags,

			ssdY, ssdU, ssdV);

	}



	end:



	sws_freeContext(srcContext);

	sws_freeContext(dstContext);

	sws_freeContext(outContext);



	for(i=0; i<3; i++){

		free(src[i]);

		free(dst[i]);

		free(out[i]);

	}



	return res;

}

                   int srcW, int srcH, int dstW, int dstH, int flags){ 	uint8_t *src[3]; 	uint8_t *dst[3]; 	uint8_t *out[3]; 	int srcStride[3], dstStride[3]; 	int i; 	uint64_t ssdY, ssdU, ssdV; 	struct SwsContext *srcContext, *dstContext, *outContext; 	int res; 	res = 0; 	for(i=0; i<3; i++){ 		if(srcFormat==PIX_FMT_RGB24 || srcFormat==PIX_FMT_BGR24) 			srcStride[i]= srcW*3; 			srcStride[i]= srcW*4; 		if(dstFormat==PIX_FMT_RGB24 || dstFormat==PIX_FMT_BGR24) 			dstStride[i]= dstW*3; 			dstStride[i]= dstW*4; 		src[i]= (uint8_t*) malloc(srcStride[i]*srcH); 		dst[i]= (uint8_t*) malloc(dstStride[i]*dstH); 		out[i]= (uint8_t*) malloc(refStride[i]*h); 		if ((src[i] == NULL) || (dst[i] == NULL) || (out[i] == NULL)) { 			perror("Malloc"); 			res = -1; 			goto end; 	dstContext = outContext = NULL; 	srcContext= sws_getContext(w, h, PIX_FMT_YUV420P, srcW, srcH, srcFormat, flags, NULL, NULL, NULL); 	if (srcContext == NULL) { 		fprintf(stderr, "Failed to get %s ---> %s\n", 				sws_format_name(PIX_FMT_YUV420P), 				sws_format_name(srcFormat)); 		res = -1; 		goto end; 	dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL, NULL); 	if (dstContext == NULL) { 		fprintf(stderr, "Failed to get %s ---> %s\n", 				sws_format_name(srcFormat), 				sws_format_name(dstFormat)); 		res = -1; 		goto end; 	outContext= sws_getContext(dstW, dstH, dstFormat, w, h, PIX_FMT_YUV420P, flags, NULL, NULL, NULL); 	if (outContext == NULL) { 		fprintf(stderr, "Failed to get %s ---> %s\n", 				sws_format_name(dstFormat), 				sws_format_name(PIX_FMT_YUV420P)); 		res = -1; 		goto end; 	sws_scale(srcContext, ref, refStride, 0, h   , src, srcStride); 	sws_scale(dstContext, src, srcStride, 0, srcH, dst, dstStride); 	sws_scale(outContext, dst, dstStride, 0, dstH, out, refStride); 	asm volatile ("emms\n\t"); 	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); 	ssdV= getSSD(ref[2], out[2], refStride[2], refStride[2], (w+1)>>1, (h+1)>>1); 	ssdY/= w*h; 	ssdU/= w*h/4; 	ssdV/= w*h/4; 	if(ssdY>100 || ssdU>100 || ssdV>100){ 		printf(" %s %dx%d -> %s %4dx%4d flags=%2d SSD=%5lld,%5lld,%5lld\n", 			sws_format_name(srcFormat), srcW, srcH, 			sws_format_name(dstFormat), dstW, dstH, 			flags, 			ssdY, ssdU, ssdV); 	end: 	sws_freeContext(srcContext); 	sws_freeContext(dstContext); 	sws_freeContext(outContext); 	for(i=0; i<3; i++){ 		free(src[i]); 		free(dst[i]); 		free(out[i]); 	return res; 	asm volatile ("emms\n\t"); 	int i; 	int i; 	int i; 	int i; 	int i; 	int i; 	int i; 	int i; 	int i; 	int i; 	int i; 	int i; 	int i; 	int i; 	int i; 	int i;
static int FUNC_0(uint8_t *VAR_0[3], int VAR_1[3], int VAR_2, int VAR_3, int VAR_4, int VAR_5,

                   int VAR_6, int VAR_7, int VAR_8, int VAR_9, int VAR_10){

	uint8_t *src[3];

	uint8_t *dst[3];

	uint8_t *out[3];

	int VAR_11[3], VAR_12[3];

	int VAR_13;

	uint64_t ssdY, ssdU, ssdV;

	struct SwsContext *VAR_14, *VAR_15, *VAR_16;

	int VAR_17;



	VAR_17 = 0;

	for(VAR_13=0; VAR_13<3; VAR_13++){

		

		if(VAR_4==PIX_FMT_RGB24 || VAR_4==PIX_FMT_BGR24)

			VAR_11[VAR_13]= VAR_6*3;

		else

			VAR_11[VAR_13]= VAR_6*4;



		if(VAR_5==PIX_FMT_RGB24 || VAR_5==PIX_FMT_BGR24)

			VAR_12[VAR_13]= VAR_8*3;

		else

			VAR_12[VAR_13]= VAR_8*4;



		src[VAR_13]= (uint8_t*) malloc(VAR_11[VAR_13]*VAR_7);

		dst[VAR_13]= (uint8_t*) malloc(VAR_12[VAR_13]*VAR_9);

		out[VAR_13]= (uint8_t*) malloc(VAR_1[VAR_13]*VAR_3);

		if ((src[VAR_13] == NULL) || (dst[VAR_13] == NULL) || (out[VAR_13] == NULL)) {

			perror("Malloc");

			VAR_17 = -1;



			goto end;

		}

	}



	VAR_15 = VAR_16 = NULL;

	VAR_14= sws_getContext(VAR_2, VAR_3, PIX_FMT_YUV420P, VAR_6, VAR_7, VAR_4, VAR_10, NULL, NULL, NULL);

	if (VAR_14 == NULL) {

		fprintf(stderr, "Failed to get %s ---> %s\n",

				sws_format_name(PIX_FMT_YUV420P),

				sws_format_name(VAR_4));

		VAR_17 = -1;



		goto end;

	}

	VAR_15= sws_getContext(VAR_6, VAR_7, VAR_4, VAR_8, VAR_9, VAR_5, VAR_10, NULL, NULL, NULL);

	if (VAR_15 == NULL) {

		fprintf(stderr, "Failed to get %s ---> %s\n",

				sws_format_name(VAR_4),

				sws_format_name(VAR_5));

		VAR_17 = -1;



		goto end;

	}

	VAR_16= sws_getContext(VAR_8, VAR_9, VAR_5, VAR_2, VAR_3, PIX_FMT_YUV420P, VAR_10, NULL, NULL, NULL);

	if (VAR_16 == NULL) {

		fprintf(stderr, "Failed to get %s ---> %s\n",

				sws_format_name(VAR_5),

				sws_format_name(PIX_FMT_YUV420P));

		VAR_17 = -1;



		goto end;

	}







	sws_scale(VAR_14, VAR_0, VAR_1, 0, VAR_3   , src, VAR_11);

	sws_scale(VAR_15, src, VAR_11, 0, VAR_7, dst, VAR_12);

	sws_scale(VAR_16, dst, VAR_12, 0, VAR_9, out, VAR_1);



#if defined(ARCH_X86)

	asm volatile ("emms\n\t");

#endif



	ssdY= getSSD(VAR_0[0], out[0], VAR_1[0], VAR_1[0], VAR_2, VAR_3);

	ssdU= getSSD(VAR_0[1], out[1], VAR_1[1], VAR_1[1], (VAR_2+1)>>1, (VAR_3+1)>>1);

	ssdV= getSSD(VAR_0[2], out[2], VAR_1[2], VAR_1[2], (VAR_2+1)>>1, (VAR_3+1)>>1);



	if(VAR_4 == PIX_FMT_GRAY8 || VAR_5==PIX_FMT_GRAY8) ssdU=ssdV=0; 



	ssdY/= VAR_2*VAR_3;

	ssdU/= VAR_2*VAR_3/4;

	ssdV/= VAR_2*VAR_3/4;



	if(ssdY>100 || ssdU>100 || ssdV>100){

		printf(" %s %dx%d -> %s %4dx%4d VAR_10=%2d SSD=%5lld,%5lld,%5lld\n",

			sws_format_name(VAR_4), VAR_6, VAR_7,

			sws_format_name(VAR_5), VAR_8, VAR_9,

			VAR_10,

			ssdY, ssdU, ssdV);

	}



	end:



	sws_freeContext(VAR_14);

	sws_freeContext(VAR_15);

	sws_freeContext(VAR_16);



	for(VAR_13=0; VAR_13<3; VAR_13++){

		free(src[VAR_13]);

		free(dst[VAR_13]);

		free(out[VAR_13]);

	}



	return VAR_17;

}

static int FUNC_0(uint8_t *VAR_0[3], int VAR_1[3], int VAR_2, int VAR_3, int VAR_4, int VAR_5,
int VAR_6, int VAR_7, int VAR_8, int VAR_9, int VAR_10){ uint8_t *src[3]; uint8_t *dst[3]; uint8_t *out[3]; int VAR_11[3], VAR_12[3]; int VAR_13; uint64_t ssdY, ssdU, ssdV; struct SwsContext *VAR_14, *VAR_15, *VAR_16; int VAR_17; VAR_17 = 0; for(VAR_13=0; VAR_13<3; VAR_13++){ if(VAR_4==PIX_FMT_RGB24 || VAR_4==PIX_FMT_BGR24)
VAR_11[VAR_13]= VAR_6*3; else
VAR_11[VAR_13]= VAR_6*4; if(VAR_5==PIX_FMT_RGB24 || VAR_5==PIX_FMT_BGR24)
VAR_12[VAR_13]= VAR_8*3; else
VAR_12[VAR_13]= VAR_8*4; src[VAR_13]= (uint8_t*) malloc(VAR_11[VAR_13]*VAR_7); dst[VAR_13]= (uint8_t*) malloc(VAR_12[VAR_13]*VAR_9); out[VAR_13]= (uint8_t*) malloc(VAR_1[VAR_13]*VAR_3); if ((src[VAR_13] == NULL) || (dst[VAR_13] == NULL) || (out[VAR_13] == NULL)) { perror("Malloc"); VAR_17 = -1; goto end; } } VAR_15 = VAR_16 = NULL; VAR_14= sws_getContext(VAR_2, VAR_3, PIX_FMT_YUV420P, VAR_6, VAR_7, VAR_4, VAR_10, NULL, NULL, NULL); if (VAR_14 == NULL) { fprintf(stderr, "Failed to get %s ---> %s\n",
sws_format_name(PIX_FMT_YUV420P),
sws_format_name(VAR_4)); VAR_17 = -1; goto end; } VAR_15= sws_getContext(VAR_6, VAR_7, VAR_4, VAR_8, VAR_9, VAR_5, VAR_10, NULL, NULL, NULL); if (VAR_15 == NULL) { fprintf(stderr, "Failed to get %s ---> %s\n",
sws_format_name(VAR_4),
sws_format_name(VAR_5)); VAR_17 = -1; goto end; } VAR_16= sws_getContext(VAR_8, VAR_9, VAR_5, VAR_2, VAR_3, PIX_FMT_YUV420P, VAR_10, NULL, NULL, NULL); if (VAR_16 == NULL) { fprintf(stderr, "Failed to get %s ---> %s\n",
sws_format_name(VAR_5),
sws_format_name(PIX_FMT_YUV420P)); VAR_17 = -1; goto end; } sws_scale(VAR_14, VAR_0, VAR_1, 0, VAR_3   , src, VAR_11); sws_scale(VAR_15, src, VAR_11, 0, VAR_7, dst, VAR_12); sws_scale(VAR_16, dst, VAR_12, 0, VAR_9, out, VAR_1); #if defined(ARCH_X86)
asm volatile ("emms\n\t"); #endif
ssdY= getSSD(VAR_0[0], out[0], VAR_1[0], VAR_1[0], VAR_2, VAR_3); ssdU= getSSD(VAR_0[1], out[1], VAR_1[1], VAR_1[1], (VAR_2+1)>>1, (VAR_3+1)>>1); ssdV= getSSD(VAR_0[2], out[2], VAR_1[2], VAR_1[2], (VAR_2+1)>>1, (VAR_3+1)>>1); if(VAR_4 == PIX_FMT_GRAY8 || VAR_5==PIX_FMT_GRAY8) ssdU=ssdV=0; ssdY/= VAR_2*VAR_3; ssdU/= VAR_2*VAR_3/4; ssdV/= VAR_2*VAR_3/4; if(ssdY>100 || ssdU>100 || ssdV>100){ printf(" %s %dx%d -> %s %4dx%4d VAR_10=%2d SSD=%5lld,%5lld,%5lld\n",
sws_format_name(VAR_4), VAR_6, VAR_7,
sws_format_name(VAR_5), VAR_8, VAR_9,
VAR_10,
ssdY, ssdU, ssdV); } end:
sws_freeContext(VAR_14); sws_freeContext(VAR_15); sws_freeContext(VAR_16); for(VAR_13=0; VAR_13<3; VAR_13++){ free(src[VAR_13]); free(dst[VAR_13]); free(out[VAR_13]); } return VAR_17; }