summaryrefslogtreecommitdiff
path: root/sys/decklink/gstdecklinkaudiosrc.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'sys/decklink/gstdecklinkaudiosrc.cpp')
-rw-r--r--sys/decklink/gstdecklinkaudiosrc.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/decklink/gstdecklinkaudiosrc.cpp b/sys/decklink/gstdecklinkaudiosrc.cpp
index 1171ff368..6360c2a72 100644
--- a/sys/decklink/gstdecklinkaudiosrc.cpp
+++ b/sys/decklink/gstdecklinkaudiosrc.cpp
@@ -57,6 +57,7 @@ typedef struct
{
IDeckLinkAudioInputPacket *packet;
GstClockTime capture_time;
+ gboolean discont;
} CapturePacket;
static void
@@ -411,7 +412,7 @@ gst_decklink_audio_src_get_caps (GstBaseSrc * bsrc, GstCaps * filter)
static void
gst_decklink_audio_src_got_packet (GstElement * element,
- IDeckLinkAudioInputPacket * packet, GstClockTime capture_time)
+ IDeckLinkAudioInputPacket * packet, GstClockTime capture_time, gboolean discont)
{
GstDecklinkAudioSrc *self = GST_DECKLINK_AUDIO_SRC_CAST (element);
GstDecklinkVideoSrc *videosrc = NULL;
@@ -447,6 +448,7 @@ gst_decklink_audio_src_got_packet (GstElement * element,
p = (CapturePacket *) g_malloc0 (sizeof (CapturePacket));
p->packet = packet;
p->capture_time = capture_time;
+ p->discont = discont;
packet->AddRef ();
g_queue_push_tail (&self->current_packets, p);
g_cond_signal (&self->cond);
@@ -501,6 +503,7 @@ gst_decklink_audio_src_create (GstPushSrc * bsrc, GstBuffer ** buffer)
ap->input->AddRef ();
timestamp = p->capture_time;
+ discont = p->discont;
// Jitter and discontinuity handling, based on audiobasesrc
start_time = timestamp;
@@ -515,7 +518,7 @@ gst_decklink_audio_src_create (GstPushSrc * bsrc, GstBuffer ** buffer)
duration = end_time - start_time;
- if (self->next_offset == (guint64) - 1) {
+ if (discont || self->next_offset == (guint64) - 1) {
discont = TRUE;
} else {
guint64 diff, max_sample_diff;