diff --git a/libavformat/movenc.c b/libavformat/movenc.c
index 319ff57..1fe1eb6 100644
--- a/libavformat/movenc.c
+++ b/libavformat/movenc.c
@@ -5567,21 +5567,18 @@ static int mov_write_header(AVFormatContext *s)
             if (mov->encryption_key_len != AES_CTR_KEY_SIZE) {
                 av_log(s, AV_LOG_ERROR, "Invalid encryption key len %d expected %d\n",
                     mov->encryption_key_len, AES_CTR_KEY_SIZE);
-                ret = AVERROR(EINVAL);
-                goto error;
+                return AVERROR(EINVAL);
             }
 
             if (mov->encryption_kid_len != CENC_KID_SIZE) {
                 av_log(s, AV_LOG_ERROR, "Invalid encryption kid len %d expected %d\n",
                     mov->encryption_kid_len, CENC_KID_SIZE);
-                ret = AVERROR(EINVAL);
-                goto error;
+                return AVERROR(EINVAL);
             }
         } else {
             av_log(s, AV_LOG_ERROR, "unsupported encryption scheme %s\n",
                 mov->encryption_scheme_str);
-            ret = AVERROR(EINVAL);
-            goto error;
+            return AVERROR(EINVAL);
         }
     }
 
@@ -5601,8 +5598,7 @@ static int mov_write_header(AVFormatContext *s)
             av_log(s, AV_LOG_ERROR, "Could not find tag for codec %s in stream #%d, "
                    "codec not currently supported in container\n",
                    avcodec_get_name(st->codecpar->codec_id), i);
-            ret = AVERROR(EINVAL);
-            goto error;
+            return AVERROR(EINVAL);
         }
         /* If hinting of this track is enabled by a later hint track,
          * this is updated. */
@@ -5616,8 +5612,7 @@ static int mov_write_header(AVFormatContext *s)
                 track->tag == MKTAG('m','x','5','p') || track->tag == MKTAG('m','x','5','n')) {
                 if (st->codecpar->width != 720 || (st->codecpar->height != 608 && st->codecpar->height != 512)) {
                     av_log(s, AV_LOG_ERROR, "D-10/IMX must use 720x608 or 720x512 video resolution\n");
-                    ret = AVERROR(EINVAL);
-                    goto error;
+                    return AVERROR(EINVAL);
                 }
                 track->height = track->tag >> 24 == 'n' ? 486 : 576;
             }
@@ -5630,8 +5625,7 @@ static int mov_write_header(AVFormatContext *s)
             }
             if (st->codecpar->width > 65535 || st->codecpar->height > 65535) {
                 av_log(s, AV_LOG_ERROR, "Resolution %dx%d too large for mov/mp4\n", st->codecpar->width, st->codecpar->height);
-                ret = AVERROR(EINVAL);
-                goto error;
+                return AVERROR(EINVAL);
             }
             if (track->mode == MODE_MOV && track->timescale > 100000)
                 av_log(s, AV_LOG_WARNING,
@@ -5659,8 +5653,7 @@ static int mov_write_header(AVFormatContext *s)
                            "VP9 in MP4 support is experimental, add "
                            "'-strict %d' if you want to use it.\n",
                            FF_COMPLIANCE_EXPERIMENTAL);
-                    ret = AVERROR_EXPERIMENTAL;
-                    goto error;
+                    return AVERROR_EXPERIMENTAL;
                 }
             }
         } else if (st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
@@ -5673,8 +5666,7 @@ static int mov_write_header(AVFormatContext *s)
                      st->codecpar->codec_id == AV_CODEC_ID_ILBC){
                 if (!st->codecpar->block_align) {
                     av_log(s, AV_LOG_ERROR, "track %d: codec block align is not set for adpcm\n", i);
-                    ret = AVERROR(EINVAL);
-                    goto error;
+                    return AVERROR(EINVAL);
                 }
                 track->sample_size = st->codecpar->block_align;
             }else if (st->codecpar->frame_size > 1){ /* assume compressed audio */
@@ -5691,8 +5683,7 @@ static int mov_write_header(AVFormatContext *s)
                 if (s->strict_std_compliance >= FF_COMPLIANCE_NORMAL) {
                     av_log(s, AV_LOG_ERROR, "track %d: muxing mp3 at %dhz is not standard, to mux anyway set strict to -1\n",
                         i, track->par->sample_rate);
-                    ret = AVERROR(EINVAL);
-                    goto error;
+                    return AVERROR(EINVAL);
                 } else {
                     av_log(s, AV_LOG_WARNING, "track %d: muxing mp3 at %dhz is not standard in MP4\n",
                            i, track->par->sample_rate);
@@ -5722,8 +5713,7 @@ static int mov_write_header(AVFormatContext *s)
                 track->vos_len  = st->codecpar->extradata_size;
                 track->vos_data = av_malloc(track->vos_len);
                 if (!track->vos_data) {
-                    ret = AVERROR(ENOMEM);
-                    goto error;
+                    return AVERROR(ENOMEM);
                 }
                 memcpy(track->vos_data, st->codecpar->extradata, track->vos_len);
             }
@@ -5732,9 +5722,8 @@ static int mov_write_header(AVFormatContext *s)
         if (mov->encryption_scheme == MOV_ENC_CENC_AES_CTR) {
             ret = ff_mov_cenc_init(&track->cenc, mov->encryption_key,
                 track->par->codec_id == AV_CODEC_ID_H264, s->flags & AVFMT_FLAG_BITEXACT);
-            if (ret) {
-                goto error;
-            }
+            if (ret)
+                return ret;
         }
     }
 
