decoder/wildmidi: convert to C++

This commit is contained in:
Max Kellermann 2013-07-28 12:50:37 +02:00
parent 258d0ea97e
commit 33aedc887a
4 changed files with 54 additions and 22 deletions

View File

@ -594,7 +594,9 @@ libdecoder_plugins_a_SOURCES += src/decoder/fluidsynth_decoder_plugin.c
endif endif
if ENABLE_WILDMIDI if ENABLE_WILDMIDI
libdecoder_plugins_a_SOURCES += src/decoder/wildmidi_decoder_plugin.c libdecoder_plugins_a_SOURCES += \
src/decoder/WildmidiDecoderPlugin.cxx \
src/decoder/WildmidiDecoderPlugin.hxx
endif endif
if HAVE_FFMPEG if HAVE_FFMPEG

View File

@ -37,6 +37,7 @@
#include "decoder/MadDecoderPlugin.hxx" #include "decoder/MadDecoderPlugin.hxx"
#include "decoder/SndfileDecoderPlugin.hxx" #include "decoder/SndfileDecoderPlugin.hxx"
#include "decoder/Mpg123DecoderPlugin.hxx" #include "decoder/Mpg123DecoderPlugin.hxx"
#include "decoder/WildmidiDecoderPlugin.hxx"
#include <glib.h> #include <glib.h>
@ -46,7 +47,6 @@ extern const struct decoder_plugin mpcdec_decoder_plugin;
extern const struct decoder_plugin modplug_decoder_plugin; extern const struct decoder_plugin modplug_decoder_plugin;
extern const struct decoder_plugin mikmod_decoder_plugin; extern const struct decoder_plugin mikmod_decoder_plugin;
extern const struct decoder_plugin sidplay_decoder_plugin; extern const struct decoder_plugin sidplay_decoder_plugin;
extern const struct decoder_plugin wildmidi_decoder_plugin;
extern const struct decoder_plugin fluidsynth_decoder_plugin; extern const struct decoder_plugin fluidsynth_decoder_plugin;
const struct decoder_plugin *const decoder_plugins[] = { const struct decoder_plugin *const decoder_plugins[] = {

View File

@ -1,5 +1,5 @@
/* /*
* Copyright (C) 2003-2011 The Music Player Daemon Project * Copyright (C) 2003-2013 The Music Player Daemon Project
* http://www.musicpd.org * http://www.musicpd.org
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
@ -18,20 +18,21 @@
*/ */
#include "config.h" #include "config.h"
#include "WildmidiDecoderPlugin.hxx"
#include "decoder_api.h" #include "decoder_api.h"
#include "tag_handler.h" #include "tag_handler.h"
#include "glib_compat.h" #include "glib_compat.h"
#include <glib.h> #include <glib.h>
extern "C" {
#include <wildmidi_lib.h> #include <wildmidi_lib.h>
}
#undef G_LOG_DOMAIN #undef G_LOG_DOMAIN
#define G_LOG_DOMAIN "wildmidi" #define G_LOG_DOMAIN "wildmidi"
enum { static constexpr unsigned WILDMIDI_SAMPLE_RATE = 48000;
WILDMIDI_SAMPLE_RATE = 48000,
};
static bool static bool
wildmidi_init(const struct config_param *param) wildmidi_init(const struct config_param *param)
@ -60,20 +61,20 @@ static void
wildmidi_file_decode(struct decoder *decoder, const char *path_fs) wildmidi_file_decode(struct decoder *decoder, const char *path_fs)
{ {
static const struct audio_format audio_format = { static const struct audio_format audio_format = {
.sample_rate = WILDMIDI_SAMPLE_RATE, WILDMIDI_SAMPLE_RATE,
.format = SAMPLE_FORMAT_S16, SAMPLE_FORMAT_S16,
.channels = 2, 2,
}; };
midi *wm; midi *wm;
const struct _WM_Info *info; const struct _WM_Info *info;
enum decoder_command cmd; enum decoder_command cmd;
wm = WildMidi_Open(path_fs); wm = WildMidi_Open(path_fs);
if (wm == NULL) if (wm == nullptr)
return; return;
info = WildMidi_GetInfo(wm); info = WildMidi_GetInfo(wm);
if (info == NULL) { if (info == nullptr) {
WildMidi_Close(wm); WildMidi_Close(wm);
return; return;
} }
@ -86,14 +87,14 @@ wildmidi_file_decode(struct decoder *decoder, const char *path_fs)
int len; int len;
info = WildMidi_GetInfo(wm); info = WildMidi_GetInfo(wm);
if (info == NULL) if (info == nullptr)
break; break;
len = WildMidi_GetOutput(wm, buffer, sizeof(buffer)); len = WildMidi_GetOutput(wm, buffer, sizeof(buffer));
if (len <= 0) if (len <= 0)
break; break;
cmd = decoder_data(decoder, NULL, buffer, len, 0); cmd = decoder_data(decoder, nullptr, buffer, len, 0);
if (cmd == DECODE_COMMAND_SEEK) { if (cmd == DECODE_COMMAND_SEEK) {
unsigned long seek_where = WILDMIDI_SAMPLE_RATE * unsigned long seek_where = WILDMIDI_SAMPLE_RATE *
@ -118,11 +119,11 @@ wildmidi_scan_file(const char *path_fs,
const struct tag_handler *handler, void *handler_ctx) const struct tag_handler *handler, void *handler_ctx)
{ {
midi *wm = WildMidi_Open(path_fs); midi *wm = WildMidi_Open(path_fs);
if (wm == NULL) if (wm == nullptr)
return false; return false;
const struct _WM_Info *info = WildMidi_GetInfo(wm); const struct _WM_Info *info = WildMidi_GetInfo(wm);
if (info == NULL) { if (info == nullptr) {
WildMidi_Close(wm); WildMidi_Close(wm);
return false; return false;
} }
@ -137,14 +138,18 @@ wildmidi_scan_file(const char *path_fs,
static const char *const wildmidi_suffixes[] = { static const char *const wildmidi_suffixes[] = {
"mid", "mid",
NULL nullptr
}; };
const struct decoder_plugin wildmidi_decoder_plugin = { const struct decoder_plugin wildmidi_decoder_plugin = {
.name = "wildmidi", "wildmidi",
.init = wildmidi_init, wildmidi_init,
.finish = wildmidi_finish, wildmidi_finish,
.file_decode = wildmidi_file_decode, nullptr,
.scan_file = wildmidi_scan_file, wildmidi_file_decode,
.suffixes = wildmidi_suffixes, wildmidi_scan_file,
nullptr,
nullptr,
wildmidi_suffixes,
nullptr,
}; };

View File

@ -0,0 +1,25 @@
/*
* 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.
*/
#ifndef MPD_DECODER_WILDMIDI_HXX
#define MPD_DECODER_WILDMIDI_HXX
extern const struct decoder_plugin wildmidi_decoder_plugin;
#endif