Mercurial > mplayer.hg
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; |