libobs/media-io: Add funcs to convert between nanoseconds/frames

Uses 128bit integer math to prevent overflow
This commit is contained in:
jp9000
2015-12-15 20:47:50 -08:00
parent 9f9a4bc3f3
commit fc057f6d88

View File

@@ -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