|
@@ -1782,14 +1782,16 @@ static int snd_pcm_lib_ioctl_fifo_size(struct snd_pcm_substream *substream,
|
|
|
{
|
|
|
struct snd_pcm_hw_params *params = arg;
|
|
|
snd_pcm_format_t format;
|
|
|
- int channels, width;
|
|
|
+ int channels;
|
|
|
+ ssize_t frame_size;
|
|
|
|
|
|
params->fifo_size = substream->runtime->hw.fifo_size;
|
|
|
if (!(substream->runtime->hw.info & SNDRV_PCM_INFO_FIFO_IN_FRAMES)) {
|
|
|
format = params_format(params);
|
|
|
channels = params_channels(params);
|
|
|
- width = snd_pcm_format_physical_width(format);
|
|
|
- params->fifo_size /= width * channels;
|
|
|
+ frame_size = snd_pcm_format_size(format, channels);
|
|
|
+ if (frame_size > 0)
|
|
|
+ params->fifo_size /= (unsigned)frame_size;
|
|
|
}
|
|
|
return 0;
|
|
|
}
|