mirror of
				https://github.com/PabloMK7/citra.git
				synced 2025-10-31 13:50:03 +00:00 
			
		
		
		
	audio_core: hle: mf: fix a regression...
... where the sample copying logic is incorrect due to the wrong usage of `std::array`
This commit is contained in:
		
							parent
							
								
									6332e57069
								
							
						
					
					
						commit
						c91f5029ff
					
				
					 3 changed files with 7 additions and 5 deletions
				
			
		|  | @ -16,8 +16,8 @@ struct ADTSData { | |||
|     u32 samplerate; | ||||
| }; | ||||
| 
 | ||||
| ADTSData ParseADTS(char* buffer); | ||||
| ADTSData ParseADTS(const char* buffer); | ||||
| 
 | ||||
| // last two bytes of MF AAC decoder user data
 | ||||
| // see https://docs.microsoft.com/en-us/windows/desktop/medfound/aac-decoder#example-media-types
 | ||||
| u16 MFGetAACTag(ADTSData input); | ||||
| u16 MFGetAACTag(const ADTSData input); | ||||
|  |  | |||
|  | @ -8,7 +8,7 @@ constexpr std::array<u32, 16> freq_table = {96000, 88200, 64000, 48000, 44100, 3 | |||
|                                             16000, 12000, 11025, 8000,  7350,  0,     0,     0}; | ||||
| constexpr std::array<u8, 8> channel_table = {0, 1, 2, 3, 4, 5, 6, 8}; | ||||
| 
 | ||||
| ADTSData ParseADTS(char* buffer) { | ||||
| ADTSData ParseADTS(const char* buffer) { | ||||
|     u32 tmp = 0; | ||||
|     ADTSData out; | ||||
| 
 | ||||
|  | @ -50,7 +50,7 @@ ADTSData ParseADTS(char* buffer) { | |||
| // Frame length flag (1 bit)
 | ||||
| // Depends on core coder (1 bit)
 | ||||
| // Extension flag (1 bit)
 | ||||
| u16 MFGetAACTag(ADTSData input) { | ||||
| u16 MFGetAACTag(const ADTSData input) { | ||||
|     u16 tag = 0; | ||||
| 
 | ||||
|     tag |= input.profile << 11; | ||||
|  |  | |||
|  | @ -116,12 +116,14 @@ MFOutputState WMFDecoder::Impl::DecodingLoop(ADTSData adts_header, | |||
| 
 | ||||
|             // the following was taken from ffmpeg version of the decoder
 | ||||
|             f32 val_f32; | ||||
|             for (size_t i = 0; i < output_buffer->size(); i++) { | ||||
|             for (size_t i = 0; i < output_buffer->size(); ) { | ||||
|                 for (std::size_t channel = 0; channel < adts_header.channels; channel++) { | ||||
|                     val_f32 = output_buffer->at(i); | ||||
|                     s16 val = static_cast<s16>(0x7FFF * val_f32); | ||||
|                     out_streams[channel].push_back(val & 0xFF); | ||||
|                     out_streams[channel].push_back(val >> 8); | ||||
|                     // i is incremented on per channel basis
 | ||||
|                     i++; | ||||
|                 } | ||||
|             } | ||||
|         } | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue