diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/pcm_byteswap.c | 75 | ||||
-rw-r--r-- | src/pcm_byteswap.h | 67 | ||||
-rw-r--r-- | src/pcm_export.c | 26 | ||||
-rw-r--r-- | src/pcm_export.h | 8 |
4 files changed, 24 insertions, 152 deletions
diff --git a/src/pcm_byteswap.c b/src/pcm_byteswap.c deleted file mode 100644 index 0a7e2fbb6..000000000 --- a/src/pcm_byteswap.c +++ /dev/null @@ -1,75 +0,0 @@ -/* - * Copyright (C) 2003-2012 The Music Player Daemon Project - * http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#include "config.h" -#include "pcm_byteswap.h" -#include "pcm_buffer.h" -#include "util/byte_reverse.h" - -#include <assert.h> - -const int16_t *pcm_byteswap_16(struct pcm_buffer *buffer, - const int16_t *src, size_t len) -{ - int16_t *buf = pcm_buffer_get(buffer, len); - - assert(buf != NULL); - - const uint8_t *src8 = (const uint8_t *)src; - const void *src_end = src8 + len; - - reverse_bytes_16((uint16_t *)buf, (const uint16_t *)src, src_end); - return buf; -} - -const int32_t *pcm_byteswap_32(struct pcm_buffer *buffer, - const int32_t *src, size_t len) -{ - int32_t *buf = pcm_buffer_get(buffer, len); - - assert(buf != NULL); - - const uint8_t *src8 = (const uint8_t *)src; - const void *src_end = src8 + len; - - reverse_bytes_32((uint32_t *)buf, (const uint32_t *)src, src_end); - return buf; -} - -const void * -pcm_byteswap(struct pcm_buffer *buffer, enum sample_format format, - const void *_src, size_t size) -{ - const uint8_t *const src = _src; - - if (size <= 1) - return src; - - size_t sample_size = sample_format_size(format); - if (sample_size <= 1) - return src; - - assert(size % sample_size == 0); - - uint8_t *dest = pcm_buffer_get(buffer, size); - assert(dest != NULL); - - reverse_bytes(dest, src, src + size, sample_size); - return dest; -} diff --git a/src/pcm_byteswap.h b/src/pcm_byteswap.h deleted file mode 100644 index 0836a2512..000000000 --- a/src/pcm_byteswap.h +++ /dev/null @@ -1,67 +0,0 @@ -/* - * Copyright (C) 2003-2011 The Music Player Daemon Project - * http://www.musicpd.org - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. - */ - -#ifndef MPD_PCM_BYTESWAP_H -#define MPD_PCM_BYTESWAP_H - -#include "audio_format.h" - -#include <stdint.h> -#include <stddef.h> - -struct pcm_buffer; - -/** - * Changes the endianness of 16 bit PCM data. - * - * @param buffer the destination pcm_buffer object - * @param src the source PCM buffer - * @param src_size the number of bytes in #src - * @return the destination buffer - */ -const int16_t *pcm_byteswap_16(struct pcm_buffer *buffer, - const int16_t *src, size_t len); - -/** - * Changes the endianness of 32-bit (or 24-bit) PCM data. - * - * @param buffer the destination pcm_buffer object - * @param src the source PCM buffer - * @param src_size the number of bytes in #src - * @return the destination buffer - */ -const int32_t *pcm_byteswap_32(struct pcm_buffer *buffer, - const int32_t *src, size_t len); - -/** - * Changes the endianness of PCM data. - * - * @param buffer the destination pcm_buffer object - * @param format the sample format (both input and output) - * @param src the source PCM buffer - * @param src_size the number of bytes in #src - * @return the destination buffer, or NULL if the sample format is not - * supported - */ -G_GNUC_MALLOC -const void * -pcm_byteswap(struct pcm_buffer *buffer, enum sample_format format, - const void *src, size_t size); - -#endif diff --git a/src/pcm_export.c b/src/pcm_export.c index 4c08394ea..68b94b10a 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; diff --git a/src/pcm_export.h b/src/pcm_export.h index 198b1d6a8..570092eb9 100644 --- a/src/pcm_export.h +++ b/src/pcm_export.h @@ -41,12 +41,12 @@ struct pcm_export_state { */ struct pcm_buffer reverse_buffer; - enum sample_format sample_format; - /** - * Export the samples in reverse byte order? + * Export the samples in reverse byte order? A non-zero value + * means the option is enabled and represents the size of each + * sample (2 or bigger). */ - bool reverse_endian; + uint8_t reverse_endian; }; /** |