@@ -5790,7 +5779,7 @@ static int mov_write_header(AVFormatContext *s)
 
     if (mov->chapter_track)
         if ((ret = mov_create_chapter_track(s, mov->chapter_track)) < 0)
-            goto error;
+            return ret;
 
     if (mov->flags & FF_MOV_FLAG_RTP_HINT) {
         /* Initialize the hint tracks for each audio and video stream */
@@ -5799,7 +5788,7 @@ static int mov_write_header(AVFormatContext *s)
             if (st->codecpar->codec_type == AVMEDIA_TYPE_VIDEO ||
                 st->codecpar->codec_type == AVMEDIA_TYPE_AUDIO) {
                 if ((ret = ff_mov_init_hinting(s, hint_track, i)) < 0)
-                    goto error;
+                    return ret;
                 hint_track++;
             }
         }
@@ -5820,7 +5809,7 @@ static int mov_write_header(AVFormatContext *s)
                 if (mov_check_timecode_track(s, &tc, i, t->value) < 0)
                     continue;
                 if ((ret = mov_create_timecode_track(s, tmcd_track, i, tc)) < 0)
-                    goto error;
+                    return ret;
                 tmcd_track++;
             }
         }
@@ -5842,9 +5831,6 @@ static int mov_write_header(AVFormatContext *s)
     }
 
     return 0;
- error:
-    mov_free(s);
-    return ret;
 }
 
 static int get_moov_size(AVFormatContext *s)
@@ -5999,10 +5985,8 @@ static int mov_write_trailer(AVFormatContext *s)
 
             track->vos_len  = par->extradata_size;
             track->vos_data = av_malloc(track->vos_len);
-            if (!track->vos_data) {
-                res = AVERROR(ENOMEM);
-                goto error;
-            }
+            if (!track->vos_data)
+                return AVERROR(ENOMEM);
             memcpy(track->vos_data, par->extradata, track->vos_len);
         }
         mov->need_rewrite_extradata = 0;
@@ -6028,7 +6012,7 @@ static int mov_write_trailer(AVFormatContext *s)
         if (mov->mode & (MODE_MP4|MODE_MOV|MODE_IPOD) && s->nb_chapters) {
             mov->chapter_track = mov->nb_streams++;
             if ((res = mov_create_chapter_track(s, mov->chapter_track)) < 0)
-                goto error;
+                return res;
         }
     }
 
@@ -6054,19 +6038,18 @@ static int mov_write_trailer(AVFormatContext *s)
             av_log(s, AV_LOG_INFO, "Starting second pass: moving the moov atom to the beginning of the file\n");
             res = shift_data(s);
             if (res < 0)
-                goto error;
+                return res;
             avio_seek(pb, mov->reserved_header_pos, SEEK_SET);
             if ((res = mov_write_moov_tag(pb, mov, s)) < 0)
