# HG changeset patch # User arpi # Date 1019514786 0 # Node ID d141f1e9cc366cdbf4829b3524961cfbbf6a8d8e # Parent 0132c5747e8acd6f8abe12b0340198cfc4c5419a AFMT_AC3 autodetect/fallback to S16 diff -r 0132c5747e8a -r d141f1e9cc36 libao2/ao_alsa1x.c --- a/libao2/ao_alsa1x.c Mon Apr 22 21:36:12 2002 +0000 +++ b/libao2/ao_alsa1x.c Mon Apr 22 22:33:06 2002 +0000 @@ -125,9 +125,15 @@ case AFMT_U16_BE: alsa_format = SND_PCM_FORMAT_U16_BE; break; +#ifndef WORDS_BIGENDIAN + case AFMT_AC3: +#endif case AFMT_S16_LE: alsa_format = SND_PCM_FORMAT_S16_LE; break; +#ifdef WORDS_BIGENDIAN + case AFMT_AC3: +#endif case AFMT_S16_BE: alsa_format = SND_PCM_FORMAT_S16_BE; break; diff -r 0132c5747e8a -r d141f1e9cc36 libao2/ao_alsa5.c --- a/libao2/ao_alsa5.c Mon Apr 22 21:36:12 2002 +0000 +++ b/libao2/ao_alsa5.c Mon Apr 22 22:33:06 2002 +0000 @@ -87,9 +87,15 @@ case AFMT_U16_BE: alsa_format.format = SND_PCM_SFMT_U16_BE; break; +#ifndef WORDS_BIGENDIAN + case AFMT_AC3: +#endif case AFMT_S16_LE: alsa_format.format = SND_PCM_SFMT_S16_LE; break; +#ifdef WORDS_BIGENDIAN + case AFMT_AC3: +#endif case AFMT_S16_BE: alsa_format.format = SND_PCM_SFMT_S16_BE; break; diff -r 0132c5747e8a -r d141f1e9cc36 libao2/ao_alsa9.c --- a/libao2/ao_alsa9.c Mon Apr 22 21:36:12 2002 +0000 +++ b/libao2/ao_alsa9.c Mon Apr 22 22:33:06 2002 +0000 @@ -125,9 +125,15 @@ case AFMT_U16_BE: alsa_format = SND_PCM_FORMAT_U16_BE; break; +#ifndef WORDS_BIGENDIAN + case AFMT_AC3: +#endif case AFMT_S16_LE: alsa_format = SND_PCM_FORMAT_S16_LE; break; +#ifdef WORDS_BIGENDIAN + case AFMT_AC3: +#endif case AFMT_S16_BE: alsa_format = SND_PCM_FORMAT_S16_BE; break; diff -r 0132c5747e8a -r d141f1e9cc36 libao2/ao_nas.c --- a/libao2/ao_nas.c Mon Apr 22 21:36:12 2002 +0000 +++ b/libao2/ao_nas.c Mon Apr 22 22:33:06 2002 +0000 @@ -291,7 +291,13 @@ case AFMT_S8: return AuFormatLinearSigned8; case AFMT_U16_LE: return AuFormatLinearUnsigned16LSB; case AFMT_U16_BE: return AuFormatLinearUnsigned16MSB; +#ifndef WORDS_BIGENDIAN + case AFMT_AC3: +#endif case AFMT_S16_LE: return AuFormatLinearSigned16LSB; +#ifdef WORDS_BIGENDIAN + case AFMT_AC3: +#endif case AFMT_S16_BE: return AuFormatLinearSigned16MSB; case AFMT_MU_LAW: return AuFormatULAW8; default: return 0; diff -r 0132c5747e8a -r d141f1e9cc36 libao2/ao_oss.c --- a/libao2/ao_oss.c Mon Apr 22 21:36:12 2002 +0000 +++ b/libao2/ao_oss.c Mon Apr 22 22:33:06 2002 +0000 @@ -123,12 +123,18 @@ ao_data.samplerate=rate; ioctl (audio_fd, SNDCTL_DSP_SPEED, &ao_data.samplerate); } - + +ac3_retry: ao_data.format=format; - ioctl (audio_fd, SNDCTL_DSP_SETFMT, &ao_data.format); - if(format == AFMT_AC3 && ao_data.format != AFMT_AC3) { - printf("Can't set audio device %s to AC3 output\n", dsp); - return 0; + if( ioctl(audio_fd, SNDCTL_DSP_SETFMT, &ao_data.format)<0 || + ao_data.format != format) if(format == AFMT_AC3){ + printf("Can't set audio device %s to AC3 output, trying S16...\n", dsp); +#ifdef WORDS_BIGENDIAN + format=AFMT_S16_BE; +#else + format=AFMT_S16_LE; +#endif + goto ac3_retry; } printf("audio_setup: sample format: %s (requested: %s)\n", audio_out_format_name(ao_data.format), audio_out_format_name(format));