summaryrefslogtreecommitdiff
path: root/gst
diff options
context:
space:
mode:
authorNicola Murino <nicola.murino@gmail.com>2018-11-26 16:37:40 +0100
committerNicola Murino <nicola.murino@gmail.com>2018-12-14 18:43:49 +0100
commitfa7da2fb16876993c95da3c3be14bb953754b85e (patch)
tree46f01c62017b1f3d0a4f46bc757f59f8be00f5b2 /gst
parent50a84f8d7bb14cda704a23ca7ad2231ee99201b0 (diff)
downloadgstreamer-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.c24
-rw-r--r--gst/removesilence/gstremovesilence.h1
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 {