aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
...
* | decoder_list: pass previous plugin pointer to lookup functionsMax Kellermann2009-11-074-19/+40
| | | | | | | | Remove the static integer hack, that's not thread safe and sucks.
* | decoder_list: moved suffix/mime_type checks to decoder_plugin.cMax Kellermann2009-11-074-4/+65
| |
* | decoder_list: back to NULL terminated listMax Kellermann2009-11-071-7/+8
| | | | | | | | A NULL terminated list is easier to iterate.
* | decoder_thread: open input stream on demandMax Kellermann2009-11-071-72/+59
| | | | | | | | | | | | Moved the global input stream opener to decoder_run_stream(). decoder_run_file() now opens the input stream each time a plugin provides a stream decoder method.
* | decoder_thread: moved plugin loops to separate functionsMax Kellermann2009-11-071-82/+127
| | | | | | | | Tame the large decoder_run_song() function.
* | uri: added function attributesMax Kellermann2009-11-071-0/+5
| | | | | | | | Let gcc optimize a little bit more.
* | utils: renamed stringFoundInStringArray()Max Kellermann2009-11-066-30/+35
| | | | | | | | | | No CamelCase. Use bool instead of int. Make both arguments mandatory.
* | output/jack: dynamic source port listMax Kellermann2009-11-063-38/+87
| | | | | | | | | | | | Same as the previous patch: create up to 16 configured source ports. The plugin tries to do its best at guessing the right combination for the given input file, the number of source and destination ports.
* | output/jack: dynamic destination port listMax Kellermann2009-11-061-25/+71
| | | | | | | | | | Support up to 16 configured destination ports, that should really be enough for everybody.
* | output/jack: renamed option "ports" to "destination_ports"Max Kellermann2009-11-063-2/+11
| | | | | | | | Be more clear which kind of port should be configured here.
* | output/jack: renamed "output ports" to "destination ports"Max Kellermann2009-11-062-19/+21
| | | | | | | | Use the same name as in the libjack API documentation.
* | playlist_queue: use playlist plugins to load from playlist_directoryMax Kellermann2009-11-061-0/+33
| | | | | | | | | | | | | | | | This patch allows the client to load a playlist file from the playlist directory with a plugin. This can be used with the "load" command, but the client has to pass the file name including the suffix. We will probably use the music directory in the future, to support playlist files inside the music directory.
* | playlist_queue: moved code to playlist_open_remote_into_queue()Max Kellermann2009-11-061-5/+12
| |
* | playlist_list: added function playlist_list_open_path()Max Kellermann2009-11-062-0/+47
| | | | | | | | Added an interface for loading playlists from a local file.
* | playlist: added extm3u pluginMax Kellermann2009-11-066-1/+198
| | | | | | | | | | This new plugin parses extm3u files. Files without the "#EXTM3U" header are still parsed by the plain old "m3u" plugin.
* | playlist/{m3u,pls}: removed URI checksMax Kellermann2009-11-062-7/+1
| | | | | | | | The caller is responsible for verifying the song URI.
* | playlist_list: rewind the stream before opening the playlistMax Kellermann2009-11-061-0/+9
| | | | | | | | | | | | If one plugin has failed to open the playlist, it may have consumed a part of the stream already. This may lead to a failure in all following plugins. Fix: rewind the stream before each open() call.
* | output/httpd: bind port when output is enabledMax Kellermann2009-11-053-14/+51
| | | | | | | | | | | | Implement the methods enable() and disable(). Bind the HTTP port in the enable() method, but reject all incoming connections until the output is opened.
* | output/jack: support mono inputMax Kellermann2009-11-052-13/+42
| | | | | | | | | | When MPD plays a mono song (audio_format.channel==1), connect only one source port to both destination ports.
* | output/jack: clear ring buffers before activatingMax Kellermann2009-11-052-1/+7
| | | | | | | | | | | | 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.
* | output/jack: use jack_client_open() instead of jack_client_new()Max Kellermann2009-11-054-5/+36
| | | | | | | | | | | | | | | | 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".
* | doc/user: document JACK plugin optionsMax Kellermann2009-11-051-0/+43
| |
* | output/jack: added option "client_name"Max Kellermann2009-11-053-6/+5
| | | | | | | | | | | | Instead of using MPD's audio output name (setting "name"), use a separate configuration option. Change the default to "Music Player Daemon".
* | update_walk: log unrecognized filesMax Kellermann2009-11-051-2/+9
| | | | | | | | | | | | 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.
* | database: rescan after metadata_to_use changeMax Kellermann2009-11-042-0/+33
| | | | | | | | | | | | 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.
* | tag: added function tag_name_parse()Max Kellermann2009-11-044-26/+61
| | | | | | | | Convert a string into a tag_type enum.
* | song_save: explicitly parse the colonMax Kellermann2009-11-041-18/+27
| | | | | | | | | | Clear the colon. This simplifies all attribute parsers, because they can now use strcmp() instead of strncmp().
* | decoder_thread: initialize decoder_control.quitMax Kellermann2009-11-041-0/+2
| | | | | | | | If left uninitialized, then the decoder thread quits spuriously.
* | Merge branch 'master' of git://git.musicpd.org/romain/mpdMax Kellermann2009-11-042-0/+10
|\ \
| * | sticker comments in code and example configuration fileRomain Bignon2009-11-042-0/+10
| | | | | | | | | | | | Signed-off-by: Romain Bignon <romain@peerfuse.org>
* | | player_thread: on return, reset next_song only if queuedMax Kellermann2009-11-031-3/+7
| | | | | | | | | | | | | | | If no song was queued, then player_control.next_song might contain the value for the next QUEUE command. We must not reset that.
* | | player_thread: detect finished queued songMax Kellermann2009-11-031-1/+2
| | | | | | | | | | | | | | | | | | | | | 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.
* | | player_control: moved pc.next_song assertion into lockMax Kellermann2009-11-031-1/+2
| | | | | | | | | | | | | | | The assertion shouldn't access player_control.next_song without locking it.
* | | player_thread: moved code to decoding_next_song()Max Kellermann2009-11-031-4/+15
| | | | | | | | | | | | Simplify several expressions.
* | | player_thread: lock player in player_check_decoder_startup()Max Kellermann2009-11-031-0/+8
| | | | | | | | | | | | Don't access attributes without the lock.
* | | decoder_control: pass pipe and buffer to dc_start()Max Kellermann2009-11-033-14/+25
| | | | | | | | | | | | Don't access decoder_control attributes directly.
* | | player_thread: lock inside player_wait_for_decoder()Max Kellermann2009-11-031-7/+17
| | | | | | | | | | | | Lock the player_control object when modifying its attributes.
* | | player_thread: moved code to player_dc_start()Max Kellermann2009-11-031-5/+20
| | |
* | | decoder_control: don't check command in decoder_is_starting()Max Kellermann2009-11-031-5/+3
| | | | | | | | | | | | | | | Asynchronous decoder startup is gone, and we don't need to check command==DECODE_COMMAND_START anymore.
* | | decoder_control: merge next_song and current_songMax Kellermann2009-11-035-16/+16
| | | | | | | | | | | | These two variables are redundant, we need only one of them.
* | | player_thread: don't set errored_song on audio errorMax Kellermann2009-11-031-2/+0
| | | | | | | | | | | | It's not used if pc.error==PLAYER_ERROR_AUDIO.
* | | decoder_thread: unlock the decoder while checking the streamMax Kellermann2009-11-031-4/+4
| | | | | | | | | | | | | | | | | | 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.
* | | player_thread: don't start the decoder asynchronouslyMax Kellermann2009-11-033-17/+2
| | | | | | | | | | | | | | | The START command returns without blocking; we don't need the asynchronous decoder start anymore.
* | | decoder_thread: open input stream after command finishedMax Kellermann2009-11-031-5/+10
| | | | | | | | | | | | | | | Return the result to the caller more quickly. This unifies error handling: no error can be reported before the command is finished.
* | | decoder_control: make the song objects constMax Kellermann2009-11-033-4/+4
|/ / | | | | | | They are just informational.
* | alsa_plugin.c: workaround snd_pcm_drain bugJeffrey Middleton2009-11-021-1/+2
| | | | | | | | | | | | | | 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).
* | output_thread: moved code to ao_next_chunk()Max Kellermann2009-11-021-6/+11
| |
* | output_thread: return from ao_play() if chunk->next is NULLMax Kellermann2009-11-021-5/+4
| | | | | | | | | | When the "next" chunk to be played is NULL, return from ao_play() immediately, without going over the "while" loop (no-op).
* | player_thread: check command before waiting during pauseMax Kellermann2009-11-021-1/+3
| | | | | | | | | | | | | | 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().
* | output: signal the output thread when CANCEL is finishedMax Kellermann2009-11-022-0/+34
| | | | | | | | | | | | | | 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.