]> git.sesse.net Git - ffmpeg/commitdiff
avcodec/avcodec: Actually honour the documentation of subtitle_header
authorAndreas Rheinhardt <andreas.rheinhardt@outlook.com>
Sun, 18 Apr 2021 03:26:32 +0000 (05:26 +0200)
committerAndreas Rheinhardt <andreas.rheinhardt@outlook.com>
Sat, 24 Apr 2021 11:56:43 +0000 (13:56 +0200)
It is only supposed to be freed by libavcodec for decoders, yet
avcodec_open2() always frees it on failure.
Furthermore, avcodec_close() doesn't free it for decoders.
Both of this has been changed.

Reviewed-by: James Almer <jamrial@gmail.com>
Signed-off-by: Andreas Rheinhardt <andreas.rheinhardt@outlook.com>
libavcodec/avcodec.c

index 760a98d8ef9c1e2f201364624ad8dbaa4d0fa78f..24f6922d4fb7a1b65879dd114025415bf071fb1b 100644 (file)
@@ -418,7 +418,8 @@ FF_ENABLE_DEPRECATION_WARNINGS
 
     av_dict_free(&tmp);
     av_freep(&avctx->priv_data);
-    av_freep(&avctx->subtitle_header);
+    if (av_codec_is_decoder(avctx->codec))
+        av_freep(&avctx->subtitle_header);
 
 #if FF_API_OLD_ENCDEC
     av_frame_free(&avci->to_free);
@@ -589,7 +590,9 @@ FF_DISABLE_DEPRECATION_WARNINGS
         av_frame_free(&avctx->coded_frame);
 FF_ENABLE_DEPRECATION_WARNINGS
 #endif
-    }
+    } else if (av_codec_is_decoder(avctx->codec))
+        av_freep(&avctx->subtitle_header);
+
     avctx->codec = NULL;
     avctx->active_thread_type = 0;