Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in
Toggle navigation
G
gst-plugins-bad
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Labels
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Commits
Open sidebar
Justin Kim
gst-plugins-bad
Commits
a563cbbc
Commit
a563cbbc
authored
Oct 04, 2017
by
Sebastian Dröge
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
decklink: Add read-only property to read the device serial number
https://bugzilla.gnome.org/show_bug.cgi?id=788510
parent
739d488c
Changes
6
Hide whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
80 additions
and
3 deletions
+80
-3
sys/decklink/gstdecklink.cpp
sys/decklink/gstdecklink.cpp
+12
-0
sys/decklink/gstdecklink.h
sys/decklink/gstdecklink.h
+5
-0
sys/decklink/gstdecklinkaudiosink.cpp
sys/decklink/gstdecklinkaudiosink.cpp
+19
-1
sys/decklink/gstdecklinkaudiosrc.cpp
sys/decklink/gstdecklinkaudiosrc.cpp
+14
-0
sys/decklink/gstdecklinkvideosink.cpp
sys/decklink/gstdecklinkvideosink.cpp
+15
-1
sys/decklink/gstdecklinkvideosrc.cpp
sys/decklink/gstdecklinkvideosrc.cpp
+15
-1
No files found.
sys/decklink/gstdecklink.cpp
View file @
a563cbbc
...
...
@@ -1232,6 +1232,18 @@ init_devices (gpointer data)
if
(
ret
!=
S_OK
)
{
GST_WARNING
(
"selected device does not have config interface: 0x%08lx"
,
(
unsigned
long
)
ret
);
}
else
{
char
*
serial_number
;
ret
=
devices
[
i
].
input
.
config
->
GetString
(
bmdDeckLinkConfigDeviceInformationSerialNumber
,
(
COMSTR_T
*
)
&
serial_number
);
CONVERT_COM_STRING
(
serial_number
);
devices
[
i
].
output
.
hw_serial_number
=
g_strdup
(
serial_number
);
devices
[
i
].
input
.
hw_serial_number
=
g_strdup
(
serial_number
);
GST_DEBUG
(
"device %d has serial number %s"
,
i
,
serial_number
);
FREE_COM_STRING
(
serial_number
);
}
ret
=
decklink
->
QueryInterface
(
IID_IDeckLinkAttributes
,
...
...
sys/decklink/gstdecklink.h
View file @
a563cbbc
...
...
@@ -209,6 +209,9 @@ struct _GstDecklinkOutput {
IDeckLinkOutput
*
output
;
IDeckLinkAttributes
*
attributes
;
IDeckLinkKeyer
*
keyer
;
gchar
*
hw_serial_number
;
GstClock
*
clock
;
GstClockTime
clock_start_time
,
clock_last_time
,
clock_epoch
;
GstClockTimeDiff
clock_offset
;
...
...
@@ -238,6 +241,8 @@ struct _GstDecklinkInput {
IDeckLinkConfiguration
*
config
;
IDeckLinkAttributes
*
attributes
;
gchar
*
hw_serial_number
;
/* Everything below protected by mutex */
GMutex
lock
;
...
...
sys/decklink/gstdecklinkaudiosink.cpp
View file @
a563cbbc
...
...
@@ -487,6 +487,8 @@ gst_decklink_audio_sink_ringbuffer_open_device (GstAudioRingBuffer * rb)
return
FALSE
;
}
g_object_notify
(
G_OBJECT
(
self
->
sink
),
"hw-serial-number"
);
gst_decklink_output_set_audio_clock
(
self
->
output
,
GST_AUDIO_BASE_SINK_CAST
(
self
->
sink
)
->
provided_clock
);
...
...
@@ -514,7 +516,8 @@ gst_decklink_audio_sink_ringbuffer_close_device (GstAudioRingBuffer * rb)
enum
{
PROP_0
,
PROP_DEVICE_NUMBER
PROP_DEVICE_NUMBER
,
PROP_HW_SERIAL_NUMBER
};
static
GstStaticPadTemplate
sink_template
=
GST_STATIC_PAD_TEMPLATE
(
"sink"
,
...
...
@@ -570,6 +573,11 @@ gst_decklink_audio_sink_class_init (GstDecklinkAudioSinkClass * klass)
(
GParamFlags
)
(
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
|
G_PARAM_CONSTRUCT
)));
g_object_class_install_property
(
gobject_class
,
PROP_HW_SERIAL_NUMBER
,
g_param_spec_string
(
"hw-serial-number"
,
"Hardware serial number"
,
"The serial number (hardware ID) of the Decklink card"
,
NULL
,
(
GParamFlags
)
(
G_PARAM_READABLE
|
G_PARAM_STATIC_STRINGS
)));
gst_element_class_add_static_pad_template
(
element_class
,
&
sink_template
);
gst_element_class_set_static_metadata
(
element_class
,
"Decklink Audio Sink"
,
...
...
@@ -619,6 +627,16 @@ gst_decklink_audio_sink_get_property (GObject * object, guint property_id,
case
PROP_DEVICE_NUMBER
:
g_value_set_int
(
value
,
self
->
device_number
);
break
;
case
PROP_HW_SERIAL_NUMBER
:{
GstDecklinkAudioSinkRingBuffer
*
buf
=
GST_DECKLINK_AUDIO_SINK_RING_BUFFER_CAST
(
GST_AUDIO_BASE_SINK_CAST
(
self
)
->
ringbuffer
);
if
(
buf
&&
buf
->
output
)
g_value_set_string
(
value
,
buf
->
output
->
hw_serial_number
);
else
g_value_set_string
(
value
,
NULL
);
break
;
}
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID
(
object
,
property_id
,
pspec
);
break
;
...
...
sys/decklink/gstdecklinkaudiosrc.cpp
View file @
a563cbbc
...
...
@@ -45,6 +45,7 @@ enum
PROP_DISCONT_WAIT
,
PROP_BUFFER_SIZE
,
PROP_CHANNELS
,
PROP_HW_SERIAL_NUMBER
};
static
GstStaticPadTemplate
sink_template
=
GST_STATIC_PAD_TEMPLATE
(
"src"
,
...
...
@@ -184,6 +185,11 @@ gst_decklink_audio_src_class_init (GstDecklinkAudioSrcClass * klass)
(
GParamFlags
)
(
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
|
G_PARAM_CONSTRUCT
)));
g_object_class_install_property
(
gobject_class
,
PROP_HW_SERIAL_NUMBER
,
g_param_spec_string
(
"hw-serial-number"
,
"Hardware serial number"
,
"The serial number (hardware ID) of the Decklink card"
,
NULL
,
(
GParamFlags
)
(
G_PARAM_READABLE
|
G_PARAM_STATIC_STRINGS
)));
gst_element_class_add_static_pad_template
(
element_class
,
&
sink_template
);
gst_element_class_set_static_metadata
(
element_class
,
"Decklink Audio Source"
,
...
...
@@ -271,6 +277,12 @@ gst_decklink_audio_src_get_property (GObject * object, guint property_id,
case
PROP_CHANNELS
:
g_value_set_enum
(
value
,
self
->
channels
);
break
;
case
PROP_HW_SERIAL_NUMBER
:
if
(
self
->
input
)
g_value_set_string
(
value
,
self
->
input
->
hw_serial_number
);
else
g_value_set_string
(
value
,
NULL
);
break
;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID
(
object
,
property_id
,
pspec
);
break
;
...
...
@@ -792,6 +804,8 @@ gst_decklink_audio_src_open (GstDecklinkAudioSrc * self)
return
FALSE
;
}
g_object_notify
(
G_OBJECT
(
self
),
"hw-serial-number"
);
g_mutex_lock
(
&
self
->
input
->
lock
);
if
(
self
->
channels
>
0
)
{
self
->
channels_found
=
self
->
channels
;
...
...
sys/decklink/gstdecklinkvideosink.cpp
View file @
a563cbbc
...
...
@@ -122,7 +122,8 @@ enum
PROP_VIDEO_FORMAT
,
PROP_TIMECODE_FORMAT
,
PROP_KEYER_MODE
,
PROP_KEYER_LEVEL
PROP_KEYER_LEVEL
,
PROP_HW_SERIAL_NUMBER
};
static
void
gst_decklink_video_sink_set_property
(
GObject
*
object
,
...
...
@@ -243,6 +244,11 @@ gst_decklink_video_sink_class_init (GstDecklinkVideoSinkClass * klass)
(
GParamFlags
)
(
G_PARAM_READWRITE
|
G_PARAM_STATIC_STRINGS
|
G_PARAM_CONSTRUCT
)));
g_object_class_install_property
(
gobject_class
,
PROP_HW_SERIAL_NUMBER
,
g_param_spec_string
(
"hw-serial-number"
,
"Hardware serial number"
,
"The serial number (hardware ID) of the Decklink card"
,
NULL
,
(
GParamFlags
)
(
G_PARAM_READABLE
|
G_PARAM_STATIC_STRINGS
)));
templ_caps
=
gst_decklink_mode_get_template_caps
(
FALSE
);
templ_caps
=
gst_caps_make_writable
(
templ_caps
);
/* For output we support any framerate and only really care about timestamps */
...
...
@@ -346,6 +352,12 @@ gst_decklink_video_sink_get_property (GObject * object, guint property_id,
case
PROP_KEYER_LEVEL
:
g_value_set_int
(
value
,
self
->
keyer_level
);
break
;
case
PROP_HW_SERIAL_NUMBER
:
if
(
self
->
output
)
g_value_set_string
(
value
,
self
->
output
->
hw_serial_number
);
else
g_value_set_string
(
value
,
NULL
);
break
;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID
(
object
,
property_id
,
pspec
);
break
;
...
...
@@ -762,6 +774,8 @@ gst_decklink_video_sink_open (GstBaseSink * bsink)
return
FALSE
;
}
g_object_notify
(
G_OBJECT
(
self
),
"hw-serial-number"
);
mode
=
gst_decklink_get_mode
(
self
->
mode
);
g_assert
(
mode
!=
NULL
);
...
...
sys/decklink/gstdecklinkvideosrc.cpp
View file @
a563cbbc
...
...
@@ -48,7 +48,8 @@ enum
PROP_OUTPUT_STREAM_TIME
,
PROP_SKIP_FIRST_TIME
,
PROP_DROP_NO_SIGNAL_FRAMES
,
PROP_SIGNAL
PROP_SIGNAL
,
PROP_HW_SERIAL_NUMBER
};
typedef
struct
...
...
@@ -211,6 +212,11 @@ gst_decklink_video_src_class_init (GstDecklinkVideoSrcClass * klass)
"True if there is a valid input signal available"
,
FALSE
,
(
GParamFlags
)
(
G_PARAM_READABLE
|
G_PARAM_STATIC_STRINGS
)));
g_object_class_install_property
(
gobject_class
,
PROP_HW_SERIAL_NUMBER
,
g_param_spec_string
(
"hw-serial-number"
,
"Hardware serial number"
,
"The serial number (hardware ID) of the Decklink card"
,
NULL
,
(
GParamFlags
)
(
G_PARAM_READABLE
|
G_PARAM_STATIC_STRINGS
)));
templ_caps
=
gst_decklink_mode_get_template_caps
(
TRUE
);
gst_element_class_add_pad_template
(
element_class
,
gst_pad_template_new
(
"src"
,
GST_PAD_SRC
,
GST_PAD_ALWAYS
,
templ_caps
));
...
...
@@ -359,6 +365,12 @@ gst_decklink_video_src_get_property (GObject * object, guint property_id,
case
PROP_SIGNAL
:
g_value_set_boolean
(
value
,
!
self
->
no_signal
);
break
;
case
PROP_HW_SERIAL_NUMBER
:
if
(
self
->
input
)
g_value_set_string
(
value
,
self
->
input
->
hw_serial_number
);
else
g_value_set_string
(
value
,
NULL
);
break
;
default:
G_OBJECT_WARN_INVALID_PROPERTY_ID
(
object
,
property_id
,
pspec
);
break
;
...
...
@@ -970,6 +982,8 @@ gst_decklink_video_src_open (GstDecklinkVideoSrc * self)
return
FALSE
;
}
g_object_notify
(
G_OBJECT
(
self
),
"hw-serial-number"
);
mode
=
gst_decklink_get_mode
(
self
->
mode
);
g_assert
(
mode
!=
NULL
);
g_mutex_lock
(
&
self
->
input
->
lock
);
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment