diff --git a/sys/decklink/gstdecklink.cpp b/sys/decklink/gstdecklink.cpp index fed5f3056f..b691cf3d1c 100644 --- a/sys/decklink/gstdecklink.cpp +++ b/sys/decklink/gstdecklink.cpp @@ -91,6 +91,7 @@ gst_decklink_connection_get_type (void) { static gsize id = 0; static const GEnumValue connections[] = { + {GST_DECKLINK_CONNECTION_AUTO, "auto", "Auto"}, {GST_DECKLINK_CONNECTION_SDI, "sdi", "SDI"}, {GST_DECKLINK_CONNECTION_HDMI, "hdmi", "HDMI"}, {GST_DECKLINK_CONNECTION_OPTICAL_SDI, "optical-sdi", "Optical SDI"}, @@ -193,8 +194,12 @@ static const BMDVideoConnection connections[] = { const BMDVideoConnection gst_decklink_get_connection (GstDecklinkConnectionEnum e) { - if (e < GST_DECKLINK_CONNECTION_SDI || e > GST_DECKLINK_CONNECTION_SVIDEO) + g_return_val_if_fail (e != GST_DECKLINK_CONNECTION_AUTO, + bmdVideoConnectionSDI); + + if (e <= GST_DECKLINK_CONNECTION_AUTO || e > GST_DECKLINK_CONNECTION_SVIDEO) e = GST_DECKLINK_CONNECTION_SDI; + return connections[e]; } diff --git a/sys/decklink/gstdecklink.h b/sys/decklink/gstdecklink.h index 80e6348fc6..8b4f5887a4 100644 --- a/sys/decklink/gstdecklink.h +++ b/sys/decklink/gstdecklink.h @@ -85,6 +85,7 @@ typedef enum { GType gst_decklink_mode_get_type (void); typedef enum { + GST_DECKLINK_CONNECTION_AUTO, GST_DECKLINK_CONNECTION_SDI, GST_DECKLINK_CONNECTION_HDMI, GST_DECKLINK_CONNECTION_OPTICAL_SDI, diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp index 103bd5f4a0..2f3f74e9a4 100644 --- a/sys/decklink/gstdecklinkvideosrc.cpp +++ b/sys/decklink/gstdecklinkvideosrc.cpp @@ -29,6 +29,8 @@ GST_DEBUG_CATEGORY_STATIC (gst_decklink_video_src_debug); #define GST_CAT_DEFAULT gst_decklink_video_src_debug +#define DEFAULT_MODE (GST_DECKLINK_MODE_NTSC) +#define DEFAULT_CONNECTION (GST_DECKLINK_CONNECTION_AUTO) #define DEFAULT_BUFFER_SIZE (5) enum @@ -127,14 +129,14 @@ gst_decklink_video_src_class_init (GstDecklinkVideoSrcClass * klass) g_object_class_install_property (gobject_class, PROP_MODE, g_param_spec_enum ("mode", "Playback Mode", "Video Mode to use for playback", - GST_TYPE_DECKLINK_MODE, GST_DECKLINK_MODE_NTSC, + GST_TYPE_DECKLINK_MODE, DEFAULT_MODE, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT))); g_object_class_install_property (gobject_class, PROP_CONNECTION, g_param_spec_enum ("connection", "Connection", "Video input connection to use", - GST_TYPE_DECKLINK_CONNECTION, GST_DECKLINK_CONNECTION_SDI, + GST_TYPE_DECKLINK_CONNECTION, DEFAULT_CONNECTION, (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | G_PARAM_CONSTRUCT))); @@ -166,8 +168,8 @@ gst_decklink_video_src_class_init (GstDecklinkVideoSrcClass * klass) static void gst_decklink_video_src_init (GstDecklinkVideoSrc * self) { - self->mode = GST_DECKLINK_MODE_NTSC; - self->connection = GST_DECKLINK_CONNECTION_SDI; + self->mode = DEFAULT_MODE; + self->connection = DEFAULT_CONNECTION; self->device_number = 0; self->buffer_size = DEFAULT_BUFFER_SIZE; @@ -425,7 +427,7 @@ gst_decklink_video_src_open (GstDecklinkVideoSrc * self) return FALSE; } - if (self->input->config) { + if (self->input->config && self->connection != GST_DECKLINK_CONNECTION_AUTO) { ret = self->input->config->SetInt (bmdDeckLinkConfigVideoInputConnection, gst_decklink_get_connection (self->connection)); if (ret != S_OK) {