From fc057f6d887a45ef6108eec3d058afbee490ffd6 Mon Sep 17 00:00:00 2001 From: jp9000 Date: Tue, 15 Dec 2015 20:47:50 -0800 Subject: [PATCH] libobs/media-io: Add funcs to convert between nanoseconds/frames Uses 128bit integer math to prevent overflow --- libobs/media-io/audio-io.h | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/libobs/media-io/audio-io.h b/libobs/media-io/audio-io.h index d140ef418..a495cb339 100644 --- a/libobs/media-io/audio-io.h +++ b/libobs/media-io/audio-io.h @@ -19,6 +19,7 @@ #include "media-io-defs.h" #include "../util/c99defs.h" +#include "../util/util_uint128.h" #ifdef __cplusplus extern "C" { @@ -167,6 +168,24 @@ static inline size_t get_audio_size(enum audio_format format, frames; } +static inline uint64_t audio_frames_to_ns(size_t sample_rate, + uint64_t frames) +{ + util_uint128_t val; + val = util_mul64_64(frames, 1000000000ULL); + val = util_div128_32(val, (uint32_t)sample_rate); + return val.low; +} + +static inline uint64_t ns_to_audio_frames(size_t sample_rate, + uint64_t frames) +{ + util_uint128_t val; + val = util_mul64_64(frames, sample_rate); + val = util_div128_32(val, 1000000000ULL); + return val.low; +} + #define AUDIO_OUTPUT_SUCCESS 0 #define AUDIO_OUTPUT_INVALIDPARAM -1 #define AUDIO_OUTPUT_FAIL -2