diff options
Diffstat (limited to 'postproc/swscale.c')
-rw-r--r-- | postproc/swscale.c | 133 |
1 files changed, 0 insertions, 133 deletions
diff --git a/postproc/swscale.c b/postproc/swscale.c index a3b20cf..910fa3f 100644 --- a/postproc/swscale.c +++ b/postproc/swscale.c @@ -247,139 +247,6 @@ void in_asm_used_var_warning_killer() } #endif -static int testFormat[]={ -IMGFMT_YVU9, -IMGFMT_YV12, -//IMGFMT_IYUV, -IMGFMT_I420, -IMGFMT_BGR15, -IMGFMT_BGR16, -IMGFMT_BGR24, -IMGFMT_BGR32, -IMGFMT_RGB24, -IMGFMT_RGB32, -//IMGFMT_Y8, -IMGFMT_Y800, -//IMGFMT_YUY2, -0 -}; - -static uint64_t getSSD(uint8_t *src1, uint8_t *src2, int stride1, int stride2, int w, int h){ - int x,y; - uint64_t ssd=0; - - for(y=0; y<h; y++){ - for(x=0; x<w; x++){ - int d= src1[x + y*stride1] - src2[x + y*stride2]; - ssd+= d*d; - } - } - return ssd; -} - -// test by ref -> src -> dst -> out & compare out against ref -// ref & out are YV12 -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= sws_getContext(w, h, IMGFMT_YV12, srcW, srcH, srcFormat, flags, NULL, NULL); - dstContext= sws_getContext(srcW, srcH, srcFormat, dstW, dstH, dstFormat, flags, NULL, NULL); - outContext= sws_getContext(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: - - sws_freeContext(srcContext); - sws_freeContext(dstContext); - sws_freeContext(outContext); - - for(i=0; i<3; i++){ - free(src[i]); - free(dst[i]); - free(out[i]); - } -} - -static void selfTest(uint8_t *src[3], int stride[3], int w, int h){ - int srcFormat, dstFormat, srcFormatIndex, dstFormatIndex; - int srcW, srcH, dstW, dstH; - int flags; - - for(srcFormatIndex=0; ;srcFormatIndex++){ - srcFormat= testFormat[srcFormatIndex]; - if(!srcFormat) break; - for(dstFormatIndex=0; ;dstFormatIndex++){ - dstFormat= testFormat[dstFormatIndex]; - if(!dstFormat) break; - if(!isSupportedOut(dstFormat)) continue; -printf("%s -> %s\n", - vo_format_name(srcFormat), - vo_format_name(dstFormat)); - - srcW= w+w/3; - srcH= h+h/3; - for(dstW=w; dstW<w*2; dstW+= dstW/3){ - for(dstH=h; dstH<h*2; dstH+= dstH/3){ - for(flags=1; flags<33; flags*=2) - doTest(src, stride, w, h, srcFormat, dstFormat, - srcW, srcH, dstW, dstH, flags); - } - } - } - } -} - static inline void yuv2yuvXinC(int16_t *lumFilter, int16_t **lumSrc, int lumFilterSize, int16_t *chrFilter, int16_t **chrSrc, int chrFilterSize, uint8_t *dest, uint8_t *uDest, uint8_t *vDest, int dstW, int chrDstW) |