decklink: Add connection type

This commit is contained in:
David Schleef 2011-06-20 00:38:05 -07:00
parent bb4844b29e
commit 16a49a3617
4 changed files with 65 additions and 12 deletions

View file

@ -47,6 +47,27 @@ gst_decklink_mode_get_type (void)
return type; return type;
} }
GType
gst_decklink_connection_get_type (void)
{
static GType type;
if (!type) {
static const GEnumValue connections[] = {
{GST_DECKLINK_CONNECTION_SDI, "sdi", "SDI"},
{GST_DECKLINK_CONNECTION_HDMI, "hdmi", "HDMI"},
{GST_DECKLINK_CONNECTION_OPTICAL_SDI, "optical-sdi", "Optical SDI"},
{GST_DECKLINK_CONNECTION_COMPONENT, "component", "Component"},
{GST_DECKLINK_CONNECTION_COMPOSITE, "composite", "Composite"},
{GST_DECKLINK_CONNECTION_SVIDEO, "svideo", "S-Video"},
{0, NULL, NULL}
};
type = g_enum_register_static ("GstDecklinkConnection", connections);
}
return type;
}
static const GstDecklinkMode modes[] = { static const GstDecklinkMode modes[] = {
{bmdModeNTSC, 720, 486, 30000, 1001, true}, {bmdModeNTSC, 720, 486, 30000, 1001, true},
{bmdModePAL, 720, 576, 25, 1, true}, {bmdModePAL, 720, 576, 25, 1, true},

View file

@ -35,6 +35,16 @@ typedef enum {
#define GST_TYPE_DECKLINK_MODE (gst_decklink_mode_get_type ()) #define GST_TYPE_DECKLINK_MODE (gst_decklink_mode_get_type ())
GType gst_decklink_mode_get_type (void); GType gst_decklink_mode_get_type (void);
typedef enum {
GST_DECKLINK_CONNECTION_SDI,
GST_DECKLINK_CONNECTION_HDMI,
GST_DECKLINK_CONNECTION_OPTICAL_SDI,
GST_DECKLINK_CONNECTION_COMPONENT,
GST_DECKLINK_CONNECTION_COMPOSITE,
GST_DECKLINK_CONNECTION_SVIDEO
} GstDecklinkConnectionEnum;
#define GST_TYPE_DECKLINK_CONNECTION (gst_decklink_connection_get_type ())
GType gst_decklink_connection_get_type (void);
typedef struct _GstDecklinkMode GstDecklinkMode; typedef struct _GstDecklinkMode GstDecklinkMode;
struct _GstDecklinkMode { struct _GstDecklinkMode {

View file

@ -119,7 +119,7 @@ enum
{ {
PROP_0, PROP_0,
PROP_MODE, PROP_MODE,
PROP_OPTICAL PROP_CONNECTION
}; };
/* pad templates */ /* pad templates */
@ -189,9 +189,9 @@ gst_decklink_src_class_init (GstDecklinkSrcClass * klass)
(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_OPTICAL, g_object_class_install_property (gobject_class, PROP_CONNECTION,
g_param_spec_boolean ("optical", "Optical", "Optical", g_param_spec_enum ("connection", "Connection", "Connection",
TRUE, GST_TYPE_DECKLINK_CONNECTION, GST_DECKLINK_CONNECTION_SDI,
(GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS | (GParamFlags) (G_PARAM_READWRITE | G_PARAM_STATIC_STRINGS |
G_PARAM_CONSTRUCT))); G_PARAM_CONSTRUCT)));
} }
@ -286,8 +286,9 @@ gst_decklink_src_set_property (GObject * object, guint property_id,
case PROP_MODE: case PROP_MODE:
decklinksrc->mode = (GstDecklinkModeEnum) g_value_get_enum (value); decklinksrc->mode = (GstDecklinkModeEnum) g_value_get_enum (value);
break; break;
case PROP_OPTICAL: case PROP_CONNECTION:
decklinksrc->optical = g_value_get_boolean (value); decklinksrc->connection =
(GstDecklinkConnectionEnum) g_value_get_enum (value);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -308,8 +309,8 @@ gst_decklink_src_get_property (GObject * object, guint property_id,
case PROP_MODE: case PROP_MODE:
g_value_set_enum (value, decklinksrc->mode); g_value_set_enum (value, decklinksrc->mode);
break; break;
case PROP_OPTICAL: case PROP_CONNECTION:
g_value_set_boolean (value, decklinksrc->optical); g_value_set_enum (value, decklinksrc->connection);
break; break;
default: default:
G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec); G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
@ -380,6 +381,7 @@ gst_decklink_src_start (GstElement * element)
HRESULT ret; HRESULT ret;
const GstDecklinkMode *mode; const GstDecklinkMode *mode;
IDeckLinkConfiguration *config; IDeckLinkConfiguration *config;
BMDVideoConnection conn;
GST_DEBUG_OBJECT (decklinksrc, "start"); GST_DEBUG_OBJECT (decklinksrc, "start");
@ -413,9 +415,29 @@ gst_decklink_src_start (GstElement * element)
return FALSE; return FALSE;
} }
ret = config->SetInt (bmdDeckLinkConfigVideoInputConnection, switch (decklinksrc->connection) {
decklinksrc->optical ? bmdVideoConnectionOpticalSDI : default:
bmdVideoConnectionSDI); case GST_DECKLINK_CONNECTION_SDI:
conn = bmdVideoConnectionSDI;
break;
case GST_DECKLINK_CONNECTION_HDMI:
conn = bmdVideoConnectionHDMI;
break;
case GST_DECKLINK_CONNECTION_OPTICAL_SDI:
conn = bmdVideoConnectionOpticalSDI;
break;
case GST_DECKLINK_CONNECTION_COMPONENT:
conn = bmdVideoConnectionComponent;
break;
case GST_DECKLINK_CONNECTION_COMPOSITE:
conn = bmdVideoConnectionComposite;
break;
case GST_DECKLINK_CONNECTION_SVIDEO:
conn = bmdVideoConnectionSVideo;
break;
}
ret = config->SetInt (bmdDeckLinkConfigVideoInputConnection, conn);
if (ret != S_OK) { if (ret != S_OK) {
GST_ERROR ("set configuration (input source)"); GST_ERROR ("set configuration (input source)");
return FALSE; return FALSE;

View file

@ -71,7 +71,7 @@ struct _GstDecklinkSrc
/* properties */ /* properties */
gboolean copy_data; gboolean copy_data;
GstDecklinkModeEnum mode; GstDecklinkModeEnum mode;
gboolean optical; GstDecklinkConnectionEnum connection;
}; };
struct _GstDecklinkSrcClass struct _GstDecklinkSrcClass