| 
				
				
					
				
				
				 | 
			
			 | 
			@@ -94,6 +94,8 @@ typedef struct MP3Context { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint32_t seen; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint32_t pos; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    uint64_t bag[VBR_NUM_BAGS]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int initial_bitrate; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int has_variable_bitrate; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    /* index of the audio stream */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int audio_stream_idx; | 
		
		
	
	
		
			
				| 
				
					
				
				
					
				
				
				 | 
			
			 | 
			@@ -238,6 +240,16 @@ static void mp3_fix_xing(AVFormatContext *s) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    int i; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    avio_flush(s->pb); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    /* replace "Xing" identification string with "Info" for CBR files. */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    if (!mp3->has_variable_bitrate) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        int64_t tag_offset = mp3->frames_offset | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            - 4   // frames/size/toc flags | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            - 4;  // xing tag | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        avio_seek(s->pb, tag_offset, SEEK_SET); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        avio_wb32(s->pb, MKBETAG('I', 'n', 'f', 'o')); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    avio_seek(s->pb, mp3->frames_offset, SEEK_SET); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    avio_wb32(s->pb, mp3->frames); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    avio_wb32(s->pb, mp3->size); | 
		
		
	
	
		
			
				| 
				
				
				
					
				
				 | 
			
			 | 
			@@ -260,12 +272,21 @@ static int mp3_write_packet_internal(AVFormatContext *s, AVPacket *pkt) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        return ff_raw_write_packet(s, pkt); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			    else { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        MP3Context  *mp3 = s->priv_data; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#ifdef FILTER_VBR_HEADERS | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        MPADecodeHeader c; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#ifdef FILTER_VBR_HEADERS | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        int base; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#endif | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        avpriv_mpegaudio_decode_header(&c, AV_RB32(pkt->data)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        ff_mpegaudio_decode_header(&c, AV_RB32(pkt->data)); | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (!mp3->initial_bitrate) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            mp3->initial_bitrate = c.bit_rate; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        if (!mp3->has_variable_bitrate) { | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			            if ((c.bit_rate == 0) || (mp3->initial_bitrate != c.bit_rate)) | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			                mp3->has_variable_bitrate = 1; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        } | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			#ifdef FILTER_VBR_HEADERS | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        /* filter out XING and INFO headers. */ | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			        base = 4 + xing_offtbl[c.lsf == 1][c.nb_channels == 1]; | 
		
		
	
		
			
			 | 
			 | 
			
			 | 
			
  | 
		
		
	
	
		
			
				| 
				
					
				
				
				
				 | 
			
			 | 
			
  |