gtkglsink: Avoid assertion when applying "auto" rotation method

Guard against the orientation not coming from an inexistant tag, nor
from the application (rotation set to "auto") which caused an assertion.

When the application requests the auto rotation method, make sure it is
resolved to a rotation that's applicable.

ERROR:gstreamer/subprojects/gst-plugins-good/ext/gtk/gtkgstglwidget.c:745:gtk_gst_gl_widget_set_rotate_method: code should not be reached

Fixes: 103ceb853a
Part-of: <https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1134>
This commit is contained in:
Bastien Nocera 2021-10-13 10:38:07 +02:00 committed by GStreamer Marge Bot
parent c3455def2e
commit e1271c0d9c

View file

@ -693,6 +693,9 @@ gtk_gst_gl_widget_set_rotate_method (GtkGstGLWidget * gst_widget,
if (method == GST_VIDEO_ORIENTATION_CUSTOM) {
GST_WARNING_OBJECT (gst_widget, "unsupported custom orientation");
return;
} else if (method == GST_VIDEO_ORIENTATION_AUTO && from_tag) {
GST_WARNING_OBJECT (gst_widget, "auto orientation cannot come from a tag");
return;
}
GTK_GST_BASE_WIDGET_LOCK (gst_widget);
@ -706,6 +709,12 @@ gtk_gst_gl_widget_set_rotate_method (GtkGstGLWidget * gst_widget,
else
method = priv->rotate_method;
/* We can't apply an AUTO orientation if we don't have an
* orientation coming from a tag, so reset to identity */
if (method != priv->current_rotate_method &&
method == GST_VIDEO_ORIENTATION_AUTO)
method = GST_VIDEO_ORIENTATION_IDENTITY;
if (method != priv->current_rotate_method) {
GST_DEBUG ("Changing method from %d to %d",
priv->current_rotate_method, method);