mirror of
				https://github.com/Ryujinx/SDL.git
				synced 2025-11-04 15:04:51 +00:00 
			
		
		
		
	resampler: Work at double precision on x86-64 machines.
We get audio artifacts if we don't work at the higher precision, but this is painful on CPUs that have to use a software fallback for this, so for now (that is, until we have a better solution), get better output on amd64 chips, where the cost is less painful. (cherry picked from commit 1e5e8e2fda3796e76e6f7b1c39683925a3e9fed9)
This commit is contained in:
		
							parent
							
								
									13969f8567
								
							
						
					
					
						commit
						9403c9e95a
					
				| 
						 | 
					@ -198,10 +198,18 @@ static int SDL_ResampleAudio(const int chans, const int inrate, const int outrat
 | 
				
			||||||
                             const float *inbuf, const int inbuflen,
 | 
					                             const float *inbuf, const int inbuflen,
 | 
				
			||||||
                             float *outbuf, const int outbuflen)
 | 
					                             float *outbuf, const int outbuflen)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
 | 
					    /* !!! FIXME: this produces artifacts if we don't work at double precision, but this turns out to
 | 
				
			||||||
 | 
					                  be a big performance hit. Until we can resolve this better, we force this to double
 | 
				
			||||||
 | 
					                  for amd64 CPUs, which should be able to take the hit for now, vs small embedded
 | 
				
			||||||
 | 
					                  things that might end up in a software fallback here. */
 | 
				
			||||||
    /* Note that this used to be double, but it looks like we can get by with float in most cases at
 | 
					    /* Note that this used to be double, but it looks like we can get by with float in most cases at
 | 
				
			||||||
       almost twice the speed on Intel processors, and orders of magnitude more
 | 
					       almost twice the speed on Intel processors, and orders of magnitude more
 | 
				
			||||||
       on CPUs that need a software fallback for double calculations. */
 | 
					       on CPUs that need a software fallback for double calculations. */
 | 
				
			||||||
 | 
					    #if defined(_M_X64) || defined(__x86_64__)
 | 
				
			||||||
 | 
					    typedef double ResampleFloatType;
 | 
				
			||||||
 | 
					    #else
 | 
				
			||||||
    typedef float ResampleFloatType;
 | 
					    typedef float ResampleFloatType;
 | 
				
			||||||
 | 
					    #endif
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    const ResampleFloatType finrate = (ResampleFloatType)inrate;
 | 
					    const ResampleFloatType finrate = (ResampleFloatType)inrate;
 | 
				
			||||||
    const ResampleFloatType ratio = ((float)outrate) / ((float)inrate);
 | 
					    const ResampleFloatType ratio = ((float)outrate) / ((float)inrate);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue