[longomatch] nle: let audiorate fill the audio silence gaps correctly
- From: Andoni Morales Alastruey <amorales src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [longomatch] nle: let audiorate fill the audio silence gaps correctly
- Date: Sat, 4 Jan 2014 12:58:55 +0000 (UTC)
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]