From cfeeb7af2e398b94db6db84c208976588d8cfcda Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Wed, 30 Jan 2013 21:27:37 +0100 Subject: test/run_encoder, ...: convert to C++ --- Makefile.am | 6 +-- src/audio_parser.h | 8 +++ src/pcm_volume.h | 8 +++ test/run_convert.c | 127 -------------------------------------------- test/run_convert.cxx | 127 ++++++++++++++++++++++++++++++++++++++++++++ test/run_encoder.c | 134 ----------------------------------------------- test/run_encoder.cxx | 134 +++++++++++++++++++++++++++++++++++++++++++++++ test/software_volume.c | 70 ------------------------- test/software_volume.cxx | 71 +++++++++++++++++++++++++ 9 files changed, 351 insertions(+), 334 deletions(-) delete mode 100644 test/run_convert.c create mode 100644 test/run_convert.cxx delete mode 100644 test/run_encoder.c create mode 100644 test/run_encoder.cxx delete mode 100644 test/software_volume.c create mode 100644 test/software_volume.cxx diff --git a/Makefile.am b/Makefile.am index 167b6176..357416a0 100644 --- a/Makefile.am +++ b/Makefile.am @@ -1257,7 +1257,7 @@ endif if ENABLE_ENCODER noinst_PROGRAMS += test/run_encoder -test_run_encoder_SOURCES = test/run_encoder.c \ +test_run_encoder_SOURCES = test/run_encoder.cxx \ test/stdbin.h \ src/tokenizer.c src/utils.c src/string_util.c \ src/Tag.cxx src/TagNames.c src/TagPool.cxx \ @@ -1295,7 +1295,7 @@ test_test_vorbis_encoder_LDADD = $(MPD_LIBS) \ $(GLIB_LIBS) endif -test_software_volume_SOURCES = test/software_volume.c \ +test_software_volume_SOURCES = test/software_volume.cxx \ test/stdbin.h \ src/audio_check.c \ src/audio_parser.c @@ -1311,7 +1311,7 @@ test_run_normalize_SOURCES = test/run_normalize.c \ test_run_normalize_LDADD = \ $(GLIB_LIBS) -test_run_convert_SOURCES = test/run_convert.c \ +test_run_convert_SOURCES = test/run_convert.cxx \ src/dsd2pcm/dsd2pcm.c \ src/audio_format.c \ src/audio_check.c \ diff --git a/src/audio_parser.h b/src/audio_parser.h index 49926999..bbe868f6 100644 --- a/src/audio_parser.h +++ b/src/audio_parser.h @@ -31,6 +31,10 @@ struct audio_format; +#ifdef __cplusplus +extern "C" { +#endif + /** * Parses a string in the form "SAMPLE_RATE:BITS:CHANNELS" into an * #audio_format. @@ -46,4 +50,8 @@ bool audio_format_parse(struct audio_format *dest, const char *src, bool mask, GError **error_r); +#ifdef __cplusplus +} +#endif + #endif diff --git a/src/pcm_volume.h b/src/pcm_volume.h index 4a4a4e45..c161a72c 100644 --- a/src/pcm_volume.h +++ b/src/pcm_volume.h @@ -65,6 +65,10 @@ pcm_volume_dither(void) return (r & 511) - ((r >> 9) & 511); } +#ifdef __cplusplus +extern "C" { +#endif + /** * Adjust the volume of the specified PCM buffer. * @@ -79,4 +83,8 @@ pcm_volume(void *buffer, size_t length, enum sample_format format, int volume); +#ifdef __cplusplus +} +#endif + #endif diff --git a/test/run_convert.c b/test/run_convert.c deleted file mode 100644 index bdb3d2cf..00000000 --- a/test/run_convert.c +++ /dev/null @@ -1,127 +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. - */ - -/* - * This program is a command line interface to MPD's PCM conversion - * library (pcm_convert.c). - * - */ - -#include "config.h" -#include "audio_parser.h" -#include "audio_format.h" -#include "pcm_convert.h" -#include "conf.h" -#include "util/fifo_buffer.h" -#include "stdbin.h" - -#include - -#include -#include -#include - -static void -my_log_func(const gchar *log_domain, G_GNUC_UNUSED GLogLevelFlags log_level, - const gchar *message, G_GNUC_UNUSED gpointer user_data) -{ - if (log_domain != NULL) - g_printerr("%s: %s\n", log_domain, message); - else - g_printerr("%s\n", message); -} - -const char * -config_get_string(gcc_unused enum ConfigOption option, - const char *default_value) -{ - return default_value; -} - -int main(int argc, char **argv) -{ - GError *error = NULL; - struct audio_format in_audio_format, out_audio_format; - struct pcm_convert_state state; - const void *output; - ssize_t nbytes; - size_t length; - - if (argc != 3) { - g_printerr("Usage: run_convert IN_FORMAT OUT_FORMAT OUT\n"); - return 1; - } - - g_log_set_default_handler(my_log_func, NULL); - - if (!audio_format_parse(&in_audio_format, argv[1], - false, &error)) { - g_printerr("Failed to parse audio format: %s\n", - error->message); - return 1; - } - - struct audio_format out_audio_format_mask; - if (!audio_format_parse(&out_audio_format_mask, argv[2], - true, &error)) { - g_printerr("Failed to parse audio format: %s\n", - error->message); - return 1; - } - - out_audio_format = in_audio_format; - audio_format_mask_apply(&out_audio_format, &out_audio_format_mask); - - const size_t in_frame_size = audio_format_frame_size(&in_audio_format); - - pcm_convert_init(&state); - - struct fifo_buffer *buffer = fifo_buffer_new(4096); - - while (true) { - void *p = fifo_buffer_write(buffer, &length); - assert(p != NULL); - - nbytes = read(0, p, length); - if (nbytes <= 0) - break; - - fifo_buffer_append(buffer, nbytes); - - const void *src = fifo_buffer_read(buffer, &length); - assert(src != NULL); - - length -= length % in_frame_size; - if (length == 0) - continue; - - fifo_buffer_consume(buffer, length); - - output = pcm_convert(&state, &in_audio_format, src, length, - &out_audio_format, &length, &error); - if (output == NULL) { - g_printerr("Failed to convert: %s\n", error->message); - return 2; - } - - G_GNUC_UNUSED ssize_t ignored = write(1, output, length); - } - - pcm_convert_deinit(&state); -} diff --git a/test/run_convert.cxx b/test/run_convert.cxx new file mode 100644 index 00000000..a71ebc2c --- /dev/null +++ b/test/run_convert.cxx @@ -0,0 +1,127 @@ +/* + * 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. + */ + +/* + * This program is a command line interface to MPD's PCM conversion + * library (pcm_convert.c). + * + */ + +#include "config.h" +#include "audio_parser.h" +#include "audio_format.h" +#include "pcm_convert.h" +#include "conf.h" +#include "util/fifo_buffer.h" +#include "stdbin.h" + +#include + +#include +#include +#include + +static void +my_log_func(const gchar *log_domain, G_GNUC_UNUSED GLogLevelFlags log_level, + const gchar *message, G_GNUC_UNUSED gpointer user_data) +{ + if (log_domain != NULL) + g_printerr("%s: %s\n", log_domain, message); + else + g_printerr("%s\n", message); +} + +const char * +config_get_string(gcc_unused enum ConfigOption option, + const char *default_value) +{ + return default_value; +} + +int main(int argc, char **argv) +{ + GError *error = NULL; + struct audio_format in_audio_format, out_audio_format; + struct pcm_convert_state state; + const void *output; + ssize_t nbytes; + size_t length; + + if (argc != 3) { + g_printerr("Usage: run_convert IN_FORMAT OUT_FORMAT OUT\n"); + return 1; + } + + g_log_set_default_handler(my_log_func, NULL); + + if (!audio_format_parse(&in_audio_format, argv[1], + false, &error)) { + g_printerr("Failed to parse audio format: %s\n", + error->message); + return 1; + } + + struct audio_format out_audio_format_mask; + if (!audio_format_parse(&out_audio_format_mask, argv[2], + true, &error)) { + g_printerr("Failed to parse audio format: %s\n", + error->message); + return 1; + } + + out_audio_format = in_audio_format; + audio_format_mask_apply(&out_audio_format, &out_audio_format_mask); + + const size_t in_frame_size = audio_format_frame_size(&in_audio_format); + + pcm_convert_init(&state); + + struct fifo_buffer *buffer = fifo_buffer_new(4096); + + while (true) { + void *p = fifo_buffer_write(buffer, &length); + assert(p != NULL); + + nbytes = read(0, p, length); + if (nbytes <= 0) + break; + + fifo_buffer_append(buffer, nbytes); + + const void *src = fifo_buffer_read(buffer, &length); + assert(src != NULL); + + length -= length % in_frame_size; + if (length == 0) + continue; + + fifo_buffer_consume(buffer, length); + + output = pcm_convert(&state, &in_audio_format, src, length, + &out_audio_format, &length, &error); + if (output == NULL) { + g_printerr("Failed to convert: %s\n", error->message); + return 2; + } + + G_GNUC_UNUSED ssize_t ignored = write(1, output, length); + } + + pcm_convert_deinit(&state); +} diff --git a/test/run_encoder.c b/test/run_encoder.c deleted file mode 100644 index db4d3af9..00000000 --- a/test/run_encoder.c +++ /dev/null @@ -1,134 +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 "config.h" -#include "encoder_list.h" -#include "encoder_plugin.h" -#include "audio_format.h" -#include "audio_parser.h" -#include "conf.h" -#include "stdbin.h" - -#include - -#include -#include - -static void -encoder_to_stdout(struct encoder *encoder) -{ - size_t length; - static char buffer[32768]; - - while ((length = encoder_read(encoder, buffer, sizeof(buffer))) > 0) { - G_GNUC_UNUSED ssize_t ignored = write(1, buffer, length); - } -} - -int main(int argc, char **argv) -{ - GError *error = NULL; - struct audio_format audio_format; - bool ret; - const char *encoder_name; - const struct encoder_plugin *plugin; - struct encoder *encoder; - struct config_param *param; - static char buffer[32768]; - ssize_t nbytes; - - /* parse command line */ - - if (argc > 3) { - g_printerr("Usage: run_encoder [ENCODER] [FORMAT] OUT\n"); - return 1; - } - - if (argc > 1) - encoder_name = argv[1]; - else - encoder_name = "vorbis"; - - audio_format_init(&audio_format, 44100, SAMPLE_FORMAT_S16, 2); - - /* create the encoder */ - - plugin = encoder_plugin_get(encoder_name); - if (plugin == NULL) { - g_printerr("No such encoder: %s\n", encoder_name); - return 1; - } - - param = config_new_param(NULL, -1); - config_add_block_param(param, "quality", "5.0", -1); - - encoder = encoder_init(plugin, param, &error); - if (encoder == NULL) { - g_printerr("Failed to initialize encoder: %s\n", - error->message); - g_error_free(error); - return 1; - } - - /* open the encoder */ - - if (argc > 2) { - ret = audio_format_parse(&audio_format, argv[2], - false, &error); - if (!ret) { - g_printerr("Failed to parse audio format: %s\n", - error->message); - g_error_free(error); - return 1; - } - } - - if (!encoder_open(encoder, &audio_format, &error)) { - g_printerr("Failed to open encoder: %s\n", - error->message); - g_error_free(error); - return 1; - } - - encoder_to_stdout(encoder); - - /* do it */ - - while ((nbytes = read(0, buffer, sizeof(buffer))) > 0) { - ret = encoder_write(encoder, buffer, nbytes, &error); - if (!ret) { - g_printerr("encoder_write() failed: %s\n", - error->message); - g_error_free(error); - return 1; - } - - encoder_to_stdout(encoder); - } - - ret = encoder_end(encoder, &error); - if (!ret) { - g_printerr("encoder_flush() failed: %s\n", - error->message); - g_error_free(error); - return 1; - } - - encoder_to_stdout(encoder); -} diff --git a/test/run_encoder.cxx b/test/run_encoder.cxx new file mode 100644 index 00000000..6a141296 --- /dev/null +++ b/test/run_encoder.cxx @@ -0,0 +1,134 @@ +/* + * 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 "config.h" +#include "encoder_list.h" +#include "encoder_plugin.h" +#include "audio_format.h" +#include "audio_parser.h" +#include "conf.h" +#include "stdbin.h" + +#include + +#include +#include + +static void +encoder_to_stdout(struct encoder *encoder) +{ + size_t length; + static char buffer[32768]; + + while ((length = encoder_read(encoder, buffer, sizeof(buffer))) > 0) { + G_GNUC_UNUSED ssize_t ignored = write(1, buffer, length); + } +} + +int main(int argc, char **argv) +{ + GError *error = NULL; + struct audio_format audio_format; + bool ret; + const char *encoder_name; + const struct encoder_plugin *plugin; + struct encoder *encoder; + struct config_param *param; + static char buffer[32768]; + + /* parse command line */ + + if (argc > 3) { + g_printerr("Usage: run_encoder [ENCODER] [FORMAT] OUT\n"); + return 1; + } + + if (argc > 1) + encoder_name = argv[1]; + else + encoder_name = "vorbis"; + + audio_format_init(&audio_format, 44100, SAMPLE_FORMAT_S16, 2); + + /* create the encoder */ + + plugin = encoder_plugin_get(encoder_name); + if (plugin == NULL) { + g_printerr("No such encoder: %s\n", encoder_name); + return 1; + } + + param = config_new_param(NULL, -1); + config_add_block_param(param, "quality", "5.0", -1); + + encoder = encoder_init(plugin, param, &error); + if (encoder == NULL) { + g_printerr("Failed to initialize encoder: %s\n", + error->message); + g_error_free(error); + return 1; + } + + /* open the encoder */ + + if (argc > 2) { + ret = audio_format_parse(&audio_format, argv[2], + false, &error); + if (!ret) { + g_printerr("Failed to parse audio format: %s\n", + error->message); + g_error_free(error); + return 1; + } + } + + if (!encoder_open(encoder, &audio_format, &error)) { + g_printerr("Failed to open encoder: %s\n", + error->message); + g_error_free(error); + return 1; + } + + encoder_to_stdout(encoder); + + /* do it */ + + ssize_t nbytes; + while ((nbytes = read(0, buffer, sizeof(buffer))) > 0) { + ret = encoder_write(encoder, buffer, nbytes, &error); + if (!ret) { + g_printerr("encoder_write() failed: %s\n", + error->message); + g_error_free(error); + return 1; + } + + encoder_to_stdout(encoder); + } + + ret = encoder_end(encoder, &error); + if (!ret) { + g_printerr("encoder_flush() failed: %s\n", + error->message); + g_error_free(error); + return 1; + } + + encoder_to_stdout(encoder); +} diff --git a/test/software_volume.c b/test/software_volume.c deleted file mode 100644 index 2357da67..00000000 --- a/test/software_volume.c +++ /dev/null @@ -1,70 +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. - */ - -/* - * This program is a command line interface to MPD's software volume - * library (pcm_volume.c). - * - */ - -#include "config.h" -#include "pcm_volume.h" -#include "audio_parser.h" -#include "audio_format.h" -#include "stdbin.h" - -#include - -#include -#include - -int main(int argc, char **argv) -{ - GError *error = NULL; - struct audio_format audio_format; - bool ret; - static char buffer[4096]; - ssize_t nbytes; - - if (argc > 2) { - g_printerr("Usage: software_volume [FORMAT] OUT\n"); - return 1; - } - - if (argc > 1) { - ret = audio_format_parse(&audio_format, argv[1], - false, &error); - if (!ret) { - g_printerr("Failed to parse audio format: %s\n", - error->message); - return 1; - } - } else - audio_format_init(&audio_format, 48000, SAMPLE_FORMAT_S16, 2); - - while ((nbytes = read(0, buffer, sizeof(buffer))) > 0) { - if (!pcm_volume(buffer, nbytes, audio_format.format, - PCM_VOLUME_1 / 2)) { - g_printerr("pcm_volume() has failed\n"); - return 2; - } - - G_GNUC_UNUSED ssize_t ignored = write(1, buffer, nbytes); - } -} diff --git a/test/software_volume.cxx b/test/software_volume.cxx new file mode 100644 index 00000000..18068665 --- /dev/null +++ b/test/software_volume.cxx @@ -0,0 +1,71 @@ +/* + * 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. + */ + +/* + * This program is a command line interface to MPD's software volume + * library (pcm_volume.c). + * + */ + +#include "config.h" +#include "pcm_volume.h" +#include "audio_parser.h" +#include "audio_format.h" +#include "stdbin.h" + +#include + +#include +#include + +int main(int argc, char **argv) +{ + GError *error = NULL; + struct audio_format audio_format; + bool ret; + static char buffer[4096]; + ssize_t nbytes; + + if (argc > 2) { + g_printerr("Usage: software_volume [FORMAT] OUT\n"); + return 1; + } + + if (argc > 1) { + ret = audio_format_parse(&audio_format, argv[1], + false, &error); + if (!ret) { + g_printerr("Failed to parse audio format: %s\n", + error->message); + return 1; + } + } else + audio_format_init(&audio_format, 48000, SAMPLE_FORMAT_S16, 2); + + while ((nbytes = read(0, buffer, sizeof(buffer))) > 0) { + if (!pcm_volume(buffer, nbytes, + sample_format(audio_format.format), + PCM_VOLUME_1 / 2)) { + g_printerr("pcm_volume() has failed\n"); + return 2; + } + + G_GNUC_UNUSED ssize_t ignored = write(1, buffer, nbytes); + } +} -- cgit v1.2.3