aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/pcm_format.c3
-rw-r--r--src/pcm_utils.h11
2 files changed, 13 insertions, 1 deletions
diff --git a/src/pcm_format.c b/src/pcm_format.c
index 148cd70ed..6e1e0906d 100644
--- a/src/pcm_format.c
+++ b/src/pcm_format.c
@@ -22,6 +22,7 @@
#include "pcm_dither.h"
#include "pcm_buffer.h"
#include "pcm_pack.h"
+#include "pcm_utils.h"
static void
pcm_convert_8_to_16(int16_t *out, const int8_t *in,
@@ -61,7 +62,7 @@ pcm_convert_to_16(struct pcm_buffer *buffer, struct pcm_dither *dither,
enum sample_format src_format, const void *src,
size_t src_size, size_t *dest_size_r)
{
- const void *src_end = (const char *)src + src_size;
+ const void *src_end = pcm_end_pointer(src, src_size);
unsigned num_samples;
int16_t *dest;
int32_t *dest32;
diff --git a/src/pcm_utils.h b/src/pcm_utils.h
index b6a6f3787..001423b37 100644
--- a/src/pcm_utils.h
+++ b/src/pcm_utils.h
@@ -25,6 +25,17 @@
#include <stdint.h>
/**
+ * Add a byte count to the specified pointer. This is a utility
+ * function to convert a source pointer and a byte count to an "end"
+ * pointer for use in loops.
+ */
+static inline const void *
+pcm_end_pointer(const void *p, size_t size)
+{
+ return (const char *)p + size;
+}
+
+/**
* Check if the value is within the range of the provided bit size,
* and caps it if necessary.
*/