]> git.sesse.net Git - ffmpeg/blobdiff - libavfilter/af_afftfilt.c
lavfi/sidedata: add missed frame side data type
[ffmpeg] / libavfilter / af_afftfilt.c
index d5e3b7f5001a87f365779b169f52e20c1c76fde4..8518f08dc5eb5238abe1e5d81a6e5d8794ea8f8d 100644 (file)
@@ -142,6 +142,7 @@ static int config_input(AVFilterLink *inlink)
     char *args;
     const char *last_expr = "1";
 
+    s->pts  = AV_NOPTS_VALUE;
     s->fft  = av_fft_init(s->fft_bits, 0);
     s->ifft = av_fft_init(s->fft_bits, 1);
     if (!s->fft || !s->ifft)
@@ -251,6 +252,9 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
     int ch, n, ret, i, j, k;
     int start = s->start, end = s->end;
 
+    if (s->pts == AV_NOPTS_VALUE)
+        s->pts = frame->pts;
+
     ret = av_audio_fifo_write(s->fifo, (void **)frame->extended_data, frame->nb_samples);
     av_frame_free(&frame);
     if (ret < 0)
@@ -287,17 +291,20 @@ static int filter_frame(AVFilterLink *inlink, AVFrame *frame)
         values[VAR_NBBINS]      = window_size / 2;
         values[VAR_CHANNELS]    = inlink->channels;
 
+        for (ch = 0; ch < inlink->channels; ch++) {
+            FFTComplex *fft_data = s->fft_data[ch];
+
+            av_fft_permute(s->fft, fft_data);
+            av_fft_calc(s->fft, fft_data);
+        }
+
         for (ch = 0; ch < inlink->channels; ch++) {
             FFTComplex *fft_data = s->fft_data[ch];
             FFTComplex *fft_temp = s->fft_temp[ch];
             float *buf = (float *)s->buffer->extended_data[ch];
             int x;
-
             values[VAR_CHANNEL] = ch;
 
-            av_fft_permute(s->fft, fft_data);
-            av_fft_calc(s->fft, fft_data);
-
             for (n = 0; n <= window_size / 2; n++) {
                 float fr, fi;