mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-24 01:00:37 +00:00
vaapipostproc: set interlace mode
if the vaapipostproc is configured to not do deinterlacing, the interlace-mode in the src caps should be the same as the input caps. https://bugzilla.gnome.org/show_bug.cgi?id=777395
This commit is contained in:
parent
42df9ba98c
commit
d8abbd7652
2 changed files with 31 additions and 1 deletions
|
@ -68,7 +68,7 @@ static const char gst_vaapipostproc_src_caps_str[] =
|
||||||
GST_VAAPI_MAKE_GLTEXUPLOAD_CAPS "; "
|
GST_VAAPI_MAKE_GLTEXUPLOAD_CAPS "; "
|
||||||
#endif
|
#endif
|
||||||
GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) ", "
|
GST_VIDEO_CAPS_MAKE (GST_VIDEO_FORMATS_ALL) ", "
|
||||||
GST_CAPS_INTERLACED_FALSE;
|
GST_CAPS_INTERLACED_MODES;
|
||||||
/* *INDENT-ON* */
|
/* *INDENT-ON* */
|
||||||
|
|
||||||
/* *INDENT-OFF* */
|
/* *INDENT-OFF* */
|
||||||
|
|
|
@ -585,6 +585,28 @@ _set_colorimetry (GstVaapiPostproc * postproc, GstVideoFormat format,
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static gboolean
|
||||||
|
_set_interlace_mode (GstVaapiPostproc * postproc, GstVideoInfo * vinfo,
|
||||||
|
GstStructure * outs)
|
||||||
|
{
|
||||||
|
const gchar *interlace_mode = NULL;
|
||||||
|
|
||||||
|
if (is_deinterlace_enabled (postproc, vinfo)) {
|
||||||
|
interlace_mode = "progressive";
|
||||||
|
} else {
|
||||||
|
interlace_mode =
|
||||||
|
gst_video_interlace_mode_to_string (GST_VIDEO_INFO_INTERLACE_MODE
|
||||||
|
(vinfo));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!interlace_mode)
|
||||||
|
return FALSE;
|
||||||
|
|
||||||
|
gst_structure_set (outs, "interlace-mode", G_TYPE_STRING, interlace_mode,
|
||||||
|
NULL);
|
||||||
|
return TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
static gboolean
|
static gboolean
|
||||||
_set_preferred_format (GstStructure * outs, GstVideoFormat format)
|
_set_preferred_format (GstStructure * outs, GstVideoFormat format)
|
||||||
{
|
{
|
||||||
|
@ -649,6 +671,9 @@ _get_preferred_caps (GstVaapiPostproc * postproc, GstVideoInfo * vinfo,
|
||||||
if (f == GST_VAAPI_CAPS_FEATURE_SYSTEM_MEMORY)
|
if (f == GST_VAAPI_CAPS_FEATURE_SYSTEM_MEMORY)
|
||||||
_set_colorimetry (postproc, format, structure);
|
_set_colorimetry (postproc, format, structure);
|
||||||
|
|
||||||
|
if (!_set_interlace_mode (postproc, vinfo, structure))
|
||||||
|
goto interlace_mode_failed;
|
||||||
|
|
||||||
outcaps = gst_caps_new_empty ();
|
outcaps = gst_caps_new_empty ();
|
||||||
gst_caps_append_structure_full (outcaps, structure,
|
gst_caps_append_structure_full (outcaps, structure,
|
||||||
gst_caps_features_copy (features));
|
gst_caps_features_copy (features));
|
||||||
|
@ -673,6 +698,11 @@ invalid_caps:
|
||||||
GST_WARNING_OBJECT (postproc, "No valid src caps found");
|
GST_WARNING_OBJECT (postproc, "No valid src caps found");
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
interlace_mode_failed:
|
||||||
|
{
|
||||||
|
GST_WARNING_OBJECT (postproc, "Invalid sink caps interlace mode");
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
Loading…
Reference in a new issue