[FFmpeg-devel] [PATCH] movenc: Ensure no separate moof written for empty track

Martin Storsjö martin at martin.st
Thu Aug 12 23:26:42 EEST 2021


On Thu, 12 Aug 2021, Hu Weiwen wrote:

> track->mdat_buf can be not NULL while the track is still empty if the
> last packet write failed.
>
> Signed-off-by: Hu Weiwen <sehuww at mail.scut.edu.cn>
> ---
> libavformat/movenc.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/libavformat/movenc.c b/libavformat/movenc.c
> index bcc202300bb..a460cd9adae 100644
> --- a/libavformat/movenc.c
> +++ b/libavformat/movenc.c
> @@ -5422,7 +5422,7 @@ static int mov_flush_fragment(AVFormatContext *s, int force)
>             duration = track->start_dts + track->track_duration -
>                        track->cluster[0].dts;
>         if (mov->flags & FF_MOV_FLAG_SEPARATE_MOOF) {
> -            if (!track->mdat_buf)
> +            if (!track->entry)
>                 continue;
>             mdat_size = avio_tell(track->mdat_buf);
>             moof_tracks = i;
> -- 
> 2.25.1

Ok I guess.

If this situation happens (we allocate mdat_buf but fail to write a sample 
to it), I guess we can end up with some half-written packet at the start 
of it, which will be written as part of the next fragment. As long as byte 
offsets end up correct so the extra data at the start of the buffer is 
ignored I guess that'll work fine (I didn't check right now).

// Martin



More information about the ffmpeg-devel mailing list