diff --git a/encode_lavc.c b/encode_lavc.c index e38ca5bca8..66f434410a 100644 --- a/encode_lavc.c +++ b/encode_lavc.c @@ -233,15 +233,21 @@ int encode_lavc_start(struct encode_lavc_context *ctx) for (i = 0; i < ctx->avc->nb_streams; ++i) if (ctx->avc->streams[i]->codec->codec_type == AVMEDIA_TYPE_VIDEO) break; - if (i >= ctx->avc->nb_streams) + if (i >= ctx->avc->nb_streams) { + encode_lavc_fail(ctx, + "encode-lavc: video stream missing, invalid codec?\n"); return 0; + } } if (ctx->expect_audio) { for (i = 0; i < ctx->avc->nb_streams; ++i) if (ctx->avc->streams[i]->codec->codec_type == AVMEDIA_TYPE_AUDIO) break; - if (i >= ctx->avc->nb_streams) + if (i >= ctx->avc->nb_streams) { + encode_lavc_fail(ctx, + "encode-lavc: audio stream missing, invalid codec?\n"); return 0; + } } ctx->header_written = -1; diff --git a/libao2/ao_lavc.c b/libao2/ao_lavc.c index d4523f0d54..6aab53e291 100644 --- a/libao2/ao_lavc.c +++ b/libao2/ao_lavc.c @@ -293,6 +293,14 @@ static int encode(struct ao *ao, double apts, void *data); static void uninit(struct ao *ao, bool cut_audio) { struct priv *ac = ao->priv; + struct encode_lavc_context *ectx = ao->encode_lavc_ctx; + + if (!encode_lavc_start(ectx)) { + mp_msg(MSGT_ENCODE, MSGL_WARN, + "ao-lavc: not even ready to encode audio at end -> dropped"); + return; + } + if (ac->buffer) { double pts = ao->pts + ac->offset / (double) ao->samplerate; if (ao->buffer.len > 0) { @@ -455,7 +463,8 @@ static int play(struct ao *ao, void *data, int len, int flags) len /= ac->sample_size * ao->channels; if (!encode_lavc_start(ectx)) { - mp_msg(MSGT_ENCODE, MSGL_WARN, "ao-lavc: NOTE: deferred initial audio frame (probably because video is not there yet)\n"); + mp_msg(MSGT_ENCODE, MSGL_WARN, + "ao-lavc: not ready yet for encoding audio\n"); return 0; } if (pts == MP_NOPTS_VALUE) {