| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -252,6 +252,30 @@ static int mov_write_stss_tag(AVIOContext *pb, MOVTrack *track, uint32_t flag) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return update_size(pb, pos); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			/* Sample dependency atom */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static int mov_write_sdtp_tag(AVIOContext *pb, MOVTrack *track) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int i; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint8_t leading, dependent, reference, redundancy; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int64_t pos = avio_tell(pb); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    avio_wb32(pb, 0); // size | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    ffio_wfourcc(pb, "sdtp"); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    avio_wb32(pb, 0); // version & flags | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    for (i = 0; i < track->entry; i++) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        dependent = MOV_SAMPLE_DEPENDENCY_YES; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        leading = reference = redundancy = MOV_SAMPLE_DEPENDENCY_UNKNOWN; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (track->cluster[i].flags & MOV_DISPOSABLE_SAMPLE) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            reference = MOV_SAMPLE_DEPENDENCY_NO; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (track->cluster[i].flags & MOV_SYNC_SAMPLE) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            dependent = MOV_SAMPLE_DEPENDENCY_NO; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        avio_w8(pb, (leading << 6)   | (dependent << 4) | | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                    (reference << 2) | redundancy); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    return update_size(pb, pos); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			} | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			static int mov_write_amr_tag(AVIOContext *pb, MOVTrack *track) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			{ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    avio_wb32(pb, 0x11); /* size */ | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -2353,6 +2377,8 @@ static int mov_write_stbl_tag(AVFormatContext *s, AVIOContext *pb, MOVMuxContext | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			         track->par->codec_tag == MKTAG('r','t','p',' ')) && | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        track->has_keyframes && track->has_keyframes < track->entry) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        mov_write_stss_tag(pb, track, MOV_SYNC_SAMPLE); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (track->par->codec_type == AVMEDIA_TYPE_VIDEO && track->has_disposable) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        mov_write_sdtp_tag(pb, track); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (track->mode == MODE_MOV && track->flags & MOV_TRACK_STPS) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        mov_write_stss_tag(pb, track, MOV_PARTIAL_SYNC_SAMPLE); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (track->par->codec_type == AVMEDIA_TYPE_VIDEO && | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -5316,6 +5342,10 @@ int ff_mov_write_packet(AVFormatContext *s, AVPacket *pkt) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (trk->cluster[trk->entry].flags & MOV_SYNC_SAMPLE) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            trk->has_keyframes++; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (pkt->flags & AV_PKT_FLAG_DISPOSABLE) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        trk->cluster[trk->entry].flags |= MOV_DISPOSABLE_SAMPLE; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        trk->has_disposable++; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    trk->entry++; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    trk->sample_count += samples_in_chunk; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    mov->mdat_size    += size; | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |