diff options
author | Michael Niedermayer <michaelni@gmx.at> | 2004-06-06 13:46:50 +0000 |
---|---|---|
committer | Michael Niedermayer <michaelni@gmx.at> | 2004-06-06 13:46:50 +0000 |
commit | fdce4f3132f52f5ea550637694f70e037e8a8c3d (patch) | |
tree | a51062331044f8442387dd492de55b541ace11c0 | |
parent | 305fa2644533cde5eda783dd352b4620582774b4 (diff) | |
download | ffmpeg-fdce4f3132f52f5ea550637694f70e037e8a8c3d.tar.gz |
cubic filter instead of truncated sinc
looks much better for upscaling & scaling where src and dst size are quite similar
Originally committed as revision 3201 to svn://svn.ffmpeg.org/ffmpeg/trunk
-rw-r--r-- | libavcodec/imgresample.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/libavcodec/imgresample.c b/libavcodec/imgresample.c index 14fdb1059e..dc5ccf93bd 100644 --- a/libavcodec/imgresample.c +++ b/libavcodec/imgresample.c @@ -554,12 +554,18 @@ static void build_filter(int16_t *filter, float factor) for(ph=0;ph<NB_PHASES;ph++) { norm = 0; for(i=0;i<NB_TAPS;i++) { - +#if 1 + const float d= -0.5; //first order derivative = -0.5 + x = fabs(((float)(i - FCENTER) - (float)ph / NB_PHASES) * factor); + if(x<1.0) y= 1 - 3*x*x + 2*x*x*x + d*( -x*x + x*x*x); + else y= d*(-4 + 8*x - 5*x*x + x*x*x); +#else x = M_PI * ((float)(i - FCENTER) - (float)ph / NB_PHASES) * factor; if (x == 0) y = 1.0; else y = sin(x) / x; +#endif tab[i] = y; norm += y; } |