decklinkvideosrc: Add auto value for the connection property

This will use the default/auto connection for video capturing, and can
be set via the Decklink configuration tools.
This commit is contained in:
Sebastian Dröge 2015-01-08 12:17:45 +01:00
parent 478deb4805
commit a35d5ae9b9
3 changed files with 14 additions and 6 deletions

View file

@ -91,6 +91,7 @@ gst_decklink_connection_get_type (void)
{ {
static gsize id = 0; static gsize id = 0;
static const GEnumValue connections[] = { static const GEnumValue connections[] = {
{GST_DECKLINK_CONNECTION_AUTO, "auto", "Auto"},
{GST_DECKLINK_CONNECTION_SDI, "sdi", "SDI"}, {GST_DECKLINK_CONNECTION_SDI, "sdi", "SDI"},
{GST_DECKLINK_CONNECTION_HDMI, "hdmi", "HDMI"}, {GST_DECKLINK_CONNECTION_HDMI, "hdmi", "HDMI"},
{GST_DECKLINK_CONNECTION_OPTICAL_SDI, "optical-sdi", "Optical SDI"}, {GST_DECKLINK_CONNECTION_OPTICAL_SDI, "optical-sdi", "Optical SDI"},
@ -193,8 +194,12 @@ static const BMDVideoConnection connections[] = {
const BMDVideoConnection const BMDVideoConnection
gst_decklink_get_connection (GstDecklinkConnectionEnum e) 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; e = GST_DECKLINK_CONNECTION_SDI;
return connections[e]; return connections[e];
} }

View file

@ -85,6 +85,7 @@ typedef enum {
GType gst_decklink_mode_get_type (void); GType gst_decklink_mode_get_type (void);
typedef enum { typedef enum {
GST_DECKLINK_CONNECTION_AUTO,
GST_DECKLINK_CONNECTION_SDI, GST_DECKLINK_CONNECTION_SDI,
GST_DECKLINK_CONNECTION_HDMI, GST_DECKLINK_CONNECTION_HDMI,
GST_DECKLINK_CONNECTION_OPTICAL_SDI, GST_DECKLINK_CONNECTION_OPTICAL_SDI,

View file

@ -29,6 +29,8 @@
GST_DEBUG_CATEGORY_STATIC (gst_decklink_video_src_debug); GST_DEBUG_CATEGORY_STATIC (gst_decklink_video_src_debug);
#define GST_CAT_DEFAULT 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) #define DEFAULT_BUFFER_SIZE (5)
enum enum
@ -127,14 +129,14 @@ gst_decklink_video_src_class_init (GstDecklinkVideoSrcClass * klass)
g_object_class_install_property (gobject_class, PROP_MODE, g_object_class_install_property (gobject_class, PROP_MODE,
g_param_spec_enum ("mode", "Playback Mode", g_param_spec_enum ("mode", "Playback Mode",
"Video Mode to use for playback", "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 | (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT))); G_PARAM_CONSTRUCT)));
g_object_class_install_property (gobject_class, PROP_CONNECTION, g_object_class_install_property (gobject_class, PROP_CONNECTION,
g_param_spec_enum ("connection", "Connection", g_param_spec_enum ("connection", "Connection",
"Video input connection to use", "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 | (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT))); G_PARAM_CONSTRUCT)));
@ -166,8 +168,8 @@ gst_decklink_video_src_class_init (GstDecklinkVideoSrcClass * klass)
static void static void
gst_decklink_video_src_init (GstDecklinkVideoSrc * self) gst_decklink_video_src_init (GstDecklinkVideoSrc * self)
{ {
self->mode = GST_DECKLINK_MODE_NTSC; self->mode = DEFAULT_MODE;
self->connection = GST_DECKLINK_CONNECTION_SDI; self->connection = DEFAULT_CONNECTION;
self->device_number = 0; self->device_number = 0;
self->buffer_size = DEFAULT_BUFFER_SIZE; self->buffer_size = DEFAULT_BUFFER_SIZE;
@ -425,7 +427,7 @@ gst_decklink_video_src_open (GstDecklinkVideoSrc * self)
return FALSE; return FALSE;
} }
if (self->input->config) { if (self->input->config && self->connection != GST_DECKLINK_CONNECTION_AUTO) {
ret = self->input->config->SetInt (bmdDeckLinkConfigVideoInputConnection, ret = self->input->config->SetInt (bmdDeckLinkConfigVideoInputConnection,
gst_decklink_get_connection (self->connection)); gst_decklink_get_connection (self->connection));
if (ret != S_OK) { if (ret != S_OK) {