spectrum: avoid unneccesary extra fft runs
authorStefan Kost <ensonic@users.sf.net>
Thu, 10 Mar 2011 12:15:42 +0000 (14:15 +0200)
committerStefan Kost <ensonic@users.sf.net>
Thu, 10 Mar 2011 12:15:42 +0000 (14:15 +0200)
Before it was possible that we run an extra fft when the time for sending a new
message is due. Only do this if we have not run the fft for the interval at all.

gst/spectrum/gstspectrum.c

index d09fbbe..ab3a556 100644 (file)
@@ -986,10 +986,9 @@ gst_spectrum_transform_ip (GstBaseTransform * trans, GstBuffer * buffer)
           );
 
       /* If we have enough frames for an FFT or we have all frames required for
-       * the interval run an FFT. In the last case we probably take the
-       * FFT of frames that we already handled.
-       */
-      if ((spectrum->num_frames % nfft == 0) || have_full_interval) {
+       * the interval and we haven't run a FFT, then run an FFT */
+      if ((spectrum->num_frames % nfft == 0) ||
+          (have_full_interval && !spectrum->num_fft)) {
         gst_spectrum_run_fft (spectrum, cd, input_pos);
         spectrum->num_fft++;
       }
@@ -1050,10 +1049,9 @@ gst_spectrum_transform_ip (GstBaseTransform * trans, GstBuffer * buffer)
           );
 
       /* If we have enough frames for an FFT or we have all frames required for
-       * the interval run an FFT. In the last case we probably take the
-       * FFT of frames that we already handled.
-       */
-      if ((spectrum->num_frames % nfft == 0) || have_full_interval) {
+       * the interval and we haven't run a FFT, then run an FFT */
+      if ((spectrum->num_frames % nfft == 0) ||
+          (have_full_interval && !spectrum->num_fft)) {
         for (c = 0; c < channels; c++) {
           cd = &spectrum->channel_data[c];
           gst_spectrum_run_fft (spectrum, cd, input_pos);