mirror of
https://gitlab.freedesktop.org/gstreamer/gstreamer.git
synced 2024-12-19 06:46:38 +00:00
va: basedec: Always select first available format.
If the stream chroma doesn't match with any video format in the source caps template (generated from va config surface formats) instead of return unknown, return the first available format in the template, assuming that the driver would be capable to do color conversions. Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/2404>
This commit is contained in:
parent
260c085a59
commit
4c97ffeafb
1 changed files with 11 additions and 4 deletions
|
@ -695,6 +695,8 @@ gst_va_base_dec_class_init (GstVaBaseDecClass * klass, GstVaCodecs codec,
|
||||||
"DRM device path", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
"DRM device path", NULL, G_PARAM_READABLE | G_PARAM_STATIC_STRINGS));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* XXX: if chroma has not an available format, the first format is
|
||||||
|
* returned, relying on an hypothetical internal CSC */
|
||||||
static GstVideoFormat
|
static GstVideoFormat
|
||||||
_find_video_format_from_chroma (const GValue * formats, guint chroma_type)
|
_find_video_format_from_chroma (const GValue * formats, guint chroma_type)
|
||||||
{
|
{
|
||||||
|
@ -705,19 +707,24 @@ _find_video_format_from_chroma (const GValue * formats, guint chroma_type)
|
||||||
return GST_VIDEO_FORMAT_UNKNOWN;
|
return GST_VIDEO_FORMAT_UNKNOWN;
|
||||||
|
|
||||||
if (G_VALUE_HOLDS_STRING (formats)) {
|
if (G_VALUE_HOLDS_STRING (formats)) {
|
||||||
fmt = gst_video_format_from_string (g_value_get_string (formats));
|
return gst_video_format_from_string (g_value_get_string (formats));
|
||||||
if (gst_va_chroma_from_video_format (fmt) == chroma_type)
|
|
||||||
return fmt;
|
|
||||||
} else if (GST_VALUE_HOLDS_LIST (formats)) {
|
} else if (GST_VALUE_HOLDS_LIST (formats)) {
|
||||||
|
GValue *val, *first_val = NULL;
|
||||||
|
|
||||||
num_values = gst_value_list_get_size (formats);
|
num_values = gst_value_list_get_size (formats);
|
||||||
for (i = 0; i < num_values; i++) {
|
for (i = 0; i < num_values; i++) {
|
||||||
const GValue *val = gst_value_list_get_value (formats, i);
|
val = (GValue *) gst_value_list_get_value (formats, i);
|
||||||
if (!val)
|
if (!val)
|
||||||
continue;
|
continue;
|
||||||
|
if (!first_val)
|
||||||
|
first_val = val;
|
||||||
fmt = gst_video_format_from_string (g_value_get_string (val));
|
fmt = gst_video_format_from_string (g_value_get_string (val));
|
||||||
if (gst_va_chroma_from_video_format (fmt) == chroma_type)
|
if (gst_va_chroma_from_video_format (fmt) == chroma_type)
|
||||||
return fmt;
|
return fmt;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (first_val)
|
||||||
|
return gst_video_format_from_string (g_value_get_string (first_val));
|
||||||
}
|
}
|
||||||
|
|
||||||
return GST_VIDEO_FORMAT_UNKNOWN;
|
return GST_VIDEO_FORMAT_UNKNOWN;
|
||||||
|
|
Loading…
Reference in a new issue