| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
|
| |
The method control() is too complicated, and overengineered. Replace
it with two trivial functions: get_volume() and set_volume().
|
|
|
|
|
| |
The output plugin shouldn't know any specifics of the mixer API. Make
it return the mixer object, and let the caller deal with it.
|
|
|
|
|
| |
Similar to the decoder plugin API: added wrapper functions to increase
code readability.
|
|
|
|
|
| |
Initialization and deinitialization first, then tag functions, then
play/cancel/pause.
|
|
|
|
|
| |
If we move the plugin struct to a separate header, we don't have to
include the big fat output_api.h everywhere.
|
|
|
|
|
| |
Now that the output_command enum isn't exposed to output plugins
anymore, we can hide its definition within output_internal.h.
|
|
|
|
| |
Renamed variables.
|
|
|
|
|
| |
Don't call WildMidi_Init() if the configuration file does not exist.
Don't let libwildmidi clutter stderr with its warning message.
|
| |
|
| |
|
|
|
|
|
| |
The "decoder" configuration block may contain the configuration of one
decoder plugin.
|
|
|
|
| |
Preparing for per-plugin configuration sections in mpd.conf.
|
|
|
|
| |
Minimize header dependencies, again.
|
|
|
|
|
| |
Increase code readability, always use the wrapper functions instead of
calling the plugin method pointers directly.
|
|
|
|
|
|
| |
The decoder_plugin struct is used by both the MPD core and the decoder
plugin implementations. Move it to a shared header file, to minimize
header dependencies.
|
|
|
|
|
| |
If no "user" is configured, return from daemonize_set_user(). Save
one level of indent.
|
|
|
|
|
|
| |
If mpd.conf specifies a user, and MPD is invoked by exactly this user,
ignore the "user" setting. Don't bother to look up its groups and
don't attempt to change uid, it won't work anyway.
|
| |
|
|
|
|
| |
Print details on why the fork() fails.
|
|
|
|
|
| |
Moved the code which detaches from the parent process/session to a
separate function.
|
| |
|
| |
|
|
|
|
| |
This command shuffles a range of songs.
|
|
|
|
| |
Forgot the $(DESTDIR) prefix in the install-data-local target.
|
|
|
|
| |
When configured with --enable-documentation, use doxygen.
|
|
|
|
|
|
| |
Use delete_directory() for removing sub directories instead of
dirvec_clear(). This ensures that all memory occupied by
subdirectories of deleted directories is freed.
|
|
|
|
|
|
|
| |
When a directory is deleted, MPD deleted only the directory from the
database; it did not bother to walk the full tree to free all memory
and to remove deleted songs from the playlist. Replace a
dirvec_delete() with delete_directory().
|
|
|
|
|
| |
Pass the input_stream object to decoder_data(). Without it, the MPD
core does not see stream tags.
|
|
|
|
|
|
| |
When you change the filesystem charset, discard the old database file
and create a new one. The old database file will most likely contain
stale or invalid information.
|
|
|
|
| |
Use WildMidi_SampledSeek() for seeking in a MIDI file.
|
|
|
|
|
|
|
|
|
| |
Currently, only the sidplay decoder plugin requires C++, and in all
other cases, MPD could build well without a C++ compiler.
Unfortunately, autoconf/automake are confused when we have a
conditional AC_PROG_CXX check. We could add lots of workarounds for
individual problems, but let's just always require a C++ compiler, and
forget about this autotools limitation.
|
|
|
|
|
| |
The _WM_Info struct provides all we need, it is obtained by
WildMidi_GetInfo().
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
There are a few problems left in this plugin:
- fluidsynth decodes in real time, while MPD prefers to buffer as
quickly as possible; as a workaround, this plugin uses a timer
object to synchronize with real-time playback
- I don't know yet how fluidsynth tells me when the song has ended
- the "soundfont" configuration setting is not yet documented, and it
will likely change soon (in favor of a per-decoder configuration
block)
|
|
|
|
|
|
|
|
| |
When the sidplay plugin is disabled, "./configure" does not look for
the C++ compiler. This creates an odd situation: automake requires
the am__fastdepCXX conditional, although configure did not generate
it. Work around this autotools limitation by manually disabling
am__fastdepCXX.
|
| |
|
| |
|
|
|
|
|
| |
By accident, I committed a debug flag, which disallowed the decoder
thread to play files locally. Undo this hunk.
|
|
|
|
|
| |
The ffmpeg library supports the "True Audio Codec". The entry in
ffmpeg_suffixes was missing.
|
|
|
|
|
|
|
|
| |
When MPD is not playing, it may still remember which is the "current"
song. When you switch to "random" mode, MPD will always start playing
exactly this song. This defies the goal of "random" mode a little.
Clear the "current" song when MPD is not playing during the "random"
mode switch.
|
|
|
|
|
|
| |
The output_command library provides a command interface to the audio
outputs. It assumes the input comes from an untrusted source
(i.e. the client) and verifies all parameters.
|
|
|
|
|
|
| |
In addition to audio_format_valid(), provide functions which validate
only one attribute of an audio_format. These functions are reused by
audio_format_parse().
|
|
|
|
|
|
| |
Added audio_format_parse() in a separate library, with a modern
interface: return a GError instead of logging errors. This allows the
caller to deal with the error.
|
|
|
|
| |
port number
|
|
|
|
|
|
|
| |
When MPD explicitly starts playing, ignore the "REOPEN_AFTER" timeout.
This timeout was useful when MPD attempted to reopen a failed device
over and over, but it confuses users when they explicitly tell MPD to
start playing, while MPD insists to wait for the 10 seconds to pass.
|
|
|
|
| |
Merge some duplicate code into one function.
|
|
|
|
|
| |
When the pause() method fails, leave the pause loop, because calling
pause() on a closed device is not allowed.
|
|
|
|
|
|
| |
Fix a memory leak: it was not guaranteed that pcm_convert_deinit() was
called for each pcm_convert_init(). This patch always (de)initializes
the pcm_convert library when the audio_output.open flag is flipped.
|
|
|
|
| |
Renamed audio_output struct members.
|
|
|
|
|
| |
Use audio_format_frame_size() instead of
channels*audio_format_sample_size().
|