| 
																	
																	
																		
																	
																	
																 | 
																@@ -4798,28 +4798,40 @@ static int mov_write_tfra_tag(AVIOContext *pb, MOVTrack *track) | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																static int mov_write_mfra_tag(AVIOContext *pb, MOVMuxContext *mov) | 
																 | 
																 | 
																static int mov_write_mfra_tag(AVIOContext *pb, MOVMuxContext *mov) | 
															
														
														
													
														
															
																 | 
																 | 
																{ | 
																 | 
																 | 
																{ | 
															
														
														
													
														
															
																 | 
																 | 
																    int64_t pos = avio_tell(pb); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    int i; | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    AVIOContext *mfra_pb; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int i, ret, sz; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    uint8_t *buf; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    avio_wb32(pb, 0); /* size placeholder */ | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    ffio_wfourcc(pb, "mfra"); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ret = avio_open_dyn_buf(&mfra_pb); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    if (ret < 0) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        return ret; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    avio_wb32(mfra_pb, 0); /* size placeholder */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ffio_wfourcc(mfra_pb, "mfra"); | 
															
														
														
													
														
															
																 | 
																 | 
																    /* An empty mfra atom is enough to indicate to the publishing point that | 
																 | 
																 | 
																    /* An empty mfra atom is enough to indicate to the publishing point that | 
															
														
														
													
														
															
																 | 
																 | 
																     * the stream has ended. */ | 
																 | 
																 | 
																     * the stream has ended. */ | 
															
														
														
													
														
															
																 | 
																 | 
																    if (mov->flags & FF_MOV_FLAG_ISML) | 
																 | 
																 | 
																    if (mov->flags & FF_MOV_FLAG_ISML) | 
															
														
														
													
														
															
																 | 
																 | 
																        return update_size(pb, pos); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																        goto done_mfra; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    for (i = 0; i < mov->nb_streams; i++) { | 
																 | 
																 | 
																    for (i = 0; i < mov->nb_streams; i++) { | 
															
														
														
													
														
															
																 | 
																 | 
																        MOVTrack *track = &mov->tracks[i]; | 
																 | 
																 | 
																        MOVTrack *track = &mov->tracks[i]; | 
															
														
														
													
														
															
																 | 
																 | 
																        if (track->nb_frag_info) | 
																 | 
																 | 
																        if (track->nb_frag_info) | 
															
														
														
													
														
															
																 | 
																 | 
																            mov_write_tfra_tag(pb, track); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            mov_write_tfra_tag(mfra_pb, track); | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    avio_wb32(pb, 16); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    ffio_wfourcc(pb, "mfro"); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    avio_wb32(pb, 0); /* version + flags */ | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																    avio_wb32(pb, avio_tell(pb) + 4 - pos); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    avio_wb32(mfra_pb, 16); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ffio_wfourcc(mfra_pb, "mfro"); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    avio_wb32(mfra_pb, 0); /* version + flags */ | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    avio_wb32(mfra_pb, avio_tell(mfra_pb) + 4); | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    return update_size(pb, pos); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																done_mfra: | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    sz  = update_size(mfra_pb, 0); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ret = avio_get_dyn_buf(mfra_pb, &buf); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    avio_write(pb, buf, ret); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    ffio_free_dyn_buf(&mfra_pb); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    return sz; | 
															
														
														
													
														
															
																 | 
																 | 
																} | 
																 | 
																 | 
																} | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																static int mov_write_mdat_tag(AVIOContext *pb, MOVMuxContext *mov) | 
																 | 
																 | 
																static int mov_write_mdat_tag(AVIOContext *pb, MOVMuxContext *mov) | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -6987,7 +6999,9 @@ static int mov_write_trailer(AVFormatContext *s) | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																        if (!(mov->flags & FF_MOV_FLAG_SKIP_TRAILER)) { | 
																 | 
																 | 
																        if (!(mov->flags & FF_MOV_FLAG_SKIP_TRAILER)) { | 
															
														
														
													
														
															
																 | 
																 | 
																            avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER); | 
																 | 
																 | 
																            avio_write_marker(s->pb, AV_NOPTS_VALUE, AVIO_DATA_MARKER_TRAILER); | 
															
														
														
													
														
															
																 | 
																 | 
																            mov_write_mfra_tag(pb, mov); | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            res = mov_write_mfra_tag(pb, mov); | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																            if (res < 0) | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																                return res; | 
															
														
														
													
														
															
																 | 
																 | 
																        } | 
																 | 
																 | 
																        } | 
															
														
														
													
														
															
																 | 
																 | 
																    } | 
																 | 
																 | 
																    } | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |