PROP_CONNECTOR_PROPS,
PROP_PLANE_PROPS,
PROP_FD,
+ PROP_SKIP_VSYNC,
PROP_N,
};
sync_frame:
/* Wait for the previous frame to complete redraw */
- if (!gst_kms_sink_sync (self)) {
+ if (!self->skip_vsync && !gst_kms_sink_sync (self)) {
GST_OBJECT_UNLOCK (self);
goto bail;
}
case PROP_FD:
_validate_and_set_external_fd (sink, g_value_get_int (value));
break;
+ case PROP_SKIP_VSYNC:
+ sink->skip_vsync = g_value_get_boolean (value);
+ break;
default:
if (!gst_video_overlay_set_property (object, PROP_N, prop_id, value))
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
case PROP_FD:
g_value_set_int (value, sink->fd);
break;
+ case PROP_SKIP_VSYNC:
+ g_value_set_boolean (value, sink->skip_vsync);
+ break;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, prop_id, pspec);
break;
gst_poll_fd_init (&sink->pollfd);
sink->poll = gst_poll_new (TRUE);
gst_video_info_init (&sink->vinfo);
+ sink->skip_vsync = FALSE;
}
static void
"DRM file descriptor", -1, G_MAXINT, -1,
G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT);
+ /**
+ * kmssink:skip-vsync:
+ *
+ * For some cases, to suppress internal vsync, which can drop framerate
+ * in half, set this to 1.
+ *
+ * Since: 1.22
+ */
+ g_properties[PROP_SKIP_VSYNC] =
+ g_param_spec_boolean ("skip-vsync", "Skip Internal VSync",
+ "When enabled will not wait internally for vsync. "
+ "Should be used for atomic drivers to avoid double vsync.", FALSE,
+ G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT);
+
g_object_class_install_properties (gobject_class, PROP_N, g_properties);
gst_video_overlay_install_properties (gobject_class, PROP_N);