@ -3167,7 +3167,7 @@ static int mov_flush_fragment_interleaving(AVFormatContext *s, MOVTrack *track)
return 0 ;
}
static int mov_flush_fragment ( AVFormatContext * s )
static int mov_flush_fragment ( AVFormatContext * s , int force )
{
MOVMuxContext * mov = s - > priv_data ;
int i , first_track = - 1 ;
@ -3214,7 +3214,7 @@ static int mov_flush_fragment(AVFormatContext *s)
if ( ! mov - > tracks [ i ] . entry )
break ;
/* Don't write the initial moov unless all tracks have data */
if ( i < mov - > nb_streams )
if ( i < mov - > nb_streams & & ! force )
return 0 ;
if ( ( ret = ffio_open_null_buf ( & moov_buf ) ) < 0 )
@ -3343,17 +3343,17 @@ static int mov_flush_fragment(AVFormatContext *s)
return 0 ;
}
static int mov_auto_flush_fragment ( AVFormatContext * s )
static int mov_auto_flush_fragment ( AVFormatContext * s , int force )
{
MOVMuxContext * mov = s - > priv_data ;
int had_moov = mov - > moov_written ;
int ret = mov_flush_fragment ( s ) ;
int ret = mov_flush_fragment ( s , force ) ;
if ( ret < 0 )
return ret ;
// If using delay_moov, the first flush only wrote the moov,
// not the actual moof+mdat pair, thus flush once again.
if ( ! had_moov & & mov - > flags & FF_MOV_FLAG_DELAY_MOOV )
ret = mov_flush_fragment ( s ) ;
ret = mov_flush_fragment ( s , force ) ;
return ret ;
}
@ -3568,7 +3568,7 @@ err:
static int mov_write_packet ( AVFormatContext * s , AVPacket * pkt )
{
if ( ! pkt ) {
mov_flush_fragment ( s ) ;
mov_flush_fragment ( s , 1 ) ;
return 1 ;
} else {
MOVMuxContext * mov = s - > priv_data ;
@ -3604,7 +3604,7 @@ static int mov_write_packet(AVFormatContext *s, AVPacket *pkt)
// for the other ones that are flushed at the same time.
trk - > track_duration = pkt - > dts - trk - > start_dts ;
trk - > end_pts = pkt - > pts ;
mov_auto_flush_fragment ( s ) ;
mov_auto_flush_fragment ( s , 0 ) ;
}
}
@ -4243,7 +4243,7 @@ static int mov_write_trailer(AVFormatContext *s)
mov_write_moov_tag ( pb , mov , s ) ;
}
} else {
mov_auto_flush_fragment ( s ) ;
mov_auto_flush_fragment ( s , 1 ) ;
for ( i = 0 ; i < mov - > nb_streams ; i + + )
mov - > tracks [ i ] . data_offset = 0 ;
if ( mov - > flags & FF_MOV_FLAG_GLOBAL_SIDX ) {