[longomatch] nle: let audiorate fill the audio silence gaps correctly



commit 634d317894e4e317c3569cc644b6ece4d7c29759
Author: Andoni Morales Alastruey <ylatuya gmail com>
Date:   Sat Jan 4 13:58:16 2014 +0100

    nle: let audiorate fill the audio silence gaps correctly

 libcesarplayer/gst-nle-source.c |   38 +++++++++++++++++++++++++++++---------
 1 files changed, 29 insertions(+), 9 deletions(-)
---
diff --git a/libcesarplayer/gst-nle-source.c b/libcesarplayer/gst-nle-source.c
index 0c1bbf7..e723688 100644
--- a/libcesarplayer/gst-nle-source.c
+++ b/libcesarplayer/gst-nle-source.c
@@ -327,6 +327,23 @@ gst_nle_source_push_buffer (GstNleSource * nlesrc, GstBuffer * buf,
   }
 }
 
+static GstBuffer *
+gst_nle_source_audio_silence_buf (GstNleSource *nlesrc, guint64 start,
+    guint64 duration)
+{
+  GstBuffer *buf;
+  GstCaps *caps;
+
+  buf = gst_buffer_new_and_alloc (BITS_PER_SAMPLE / 8 * duration / GST_SECOND);
+  memset (GST_BUFFER_DATA (buf), '\0', GST_BUFFER_SIZE (buf));
+  GST_BUFFER_TIMESTAMP (buf) = start;
+  GST_BUFFER_DURATION (buf) = duration;
+  caps = gst_nle_source_get_audio_caps (nlesrc);
+  gst_buffer_set_caps (buf, caps);
+  gst_caps_unref (caps);
+  return buf;
+}
+
 static void
 gst_nle_source_no_more_pads (GstElement * element, GstNleSource * nlesrc)
 {
@@ -335,9 +352,7 @@ gst_nle_source_no_more_pads (GstElement * element, GstNleSource * nlesrc)
   if (nlesrc->with_audio && !nlesrc->audio_linked) {
     GstBuffer *buf;
     GstNleSrcItem *item;
-    GstCaps *caps;
     guint64 duration;
-    guint bps = BITS_PER_SAMPLE / 8;
 
     GST_INFO_OBJECT (nlesrc, "Pushing dummy audio buffer");
 
@@ -350,14 +365,19 @@ gst_nle_source_no_more_pads (GstElement * element, GstNleSource * nlesrc)
     }
     item = (GstNleSrcItem *) g_list_nth_data (nlesrc->queue, nlesrc->index);
     duration = item->duration / item->rate;
-    buf = gst_buffer_new_and_alloc (bps * duration / GST_SECOND);
-    /* Generate silence */
-    memset (GST_BUFFER_DATA (buf), 0, GST_BUFFER_SIZE (buf));
-    GST_BUFFER_TIMESTAMP (buf) = item->start;
-    caps = gst_nle_source_get_audio_caps (nlesrc);
-    gst_buffer_set_caps (buf, caps);
-    gst_caps_unref (caps);
 
+    /* Push the start buffer and last 2 ones and let audiorate fill the gap */
+    buf = gst_nle_source_audio_silence_buf (nlesrc, item->start, 20 * GST_MSECOND);
+    gst_nle_source_push_buffer (nlesrc, buf, TRUE);
+
+    buf = gst_nle_source_audio_silence_buf (nlesrc,
+        item->start + duration - 40 * GST_MSECOND,
+        20 * GST_MSECOND);
+    gst_nle_source_push_buffer (nlesrc, buf, TRUE);
+
+    buf = gst_nle_source_audio_silence_buf (nlesrc,
+        item->start + duration - 20 * GST_MSECOND,
+        20 * GST_MSECOND);
     gst_nle_source_push_buffer (nlesrc, buf, TRUE);
   }
 }


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]