mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2025-02-22 14:06:23 +00:00
videoscale: add more scaling filters
Adjust the filter parameters so that they use the same number of taps and method as the old ones. Add some new filters
This commit is contained in:
parent
b1eb3b7d81
commit
724b83c5f5
2 changed files with 76 additions and 13 deletions
|
@ -130,9 +130,15 @@ gst_video_scale_method_get_type (void)
|
|||
|
||||
static const GEnumValue video_scale_methods[] = {
|
||||
{GST_VIDEO_SCALE_NEAREST, "Nearest Neighbour", "nearest-neighbour"},
|
||||
{GST_VIDEO_SCALE_BILINEAR, "Bilinear", "bilinear"},
|
||||
{GST_VIDEO_SCALE_4TAP, "4-tap", "4-tap"},
|
||||
{GST_VIDEO_SCALE_LANCZOS, "Lanczos (experimental/unstable)", "lanczos"},
|
||||
{GST_VIDEO_SCALE_BILINEAR, "Bilinear (2-tap)", "bilinear"},
|
||||
{GST_VIDEO_SCALE_4TAP, "4-tap Sinc", "4-tap-sinc"},
|
||||
{GST_VIDEO_SCALE_LANCZOS, "Lanczos", "lanczos"},
|
||||
{GST_VIDEO_SCALE_BILINEAR2, "Bilinear (multi-tap)", "bilinear2"},
|
||||
{GST_VIDEO_SCALE_SINC, "Sinc (multi-tap)", "sinc"},
|
||||
{GST_VIDEO_SCALE_HERMITE, "Hermite (multi-tap)", "hermite"},
|
||||
{GST_VIDEO_SCALE_SPLINE, "Spline (multi-tap)", "spline"},
|
||||
{GST_VIDEO_SCALE_CATROM, "Catmull-Rom (multi-tap)", "catrom"},
|
||||
{GST_VIDEO_SCALE_MITCHELL, "Mitchell (multi-tap)", "mitchell"},
|
||||
{0, NULL, NULL},
|
||||
};
|
||||
|
||||
|
@ -509,26 +515,69 @@ gst_video_scale_set_info (GstVideoFilter * filter, GstCaps * in,
|
|||
gst_structure_set (options,
|
||||
GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
|
||||
GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_LINEAR,
|
||||
NULL);
|
||||
GST_VIDEO_RESAMPLER_OPT_MAX_TAPS, G_TYPE_INT, 2, NULL);
|
||||
break;
|
||||
case GST_VIDEO_SCALE_4TAP:
|
||||
gst_structure_set (options,
|
||||
GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
|
||||
GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC,
|
||||
NULL);
|
||||
GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_SINC,
|
||||
GST_VIDEO_RESAMPLER_OPT_MAX_TAPS, G_TYPE_INT, 4, NULL);
|
||||
break;
|
||||
case GST_VIDEO_SCALE_LANCZOS:
|
||||
gst_structure_set (options,
|
||||
GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
|
||||
GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_LANCZOS,
|
||||
GST_VIDEO_RESAMPLER_OPT_ENVELOPE, G_TYPE_DOUBLE,
|
||||
videoscale->envelope, GST_VIDEO_RESAMPLER_OPT_SHARPNESS,
|
||||
G_TYPE_DOUBLE, videoscale->sharpness,
|
||||
GST_VIDEO_RESAMPLER_OPT_SHARPEN, G_TYPE_DOUBLE, videoscale->sharpen,
|
||||
NULL);
|
||||
break;
|
||||
case GST_VIDEO_SCALE_BILINEAR2:
|
||||
gst_structure_set (options,
|
||||
GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
|
||||
GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_LINEAR,
|
||||
NULL);
|
||||
break;
|
||||
case GST_VIDEO_SCALE_SINC:
|
||||
gst_structure_set (options,
|
||||
GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
|
||||
GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_SINC,
|
||||
NULL);
|
||||
break;
|
||||
case GST_VIDEO_SCALE_HERMITE:
|
||||
gst_structure_set (options,
|
||||
GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
|
||||
GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC,
|
||||
GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 0.0,
|
||||
GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 0.0,
|
||||
NULL);
|
||||
break;
|
||||
case GST_VIDEO_SCALE_SPLINE:
|
||||
gst_structure_set (options,
|
||||
GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
|
||||
GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC,
|
||||
GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 1.0,
|
||||
GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 0.0,
|
||||
NULL);
|
||||
break;
|
||||
case GST_VIDEO_SCALE_CATROM:
|
||||
gst_structure_set (options,
|
||||
GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
|
||||
GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC,
|
||||
GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 0.0,
|
||||
GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 0.5,
|
||||
NULL);
|
||||
break;
|
||||
case GST_VIDEO_SCALE_MITCHELL:
|
||||
gst_structure_set (options,
|
||||
GST_VIDEO_CONVERTER_OPT_RESAMPLER_METHOD,
|
||||
GST_TYPE_VIDEO_RESAMPLER_METHOD, GST_VIDEO_RESAMPLER_METHOD_CUBIC,
|
||||
GST_VIDEO_RESAMPLER_OPT_CUBIC_B, G_TYPE_DOUBLE, (gdouble) 1.0 / 3.0,
|
||||
GST_VIDEO_RESAMPLER_OPT_CUBIC_C, G_TYPE_DOUBLE, (gdouble) 1.0 / 3.0,
|
||||
NULL);
|
||||
break;
|
||||
}
|
||||
gst_structure_set (options,
|
||||
GST_VIDEO_RESAMPLER_OPT_ENVELOPE, G_TYPE_DOUBLE, videoscale->envelope,
|
||||
GST_VIDEO_RESAMPLER_OPT_SHARPNESS, G_TYPE_DOUBLE, videoscale->sharpness,
|
||||
GST_VIDEO_RESAMPLER_OPT_SHARPEN, G_TYPE_DOUBLE, videoscale->sharpen,
|
||||
GST_VIDEO_CONVERTER_OPT_DEST_X, G_TYPE_INT, videoscale->borders_w / 2,
|
||||
GST_VIDEO_CONVERTER_OPT_DEST_Y, G_TYPE_INT, videoscale->borders_h / 2,
|
||||
GST_VIDEO_CONVERTER_OPT_DEST_WIDTH, G_TYPE_INT,
|
||||
|
|
|
@ -45,17 +45,31 @@ GST_DEBUG_CATEGORY_EXTERN (video_scale_debug);
|
|||
/**
|
||||
* GstVideoScaleMethod:
|
||||
* @GST_VIDEO_SCALE_NEAREST: use nearest neighbour scaling (fast and ugly)
|
||||
* @GST_VIDEO_SCALE_BILINEAR: use bilinear scaling (slower but prettier).
|
||||
* @GST_VIDEO_SCALE_4TAP: use a 4-tap filter for scaling (slow).
|
||||
* @GST_VIDEO_SCALE_BILINEAR: use 2-tap bilinear scaling (slower but prettier).
|
||||
* @GST_VIDEO_SCALE_4TAP: use a 4-tap sinc filter for scaling (slow).
|
||||
* @GST_VIDEO_SCALE_LANCZOS: use a multitap Lanczos filter for scaling (slow).
|
||||
*
|
||||
* @GST_VIDEO_SCALE_BILINEAR2: use a multitap bilinear filter
|
||||
* @GST_VIDEO_SCALE_SINC: use a multitap sinc filter
|
||||
* @GST_VIDEO_SCALE_HERMITE: use a multitap bicubic Hermite filter
|
||||
* @GST_VIDEO_SCALE_SPLINE: use a multitap bicubic spline filter
|
||||
* @GST_VIDEO_SCALE_CATROM: use a multitap bicubic Catmull-Rom filter
|
||||
* @GST_VIDEO_SCALE_MITCHELL: use a multitap bicubic Mitchell filter
|
||||
*
|
||||
* The videoscale method to use.
|
||||
*/
|
||||
typedef enum {
|
||||
GST_VIDEO_SCALE_NEAREST,
|
||||
GST_VIDEO_SCALE_BILINEAR,
|
||||
GST_VIDEO_SCALE_4TAP,
|
||||
GST_VIDEO_SCALE_LANCZOS
|
||||
GST_VIDEO_SCALE_LANCZOS,
|
||||
|
||||
GST_VIDEO_SCALE_BILINEAR2,
|
||||
GST_VIDEO_SCALE_SINC,
|
||||
GST_VIDEO_SCALE_HERMITE,
|
||||
GST_VIDEO_SCALE_SPLINE,
|
||||
GST_VIDEO_SCALE_CATROM,
|
||||
GST_VIDEO_SCALE_MITCHELL
|
||||
} GstVideoScaleMethod;
|
||||
|
||||
typedef struct _GstVideoScale GstVideoScale;
|
||||
|
|
Loading…
Reference in a new issue