Commit Graph

4716 Commits

Author SHA1 Message Date
Max Kellermann 945287358b output/httpd: bind port when output is enabled
Implement the methods enable() and disable().  Bind the HTTP port in
the enable() method, but reject all incoming connections until the
output is opened.
2009-11-05 23:47:29 +01:00
Max Kellermann 979cd5a768 output/jack: support mono input
When MPD plays a mono song (audio_format.channel==1), connect only one
source port to both destination ports.
2009-11-05 20:02:04 +01:00
Max Kellermann a68da8a475 output/jack: clear ring buffers before activating
After playback has stopped, the ring buffers may still contain
samples.  These will be played when playback is started the next
time.  We should clear the buffers each time.
2009-11-05 20:01:50 +01:00
Max Kellermann 2a9685cb3a output/jack: use jack_client_open() instead of jack_client_new()
jack_client_new() is deprecated.  This requires libjack 0.100
(released nearly 5 years ago).  We havn't been testing older libjack
versions anyway.

As a side effect, there is the new option "autostart".
2009-11-05 20:01:18 +01:00
Max Kellermann 9449006ac3 doc/user: document JACK plugin options 2009-11-05 19:55:16 +01:00
Max Kellermann 88abfc0d0f output/jack: added option "client_name"
Instead of using MPD's audio output name (setting "name"), use a
separate configuration option.  Change the default to "Music Player
Daemon".
2009-11-05 19:55:00 +01:00
Max Kellermann 4ec25b5d64 update_walk: log unrecognized files
When a song's tags could not be loaded during database update, log
this as a debug message.  Same for a song being removed because its
updated tag could not be read.
2009-11-05 08:01:29 +01:00
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