소스 검색

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

Uses 128bit integer math to prevent overflow
jp9000 9 년 전
부모
커밋
fc057f6d88
1개의 변경된 파일19개의 추가작업 그리고 0개의 파일을 삭제
  1. 19 0
      libobs/media-io/audio-io.h

+ 19 - 0
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