Max Kellermann
e96dc9a14c
database: rescan after metadata_to_use change
...
Store a list of supported tag items in the database. When loading a
database which does not have a matching list, we must rescan in order
to get the missing information.
2009-11-04 18:48:22 +01:00
Max Kellermann
a434c35eb4
tag: added function tag_name_parse()
...
Convert a string into a tag_type enum.
2009-11-04 18:47:42 +01:00
Max Kellermann
7af8c88e37
song_save: explicitly parse the colon
...
Clear the colon. This simplifies all attribute parsers, because they
can now use strcmp() instead of strncmp().
2009-11-04 18:43:16 +01:00
Max Kellermann
a027bdf118
decoder_thread: initialize decoder_control.quit
...
If left uninitialized, then the decoder thread quits spuriously.
2009-11-04 09:44:50 +01:00
Max Kellermann
c043bf0f63
Merge branch 'master' of git://git.musicpd.org/romain/mpd
2009-11-04 09:20:13 +01:00
Romain Bignon
5744634094
sticker comments in code and example configuration file
...
Signed-off-by: Romain Bignon <romain@peerfuse.org>
2009-11-04 00:21:58 +01:00
Max Kellermann
a22c93b659
player_thread: on return, reset next_song only if queued
...
If no song was queued, then player_control.next_song might contain the
value for the next QUEUE command. We must not reset that.
2009-11-03 23:32:37 +01:00
Max Kellermann
507606bb78
player_thread: detect finished queued song
...
When the decoder finishes the "queued" song very quickly (before the
"current" song finishes playing), an assertion in do_play() fails
because it thinks that it should start decoding the queued song,
although that has in fact just finished.
2009-11-03 23:29:50 +01:00
Max Kellermann
f421c8a191
player_control: moved pc.next_song assertion into lock
...
The assertion shouldn't access player_control.next_song without
locking it.
2009-11-03 23:17:44 +01:00
Max Kellermann
d06f8baf69
player_thread: moved code to decoding_next_song()
...
Simplify several expressions.
2009-11-03 22:27:40 +01:00
Max Kellermann
56b8081af6
player_thread: lock player in player_check_decoder_startup()
...
Don't access attributes without the lock.
2009-11-03 21:23:48 +01:00
Max Kellermann
98d30ac9cf
decoder_control: pass pipe and buffer to dc_start()
...
Don't access decoder_control attributes directly.
2009-11-03 21:18:22 +01:00
Max Kellermann
98150f503a
player_thread: lock inside player_wait_for_decoder()
...
Lock the player_control object when modifying its attributes.
2009-11-03 21:02:54 +01:00
Max Kellermann
6c78c21fb8
player_thread: moved code to player_dc_start()
2009-11-03 21:01:56 +01:00
Max Kellermann
7fd2097a44
decoder_control: don't check command in decoder_is_starting()
...
Asynchronous decoder startup is gone, and we don't need to check
command==DECODE_COMMAND_START anymore.
2009-11-03 21:01:49 +01:00
Max Kellermann
89893faa19
decoder_control: merge next_song and current_song
...
These two variables are redundant, we need only one of them.
2009-11-03 20:02:19 +01:00
Max Kellermann
bfa7da943c
player_thread: don't set errored_song on audio error
...
It's not used if pc.error==PLAYER_ERROR_AUDIO.
2009-11-03 20:01:19 +01:00
Max Kellermann
734676fcfb
decoder_thread: unlock the decoder while checking the stream
...
This is only a slight change to the previous locking behaviour: keep
the decoder unlocked during the loop, and lock it only while checking
decoder_control.command.
2009-11-03 19:21:55 +01:00
Max Kellermann
acb265d082
player_thread: don't start the decoder asynchronously
...
The START command returns without blocking; we don't need the
asynchronous decoder start anymore.
2009-11-03 19:18:17 +01:00
Max Kellermann
77a647fc26
decoder_thread: open input stream after command finished
...
Return the result to the caller more quickly. This unifies error
handling: no error can be reported before the command is finished.
2009-11-03 19:17:52 +01:00
Max Kellermann
59ffb5b7c1
decoder_control: make the song objects const
...
They are just informational.
2009-11-03 19:16:25 +01:00
Jeffrey Middleton
4dc25d3908
alsa_plugin.c: workaround snd_pcm_drain bug
...
Reintroduce a fix from commit 52a0653
(Warren Dukes): "don't call
snd_pcm_drain unless we're already in the RUNNING state". This prevents
ALSA with dmix from sometimes hanging when snd_pcm_drain is called, e.g.
when moving from one song to the next (as in mantis issue 2634).
2009-11-02 23:58:15 -06:00
Max Kellermann
0f9f82f227
output_thread: moved code to ao_next_chunk()
2009-11-02 20:20:14 +01:00
Max Kellermann
55e3aa8179
output_thread: return from ao_play() if chunk->next is NULL
...
When the "next" chunk to be played is NULL, return from ao_play()
immediately, without going over the "while" loop (no-op).
2009-11-02 20:20:14 +01:00
Max Kellermann
408d52fe39
player_thread: check command before waiting during pause
...
While paused, the player thread re-locks its mutex and waits for a
signal. This is racy: when the command is set while the thread is
waiting for the lock, it may wait forever. This patch adds another
command check before player_wait().
2009-11-02 20:20:13 +01:00
Max Kellermann
b9013944dc
output: signal the output thread when CANCEL is finished
...
After CANCEL, the output thread waits for another signal before it
continues playback, to synchronize with the caller. There were some
situations where this signal wasn't sent properly. This patch adds an
explicit g_cond_signal() at two code positions.
2009-11-02 19:09:25 +01:00
Max Kellermann
e814f8d5bd
update: removed unused variable "update_notify"
...
That variable has been superseded by "remove_notify" (defined in
update_remove.c).
2009-11-02 17:22:41 +01:00
Max Kellermann
64a481d873
{decoder,player}_control: removed duplicate wakeups
...
Don't wake up the target thread in every iteration of the wait() loop.
Waking it up once, right after the command has been set, must be
enough.
2009-11-02 17:12:00 +01:00
Max Kellermann
93d8f9f00e
player_control: lock player before setting seek parameters
...
These parameters must be protected with a mutex, too. Wrap everything
inside player_lock()/player_unlock(), and use player_command_locked()
instead of player_command().
2009-11-02 17:02:05 +01:00
Max Kellermann
d1742a2330
output_thread: check command before g_cond_wait()
...
After CANCEL, call g_cond_wait() only if the new command is still
NONE. Problem is that ao_command_finished() has to unlock the
audio_output object, and in the meantime, the player thread might have
submitted a new command.
2009-11-02 17:01:17 +01:00
Max Kellermann
5555d30bbd
song_save: free song object on error
...
Fix a minor memory leak.
2009-11-01 17:51:32 +01:00
Max Kellermann
4b17aca747
song_save: load one song at a time
...
Changed songvec_load() to song_load(). Added start and end markers
for each song. Removed the "key" line, it's redundant.
2009-11-01 17:51:29 +01:00
Max Kellermann
63dda94a02
database: save database format version
2009-11-01 17:50:01 +01:00
Max Kellermann
7f9ee00980
directory_save: partially revert the g_str_has_prefix() patch
2009-11-01 17:49:49 +01:00
Max Kellermann
53a749780a
database: use strcmp() instead of g_str_has_prefix()
2009-11-01 15:54:06 +01:00
Max Kellermann
c504004702
database: removed redundant music_root allocation
...
The "music_root" global variable is allocated by db_init().
2009-11-01 15:51:19 +01:00
Max Kellermann
8bfe3497b0
replay_gain: trigger OPTIONS idle event on mode change
2009-11-01 15:44:56 +01:00
Max Kellermann
9bcfd3a47d
text_file: allocate line buffers dynamically
...
Use a single GString buffer object in all functions loading the
database. Enlarge it automatically for long lines. This eliminates
the maximum line length for tag values. There is still an upper limit
of 512 kB to prevent denial of service, but that's reasonable I guess.
2009-11-01 15:37:16 +01:00
Max Kellermann
451f932d80
directory_save: allocate directory object earlier, assign mtime
...
Allocate the directory object after the "directory:" line. Assign the
mtime from the input file to this new object, instead of to the parent
directory.
2009-11-01 15:34:14 +01:00
Max Kellermann
10b7608926
directory_save: free directory on error
...
Fix a minor memory leak in the error handler.
2009-11-01 15:34:13 +01:00
Max Kellermann
2cd8a9fecf
directory_save: abort on duplicate subdirectory
...
The old code tried to recover, but what's the point of that? If a
directory is duplicate, something is wrong with the database file.
2009-11-01 15:34:13 +01:00
Max Kellermann
22279127f9
directory_save: moved code to directory_load_subdir()
2009-11-01 15:34:12 +01:00
Max Kellermann
ad01e1249b
decoder_api: check decoder==NULL in decoder_read()
...
It's legal to pass decoder=NULL to decoder_read(). Add a check.
2009-11-01 15:34:12 +01:00
Max Kellermann
6ef428af2e
decoder_control: removed the global variable "dc"
...
Allocate a decoder_control object where needed, and pass it around.
This will allow more than one decoder thread one day.
2009-10-31 19:22:56 +01:00
Max Kellermann
806496dfc9
Merge branch 'v0.15.x'
...
Conflicts:
NEWS
configure.ac
src/decoder/ffmpeg_plugin.c
src/update.c
2009-10-31 18:23:56 +01:00
Max Kellermann
3de912e2b9
decoder_control: removed unused DECODE_TYPE macros
2009-10-31 18:03:50 +01:00
Max Kellermann
9eadb517da
player_thread: simplified thread destruction
...
Simply use "return" instead of g_thread_exit().
2009-10-31 18:01:05 +01:00
Max Kellermann
1ae4e4dcd3
songvec: sort songs by album name first, then disc/track number
...
When the songs of two albums are in the same directory, all songs of
an album should be right next to each others.
2009-10-31 17:36:56 +01:00
Max Kellermann
d099a7e464
songvec: simplified compare_tag_item()
...
Moved some code to tag_get_value_checked(), to eliminate several NULL
checks.
2009-10-31 17:32:00 +01:00
Max Kellermann
25a806a347
player_control: protect command, state, error with a mutex
...
Use GMutex/GCond instead of the notify library. Manually lock the
player_control object before accessing the protected attributes. Use
the GCond object to notify the player thread and the main thread.
2009-10-31 17:02:12 +01:00
Max Kellermann
73cff374fd
{player,output}_thread: fixed elapsed_time quirks
...
Right after seeking and song change, the elapsed_time shows old
information, because the output thread didn't finish a full chunk
yet. This patch re-adds a second elapsed_time variable, and keeps
track of a fallback value, in case the output thread can't provide a
reliable value.
2009-10-30 16:28:15 +01:00
Max Kellermann
cec019efff
output_thread: return bool from ao_play()
...
Return false when there was no chunk in the pipe. If the function
returns true, then audio_output_task() will not wait for a notify from
the player thread. This fixes a race condition.
2009-10-29 23:35:27 +01:00
Max Kellermann
4748decd8d
player_thread: set error status in play_next_chunk()
...
Don't set the error in play_chunk(); do all the error handling in the
caller. The errored_song attribute isn't set anymore; it doesn't make
sense for PLAYER_ERROR_AUDIO.
2009-10-29 22:39:48 +01:00
Max Kellermann
975143ab47
output_control: fixed deadlock in audio_output_update()
...
Call a version of audio_output_close() which doesn't lock recursively.
2009-10-29 22:39:42 +01:00
Viliam Mateicka
bb5acc939f
httpd: add config option to limit number of clients
2009-10-29 22:38:18 +01:00
Max Kellermann
bde3d14339
output: consistently lock audio output objects
...
Always keep the audio_output object locked within the output thread,
unless a plugin method is called. This fixes several race conditions.
2009-10-29 17:06:40 +01:00
Max Kellermann
1403172ef3
output_plugin: added method "drain"
...
drain() is the opposite of cancel(): it waits until all data in the
buffer has finished playing. Instead of implicitly draining in the
close() method like the ALSA plugin has been doing it forever, let the
output thread decide whether to drain or to cancel.
2009-10-29 15:59:40 +01:00
Max Kellermann
f74ee1a352
output/alsa: don't recover on CANCEL
...
The recovery is for nothing if we get CLOSE afterwards. Let's not
recover in the cancel() method, and let the next play() call sort it
out.
2009-10-29 15:59:35 +01:00
Max Kellermann
cf8d278b78
output_thread: removed redundant filter_close() call
...
Don't call filter_close() right after ao_close().
2009-10-29 15:58:21 +01:00
Max Kellermann
82af161210
output/pulse: initialize pulse_output.mixer
...
This variable was uninitialized and led to crashes.
2009-10-29 15:58:18 +01:00
Max Kellermann
9fed97b1f1
decoder/ffmpeg: removed the "author" vs "artist" workaround
...
libavformat gives us the song artist in the "author" field. Since we
use av_metadata_conv(), we don't need to check for "artist".
2009-10-28 22:17:10 +01:00
Max Kellermann
04816a6369
decoder/ffmpeg: convert metadata
...
Convert the metadata with the libavformat function av_metadata_conv().
This ensures that canonical tag names are provided by libavformat, and
we can remove the "artist" vs "author" workaround.
2009-10-28 22:12:22 +01:00
Max Kellermann
d083032236
update: delete ignored symlinks from database
...
When you disable the "follow_outside_symlinks" or the
"follow_inside_symlinks" setting, the next update should remove the
now-ignored files from the database.
2009-10-27 22:06:28 +01:00
Alam Arias
83a9cf74fb
include pulse/version.h for PA_CHECK_VERSION
2009-10-27 07:46:53 +01:00
Viliam Mateicka
a13e9832e7
encoder: renaming none_encoder to null_encoder
2009-10-26 20:02:34 +01:00
Viliam Mateicka
f67426871b
mpd.conf: new bool config value for enabling/disabling inotify update
2009-10-26 19:14:40 +01:00
Viliam Mateicka
2bfddd4310
encoder: new encoder plugin which just pass data through
2009-10-24 19:01:15 +02:00
Viliam Mateicka
7b343eaf50
add --disable-inotify for configure to disable inotify when autodetected
2009-10-24 18:24:29 +02:00
Max Kellermann
ac830468bf
output/jack: implement methods enable()/disable()
...
Don't connect to JACK before MPD has daemonized.
2009-10-23 10:56:25 +02:00
Max Kellermann
7547b1170b
output/pulse: implement methods enable()/disable()
...
Don't connect to PulseAudio before MPD has daemonized.
2009-10-23 10:56:16 +02:00
Max Kellermann
e53ca368a5
output_plugin: added methods enable() and disable()
...
With these methods, an output plugin can allocate some global
resources only if it is actually enabled. The method enable() is
called after daemonization, which allows for more sophisticated
resource allocation during that method.
2009-10-23 10:55:52 +02:00
Max Kellermann
c426a0bc5c
output/pulse: call mixer on state changes
...
Don't let the mixer plugin "override" the libpulse callbacks.
Instead, add a "mixer" attribute to the pulse_output struct, and call
the mixer on all interesting events.
2009-10-23 10:33:26 +02:00
Max Kellermann
acc99da73d
mixer_control: don't close the mixer if set_volume() fails
...
A mixer is useful enough if it can be read. Setting it may be
found unavailable at runtime.
2009-10-23 10:33:23 +02:00
Max Kellermann
c4f895daf4
mixer_plugin: get_volume() may return -1 if unavailable
...
If the method get_volume() returns -1 and no error object is set, then
the volume is currently unavailable, but the mixer should not be
closed immediately.
2009-10-23 10:32:25 +02:00
Max Kellermann
ede828c910
mixer_control: allow methods "open" and "close" to be NULL
...
It's possible to have a mixer implementation which does not explicitly
need the methods open() and close().
2009-10-23 09:15:51 +02:00
Max Kellermann
7dd172efec
mixer/pulse: don't get volume if stream is not yet ready
...
Moved the check from pulse_mixer_open() to pulse_mixer_update().
2009-10-22 20:28:12 +02:00
Max Kellermann
80ac82c8fb
output/fifo: renamed source to fifo_output_plugin.c
2009-10-22 19:23:30 +02:00
Max Kellermann
a05d0d5d94
audio: removed function finishAudioConfig()
...
There's no point in clearing the audio format before exiting.
2009-10-22 17:12:32 +02:00
Max Kellermann
0107ef2aad
main: put #ifdef inside winsock_init()
...
This way, the function call in the main() function does not need
another pair of #ifdef/#endif.
2009-10-22 17:12:28 +02:00
SF Markus Elfring
a153f21315
permission: improve const-correctness
2009-10-22 17:11:39 +02:00
Max Kellermann
294aaf7a90
playlist: new ASX playlist plugin
...
Based on the XSPF playlist plugin.
2009-10-21 23:39:47 +02:00
Max Kellermann
2024763d2a
playlist/xspf: ignore text in root, playlist, tracklist
...
Added a missing "break".
2009-10-21 23:27:05 +02:00
Max Kellermann
9526fdbe73
audio_format: wildcards allowed in audio_format configuration
...
An asterisk means that this attribute should not be enforced, and
stays whatever it used to be. This way, some configuration values
work like masks.
2009-10-21 23:01:04 +02:00
Max Kellermann
a5c4566fa1
audio_parser: moved code to separate functions
2009-10-21 23:01:03 +02:00
Max Kellermann
2c05430002
output: convert config_audio_format to an audio_format struct
...
This allows more sophisticated audio format selection.
2009-10-21 22:37:28 +02:00
Max Kellermann
643650dba7
audio_parser: renamed parameter "error" to "error_r"
...
It's a double pointer.
2009-10-21 22:22:23 +02:00
Max Kellermann
8cb6854da4
audio: removed config_param.value NULL check
...
The value is always non-NULL.
2009-10-21 22:22:20 +02:00
Max Kellermann
83844ec239
output/jack: make ringbuffer_size a size_t
2009-10-21 21:39:26 +02:00
Max Kellermann
1bfd25be35
output/jack: connect to server on MPD startup
...
.. and keep up the JACK connection while MPD runs. Allocate the ring
buffers on the first open, and free them at MPD exit.
2009-10-21 21:37:11 +02:00
Max Kellermann
cee216f2dc
output/jack: removed the empty "cancel" method
...
JACK doesn't need cancel() because it won't do much anyway. Buffers
are small.
2009-10-21 21:01:00 +02:00
Max Kellermann
27c246e8d9
output/jack: renamed parameter "error" to "error_r"
...
It's a double pointer.
2009-10-21 20:13:39 +02:00
Max Kellermann
1ff39476eb
output/jack: implement the "pause" method
...
Don't disconnect from JACK during pause.
2009-10-21 18:33:05 +02:00
Max Kellermann
acfd9a73bc
output/jack: renamed source to jack_output_plugin.c
2009-10-21 18:33:01 +02:00
Max Kellermann
b479a264b6
pulse: code rewrite using the asynchronous libpulse API
...
This is a complete rewrite of the PulseAudio output plugin. It uses
the asynchronous API, which gives us more control over everything.
Additionally, it connects to the PulseAudio server on startup, and
keeps this connection up while MPD runs. During pause, instead of
closing the stream, it enables "cork".
2009-10-21 10:30:42 +02:00
Max Kellermann
ac32f36e4e
mixer_plugin: pass audio_output pointer to mixer_plugin.init()
...
This allows the mixer object to access its associated audio output
object.
2009-10-21 09:48:41 +02:00
Max Kellermann
b8ccc885c8
volume: added PIPE_EVENT_MIXER
...
Flush the hardware volume cache, and send the MIXER idle event. This
allows mixer plugins to detect volume changes.
2009-10-21 09:48:37 +02:00
Max Kellermann
1a6ed81193
output_thread: check again if output is open on PAUSE
...
Basically the same as the 0.15.5 patch "check again if output is open
on CANCEL". Same race condition, same fix.
2009-10-21 08:07:07 +02:00
Max Kellermann
4e2fb3fb89
mixer_plugin: use GError for error handling
2009-10-20 22:10:56 +02:00
Max Kellermann
9cd2129eeb
output_init: renamed parameter "error" to "error_r"
...
It's a double pointer.
2009-10-20 21:26:28 +02:00
Max Kellermann
097e200a97
mixer/{oss,alsa}: renamed the mixer source files
2009-10-20 21:23:05 +02:00