aboutsummaryrefslogtreecommitdiff
path: root/src/pcm_export.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2012-03-21 20:55:18 +0100
committerMax Kellermann <max@duempel.org>2012-03-21 21:18:11 +0100
commit9ec9a8705e667280a69abf8f963db8e4ec8f4cd2 (patch)
tree166fdff7360a8e72c43a160522959c34df147fc5 /src/pcm_export.c
parent170635e3a6fbbdb2274f6ecd164c2c363d4e80b4 (diff)
pcm_export: use the byte_reverse library directly
Delete the now-unused pcm_byteswap library, and optimize the pcm_export_state object.
Diffstat (limited to 'src/pcm_export.c')
-rw-r--r--src/pcm_export.c26
1 files changed, 20 insertions, 6 deletions
diff --git a/src/pcm_export.c b/src/pcm_export.c
index 4c08394e..68b94b10 100644
--- a/src/pcm_export.c
+++ b/src/pcm_export.c
@@ -19,7 +19,7 @@
#include "config.h"
#include "pcm_export.h"
-#include "pcm_byteswap.h"
+#include "util/byte_reverse.h"
void
pcm_export_init(struct pcm_export_state *state)
@@ -37,17 +37,31 @@ pcm_export_open(struct pcm_export_state *state,
enum sample_format sample_format,
bool reverse_endian)
{
- state->sample_format = sample_format;
- state->reverse_endian = reverse_endian;
+ state->reverse_endian = 0;
+ if (reverse_endian) {
+ size_t sample_size = sample_format_size(sample_format);
+ assert(sample_size <= 0xff);
+
+ if (sample_size > 1)
+ state->reverse_endian = sample_size;
+ }
}
const void *
pcm_export(struct pcm_export_state *state, const void *data, size_t size,
size_t *dest_size_r)
{
- if (state->reverse_endian)
- data = pcm_byteswap(&state->reverse_buffer,
- state->sample_format, data, size);
+ if (state->reverse_endian > 0) {
+ assert(state->reverse_endian >= 2);
+
+ void *dest = pcm_buffer_get(&state->reverse_buffer, size);
+ assert(dest != NULL);
+
+ const uint8_t *src = data, *src_end = src + size;
+ reverse_bytes(dest, src, src_end, state->reverse_endian);
+
+ data = dest;
+ }
*dest_size_r = size;
return data;