audioresample: after a reset, recalculate the ouput size
authorWim Taymans <wtaymans@redhat.com>
Tue, 19 Jul 2016 16:20:57 +0000 (18:20 +0200)
committerWim Taymans <wtaymans@redhat.com>
Tue, 19 Jul 2016 16:20:57 +0000 (18:20 +0200)
After we reset the resampler, there is no history anymore in the resampler
and the previously calculated output size is no longer valid.
Recalculate the new output size after a reset to make sure we don't try
to convert too much.

gst/audioresample/gstaudioresample.c

index a7ba000..df6782b 100644 (file)
@@ -846,8 +846,16 @@ gst_audio_resample_transform (GstBaseTransform * base, GstBuffer * inbuf,
    * flag to resync timestamp and offset counters and send event
    * downstream */
   if (G_UNLIKELY (gst_audio_resample_check_discont (resample, inbuf))) {
+    gsize size;
+    gint bpf = GST_AUDIO_INFO_BPF (&resample->in);
+
     gst_audio_resample_reset_state (resample);
     resample->need_discont = TRUE;
+
+    /* need to recalculate the output size */
+    size = gst_buffer_get_size (inbuf) / bpf;
+    size = gst_audio_converter_get_out_frames (resample->converter, size);
+    gst_buffer_set_size (outbuf, size * bpf);
   }
 
   /* handle discontinuity */