summaryrefslogtreecommitdiff
path: root/libavcodec
diff options
context:
space:
mode:
authorMichael Niedermayer <michaelni@gmx.at>2004-06-06 13:46:50 +0000
committerMichael Niedermayer <michaelni@gmx.at>2004-06-06 13:46:50 +0000
commitfdce4f3132f52f5ea550637694f70e037e8a8c3d (patch)
treea51062331044f8442387dd492de55b541ace11c0 /libavcodec
parent305fa2644533cde5eda783dd352b4620582774b4 (diff)
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
Diffstat (limited to 'libavcodec')
-rw-r--r--libavcodec/imgresample.c8
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;
}