diff options
author | Nicola Murino <nicola.murino@gmail.com> | 2018-11-26 16:37:40 +0100 |
---|---|---|
committer | Nicola Murino <nicola.murino@gmail.com> | 2018-12-14 18:43:49 +0100 |
commit | fa7da2fb16876993c95da3c3be14bb953754b85e (patch) | |
tree | 46f01c62017b1f3d0a4f46bc757f59f8be00f5b2 /gst | |
parent | 50a84f8d7bb14cda704a23ca7ad2231ee99201b0 (diff) | |
download | gstreamer-plugins-bad-fa7da2fb16876993c95da3c3be14bb953754b85e.tar.gz |
removesilence: post bus messages when silence is detected/finished
Closes #63
Diffstat (limited to 'gst')
-rw-r--r-- | gst/removesilence/gstremovesilence.c | 24 | ||||
-rw-r--r-- | gst/removesilence/gstremovesilence.h | 1 |
2 files changed, 25 insertions, 0 deletions
diff --git a/gst/removesilence/gstremovesilence.c b/gst/removesilence/gstremovesilence.c index 84ef6cf42..a51038edf 100644 --- a/gst/removesilence/gstremovesilence.c +++ b/gst/removesilence/gstremovesilence.c @@ -155,6 +155,7 @@ gst_remove_silence_init (GstRemoveSilence * filter) filter->remove = FALSE; filter->squash = FALSE; filter->ts_offset = 0; + filter->silence_detected = FALSE; if (!filter->vad) { GST_DEBUG ("Error initializing VAD !!"); @@ -233,6 +234,17 @@ gst_remove_silence_transform_ip (GstBaseTransform * trans, GstBuffer * inbuf) if (frame_type == VAD_SILENCE) { GST_DEBUG ("Silence detected"); + if (!filter->silence_detected) { + if (GST_BUFFER_PTS_IS_VALID (inbuf)) { + GstStructure *s; + GstMessage *m; + s = gst_structure_new ("removesilence", "silence_detected", + G_TYPE_UINT64, GST_BUFFER_PTS (inbuf) - filter->ts_offset, NULL); + m = gst_message_new_element (GST_OBJECT (filter), s); + gst_element_post_message (GST_ELEMENT (filter), m); + } + filter->silence_detected = TRUE; + } if (filter->remove) { GST_DEBUG ("Removing silence"); @@ -246,6 +258,18 @@ gst_remove_silence_transform_ip (GstBaseTransform * trans, GstBuffer * inbuf) return GST_BASE_TRANSFORM_FLOW_DROPPED; } + } else { + if (filter->silence_detected) { + if (GST_BUFFER_PTS_IS_VALID (inbuf)) { + GstStructure *s; + GstMessage *m; + s = gst_structure_new ("removesilence", "silence_finished", + G_TYPE_UINT64, GST_BUFFER_PTS (inbuf) - filter->ts_offset, NULL); + m = gst_message_new_element (GST_OBJECT (filter), s); + gst_element_post_message (GST_ELEMENT (filter), m); + } + filter->silence_detected = FALSE; + } } if (filter->squash && filter->ts_offset > 0) { diff --git a/gst/removesilence/gstremovesilence.h b/gst/removesilence/gstremovesilence.h index 4276ba8eb..1d1ef233f 100644 --- a/gst/removesilence/gstremovesilence.h +++ b/gst/removesilence/gstremovesilence.h @@ -46,6 +46,7 @@ typedef struct _GstRemoveSilence { gboolean remove; gboolean squash; guint64 ts_offset; + gboolean silence_detected; } GstRemoveSilence; typedef struct _GstRemoveSilenceClass { |