comparison postproc/swscale.c @ 12130:2ef24558b732

AltiVec hScale, all size patch by (Romain Dolbeau <dolbeaur at club-internet dot fr>)
author michael
date Tue, 06 Apr 2004 00:25:47 +0000
parents 57fd2f36b8cb
children b80f95e24c96
comparison
equal deleted inserted replaced
12129:c1aff21286dd 12130:2ef24558b732
1039 } 1039 }
1040 1040
1041 if(min>minFilterSize) minFilterSize= min; 1041 if(min>minFilterSize) minFilterSize= min;
1042 } 1042 }
1043 1043
1044 if (flags & SWS_CPU_CAPS_ALTIVEC) {
1045 // we can handle the special case 4,
1046 // so we don't want to go to the full 8
1047 if (minFilterSize < 5)
1048 filterAlign = 4;
1049
1050 // we really don't want to waste our time
1051 // doing useless computation, so fall-back on
1052 // the scalar C code for very small filter.
1053 // vectorizing is worth it only if you have
1054 // decent-sized vector.
1055 if (minFilterSize < 3)
1056 filterAlign = 1;
1057 }
1058
1044 ASSERT(minFilterSize > 0) 1059 ASSERT(minFilterSize > 0)
1045 filterSize= (minFilterSize +(filterAlign-1)) & (~(filterAlign-1)); 1060 filterSize= (minFilterSize +(filterAlign-1)) & (~(filterAlign-1));
1046 ASSERT(filterSize > 0) 1061 ASSERT(filterSize > 0)
1047 filter= (double*)memalign(8, filterSize*dstW*sizeof(double)); 1062 filter= (double*)memalign(8, filterSize*dstW*sizeof(double));
1048 *outFilterSize= filterSize; 1063 *outFilterSize= filterSize;
1945 } 1960 }
1946 } 1961 }
1947 1962
1948 /* precalculate horizontal scaler filter coefficients */ 1963 /* precalculate horizontal scaler filter coefficients */
1949 { 1964 {
1950 const int filterAlign= (flags & SWS_CPU_CAPS_MMX) ? 4 : 1; 1965 const int filterAlign=
1966 (flags & SWS_CPU_CAPS_MMX) ? 4 :
1967 (flags & SWS_CPU_CAPS_ALTIVEC) ? 8 :
1968 1;
1951 1969
1952 initFilter(&c->hLumFilter, &c->hLumFilterPos, &c->hLumFilterSize, c->lumXInc, 1970 initFilter(&c->hLumFilter, &c->hLumFilterPos, &c->hLumFilterSize, c->lumXInc,
1953 srcW , dstW, filterAlign, 1<<14, 1971 srcW , dstW, filterAlign, 1<<14,
1954 (flags&SWS_BICUBLIN) ? (flags|SWS_BICUBIC) : flags, 1972 (flags&SWS_BICUBLIN) ? (flags|SWS_BICUBIC) : flags,
1955 srcFilter->lumH, dstFilter->lumH); 1973 srcFilter->lumH, dstFilter->lumH);
1974 } // Init Horizontal stuff 1992 } // Init Horizontal stuff
1975 1993
1976 1994
1977 1995
1978 /* precalculate vertical scaler filter coefficients */ 1996 /* precalculate vertical scaler filter coefficients */
1979 initFilter(&c->vLumFilter, &c->vLumFilterPos, &c->vLumFilterSize, c->lumYInc, 1997 {
1980 srcH , dstH, 1, (1<<12)-4, 1998 const int filterAlign=
1981 (flags&SWS_BICUBLIN) ? (flags|SWS_BICUBIC) : flags, 1999 (flags & SWS_CPU_CAPS_ALTIVEC) ? 8 :
1982 srcFilter->lumV, dstFilter->lumV); 2000 1;
1983 initFilter(&c->vChrFilter, &c->vChrFilterPos, &c->vChrFilterSize, c->chrYInc, 2001
1984 c->chrSrcH, c->chrDstH, 1, (1<<12)-4, 2002 initFilter(&c->vLumFilter, &c->vLumFilterPos, &c->vLumFilterSize, c->lumYInc,
1985 (flags&SWS_BICUBLIN) ? (flags|SWS_BILINEAR) : flags, 2003 srcH , dstH, filterAlign, (1<<12)-4,
1986 srcFilter->chrV, dstFilter->chrV); 2004 (flags&SWS_BICUBLIN) ? (flags|SWS_BICUBIC) : flags,
2005 srcFilter->lumV, dstFilter->lumV);
2006 initFilter(&c->vChrFilter, &c->vChrFilterPos, &c->vChrFilterSize, c->chrYInc,
2007 c->chrSrcH, c->chrDstH, filterAlign, (1<<12)-4,
2008 (flags&SWS_BICUBLIN) ? (flags|SWS_BILINEAR) : flags,
2009 srcFilter->chrV, dstFilter->chrV);
2010 }
1987 2011
1988 // Calculate Buffer Sizes so that they won't run out while handling these damn slices 2012 // Calculate Buffer Sizes so that they won't run out while handling these damn slices
1989 c->vLumBufSize= c->vLumFilterSize; 2013 c->vLumBufSize= c->vLumFilterSize;
1990 c->vChrBufSize= c->vChrFilterSize; 2014 c->vChrBufSize= c->vChrFilterSize;
1991 for(i=0; i<dstH; i++) 2015 for(i=0; i<dstH; i++)