audio_format: added audio_format_frame_size()
A frame contains one sample per channel, thus it is sample_size * channels. This patch includes some cleanup for various locations where the sample size for 24 bit audio was still 3 bytes (instead of 4).
This commit is contained in:
parent
de2cb3f375
commit
96155a3376
@ -315,7 +315,7 @@ static int flushAudioBuffer(void)
|
|||||||
|
|
||||||
static size_t audio_buffer_size(const struct audio_format *af)
|
static size_t audio_buffer_size(const struct audio_format *af)
|
||||||
{
|
{
|
||||||
return (af->bits >> 3) * af->channels * (af->sample_rate >> 5);
|
return audio_format_frame_size(af) * (af->sample_rate >> 5);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void audio_buffer_resize(size_t size)
|
static void audio_buffer_resize(size_t size)
|
||||||
|
@ -288,7 +288,7 @@ configure_hw:
|
|||||||
if (err < 0)
|
if (err < 0)
|
||||||
goto error;
|
goto error;
|
||||||
|
|
||||||
ad->sampleSize = audio_format_sample_size(audioFormat) * audioFormat->channels;
|
ad->sampleSize = audio_format_frame_size(audioFormat);
|
||||||
|
|
||||||
DEBUG("ALSA device \"%s\" will be playing %i bit, %u channel audio at "
|
DEBUG("ALSA device \"%s\" will be playing %i bit, %u channel audio at "
|
||||||
"%u Hz\n", ad->device, audioFormat->bits,
|
"%u Hz\n", ad->device, audioFormat->bits,
|
||||||
|
@ -266,8 +266,7 @@ static int osx_openDevice(struct audio_output *audioOutput,
|
|||||||
streamDesc.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian;
|
streamDesc.mFormatFlags |= kLinearPCMFormatFlagIsBigEndian;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
streamDesc.mBytesPerPacket =
|
streamDesc.mBytesPerPacket = audio_format_frame_size(audioFormat);
|
||||||
audioFormat->channels * audio_format_sample_size(audioFormat);
|
|
||||||
streamDesc.mFramesPerPacket = 1;
|
streamDesc.mFramesPerPacket = 1;
|
||||||
streamDesc.mBytesPerFrame = streamDesc.mBytesPerPacket;
|
streamDesc.mBytesPerFrame = streamDesc.mBytesPerPacket;
|
||||||
streamDesc.mChannelsPerFrame = audioFormat->channels;
|
streamDesc.mChannelsPerFrame = audioFormat->channels;
|
||||||
@ -284,7 +283,7 @@ static int osx_openDevice(struct audio_output *audioOutput,
|
|||||||
|
|
||||||
/* create a buffer of 1s */
|
/* create a buffer of 1s */
|
||||||
od->bufferSize = (audioFormat->sample_rate) *
|
od->bufferSize = (audioFormat->sample_rate) *
|
||||||
(audioFormat->bits >> 3) * (audioFormat->channels);
|
audio_format_frame_size(audioFormat);
|
||||||
od->buffer = xrealloc(od->buffer, od->bufferSize);
|
od->buffer = xrealloc(od->buffer, od->bufferSize);
|
||||||
|
|
||||||
od->pos = 0;
|
od->pos = 0;
|
||||||
|
@ -61,9 +61,15 @@ static inline unsigned audio_format_sample_size(const struct audio_format *af)
|
|||||||
return 4;
|
return 4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline unsigned
|
||||||
|
audio_format_frame_size(const struct audio_format *af)
|
||||||
|
{
|
||||||
|
return audio_format_sample_size(af) * af->channels;
|
||||||
|
}
|
||||||
|
|
||||||
static inline double audio_format_time_to_size(const struct audio_format *af)
|
static inline double audio_format_time_to_size(const struct audio_format *af)
|
||||||
{
|
{
|
||||||
return af->sample_rate * af->channels * audio_format_sample_size(af);
|
return af->sample_rate * audio_format_frame_size(af);
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline double audioFormatSizeToTime(const struct audio_format *af)
|
static inline double audioFormatSizeToTime(const struct audio_format *af)
|
||||||
|
@ -40,7 +40,7 @@ Timer *timer_new(const struct audio_format *af)
|
|||||||
timer = xmalloc(sizeof(Timer));
|
timer = xmalloc(sizeof(Timer));
|
||||||
timer->time = 0;
|
timer->time = 0;
|
||||||
timer->started = 0;
|
timer->started = 0;
|
||||||
timer->rate = af->sample_rate * (af->bits / CHAR_BIT) * af->channels;
|
timer->rate = af->sample_rate * audio_format_frame_size(af);
|
||||||
|
|
||||||
return timer;
|
return timer;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user