Commit f06647fd authored by Sebastian Dröge's avatar Sebastian Dröge 🍵

decklinkaudiosrc: Don't accept packets without timestamps after a discont

We have no idea which timestamps they are supposed to have so the only thing
we can do at this point is to drop them. Packets without timestamps happen if
audio was captured but no corresponding video, which shouldn't happen under
normal circumstances.

https://bugzilla.gnome.org/show_bug.cgi?id=747633
parent 0004920c
......@@ -411,7 +411,8 @@ 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, gboolean discont)
IDeckLinkAudioInputPacket * packet, GstClockTime capture_time,
gboolean discont)
{
GstDecklinkAudioSrc *self = GST_DECKLINK_AUDIO_SRC_CAST (element);
GstDecklinkVideoSrc *videosrc = NULL;
......@@ -470,6 +471,7 @@ gst_decklink_audio_src_create (GstPushSrc * bsrc, GstBuffer ** buffer)
guint64 start_offset, end_offset;
gboolean discont = FALSE;
retry:
g_mutex_lock (&self->lock);
while (g_queue_is_empty (&self->current_packets) && !self->flushing) {
g_cond_wait (&self->cond, &self->lock);
......@@ -489,6 +491,13 @@ gst_decklink_audio_src_create (GstPushSrc * bsrc, GstBuffer ** buffer)
sample_count = p->packet->GetSampleFrameCount ();
data_size = self->info.bpf * sample_count;
if (p->capture_time == GST_CLOCK_TIME_NONE && self->next_offset == (guint64) - 1) {
GST_DEBUG_OBJECT (self, "Got packet without timestamp before initial "
"timestamp after discont - dropping");
capture_packet_free (p);
goto retry;
}
ap = (AudioPacket *) g_malloc0 (sizeof (AudioPacket));
*buffer =
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment