diff options
Diffstat (limited to 'gst-libs/gst')
-rw-r--r-- | gst-libs/gst/vaapi/gstvaapidisplay.c | 20 |
1 files changed, 18 insertions, 2 deletions
diff --git a/gst-libs/gst/vaapi/gstvaapidisplay.c b/gst-libs/gst/vaapi/gstvaapidisplay.c index 985c2811..96a72094 100644 --- a/gst-libs/gst/vaapi/gstvaapidisplay.c +++ b/gst-libs/gst/vaapi/gstvaapidisplay.c @@ -609,6 +609,7 @@ gst_vaapi_display_create(GstVaapiDisplay *display) for (i = 0; i < n; i++) { VADisplayAttribute * const attr = &display_attrs[i]; GstVaapiProperty prop; + gint value; GST_DEBUG(" %s", string_of_VADisplayAttributeType(attr->type)); @@ -645,9 +646,24 @@ gst_vaapi_display_create(GstVaapiDisplay *display) /* Assume the attribute is really supported if we can get the * actual and current value */ + if (!get_attribute(display, attr->type, &value)) + continue; + + /* Some drivers (e.g. EMGD) have completely random initial + * values. So try to reset sensible ones */ + if (value < attr->min_value || value > attr->max_value) { + gint v; + if (!(attr->flags & VA_DISPLAY_ATTRIB_SETTABLE)) + continue; + if (!set_attribute(display, attr->type, attr->value)) + continue; + if (!get_attribute(display, attr->type, &v) || v != value) + continue; + } + prop.attribute = *attr; - if (get_attribute(display, attr->type, &prop.old_value)) - g_array_append_val(priv->properties, prop); + prop.old_value = value; + g_array_append_val(priv->properties, prop); } /* VA image formats */ |