Do not call avcodec_close()

The documentation of avcodec_close() says:

> Do not use this function. Use avcodec_free_context() to destroy a
> codec context (either open or closed).

It was deprecated in FFmpeg 7 by commit
1cc24d749569a42510399a29b034f7a77bdec34e:

<1cc24d7495>

> Its use has been discouraged since 2016, but now is no longer used in
> avformat, so there is no reason to keep it public.
This commit is contained in:
Romain Vimont 2024-06-29 13:05:46 +02:00
parent 7633228278
commit 1e3deabd6c
3 changed files with 6 additions and 12 deletions

View File

@ -278,7 +278,6 @@ run_demuxer(void *data) {
finally_close_sinks: finally_close_sinks:
sc_packet_source_sinks_close(&demuxer->packet_source); sc_packet_source_sinks_close(&demuxer->packet_source);
finally_free_context: finally_free_context:
// This also calls avcodec_close() internally
avcodec_free_context(&codec_ctx); avcodec_free_context(&codec_ctx);
end: end:
demuxer->cbs->on_ended(demuxer, status, demuxer->cbs_userdata); demuxer->cbs->on_ended(demuxer, status, demuxer->cbs_userdata);

View File

@ -117,21 +117,21 @@ decode_image(const char *path) {
AVFrame *frame = av_frame_alloc(); AVFrame *frame = av_frame_alloc();
if (!frame) { if (!frame) {
LOG_OOM(); LOG_OOM();
goto close_codec; goto free_codec_ctx;
} }
AVPacket *packet = av_packet_alloc(); AVPacket *packet = av_packet_alloc();
if (!packet) { if (!packet) {
LOG_OOM(); LOG_OOM();
av_frame_free(&frame); av_frame_free(&frame);
goto close_codec; goto free_codec_ctx;
} }
if (av_read_frame(ctx, packet) < 0) { if (av_read_frame(ctx, packet) < 0) {
LOGE("Could not read frame"); LOGE("Could not read frame");
av_packet_free(&packet); av_packet_free(&packet);
av_frame_free(&frame); av_frame_free(&frame);
goto close_codec; goto free_codec_ctx;
} }
int ret; int ret;
@ -139,22 +139,20 @@ decode_image(const char *path) {
LOGE("Could not send icon packet: %d", ret); LOGE("Could not send icon packet: %d", ret);
av_packet_free(&packet); av_packet_free(&packet);
av_frame_free(&frame); av_frame_free(&frame);
goto close_codec; goto free_codec_ctx;
} }
if ((ret = avcodec_receive_frame(codec_ctx, frame)) != 0) { if ((ret = avcodec_receive_frame(codec_ctx, frame)) != 0) {
LOGE("Could not receive icon frame: %d", ret); LOGE("Could not receive icon frame: %d", ret);
av_packet_free(&packet); av_packet_free(&packet);
av_frame_free(&frame); av_frame_free(&frame);
goto close_codec; goto free_codec_ctx;
} }
av_packet_free(&packet); av_packet_free(&packet);
result = frame; result = frame;
close_codec:
avcodec_close(codec_ctx);
free_codec_ctx: free_codec_ctx:
avcodec_free_context(&codec_ctx); avcodec_free_context(&codec_ctx);
close_input: close_input:

View File

@ -240,7 +240,7 @@ sc_v4l2_sink_open(struct sc_v4l2_sink *vs, const AVCodecContext *ctx) {
vs->frame = av_frame_alloc(); vs->frame = av_frame_alloc();
if (!vs->frame) { if (!vs->frame) {
LOG_OOM(); LOG_OOM();
goto error_avcodec_close; goto error_avcodec_free_context;
} }
vs->packet = av_packet_alloc(); vs->packet = av_packet_alloc();
@ -268,8 +268,6 @@ error_av_packet_free:
av_packet_free(&vs->packet); av_packet_free(&vs->packet);
error_av_frame_free: error_av_frame_free:
av_frame_free(&vs->frame); av_frame_free(&vs->frame);
error_avcodec_close:
avcodec_close(vs->encoder_ctx);
error_avcodec_free_context: error_avcodec_free_context:
avcodec_free_context(&vs->encoder_ctx); avcodec_free_context(&vs->encoder_ctx);
error_avio_close: error_avio_close:
@ -297,7 +295,6 @@ sc_v4l2_sink_close(struct sc_v4l2_sink *vs) {
av_packet_free(&vs->packet); av_packet_free(&vs->packet);
av_frame_free(&vs->frame); av_frame_free(&vs->frame);
avcodec_close(vs->encoder_ctx);
avcodec_free_context(&vs->encoder_ctx); avcodec_free_context(&vs->encoder_ctx);
avio_close(vs->format_ctx->pb); avio_close(vs->format_ctx->pb);
avformat_free_context(vs->format_ctx); avformat_free_context(vs->format_ctx);