diff options
Diffstat (limited to 'common/encode_lavc.c')
-rw-r--r-- | common/encode_lavc.c | 18 |
1 files changed, 10 insertions, 8 deletions
diff --git a/common/encode_lavc.c b/common/encode_lavc.c index 2af93d239f..bf77f04969 100644 --- a/common/encode_lavc.c +++ b/common/encode_lavc.c @@ -731,11 +731,12 @@ static void encoder_destroy(void *ptr) { struct encoder_context *p = ptr; + av_packet_free(&p->pkt); avcodec_free_context(&p->encoder); free_stream(p->twopass_bytebuffer); } -static AVCodec *find_codec_for(struct encode_lavc_context *ctx, +static const AVCodec *find_codec_for(struct encode_lavc_context *ctx, enum stream_type type, bool *used_auto) { char *codec_name = type == STREAM_VIDEO @@ -746,7 +747,7 @@ static AVCodec *find_codec_for(struct encode_lavc_context *ctx, *used_auto = !(codec_name && codec_name[0]); - AVCodec *codec; + const AVCodec *codec; if (*used_auto) { codec = avcodec_find_encoder(av_guess_codec(ctx->oformat, NULL, ctx->options->file, NULL, @@ -797,7 +798,7 @@ struct encoder_context *encoder_context_alloc(struct encode_lavc_context *ctx, }; bool auto_codec; - AVCodec *codec = find_codec_for(ctx, type, &auto_codec); + const AVCodec *codec = find_codec_for(ctx, type, &auto_codec); const char *tname = stream_type_name(type); if (!codec) { @@ -910,6 +911,9 @@ bool encoder_init_codec_and_muxer(struct encoder_context *p, if (avcodec_parameters_from_context(p->info.codecpar, p->encoder) < 0) goto fail; + p->pkt = av_packet_alloc(); + MP_HANDLE_OOM(p->pkt); + encode_lavc_add_stream(p, p->encode_lavc_ctx, &p->info, on_ready, ctx); if (!p->mux_stream) goto fail; @@ -930,11 +934,9 @@ bool encoder_encode(struct encoder_context *p, AVFrame *frame) goto fail; } + AVPacket *packet = p->pkt; for (;;) { - AVPacket packet = {0}; - av_init_packet(&packet); - - status = avcodec_receive_packet(p->encoder, &packet); + status = avcodec_receive_packet(p->encoder, packet); if (status == AVERROR(EAGAIN)) break; if (status < 0 && status != AVERROR_EOF) @@ -948,7 +950,7 @@ bool encoder_encode(struct encoder_context *p, AVFrame *frame) if (status == AVERROR_EOF) break; - encode_lavc_add_packet(p->mux_stream, &packet); + encode_lavc_add_packet(p->mux_stream, packet); } return true; |