level: calculate the message-intervall when it changes
authorStefan Kost <ensonic@users.sf.net>
Sat, 31 Oct 2009 22:29:24 +0000 (00:29 +0200)
committerStefan Kost <ensonic@users.sf.net>
Sat, 31 Oct 2009 22:31:48 +0000 (00:31 +0200)
gst/level/gstlevel.c
gst/level/gstlevel.h

index 0d93428..b8b99dc 100644 (file)
@@ -281,6 +281,10 @@ gst_level_set_property (GObject * object, guint prop_id,
       break;
     case PROP_SIGNAL_INTERVAL:
       filter->interval = g_value_get_uint64 (value);
+      if (filter->rate) {
+        filter->interval_frames =
+            GST_CLOCK_TIME_TO_FRAMES (filter->interval, filter->rate);
+      }
       break;
     case PROP_PEAK_TTL:
       filter->decay_peak_ttl =
@@ -483,6 +487,9 @@ gst_level_set_caps (GstBaseTransform * trans, GstCaps * in, GstCaps * out)
     filter->decay_peak_age[i] = G_GUINT64_CONSTANT (0);
   }
 
+  filter->interval_frames =
+      GST_CLOCK_TIME_TO_FRAMES (filter->interval, filter->rate);
+
   return TRUE;
 }
 
@@ -648,8 +655,7 @@ gst_level_transform_ip (GstBaseTransform * trans, GstBuffer * in)
   filter->num_frames += num_frames;
 
   /* do we need to message ? */
-  if (filter->num_frames >=
-      GST_CLOCK_TIME_TO_FRAMES (filter->interval, filter->rate)) {
+  if (filter->num_frames >= filter->interval_frames) {
     if (filter->message) {
       GstMessage *m;
       GstClockTime duration =
index d8c06a2..32d4c9e 100644 (file)
@@ -67,6 +67,7 @@ struct _GstLevel {
   gdouble decay_peak_falloff;   /* falloff in dB/sec */
   gint num_frames;              /* frame count (1 sample per channel)
                                  * since last emit */
+  gint interval_frames;         /* after how many frame to sent a message */
   GstClockTime message_ts;      /* starttime for next message */
 
   /* per-channel arrays for intermediate values */