aboutsummaryrefslogtreecommitdiffstats
path: root/src/decoder/pcm_decoder_plugin.c
diff options
context:
space:
mode:
authorMax Kellermann <max@duempel.org>2013-07-28 13:10:05 +0200
committerMax Kellermann <max@duempel.org>2013-07-28 13:10:05 +0200
commit6b6d9e64bda0ab19a3f6f13957f6625ba35c1d08 (patch)
treee9caa4738949a88fc736c37bb98f572a29ede31e /src/decoder/pcm_decoder_plugin.c
parentf016a99f2447e68d19dcccc68ecc47d12ac32e5b (diff)
downloadmpd-6b6d9e64bda0ab19a3f6f13957f6625ba35c1d08.tar.gz
mpd-6b6d9e64bda0ab19a3f6f13957f6625ba35c1d08.tar.xz
mpd-6b6d9e64bda0ab19a3f6f13957f6625ba35c1d08.zip
decoder/pcm: convert to C++
Diffstat (limited to 'src/decoder/pcm_decoder_plugin.c')
-rw-r--r--src/decoder/pcm_decoder_plugin.c108
1 files changed, 0 insertions, 108 deletions
diff --git a/src/decoder/pcm_decoder_plugin.c b/src/decoder/pcm_decoder_plugin.c
deleted file mode 100644
index d529cef5c..000000000
--- a/src/decoder/pcm_decoder_plugin.c
+++ /dev/null
@@ -1,108 +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 "decoder/pcm_decoder_plugin.h"
-#include "decoder_api.h"
-#include "util/byte_reverse.h"
-
-#include <glib.h>
-#include <unistd.h>
-#include <stdio.h> /* for SEEK_SET */
-
-#undef G_LOG_DOMAIN
-#define G_LOG_DOMAIN "pcm"
-
-static void
-pcm_stream_decode(struct decoder *decoder, struct input_stream *is)
-{
- static const struct audio_format audio_format = {
- .sample_rate = 44100,
- .format = SAMPLE_FORMAT_S16,
- .channels = 2,
- };
-
- const char *const mime = input_stream_get_mime_type(is);
- const bool reverse_endian = mime != NULL &&
- strcmp(mime, "audio/x-mpd-cdda-pcm-reverse") == 0;
-
- GError *error = NULL;
- enum decoder_command cmd;
-
- double time_to_size = audio_format_time_to_size(&audio_format);
-
- float total_time = -1;
- const goffset size = input_stream_get_size(is);
- if (size >= 0)
- total_time = size / time_to_size;
-
- decoder_initialized(decoder, &audio_format,
- input_stream_is_seekable(is), total_time);
-
- do {
- char buffer[4096];
-
- size_t nbytes = decoder_read(decoder, is,
- buffer, sizeof(buffer));
-
- if (nbytes == 0 && input_stream_lock_eof(is))
- break;
-
- if (reverse_endian)
- /* make sure we deliver samples in host byte order */
- reverse_bytes_16((uint16_t *)buffer,
- (uint16_t *)buffer,
- (uint16_t *)(buffer + nbytes));
-
- cmd = nbytes > 0
- ? decoder_data(decoder, is,
- buffer, nbytes, 0)
- : decoder_get_command(decoder);
- if (cmd == DECODE_COMMAND_SEEK) {
- goffset offset = (goffset)(time_to_size *
- decoder_seek_where(decoder));
- if (input_stream_lock_seek(is, offset, SEEK_SET,
- &error)) {
- decoder_command_finished(decoder);
- } else {
- g_warning("seeking failed: %s", error->message);
- g_error_free(error);
- decoder_seek_error(decoder);
- }
-
- cmd = DECODE_COMMAND_NONE;
- }
- } while (cmd == DECODE_COMMAND_NONE);
-}
-
-static const char *const pcm_mime_types[] = {
- /* for streams obtained by the cdio_paranoia input plugin */
- "audio/x-mpd-cdda-pcm",
-
- /* same as above, but with reverse byte order */
- "audio/x-mpd-cdda-pcm-reverse",
-
- NULL
-};
-
-const struct decoder_plugin pcm_decoder_plugin = {
- .name = "pcm",
- .stream_decode = pcm_stream_decode,
- .mime_types = pcm_mime_types,
-};