diff --git a/libavformat/av1dec.c b/libavformat/av1dec.c
index 8ca804c2a3..8a68deb272 100644
--- a/libavformat/av1dec.c
+++ b/libavformat/av1dec.c
@@ -77,17 +77,14 @@ static int read_header(AVFormatContext *s, const AVRational *framerate, AVBSFCon
         return ret;
 
     ret = avcodec_parameters_copy((*bsf)->par_in, st->codecpar);
-    if (ret < 0) {
-        av_bsf_free(bsf);
+    if (ret < 0)
         return ret;
-    }
 
     ret = av_bsf_init(*bsf);
     if (ret < 0)
-        av_bsf_free(bsf);
-
-    return ret;
+        return ret;
 
+    return 0;
 }
 
 #define DEC AV_OPT_FLAG_DECODING_PARAM
@@ -285,6 +282,7 @@ const AVInputFormat ff_av1_demuxer = {
     .name           = "av1",
     .long_name      = NULL_IF_CONFIG_SMALL("AV1 Annex B"),
     .priv_data_size = sizeof(AnnexBContext),
+    .flags_internal = FF_FMT_INIT_CLEANUP,
     .read_probe     = annexb_probe,
     .read_header    = annexb_read_header,
     .read_packet    = annexb_read_packet,
@@ -472,6 +470,7 @@ const AVInputFormat ff_obu_demuxer = {
     .name           = "obu",
     .long_name      = NULL_IF_CONFIG_SMALL("AV1 low overhead OBU"),
     .priv_data_size = sizeof(ObuContext),
+    .flags_internal = FF_FMT_INIT_CLEANUP,
     .read_probe     = obu_probe,
     .read_header    = obu_read_header,
     .read_packet    = obu_read_packet,