From 128d8c7c15c0713cfccc42dfeea9b0cd9ed11d14 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Tue, 23 Sep 2008 23:59:54 +0200 Subject: audio_format: added audio_format_sample_size() The inline function audio_format_sample_size() calculates how many bytes each sample consumes. This function already takes into account that 24 bit samples are 4 bytes long, not 3. --- src/audio_format.h | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'src/audio_format.h') diff --git a/src/audio_format.h b/src/audio_format.h index d2461a33..e45d79cd 100644 --- a/src/audio_format.h +++ b/src/audio_format.h @@ -47,14 +47,27 @@ static inline int audio_format_equals(const struct audio_format *a, a->channels == b->channels; } +/** + * Returns the size of each (mono) sample in bytes. + */ +static inline unsigned audio_format_sample_size(const struct audio_format *af) +{ + if (af->bits <= 8) + return 1; + else if (af->bits <= 16) + return 2; + else + return 4; +} + static inline double audio_format_time_to_size(const struct audio_format *af) { - return af->sampleRate * af->bits * af->channels / 8.0; + return af->sampleRate * af->channels * audio_format_sample_size(af); } static inline double audioFormatSizeToTime(const struct audio_format *af) { - return 8.0 / af->bits / af->channels / af->sampleRate; + return 1.0 / audio_format_time_to_size(af); } #endif -- cgit v1.2.3