Created
March 3, 2016 19:07
-
-
Save anonymous/4134e375bffdc4052819 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
diff --git a/gstdvbaudiosink.c b/gstdvbaudiosink.c | |
index 3a92624..c8a24e4 100644 | |
--- a/gstdvbaudiosink.c | |
+++ b/gstdvbaudiosink.c | |
@@ -911,7 +911,7 @@ static gboolean gst_dvbaudiosink_event(GstBaseSink *sink, GstEvent *event) | |
pos = segment->position; | |
#endif | |
GST_DEBUG_OBJECT(self, "GST_EVENT_NEWSEGMENT rate=%f %d\n", rate, format); | |
- | |
+ GST_DEBUG_OBJECT (self, "configured segment %" GST_SEGMENT_FORMAT, segment); | |
if (format == GST_FORMAT_TIME) | |
{ | |
self->timestamp_offset = start - pos; | |
diff --git a/gstdvbvideosink.c b/gstdvbvideosink.c | |
index f8cd1a5..54ea2f0 100644 | |
--- a/gstdvbvideosink.c | |
+++ b/gstdvbvideosink.c | |
@@ -339,6 +339,7 @@ static void gst_dvbvideosink_init(GstDVBVideoSink *self, GstDVBVideoSinkClass *g | |
static void gst_dvbvideosink_init(GstDVBVideoSink *self) | |
#endif | |
{ | |
+ self->wait_for_keyframe = FALSE; | |
self->must_send_header = TRUE; | |
self->h264_nal_len_size = 0; | |
self->pesheader_buffer = NULL; | |
@@ -456,6 +457,7 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event) | |
queue_pop(&self->queue); | |
} | |
self->flushing = FALSE; | |
+ self->wait_for_keyframe = TRUE; | |
GST_OBJECT_UNLOCK(self); | |
break; | |
case GST_EVENT_EOS: | |
@@ -531,6 +533,7 @@ static gboolean gst_dvbvideosink_event(GstBaseSink *sink, GstEvent *event) | |
pos = segment->position; | |
#endif | |
GST_DEBUG_OBJECT(self, "GST_EVENT_NEWSEGMENT rate=%f\n", rate); | |
+ GST_DEBUG_OBJECT (self, "configured segment %" GST_SEGMENT_FORMAT, segment); | |
if (format == GST_FORMAT_TIME) | |
{ | |
self->timestamp_offset = start - pos; | |
@@ -750,6 +753,16 @@ static GstFlowReturn gst_dvbvideosink_render(GstBaseSink *sink, GstBuffer *buffe | |
{ | |
return GST_FLOW_OK; | |
} | |
+ if (self->wait_for_keyframe) | |
+ { | |
+ if (GST_BUFFER_FLAG_IS_SET(buffer, GST_BUFFER_FLAG_DELTA_UNIT)) | |
+ { | |
+ GST_DEBUG_OBJECT(self, "dropping non-keyframe buffer"); | |
+ return GST_FLOW_OK; | |
+ } | |
+ else | |
+ self->wait_for_keyframe = FALSE; | |
+ } | |
#if GST_VERSION_MAJOR < 1 | |
pes_header = GST_BUFFER_DATA(self->pesheader_buffer); | |
diff --git a/gstdvbvideosink.h b/gstdvbvideosink.h | |
index c889e24..a0f0d55 100644 | |
--- a/gstdvbvideosink.h | |
+++ b/gstdvbvideosink.h | |
@@ -109,6 +109,7 @@ struct _GstDVBVideoSink | |
char saved_fallback_framerate[16]; | |
+ gboolean wait_for_keyframe; | |
gdouble rate; | |
gboolean playing, paused, flushing, unlocking; | |
gboolean pts_written; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment