summaryrefslogtreecommitdiffstats
path: root/common/encode_lavc.c
diff options
context:
space:
mode:
Diffstat (limited to 'common/encode_lavc.c')
-rw-r--r--common/encode_lavc.c18
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;