comparison postproc/swscale.c @ 17588:79081ba52e00

Move the v{Y,C}CoeffsBank vectors into the SwsContext, filling them in just once when the scaler is initialized, instead of building them and freeing them over and over. This gives massive performance improvements. patch by Alan Curry, pacman*at*TheWorld*dot*com
author diego
date Sat, 11 Feb 2006 14:16:10 +0000
parents f580a7755ac5
children 3a67b7ce8b3b
comparison
equal deleted inserted replaced
17587:e1108996497c 17588:79081ba52e00
2108 srcFilter->lumV, dstFilter->lumV, c->param); 2108 srcFilter->lumV, dstFilter->lumV, c->param);
2109 initFilter(&c->vChrFilter, &c->vChrFilterPos, &c->vChrFilterSize, c->chrYInc, 2109 initFilter(&c->vChrFilter, &c->vChrFilterPos, &c->vChrFilterSize, c->chrYInc,
2110 c->chrSrcH, c->chrDstH, filterAlign, (1<<12)-4, 2110 c->chrSrcH, c->chrDstH, filterAlign, (1<<12)-4,
2111 (flags&SWS_BICUBLIN) ? (flags|SWS_BILINEAR) : flags, 2111 (flags&SWS_BICUBLIN) ? (flags|SWS_BILINEAR) : flags,
2112 srcFilter->chrV, dstFilter->chrV, c->param); 2112 srcFilter->chrV, dstFilter->chrV, c->param);
2113
2114 #ifdef HAVE_ALTIVEC
2115 c->vYCoeffsBank = memalign (16, sizeof (vector signed short)*c->vLumFilterSize*c->dstH);
2116 c->vCCoeffsBank = memalign (16, sizeof (vector signed short)*c->vChrFilterSize*c->dstH);
2117
2118 for (i=0;i<c->vLumFilterSize*c->dstH;i++) {
2119 int j;
2120 short *p = (short *)&c->vYCoeffsBank[i];
2121 for (j=0;j<8;j++)
2122 p[j] = c->vLumFilter[i];
2123 }
2124
2125 for (i=0;i<c->vChrFilterSize*c->dstH;i++) {
2126 int j;
2127 short *p = (short *)&c->vCCoeffsBank[i];
2128 for (j=0;j<8;j++)
2129 p[j] = c->vChrFilter[i];
2130 }
2131 #endif
2113 } 2132 }
2114 2133
2115 // Calculate Buffer Sizes so that they won't run out while handling these damn slices 2134 // Calculate Buffer Sizes so that they won't run out while handling these damn slices
2116 c->vLumBufSize= c->vLumFilterSize; 2135 c->vLumBufSize= c->vLumFilterSize;
2117 c->vChrBufSize= c->vChrFilterSize; 2136 c->vChrBufSize= c->vChrFilterSize;
2642 c->vChrFilter = NULL; 2661 c->vChrFilter = NULL;
2643 if(c->hLumFilter) free(c->hLumFilter); 2662 if(c->hLumFilter) free(c->hLumFilter);
2644 c->hLumFilter = NULL; 2663 c->hLumFilter = NULL;
2645 if(c->hChrFilter) free(c->hChrFilter); 2664 if(c->hChrFilter) free(c->hChrFilter);
2646 c->hChrFilter = NULL; 2665 c->hChrFilter = NULL;
2666 #ifdef HAVE_ALTIVEC
2667 if(c->vYCoeffsBank) free(c->vYCoeffsBank);
2668 c->vYCoeffsBank = NULL;
2669 if(c->vCCoeffsBank) free(c->vCCoeffsBank);
2670 c->vCCoeffsBank = NULL;
2671 #endif
2647 2672
2648 if(c->vLumFilterPos) free(c->vLumFilterPos); 2673 if(c->vLumFilterPos) free(c->vLumFilterPos);
2649 c->vLumFilterPos = NULL; 2674 c->vLumFilterPos = NULL;
2650 if(c->vChrFilterPos) free(c->vChrFilterPos); 2675 if(c->vChrFilterPos) free(c->vChrFilterPos);
2651 c->vChrFilterPos = NULL; 2676 c->vChrFilterPos = NULL;