mirror of
				https://github.com/Ryujinx/SDL.git
				synced 2025-11-04 14:14:49 +00:00 
			
		
		
		
	alsa: Cleaned up the 5.1 swizzle mess a little.
Shouldn't this be something ALSA handles for us with channel maps, so we can just delete this code?
This commit is contained in:
		
							parent
							
								
									6bd1ec6bb0
								
							
						
					
					
						commit
						754efd43f4
					
				| 
						 | 
				
			
			@ -241,37 +241,37 @@ ALSA_WaitDevice(_THIS)
 | 
			
		|||
 * "For Linux ALSA, this is FL-FR-RL-RR-C-LFE
 | 
			
		||||
 *  and for Windows DirectX [and CoreAudio], this is FL-FR-C-LFE-RL-RR"
 | 
			
		||||
 */
 | 
			
		||||
#define SWIZ6(T) \
 | 
			
		||||
    T *ptr = (T *) this->hidden->mixbuf; \
 | 
			
		||||
#define SWIZ6(T, buf, numframes) \
 | 
			
		||||
    T *ptr = (T *) buf; \
 | 
			
		||||
    Uint32 i; \
 | 
			
		||||
    for (i = 0; i < this->spec.samples; i++, ptr += 6) { \
 | 
			
		||||
    for (i = 0; i < numframes; i++, ptr += 6) { \
 | 
			
		||||
        T tmp; \
 | 
			
		||||
        tmp = ptr[2]; ptr[2] = ptr[4]; ptr[4] = tmp; \
 | 
			
		||||
        tmp = ptr[3]; ptr[3] = ptr[5]; ptr[5] = tmp; \
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
static SDL_INLINE void
 | 
			
		||||
swizzle_alsa_channels_6_64bit(_THIS)
 | 
			
		||||
swizzle_alsa_channels_6_64bit(void *buffer, Uint32 bufferlen)
 | 
			
		||||
{
 | 
			
		||||
    SWIZ6(Uint64);
 | 
			
		||||
    SWIZ6(Uint64, buffer, bufferlen);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static SDL_INLINE void
 | 
			
		||||
swizzle_alsa_channels_6_32bit(_THIS)
 | 
			
		||||
swizzle_alsa_channels_6_32bit(void *buffer, Uint32 bufferlen)
 | 
			
		||||
{
 | 
			
		||||
    SWIZ6(Uint32);
 | 
			
		||||
    SWIZ6(Uint32, buffer, bufferlen);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static SDL_INLINE void
 | 
			
		||||
swizzle_alsa_channels_6_16bit(_THIS)
 | 
			
		||||
swizzle_alsa_channels_6_16bit(void *buffer, Uint32 bufferlen)
 | 
			
		||||
{
 | 
			
		||||
    SWIZ6(Uint16);
 | 
			
		||||
    SWIZ6(Uint16, buffer, bufferlen);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static SDL_INLINE void
 | 
			
		||||
swizzle_alsa_channels_6_8bit(_THIS)
 | 
			
		||||
swizzle_alsa_channels_6_8bit(void *buffer, Uint32 bufferlen)
 | 
			
		||||
{
 | 
			
		||||
    SWIZ6(Uint8);
 | 
			
		||||
    SWIZ6(Uint8, buffer, bufferlen);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#undef SWIZ6
 | 
			
		||||
| 
						 | 
				
			
			@ -282,18 +282,16 @@ swizzle_alsa_channels_6_8bit(_THIS)
 | 
			
		|||
 *  channels from Windows/Mac order to the format alsalib will want.
 | 
			
		||||
 */
 | 
			
		||||
static SDL_INLINE void
 | 
			
		||||
swizzle_alsa_channels(_THIS)
 | 
			
		||||
swizzle_alsa_channels(_THIS, void *buffer, Uint32 bufferlen)
 | 
			
		||||
{
 | 
			
		||||
    if (this->spec.channels == 6) {
 | 
			
		||||
        const Uint16 fmtsize = (this->spec.format & 0xFF);      /* bits/channel. */
 | 
			
		||||
        if (fmtsize == 16)
 | 
			
		||||
            swizzle_alsa_channels_6_16bit(this);
 | 
			
		||||
        else if (fmtsize == 8)
 | 
			
		||||
            swizzle_alsa_channels_6_8bit(this);
 | 
			
		||||
        else if (fmtsize == 32)
 | 
			
		||||
            swizzle_alsa_channels_6_32bit(this);
 | 
			
		||||
        else if (fmtsize == 64)
 | 
			
		||||
            swizzle_alsa_channels_6_64bit(this);
 | 
			
		||||
        switch (SDL_AUDIO_BITSIZE(this->spec.format)) {
 | 
			
		||||
            case 8: swizzle_alsa_channels_6_8bit(buffer, bufferlen); break;
 | 
			
		||||
            case 16: swizzle_alsa_channels_6_16bit(buffer, bufferlen); break;
 | 
			
		||||
            case 32: swizzle_alsa_channels_6_32bit(buffer, bufferlen); break;
 | 
			
		||||
            case 64: swizzle_alsa_channels_6_64bit(buffer, bufferlen); break;
 | 
			
		||||
            default: SDL_assert(!"unhandled bitsize"); break;
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /* !!! FIXME: update this for 7.1 if needed, later. */
 | 
			
		||||
| 
						 | 
				
			
			@ -303,19 +301,18 @@ swizzle_alsa_channels(_THIS)
 | 
			
		|||
static void
 | 
			
		||||
ALSA_PlayDevice(_THIS)
 | 
			
		||||
{
 | 
			
		||||
    int status;
 | 
			
		||||
    const Uint8 *sample_buf = (const Uint8 *) this->hidden->mixbuf;
 | 
			
		||||
    const int frame_size = (((int) (this->spec.format & 0xFF)) / 8) *
 | 
			
		||||
    const int frame_size = (((int) SDL_AUDIO_BITSIZE(this->spec.format)) / 8) *
 | 
			
		||||
                                this->spec.channels;
 | 
			
		||||
    snd_pcm_uframes_t frames_left = ((snd_pcm_uframes_t) this->spec.samples);
 | 
			
		||||
 | 
			
		||||
    swizzle_alsa_channels(this);
 | 
			
		||||
    swizzle_alsa_channels(this, this->hidden->mixbuf, frames_left);
 | 
			
		||||
 | 
			
		||||
    while ( frames_left > 0 && SDL_AtomicGet(&this->enabled) ) {
 | 
			
		||||
        /* !!! FIXME: This works, but needs more testing before going live */
 | 
			
		||||
        /* ALSA_snd_pcm_wait(this->hidden->pcm_handle, -1); */
 | 
			
		||||
        status = ALSA_snd_pcm_writei(this->hidden->pcm_handle,
 | 
			
		||||
                                     sample_buf, frames_left);
 | 
			
		||||
        int status = ALSA_snd_pcm_writei(this->hidden->pcm_handle,
 | 
			
		||||
                                         sample_buf, frames_left);
 | 
			
		||||
 | 
			
		||||
        if (status < 0) {
 | 
			
		||||
            if (status == -EAGAIN) {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
		Reference in a new issue