audioencoder: Don't try to get buffers from an empty adapter

This commit is contained in:
Sebastian Dröge 2015-07-02 13:15:58 +02:00
parent f5eebb27a2
commit 56add20dc7

View file

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