| 
																	
																	
																		
																	
																	
																 | 
																@@ -94,6 +94,8 @@ typedef struct MP3Context { | 
															
														
														
													
														
															
																 | 
																 | 
																    uint32_t seen; | 
																 | 
																 | 
																    uint32_t seen; | 
															
														
														
													
														
															
																 | 
																 | 
																    uint32_t pos; | 
																 | 
																 | 
																    uint32_t pos; | 
															
														
														
													
														
															
																 | 
																 | 
																    uint64_t bag[VBR_NUM_BAGS]; | 
																 | 
																 | 
																    uint64_t bag[VBR_NUM_BAGS]; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int initial_bitrate; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																    int has_variable_bitrate; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    /* index of the audio stream */ | 
																 | 
																 | 
																    /* index of the audio stream */ | 
															
														
														
													
														
															
																 | 
																 | 
																    int audio_stream_idx; | 
																 | 
																 | 
																    int audio_stream_idx; | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																		
																	
																	
																 | 
																@@ -238,6 +240,16 @@ static void mp3_fix_xing(AVFormatContext *s) | 
															
														
														
													
														
															
																 | 
																 | 
																    int i; | 
																 | 
																 | 
																    int i; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
														
															
																 | 
																 | 
																    avio_flush(s->pb); | 
																 | 
																 | 
																    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_seek(s->pb, mp3->frames_offset, SEEK_SET); | 
															
														
														
													
														
															
																 | 
																 | 
																    avio_wb32(s->pb, mp3->frames); | 
																 | 
																 | 
																    avio_wb32(s->pb, mp3->frames); | 
															
														
														
													
														
															
																 | 
																 | 
																    avio_wb32(s->pb, mp3->size); | 
																 | 
																 | 
																    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); | 
																 | 
																 | 
																        return ff_raw_write_packet(s, pkt); | 
															
														
														
													
														
															
																 | 
																 | 
																    else { | 
																 | 
																 | 
																    else { | 
															
														
														
													
														
															
																 | 
																 | 
																        MP3Context  *mp3 = s->priv_data; | 
																 | 
																 | 
																        MP3Context  *mp3 = s->priv_data; | 
															
														
														
													
														
															
																 | 
																 | 
																#ifdef FILTER_VBR_HEADERS | 
																 | 
																 | 
																 | 
															
														
														
													
														
															
																 | 
																 | 
																        MPADecodeHeader c; | 
																 | 
																 | 
																        MPADecodeHeader c; | 
															
														
														
													
														
															
																 | 
																 | 
																 | 
																 | 
																 | 
																#ifdef FILTER_VBR_HEADERS | 
															
														
														
													
														
															
																 | 
																 | 
																        int base; | 
																 | 
																 | 
																        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. */ | 
																 | 
																 | 
																        /* filter out XING and INFO headers. */ | 
															
														
														
													
														
															
																 | 
																 | 
																        base = 4 + xing_offtbl[c.lsf == 1][c.nb_channels == 1]; | 
																 | 
																 | 
																        base = 4 + xing_offtbl[c.lsf == 1][c.nb_channels == 1]; | 
															
														
														
													
														
															
																 | 
																 | 
																
  | 
																 | 
																 | 
																
  | 
															
														
														
													
												
													
														
															
																| 
																	
																		
																	
																	
																	
																 | 
																
  |