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 */
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 {
guint avail = gst_adapter_available (priv->adapter);
if (avail > 0) {
inbuf =
gst_adapter_take_buffer_fast (priv->adapter, samples * ctx->info.bpf);
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))