freeSwsContext(srcContext); freeSwsContext(dstContext); freeSwsContext(outContext);
sws_freeContext(srcContext); sws_freeContext(dstContext); sws_freeContext(outContext);
static void 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;	SwsContext *srcContext, *dstContext, *outContext;		for(i=0; i<3; i++){		// avoid stride % bpp != 0		if(srcFormat==IMGFMT_RGB24 || srcFormat==IMGFMT_BGR24)			srcStride[i]= srcW*3;		else			srcStride[i]= srcW*4;				if(dstFormat==IMGFMT_RGB24 || dstFormat==IMGFMT_BGR24)			dstStride[i]= dstW*3;		else			dstStride[i]= dstW*4;			src[i]= malloc(srcStride[i]*srcH);		dst[i]= malloc(dstStride[i]*dstH);		out[i]= malloc(refStride[i]*h);	}	srcContext= getSwsContext(w, h, IMGFMT_YV12, srcW, srcH, srcFormat, flags, NULL, NULL);	dstContext= getSwsContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL);	outContext= getSwsContext(dstW, dstH, dstFormat, w, h, IMGFMT_YV12, flags, NULL, NULL);	if(srcContext==NULL ||dstContext==NULL ||outContext==NULL){		printf("Failed allocating swsContext\n");		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]);	srcContext->swScale(srcContext, ref, refStride, 0, h   , src, srcStride);	dstContext->swScale(dstContext, src, srcStride, 0, srcH, dst, dstStride);	outContext->swScale(outContext, dst, dstStride, 0, dstH, out, refStride);	     	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(isGray(srcFormat) || isGray(dstFormat)) 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>50 || ssdV>50){		printf(" %s %dx%d -> %s %4dx%4d flags=%2d SSD=%5lld,%5lld,%5lld\n", 			vo_format_name(srcFormat), srcW, srcH, 			vo_format_name(dstFormat), dstW, dstH,			flags,			ssdY, ssdU, ssdV);	}	end:		freeSwsContext(srcContext);	freeSwsContext(dstContext);	freeSwsContext(outContext);	for(i=0; i<3; i++){		free(src[i]);		free(dst[i]);		free(out[i]);	}}