From f32fbd9ed13bc6017f72928a49c43c6bf73fd615 Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 16 Oct 2013 20:54:51 +0200 Subject: pcm_pack: convert to C++ --- src/pcm/PcmConvert.cxx | 1 - src/pcm/PcmExport.cxx | 2 +- src/pcm/PcmFormat.cxx | 1 - src/pcm/PcmPack.cxx | 77 ++++++++++++++++++++++++++++++++++++++++++++++++++ src/pcm/PcmPack.hxx | 54 +++++++++++++++++++++++++++++++++++ src/pcm/pcm_pack.c | 77 -------------------------------------------------- src/pcm/pcm_pack.h | 55 ------------------------------------ 7 files changed, 132 insertions(+), 135 deletions(-) create mode 100644 src/pcm/PcmPack.cxx create mode 100644 src/pcm/PcmPack.hxx delete mode 100644 src/pcm/pcm_pack.c delete mode 100644 src/pcm/pcm_pack.h (limited to 'src') diff --git a/src/pcm/PcmConvert.cxx b/src/pcm/PcmConvert.cxx index 95361ee1b..6061aee88 100644 --- a/src/pcm/PcmConvert.cxx +++ b/src/pcm/PcmConvert.cxx @@ -21,7 +21,6 @@ #include "PcmConvert.hxx" #include "PcmChannels.hxx" #include "PcmFormat.hxx" -#include "pcm_pack.h" #include "AudioFormat.hxx" #include "util/Error.hxx" #include "util/Domain.hxx" diff --git a/src/pcm/PcmExport.cxx b/src/pcm/PcmExport.cxx index 762411f59..389670b6f 100644 --- a/src/pcm/PcmExport.cxx +++ b/src/pcm/PcmExport.cxx @@ -20,9 +20,9 @@ #include "config.h" #include "PcmExport.hxx" #include "PcmDsdUsb.hxx" +#include "PcmPack.hxx" extern "C" { -#include "pcm_pack.h" #include "util/byte_reverse.h" } diff --git a/src/pcm/PcmFormat.cxx b/src/pcm/PcmFormat.cxx index b4307ca1f..a0de163ba 100644 --- a/src/pcm/PcmFormat.cxx +++ b/src/pcm/PcmFormat.cxx @@ -21,7 +21,6 @@ #include "PcmFormat.hxx" #include "PcmDither.hxx" #include "PcmBuffer.hxx" -#include "pcm_pack.h" #include "PcmUtils.hxx" #include diff --git a/src/pcm/PcmPack.cxx b/src/pcm/PcmPack.cxx new file mode 100644 index 000000000..fa020bf63 --- /dev/null +++ b/src/pcm/PcmPack.cxx @@ -0,0 +1,77 @@ +/* + * Copyright (C) 2003-2013 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 "PcmPack.hxx" + +#include + +static void +pack_sample(uint8_t *dest, const int32_t *src0) +{ + const uint8_t *src = (const uint8_t *)src0; + + if (G_BYTE_ORDER == G_BIG_ENDIAN) + ++src; + + *dest++ = *src++; + *dest++ = *src++; + *dest++ = *src++; +} + +void +pcm_pack_24(uint8_t *dest, const int32_t *src, const int32_t *src_end) +{ + /* duplicate loop to help the compiler's optimizer (constant + parameter to the pack_sample() inline function) */ + + while (src < src_end) { + pack_sample(dest, src++); + dest += 3; + } +} + +static void +unpack_sample(int32_t *dest0, const uint8_t *src) +{ + uint8_t *dest = (uint8_t *)dest0; + + if (G_BYTE_ORDER == G_BIG_ENDIAN) + /* extend the sign bit to the most fourth byte */ + *dest++ = *src & 0x80 ? 0xff : 0x00; + + *dest++ = *src++; + *dest++ = *src++; + *dest++ = *src; + + if (G_BYTE_ORDER == G_LITTLE_ENDIAN) + /* extend the sign bit to the most fourth byte */ + *dest++ = *src & 0x80 ? 0xff : 0x00; +} + +void +pcm_unpack_24(int32_t *dest, const uint8_t *src, const uint8_t *src_end) +{ + /* duplicate loop to help the compiler's optimizer (constant + parameter to the unpack_sample() inline function) */ + + while (src < src_end) { + unpack_sample(dest++, src); + src += 3; + } +} diff --git a/src/pcm/PcmPack.hxx b/src/pcm/PcmPack.hxx new file mode 100644 index 000000000..aed011767 --- /dev/null +++ b/src/pcm/PcmPack.hxx @@ -0,0 +1,54 @@ +/* + * Copyright (C) 2003-2013 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. + */ + +/** \file + * + * Library for working with packed 24 bit samples. + */ + +#ifndef PCM_PACK_HXX +#define PCM_PACK_HXX + +#include + +/** + * Converts padded 24 bit samples (4 bytes per sample) to packed 24 + * bit samples (3 bytes per sample). + * + * This function can be used to convert a buffer in-place. + * + * @param dest the destination buffer (array of triples) + * @param src the source buffer + * @param num_samples the number of samples to convert + */ +void +pcm_pack_24(uint8_t *dest, const int32_t *src, const int32_t *src_end); + +/** + * Converts packed 24 bit samples (3 bytes per sample) to padded 24 + * bit samples (4 bytes per sample). + * + * @param dest the destination buffer + * @param src the source buffer (array of triples) + * @param num_samples the number of samples to convert + */ +void +pcm_unpack_24(int32_t *dest, const uint8_t *src, const uint8_t *src_end); + +#endif diff --git a/src/pcm/pcm_pack.c b/src/pcm/pcm_pack.c deleted file mode 100644 index 921d880c0..000000000 --- a/src/pcm/pcm_pack.c +++ /dev/null @@ -1,77 +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. - */ - -#include "pcm_pack.h" - -#include - -static void -pack_sample(uint8_t *dest, const int32_t *src0) -{ - const uint8_t *src = (const uint8_t *)src0; - - if (G_BYTE_ORDER == G_BIG_ENDIAN) - ++src; - - *dest++ = *src++; - *dest++ = *src++; - *dest++ = *src++; -} - -void -pcm_pack_24(uint8_t *dest, const int32_t *src, const int32_t *src_end) -{ - /* duplicate loop to help the compiler's optimizer (constant - parameter to the pack_sample() inline function) */ - - while (src < src_end) { - pack_sample(dest, src++); - dest += 3; - } -} - -static void -unpack_sample(int32_t *dest0, const uint8_t *src) -{ - uint8_t *dest = (uint8_t *)dest0; - - if (G_BYTE_ORDER == G_BIG_ENDIAN) - /* extend the sign bit to the most fourth byte */ - *dest++ = *src & 0x80 ? 0xff : 0x00; - - *dest++ = *src++; - *dest++ = *src++; - *dest++ = *src; - - if (G_BYTE_ORDER == G_LITTLE_ENDIAN) - /* extend the sign bit to the most fourth byte */ - *dest++ = *src & 0x80 ? 0xff : 0x00; -} - -void -pcm_unpack_24(int32_t *dest, const uint8_t *src, const uint8_t *src_end) -{ - /* duplicate loop to help the compiler's optimizer (constant - parameter to the unpack_sample() inline function) */ - - while (src < src_end) { - unpack_sample(dest++, src); - src += 3; - } -} diff --git a/src/pcm/pcm_pack.h b/src/pcm/pcm_pack.h deleted file mode 100644 index f3184b403..000000000 --- a/src/pcm/pcm_pack.h +++ /dev/null @@ -1,55 +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. - */ - -/** \file - * - * Library for working with packed 24 bit samples. - */ - -#ifndef PCM_PACK_H -#define PCM_PACK_H - -#include -#include - -/** - * Converts padded 24 bit samples (4 bytes per sample) to packed 24 - * bit samples (3 bytes per sample). - * - * This function can be used to convert a buffer in-place. - * - * @param dest the destination buffer (array of triples) - * @param src the source buffer - * @param num_samples the number of samples to convert - */ -void -pcm_pack_24(uint8_t *dest, const int32_t *src, const int32_t *src_end); - -/** - * Converts packed 24 bit samples (3 bytes per sample) to padded 24 - * bit samples (4 bytes per sample). - * - * @param dest the destination buffer - * @param src the source buffer (array of triples) - * @param num_samples the number of samples to convert - */ -void -pcm_unpack_24(int32_t *dest, const uint8_t *src, const uint8_t *src_end); - -#endif -- cgit v1.2.3