Commit Graph

3672 Commits

Author SHA1 Message Date
Max Kellermann
9206f54979 state_file: eliminated the sf_callbacks array
There are very few callbacks, and they are not meant to be pluggable.
Let's eliminate the array and call the load/save functions manually.
2009-07-14 21:15:12 +02:00
Serge Ziryukin
75c0a33ec5 flac: load external cue sheet when no internal one
External cue sheet file for "file.flac" should be named as "file.flac.cue".
2009-07-09 19:01:24 +02:00
Bart Nagel
8ae9b45da0 Implement ArtistSort tag 2009-07-09 19:00:41 +02:00
Max Kellermann
1eebbc746f decoder/sndfile: new decoder plugin based on libsndfile 2009-07-07 08:58:51 +02:00
Max Kellermann
adb2f66ced tag_id3: revised "performer" tag support
According to the ID3 2.4 documentation, "TOPE" is "Original
artist/performer", not "performer".  Removed "TOPE" support.  Instead,
map TPE3 ("Conductor/performer refinement") and TPE4 ("Interpreted,
remixed, or otherwise modified by") to "performer".
2009-07-07 08:00:21 +02:00
Max Kellermann
7246d67263 tag: added tag "AlbumArtistSort"
The tag_id3.c library supports both the documented "TSO2" tag, and the
inofficial TXXX/ALBUMARTISTSORT.

The Vorbis/FLAC decoder automatically supports the new tag, without
further change.
2009-07-07 07:36:25 +02:00
Max Kellermann
45df3e5e54 main: fix "unused local variable" warning
The variables "success" and "error" are only used if SQLite support is
enabled.
2009-07-06 22:48:34 +02:00
Sébastien Houzé
468b7d3aea player_thread: log played song in "default" log mode
Very few lines to log a song URI when it has been entirely played.
Then mpd logs can be parsed to do statistics.
2009-07-06 22:29:58 +02:00
Max Kellermann
0275690b5c output: use the software mixer plugin
Do all the software volume stuff inside each output thread, not in the
player thread.  This allows one software mixer per output device, and
also allows the user to configure the mixer type (hardware or
software) for each audio output.

This moves the global "mixer_type" setting into the "audio_output"
section, deprecating the "mixer_enabled" flag.
2009-07-06 22:00:50 +02:00
Max Kellermann
da8095db54 mixer_all: added mixer_all_set_software_volume()
The special-purpose function is used for saving/restore the software
volume control to the state file.
2009-07-06 21:52:29 +02:00
Max Kellermann
5d74b1efef mixer/software: new mixer which controls filter/volume
This mixer plugin may be used instead of the traditional global
software mixer.  It integrates with the "volume" filter plugin, and
can control the software volume of an audio output which has no
hardware mixer.
2009-07-06 21:52:15 +02:00
Max Kellermann
d3b5574d7a volume: moved range check to handle_setvol()
Converted the range checks in volume_level_change() to assertions.
Changed all volume types to "unsigned", expect for those which must be
able to indicate error (-1).
2009-07-06 21:52:10 +02:00
Max Kellermann
90472526e0 volume, mixer: removed the "relative" parameter
Since the "volume" command has been removed, nobody uses relative
volumes anymore.
2009-07-06 21:51:24 +02:00
Max Kellermann
206392ad1a command: removed the "volume" command
This command has been deprecated more than 5 years ago (0.10.0).  Its
implementation is a kludge, let's remove it now.
2009-07-06 21:51:00 +02:00
Max Kellermann
171a9ee291 output_init: moved the "convert" filter at the end
The "convert" filter must be the last filter in the chain.  Ensure
that by doing its initialization at the very end of
audio_output_init().
2009-07-06 21:50:25 +02:00
Max Kellermann
13e725ab09 output_init: merge two local string variables 2009-07-06 21:50:13 +02:00
Max Kellermann
f5c2acf1d4 output_init: parse audio format earlier 2009-07-06 21:40:43 +02:00
Max Kellermann
17e3054399 song_print: check gmtime_r()'s return value
When song->mtime was not initialized properly, it was revealed that
strftime() might crash when gmtime_r() returns NULL due to an invalid
time_t input value.
2009-07-06 11:48:21 +02:00
Max Kellermann
09aadffe9b song: initialize mtime in song_alloc() 2009-07-06 11:32:31 +02:00
Max Kellermann
e47bdfe8e6 output: attach a filter chain to each audio_output
This patch adds initial filter support for audio outputs.  Each audio
output gets a "filter" attribute, which is used by ao_play_chunk().

The PCM conversion is now performed by convert_filter_plugin.
audio_output.convert_state has been removed.
2009-07-06 10:01:47 +02:00
Max Kellermann
cd9c0a6b3e filter/convert: new filter which calls pcm_convert() on demand 2009-07-06 10:01:02 +02:00
Max Kellermann
c372c3756b filter/chain: new library for creating a chain of filters 2009-07-06 10:01:02 +02:00
Max Kellermann
78fa3f06f9 output: added command REOPEN
REOPEN is called when the input audio format changes.  The output
thread may be reconfigure the PCM converter.
2009-07-06 10:01:02 +02:00
Max Kellermann
1350cd0e42 output_thread: moved OPEN handler to ao_open() 2009-07-06 08:04:18 +02:00
Max Kellermann
89d4f438c0 mixer_type: moved volume_mixer_type from volume.c 2009-07-06 07:37:37 +02:00
Max Kellermann
8bd7b5b607 conf: use bp->value, not param->value
A recent change to the boolean parser introduced a bug: instead of
using the block_param's value with get_bool(), we passed param->value
(which is always NULL in this case).
2009-07-06 07:37:32 +02:00
Max Kellermann
d78be1ab49 output_init: moved mixer instantiation to separate function 2009-07-05 18:44:37 +02:00
Max Kellermann
86e279f886 filter/volume: don't use volume_level_get()
Added public methods to get and set the current volume.
2009-07-05 16:31:47 +02:00
Max Kellermann
d4914fc9ef idle: added "update" event
Some clients have visual feedback for "database update is running".
Using the "database" idle event is unreliable, because it is only
emitted when the database was actually modified.  This patch adds the
"update" event, which is emitted when the update is started, and again
when the update is finished, disregarding whether it has been
modified.
2009-07-05 08:46:53 +02:00
Max Kellermann
46c19b8249 song_print: send song modification time to client
Added the response line "Last-Modified", which sends the modification
time in ISO 8601.  The same was already implemented for playlists.
2009-07-05 08:40:29 +02:00
Max Kellermann
111c4dac63 song_save: use GError for error handling 2009-07-05 08:29:52 +02:00
Max Kellermann
69ff9d757f song_save: no CamelCase
Renamed functions.
2009-07-05 08:29:50 +02:00
Max Kellermann
0c2ab17e91 sticker: use GError for error handling 2009-07-05 08:29:47 +02:00
Max Kellermann
644fc48776 conf: registered option "filter"
Add this option to the user's manual.
2009-07-05 06:54:45 +02:00
Max Kellermann
666b1fae79 volume: removed unused macros
Removed VOLUME_MIXER_OSS and VOLUME_MIXER_ALSA.
2009-07-03 18:51:01 +02:00
Max Kellermann
e3c436f411 filter: added "volume" plugin
The "volume" filter plugin will replace the current software volume
code.  One "volume" filter may be attached to each output device.
This will allow the user to use hardware mixers for some devices, and
software mixers for other devices at the same time.

Currently, neither the filter API nor the "volume" plugin is
integrated into MPD.
2009-07-03 01:06:17 +02:00
Max Kellermann
48f3e13bec filter: added new plugin API for filters
The filter API allows us to implement software volume as a pluggable
filter, and we will be able to integrate libraries like SoX.
2009-07-03 01:02:53 +02:00
Max Kellermann
a923080d9b conf: added config_quark()
This GQuark will be used for GErrors related to malformed
configuration.
2009-07-03 01:01:50 +02:00
Max Kellermann
706614b0d7 playlist_state: don't save "current" song when none is set
This patch fixes an assertion failure:

 Assertion `order < queue->length' failed.

This happens when the state file is saved, when there is no "current"
song: current==-1, and queue_order_to_position(-1) is called.
2009-06-29 22:27:57 +02:00
Christopher Zimmerman
a641f562f3 playlist_state: save state when stopped
At the moment mpd doesn't store or restore the current track to/from
its state file when the daemon is stopped/started while in 'stopped'
state.  I believe the preferred behaviour would be to store and
restore the current track even when the daemon is in stopped state
when shutting down.

I made a small patch to adapt this behaviour. If you believe this is
not the preferred behaviour, maybe this should be realized as a
configuration option. I'm not sure how to do this, but made a small
comment, where one would have to put the option.
2009-06-26 09:26:12 +02:00
Max Kellermann
eacd604518 ffmpeg: support multiple tags
Call av_metadata_get() in a loop.
2009-06-25 08:43:59 +02:00
Max Kellermann
637c6a1850 conf: log unused/unknown block parameters 2009-06-25 08:42:25 +02:00
Max Kellermann
0cbc4012e8 conf: added "used" flag to struct block_param 2009-06-25 08:41:23 +02:00
Max Kellermann
8074b82653 conf: detect duplicate parameters in config_add_block_param()
Moved the check from config_get_block_param().  Detect the duplicate
parameter when it's added, not when it's queried.
2009-06-25 08:41:09 +02:00
Max Kellermann
5d583c9b2d conf: make get_bool() return a bool
Instead of returning an artificial three-state integer, return a
"success" value and put the boolean value into a "bool" pointer.
That's a little bit more overhead, but an API which looks more
natural.
2009-06-25 08:40:02 +02:00
Max Kellermann
093e900d44 conf: moved code from get_bool() to string_array_contains() 2009-06-25 08:39:53 +02:00
Max Kellermann
8965b66ce4 conf: register configuration options statically
Initialize the config_entries array at compile time.  This is not only
faster, but also smaller.
2009-06-25 08:39:44 +02:00
Max Kellermann
146add67c2 conf: removed config_add_param()
This function is unused.
2009-06-25 08:39:01 +02:00
Max Kellermann
34e9a0a960 conf: replace "mask" bit field with two "bool" variables
Due to padding, this takes the same amount of memory.
2009-06-25 08:38:51 +02:00
Max Kellermann
b1e95b1fa8 volume: removed support for legacy mixer configuration
The top-level "mixer_device" and "mixer_control" options have been
deprecated by MPD 0.15, and it's safe to remove them in MPD 0.16.
2009-06-25 08:37:51 +02:00