]> git.sesse.net Git - ffmpeg/commitdiff
avformat/movenc: free eac3 private data only when closing the stream
authorJames Almer <jamrial@gmail.com>
Fri, 29 Mar 2019 01:36:25 +0000 (22:36 -0300)
committerJames Almer <jamrial@gmail.com>
Sun, 31 Mar 2019 23:08:28 +0000 (20:08 -0300)
This makes sure the data is available when writing the moov atom during the
second pass triggered by the faststart movflag.

Fixes ticket #7780

Signed-off-by: James Almer <jamrial@gmail.com>
libavformat/movenc.c

index 8969d5b17080d0306c276afb0c9758b132deb91e..26cb2e6ea103daa46ac608b076a6e1c7fe2872d0 100644 (file)
@@ -552,8 +552,7 @@ static int mov_write_eac3_tag(AVIOContext *pb, MOVTrack *track)
     size = 2 + ((34 * (info->num_ind_sub + 1) + 7) >> 3);
     buf = av_malloc(size);
     if (!buf) {
-        size = AVERROR(ENOMEM);
-        goto end;
+        return AVERROR(ENOMEM);
     }
 
     init_put_bits(&pbc, buf, size);
@@ -584,10 +583,6 @@ static int mov_write_eac3_tag(AVIOContext *pb, MOVTrack *track)
 
     av_free(buf);
 
-end:
-    av_packet_unref(&info->pkt);
-    av_freep(&track->eac3_priv);
-
     return size;
 }
 
@@ -5973,6 +5968,11 @@ static void mov_free(AVFormatContext *s)
         av_freep(&mov->tracks[i].frag_info);
         av_packet_unref(&mov->tracks[i].cover_image);
 
+        if (mov->tracks[i].eac3_priv) {
+            struct eac3_info *info = mov->tracks[i].eac3_priv;
+            av_packet_unref(&info->pkt);
+            av_freep(&mov->tracks[i].eac3_priv);
+        }
         if (mov->tracks[i].vos_len)
             av_freep(&mov->tracks[i].vos_data);