-                goto error;
+                return res;
         } else if (mov->reserved_moov_size > 0) {
             int64_t size;
             if ((res = mov_write_moov_tag(pb, mov, s)) < 0)
-                goto error;
+                return res;
             size = mov->reserved_moov_size - (avio_tell(pb) - mov->reserved_header_pos);
             if (size < 8){
                 av_log(s, AV_LOG_ERROR, "reserved_moov_size is too small, needed %"PRId64" additional\n", 8-size);
-                res = AVERROR(EINVAL);
-                goto error;
+                return AVERROR(EINVAL);
             }
             avio_wb32(pb, size);
             ffio_wfourcc(pb, "free");
@@ -6074,7 +6057,7 @@ static int mov_write_trailer(AVFormatContext *s)
             avio_seek(pb, moov_pos, SEEK_SET);
         } else {
             if ((res = mov_write_moov_tag(pb, mov, s)) < 0)
-                goto error;
+                return res;
         }
         res = 0;
     } else {
@@ -6086,7 +6069,7 @@ static int mov_write_trailer(AVFormatContext *s)
             av_log(s, AV_LOG_INFO, "Starting second pass: inserting sidx atoms\n");
             res = shift_data(s);
             if (res < 0)
-                goto error;
+                return res;
             end = avio_tell(pb);
             avio_seek(pb, mov->reserved_header_pos, SEEK_SET);
             mov_write_sidx_tags(pb, mov, -1, 0);
@@ -6099,9 +6082,6 @@ static int mov_write_trailer(AVFormatContext *s)
         }
     }
 
-error:
-    mov_free(s);
-
     return res;
 }
 
@@ -6118,6 +6098,7 @@ AVOutputFormat ff_mov_muxer = {
     .write_header      = mov_write_header,
     .write_packet      = mov_write_packet,
     .write_trailer     = mov_write_trailer,
+    .deinit            = mov_free,
     .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
     .codec_tag         = (const AVCodecTag* const []){
         ff_codec_movvideo_tags, ff_codec_movaudio_tags, 0
@@ -6137,6 +6118,7 @@ AVOutputFormat ff_tgp_muxer = {
     .write_header      = mov_write_header,
     .write_packet      = mov_write_packet,
     .write_trailer     = mov_write_trailer,
+    .deinit            = mov_free,
     .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
     .codec_tag         = (const AVCodecTag* const []){ codec_3gp_tags, 0 },
     .priv_class        = &tgp_muxer_class,
@@ -6156,6 +6138,7 @@ AVOutputFormat ff_mp4_muxer = {
     .write_header      = mov_write_header,
     .write_packet      = mov_write_packet,
     .write_trailer     = mov_write_trailer,
+    .deinit            = mov_free,
     .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
     .codec_tag         = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 },
     .priv_class        = &mp4_muxer_class,
@@ -6174,6 +6157,7 @@ AVOutputFormat ff_psp_muxer = {
     .write_header      = mov_write_header,
     .write_packet      = mov_write_packet,
     .write_trailer     = mov_write_trailer,
+    .deinit            = mov_free,
     .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
     .codec_tag         = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 },
     .priv_class        = &psp_muxer_class,
@@ -6191,6 +6175,7 @@ AVOutputFormat ff_tg2_muxer = {
     .write_header      = mov_write_header,
     .write_packet      = mov_write_packet,
     .write_trailer     = mov_write_trailer,
+    .deinit            = mov_free,
     .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
     .codec_tag         = (const AVCodecTag* const []){ codec_3gp_tags, 0 },
     .priv_class        = &tg2_muxer_class,
@@ -6209,6 +6194,7 @@ AVOutputFormat ff_ipod_muxer = {
     .write_header      = mov_write_header,
     .write_packet      = mov_write_packet,
     .write_trailer     = mov_write_trailer,
+    .deinit            = mov_free,
     .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
     .codec_tag         = (const AVCodecTag* const []){ codec_ipod_tags, 0 },
     .priv_class        = &ipod_muxer_class,
@@ -6227,6 +6213,7 @@ AVOutputFormat ff_ismv_muxer = {
     .write_header      = mov_write_header,
     .write_packet      = mov_write_packet,
     .write_trailer     = mov_write_trailer,
+    .deinit            = mov_free,
     .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH | AVFMT_TS_NEGATIVE,
     .codec_tag         = (const AVCodecTag* const []){ ff_mp4_obj_type, 0 },
     .priv_class        = &ismv_muxer_class,
@@ -6245,6 +6232,7 @@ AVOutputFormat ff_f4v_muxer = {
     .write_header      = mov_write_header,
     .write_packet      = mov_write_packet,
     .write_trailer     = mov_write_trailer,
+    .deinit            = mov_free,
     .flags             = AVFMT_GLOBALHEADER | AVFMT_ALLOW_FLUSH,
     .codec_tag         = (const AVCodecTag* const []){ codec_f4v_tags, 0 },
     .priv_class        = &f4v_muxer_class,
