video-converter: Use interlaced scalers for vertical scaling if needed

Without this, scaling e.g. interlaced UYVY causes corrupted output with
lines as follows: f1 f1 f2 f2, i.e. two lines of each field and only
then the other field.
This commit is contained in:
Sebastian Dröge 2019-10-21 16:43:02 +03:00
parent f2b3e9b4a1
commit 565b797f57

View file

@ -5935,6 +5935,7 @@ setup_scale (GstVideoConverter * convert)
GstVideoInfo *in_info, *out_info;
const GstVideoFormatInfo *in_finfo, *out_finfo;
GstVideoFormat in_format, out_format;
gboolean interlaced;
guint n_threads = convert->conversion_runner->n_threads;
in_info = &convert->in_info;
@ -5945,6 +5946,8 @@ setup_scale (GstVideoConverter * convert)
n_planes = GST_VIDEO_INFO_N_PLANES (out_info);
interlaced = GST_VIDEO_INFO_IS_INTERLACED (&convert->in_info);
method = GET_OPT_RESAMPLER_METHOD (convert);
if (method == GST_VIDEO_RESAMPLER_METHOD_NEAREST)
cr_method = method;
@ -6039,7 +6042,9 @@ setup_scale (GstVideoConverter * convert)
for (j = 0; j < n_threads; j++) {
convert->fv_scaler[0].scaler[j] =
gst_video_scaler_new (method, GST_VIDEO_SCALER_FLAG_NONE, taps,
gst_video_scaler_new (method,
interlaced ?
GST_VIDEO_SCALER_FLAG_INTERLACED : GST_VIDEO_SCALER_FLAG_NONE, taps,
in_height, out_height, convert->config);
}
} else {
@ -6193,7 +6198,9 @@ setup_scale (GstVideoConverter * convert)
for (j = 0; j < n_threads; j++) {
convert->fv_scaler[i].scaler[j] =
gst_video_scaler_new (resample_method, GST_VIDEO_SCALER_FLAG_NONE,
gst_video_scaler_new (resample_method,
interlaced ?
GST_VIDEO_SCALER_FLAG_INTERLACED : GST_VIDEO_SCALER_FLAG_NONE,
taps, ih, oh, config);
}
} else {