avformat/movenc: free eac3 private data only when closing the stream

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>
(cherry picked from commit 27c94c57dc)
This commit is contained in:
James Almer
2019-03-28 22:36:25 -03:00
parent 1d720b37f0
commit 58cd70201e

View File

@@ -544,8 +544,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);
@@ -576,10 +575,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;
}
@@ -5947,6 +5942,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);