summaryrefslogtreecommitdiffstats
path: root/libao2/ao_alsa.c
diff options
context:
space:
mode:
authorhenry <henry@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-08-25 21:46:32 +0000
committerhenry <henry@b3059339-0415-0410-9bf9-f77b7e298cf2>2005-08-25 21:46:32 +0000
commit99bd39496997d8871e2a61c6dcabb15df7e05ae9 (patch)
tree632ce3ef359c4cb93f1c01934e5a4bf917d9cdf2 /libao2/ao_alsa.c
parent4b40fd60f0a514557c1de24dc608a1a2e74f0c1f (diff)
downloadmpv-99bd39496997d8871e2a61c6dcabb15df7e05ae9.tar.bz2
mpv-99bd39496997d8871e2a61c6dcabb15df7e05ae9.tar.xz
reordered bps calculation
git-svn-id: svn://svn.mplayerhq.hu/mplayer/trunk@16310 b3059339-0415-0410-9bf9-f77b7e298cf2
Diffstat (limited to 'libao2/ao_alsa.c')
-rw-r--r--libao2/ao_alsa.c67
1 files changed, 33 insertions, 34 deletions
diff --git a/libao2/ao_alsa.c b/libao2/ao_alsa.c
index f5d3c18aaa..2035a03793 100644
--- a/libao2/ao_alsa.c
+++ b/libao2/ao_alsa.c
@@ -284,7 +284,6 @@ static int init(int rate_hz, int channels, int format, int flags)
}
ao_data.samplerate = rate_hz;
- ao_data.bps = channels * rate_hz;
ao_data.format = format;
ao_data.channels = channels;
ao_data.outburst = OUTBURST;
@@ -330,34 +329,6 @@ static int init(int rate_hz, int channels, int format, int flags)
break;
}
- //setting bw according to the input-format. resolution seems to be always s16_le or
- //u16_le so 32bit is probably obsolet.
- switch(alsa_format)
- {
- case SND_PCM_FORMAT_S8:
- case SND_PCM_FORMAT_U8:
- ao_data.bps *= 1;
- break;
- case SND_PCM_FORMAT_S16_LE:
- case SND_PCM_FORMAT_U16_LE:
- case SND_PCM_FORMAT_S16_BE:
- case SND_PCM_FORMAT_U16_BE:
- ao_data.bps *= 2;
- break;
- case SND_PCM_FORMAT_S32_LE:
- case SND_PCM_FORMAT_S32_BE:
- case SND_PCM_FORMAT_FLOAT_LE:
- ao_data.bps *= 4;
- break;
- case -1:
- mp_msg(MSGT_AO,MSGL_ERR,"alsa-init: invalid format (%s) requested - output disabled\n",af_fmt2str_short(format));
- return(0);
- break;
- default:
- ao_data.bps *= 2;
- mp_msg(MSGT_AO,MSGL_WARN,"alsa-init: couldn't convert to right format. setting bps to: %d", ao_data.bps);
- }
-
//subdevice parsing
// set defaults
ao_mmap = 0;
@@ -537,12 +508,8 @@ static int init(int rate_hz, int channels, int format, int flags)
"alsa-init: format %s are not supported by hardware, trying default\n", af_fmt2str_short(format));
alsa_format = SND_PCM_FORMAT_S16_LE;
ao_data.format = AF_FORMAT_S16_LE;
- ao_data.bps = channels * rate_hz * 2;
}
- bytes_per_sample = ao_data.bps / ao_data.samplerate; //it should be here
-
-
if ((err = snd_pcm_hw_params_set_format(alsa_handler, alsa_hwparams,
alsa_format)) < 0)
{
@@ -567,6 +534,38 @@ static int init(int rate_hz, int channels, int format, int flags)
return(0);
}
+ ao_data.bps = ao_data.channels * ao_data.samplerate;
+
+ //setting bw according to the input-format. resolution seems to be always s16_le or
+ //u16_le so 32bit is probably obsolet.
+ switch(alsa_format)
+ {
+ case SND_PCM_FORMAT_S8:
+ case SND_PCM_FORMAT_U8:
+ ao_data.bps *= 1;
+ break;
+ case SND_PCM_FORMAT_S16_LE:
+ case SND_PCM_FORMAT_U16_LE:
+ case SND_PCM_FORMAT_S16_BE:
+ case SND_PCM_FORMAT_U16_BE:
+ ao_data.bps *= 2;
+ break;
+ case SND_PCM_FORMAT_S32_LE:
+ case SND_PCM_FORMAT_S32_BE:
+ case SND_PCM_FORMAT_FLOAT_LE:
+ ao_data.bps *= 4;
+ break;
+ case -1:
+ mp_msg(MSGT_AO,MSGL_ERR,"alsa-init: invalid format (%s) requested - output disabled\n",af_fmt2str_short(format));
+ return(0);
+ break;
+ default:
+ ao_data.bps *= 2;
+ mp_msg(MSGT_AO,MSGL_WARN,"alsa-init: couldn't convert to right format. setting bps to: %d", ao_data.bps);
+ }
+
+ bytes_per_sample = ao_data.bps / ao_data.samplerate;
+
#ifdef BUFFERTIME
{
int alsa_buffer_time = 500000; /* original 60 */
@@ -661,7 +660,7 @@ static int init(int rate_hz, int channels, int format, int flags)
}
bits_per_sample = snd_pcm_format_physical_width(alsa_format);
- bits_per_frame = bits_per_sample * channels;
+ bits_per_frame = bits_per_sample * ao_data.channels;
chunk_bytes = chunk_size * bits_per_frame / 8;
mp_msg(MSGT_AO,MSGL_V,"alsa-init: bits per sample (bps)=%i, bits per frame (bpf)=%i, chunk_bytes=%i\n",bits_per_sample,bits_per_frame,chunk_bytes);}