summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/decklink/gstdecklinkvideosrc.cpp18
-rw-r--r--sys/decklink/gstdecklinkvideosrc.h1
2 files changed, 19 insertions, 0 deletions
diff --git a/sys/decklink/gstdecklinkvideosrc.cpp b/sys/decklink/gstdecklinkvideosrc.cpp
index 0e8103406..059487d12 100644
--- a/sys/decklink/gstdecklinkvideosrc.cpp
+++ b/sys/decklink/gstdecklinkvideosrc.cpp
@@ -203,6 +203,7 @@ gst_decklink_video_src_init (GstDecklinkVideoSrc * self)
self->buffer_size = DEFAULT_BUFFER_SIZE;
self->video_format = GST_DECKLINK_VIDEO_FORMAT_AUTO;
self->timecode_format = bmdTimecodeRP188Any;
+ self->no_signal = FALSE;
gst_base_src_set_live (GST_BASE_SRC (self), TRUE);
gst_base_src_set_format (GST_BASE_SRC (self), GST_FORMAT_TIME);
@@ -579,6 +580,7 @@ gst_decklink_video_src_create (GstPushSrc * bsrc, GstBuffer ** buffer)
CaptureFrame *f;
GstCaps *caps;
gboolean caps_changed = FALSE;
+ BMDFrameFlags flags;
g_mutex_lock (&self->lock);
while (g_queue_is_empty (&self->current_frames) && !self->flushing) {
@@ -655,6 +657,21 @@ gst_decklink_video_src_create (GstPushSrc * bsrc, GstBuffer ** buffer)
vf->input = self->input->input;
vf->input->AddRef ();
+ flags = f->frame->GetFlags();
+ if (flags & bmdFrameHasNoInputSource) {
+ if (!self->no_signal) {
+ self->no_signal = TRUE;
+ GST_ELEMENT_WARNING (GST_ELEMENT (self), RESOURCE, READ, ("No signal"),
+ ("No input source was detected - video frames invalid"));
+ }
+ } else {
+ if (self->no_signal) {
+ self->no_signal = FALSE;
+ GST_ELEMENT_INFO (GST_ELEMENT (self), RESOURCE, READ, ("Signal found"),
+ ("Input source detected"));
+ }
+ }
+
GST_BUFFER_TIMESTAMP (*buffer) = f->capture_time;
GST_BUFFER_DURATION (*buffer) = f->capture_duration;
gst_buffer_add_video_time_code_meta (*buffer, f->tc);
@@ -926,6 +943,7 @@ gst_decklink_video_src_change_state (GstElement * element,
self->input->clock_epoch += self->input->clock_last_time;
self->input->clock_last_time = 0;
self->input->clock_offset = 0;
+ self->no_signal = FALSE;
g_mutex_unlock (&self->input->lock);
gst_decklink_video_src_stop (self);
diff --git a/sys/decklink/gstdecklinkvideosrc.h b/sys/decklink/gstdecklinkvideosrc.h
index b1e7351cc..8c7f38a42 100644
--- a/sys/decklink/gstdecklinkvideosrc.h
+++ b/sys/decklink/gstdecklinkvideosrc.h
@@ -66,6 +66,7 @@ struct _GstDecklinkVideoSrc
GMutex lock;
gboolean flushing;
GQueue current_frames;
+ gboolean no_signal;
guint buffer_size;