#define DEFAULT_OPT_SHARPNESS 1.0
#define DEFAULT_OPT_SHARPEN 0.0
-#define DEFAULT_OPT_MAX_TAPS 16
+#define DEFAULT_OPT_MAX_TAPS 128
typedef struct _ResamplerParams ResamplerParams;
GST_DEBUG ("%d %u %u->%u", method, n_taps, in_size, out_size);
max_taps = GET_OPT_MAX_TAPS (options);
+ n_taps = CLAMP (n_taps, 0, max_taps);
switch (method) {
case GST_VIDEO_RESAMPLER_METHOD_NEAREST:
break;
case GST_VIDEO_RESAMPLER_METHOD_LANCZOS:
{
- gdouble resample_inc = in_size / (gdouble) out_size;
params.envelope = GET_OPT_ENVELOPE (options);
params.sharpness = GET_OPT_SHARPNESS (options);
params.sharpen = GET_OPT_SHARPEN (options);
- if (resample_inc > 1.0) {
- params.fx = (1.0 / resample_inc) * params.sharpness;
- } else {
- params.fx = (1.0) * params.sharpness;
+ if (n_taps == 0) {
+ gdouble resample_inc = in_size / (gdouble) out_size;
+
+ if (resample_inc > 1.0) {
+ params.fx = (1.0 / resample_inc) * params.sharpness;
+ } else {
+ params.fx = (1.0) * params.sharpness;
+ }
+ params.ex = params.fx / params.envelope;
+ params.dx = ceil (params.envelope / params.fx);
+
+ n_taps = CLAMP (2 * params.dx, 0, max_taps);
}
- params.ex = params.fx / params.envelope;
- params.dx = ceil (params.envelope / params.fx);
+ params.fx = 2.0 * params.envelope / n_taps;
+ params.ex = 2.0 / n_taps;
- if (n_taps == 0)
- n_taps = 2 * params.dx;
params.get_tap = get_lanczos_tap;
break;
}
break;
}
- n_taps = CLAMP (n_taps, 0, max_taps);
-
if (n_taps > in_size)
n_taps = in_size;