]> code.delx.au - pulseaudio/commitdiff
add byte-to-usec and usec-to-byte converters that round up, not down
authorLennart Poettering <lennart@poettering.net>
Thu, 28 Aug 2008 15:53:01 +0000 (17:53 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 28 Aug 2008 15:53:01 +0000 (17:53 +0200)
src/pulsecore/sample-util.c
src/pulsecore/sample-util.h

index 4b2efe5e89d4f6557371eb249cfe289d6d39f167..b4234af5f71e0c1e3425bad8dadd78818cb78089 100644 (file)
@@ -31,6 +31,8 @@
 #include <liboil/liboilfuncs.h>
 #include <liboil/liboil.h>
 
+#include <pulse/timeval.h>
+
 #include <pulsecore/log.h>
 #include <pulsecore/macro.h>
 #include <pulsecore/g711.h>
@@ -981,3 +983,34 @@ void pa_sample_clamp(pa_sample_format_t format, void *dst, size_t dstr, const vo
         }
     }
 }
+
+/* Similar to pa_bytes_to_usec() but rounds up, not down */
+
+pa_usec_t pa_bytes_to_usec_round_up(uint64_t length, const pa_sample_spec *spec) {
+    size_t fs;
+    pa_usec_t usec;
+
+    pa_assert(spec);
+
+    fs = pa_frame_size(spec);
+    length = (length + fs - 1) / fs;
+
+    usec = (pa_usec_t) length * PA_USEC_PER_SEC;
+
+    return (usec + spec->rate - 1) / spec->rate;
+}
+
+/* Similar to pa_usec_to_bytes() but rounds up, not down */
+
+size_t pa_usec_to_bytes_round_up(pa_usec_t t, const pa_sample_spec *spec) {
+    uint64_t u;
+    pa_assert(spec);
+
+    u = (uint64_t) t * (uint64_t) spec->rate;
+
+    u = (u + PA_USEC_PER_SEC - 1) / PA_USEC_PER_SEC;
+
+    u *= pa_frame_size(spec);
+
+    return (size_t) u;
+}
index cef7075067d34019b19ec9ad420d80cfb859c7b3..06ecb72473e7f44fa9960d6b48dcc5b411d06b79 100644 (file)
@@ -78,4 +78,7 @@ void pa_deinterleave(const void *src, void *dst[], unsigned channels, size_t ss,
 
 void pa_sample_clamp(pa_sample_format_t format, void *dst, size_t dstr, const void *src, size_t sstr, unsigned n);
 
+pa_usec_t pa_bytes_to_usec_round_up(uint64_t length, const pa_sample_spec *spec);
+size_t pa_usec_to_bytes_round_up(pa_usec_t t, const pa_sample_spec *spec);
+
 #endif