audioencoder: Don't try to get buffers from an empty adapter
authorSebastian Dröge <sebastian@centricular.com>
Thu, 2 Jul 2015 11:15:58 +0000 (13:15 +0200)
committerSebastian Dröge <sebastian@centricular.com>
Thu, 2 Jul 2015 11:16:15 +0000 (13:16 +0200)
gst-libs/gst/audio/gstaudioencoder.c

index 6c87eaf..911960b 100644 (file)
@@ -805,25 +805,30 @@ gst_audio_encoder_finish_frame (GstAudioEncoder * enc, GstBuffer * buf,
     }
     /* advance sample view */
     if (G_UNLIKELY (samples * ctx->info.bpf > priv->offset)) {
+      guint avail = gst_adapter_available (priv->adapter);
+
       if (G_LIKELY (!priv->force)) {
         /* we should have received EOS to enable force */
         goto overflow;
       } else {
         priv->offset = 0;
-        if (samples * ctx->info.bpf >= gst_adapter_available (priv->adapter)) {
-          inbuf =
-              gst_adapter_take_buffer_fast (priv->adapter,
-              gst_adapter_available (priv->adapter));
+        if (avail > 0 && samples * ctx->info.bpf >= avail) {
+          inbuf = gst_adapter_take_buffer_fast (priv->adapter, avail);
           gst_adapter_clear (priv->adapter);
-        } else {
+        } else if (avail > 0) {
           inbuf =
               gst_adapter_take_buffer_fast (priv->adapter,
               samples * ctx->info.bpf);
         }
       }
     } else {
-      inbuf =
-          gst_adapter_take_buffer_fast (priv->adapter, samples * ctx->info.bpf);
+      guint avail = gst_adapter_available (priv->adapter);
+
+      if (avail > 0) {
+        inbuf =
+            gst_adapter_take_buffer_fast (priv->adapter,
+            samples * ctx->info.bpf);
+      }
       priv->offset -= samples * ctx->info.bpf;
       /* avoid subsequent stray prev_ts */
       if (G_UNLIKELY (gst_adapter_available (priv->adapter) == 0))