aboutsummaryrefslogtreecommitdiffstats
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2009-03-27mixer: assert that the new volume value is validMax Kellermann3-7/+2
Added an assertion in mixer_set_volume(). Removed the range checks from the ALSA and OSS plugins.
2009-03-27mpcdec: changed plugin name to "mpcdec"Max Kellermann1-3/+3
The "mpcdec" plugin is based on the libmpcdec library.
2009-03-27mpcdec: support the new libmpcdec SV8 APIMax Kellermann1-14/+90
2009-03-27mpcdec: no CamelCaseMax Kellermann1-57/+65
Renamed variables and functions.
2009-03-27tag_pool: use memcmp() instead of strcmp() for non-terminated stringMax Kellermann1-1/+3
The strings passed to tag_pool_get_item() are not null-terminated, and the caller passes the string length. Don't assume it is null-terminated anyway by using strcmp().
2009-03-27tag_pool: use size_t for string lengthMax Kellermann2-4/+4
2009-03-27event_pipe can only be non-blocking if !WIN32Sean McNamara1-0/+2
2009-03-27More debugging for Win32 ioctlsocket: complain if it's not a WinsockSean McNamara1-3/+12
socket, because there is no ioctl for non-sockets on Windows
2009-03-27Add winsock2 headers for curl's use of select() on socketsSean McNamara1-1/+7
2009-03-27Uniform getaddrinfo() on WIN32 or POSIX, because MinGW now supports itSean McNamara1-23/+0
2009-03-27Winsock2 is needed on MinGW (or other pure Win32 toolchains) forSean McNamara1-0/+36
networking, select(), ntohl(), etc.
2009-03-27sticker: move SQLite statements into an arrayMax Kellermann1-70/+75
Simplify initialization and finalization.
2009-03-27pulse_mixer: protect the struct with a mutexMax Kellermann1-1/+29
There are numerous race conditions between the libpulse thread (pulse_mixer.c callbacks) and the rest of MPD. Protect the volatile attributes of the pulse_mixer struct with a mutex to fix that.
2009-03-27pulse_mixer: return if mixer is offlineMax Kellermann1-29/+27
Eliminate one indent level. Also remove several debug useless debug messages.
2009-03-27pulse_mixer: removed superfluous G_GNUC_UNUSED attributesMax Kellermann1-4/+4
Those parameters are used after all.
2009-03-27pulse_mixer: use local pa_cvolume variable for set_volume()Max Kellermann1-2/+3
Don't mess with pulse_mixer.volume for setting the volume. This variable should only be used to transfer the current volume from sink_input_vol() to pulse_mixer_get_volume().
2009-03-27pulse_mixer: wait for get_volume() operation to completeMax Kellermann1-1/+34
The pa_context_get_sink_input_info() function is asynchronous, and after it returns, libpulse does not guarantee that the operation has completed yet; in fact, it is not likely. Explicitly wait for the operation to complete. The code for the new pulse_wait_for_operation() function was inspired by mplayer and xine code.
2009-03-27mixer_control: don't lock the mutex twice in mixer_failed()Max Kellermann1-5/+14
The function mixer_failed() expects the mixer mutex to be already locked, yet it calls mixer_close(), which attempts to lock the mutex again, deadlocking itself.
2009-03-27renamed smartstop to single and changed behaviorRomain Bignon7-29/+43
When single mode is enabled, after current song it stops playback, or it replay same song if repeat mode is activated.
2009-03-27implements the smartstop featureRomain Bignon7-2/+66
The smartstop feature is a way to tell mpd to stop playing after current song. This patche provides: - 'state' command returns 'smartstop' state (1 or 0) - 'smartstop' can activate or not the smartstop state - when song is terminated, mpd stops playing and smartstop is set to 0
2009-03-27pulse_mixer: adapted code styleMax Kellermann1-27/+52
Use the same code style as the rest of MPD.
2009-03-26output_all: synchronize playback with player_control.notifyMax Kellermann2-2/+4
This patch fixes a longer delay when moving around songs in the playlist. The main thread wants to enqueue a new "next" song into the player thread, but the player thread is waiting inside audio_output_all_wait() for the output threads. Use player_control.notify there, so audio_output_all_wait() gets woken up by the main thread, too.
2009-03-26playlist_state: fix playback restore in random modeMax Kellermann1-2/+0
The functions playPlaylist() and seekSongInPlaylist() expect a song position, not a song order number. Don't convert the "current" variable with queue_position_to_order().
2009-03-26queue/playlist/command: move rangeJeffrey Middleton5-17/+72
The move command now accepts a range for the first argument, in the same form as other range commands, e.g. move 15:17 3. The first song in the range is placed at the destination position. Note that as with other range commands, the range is inclusive on the left only; this example would move only songs 15 and 16, not 17. [mk: fixed signed/unsigned warnings; use G_MAXUINT instead of UINT_MAX]
2009-03-26pulse_mixer: removed superfluous initializationsMax Kellermann1-7/+2
Don't initialize attributes which are only used in an open mixer. As long as nobody accesses them, their values are uninitialized and undefined.
2009-03-26pulse_mixer: allocate "volume" staticallyMax Kellermann1-10/+6
The pm->volume attribute was allocated in pulse_mixer_init(), but is never freed. This leaks memory. Instead of adding the g_free() call to pulse_mixer_finish(), let's just make "volume" a static attribute of the pulse_mixer struct. That is easier to deal with.
2009-03-26pulse_mixer: removed superfluous NULL checks in close()Max Kellermann1-12/+4
When the MPD core knows that the pulse mixer is open, pm->mainloop and pm->context must be non-NULL.
2009-03-26pulse_mixer: initialize "online" and "index" in open()Max Kellermann1-2/+5
The attributes "online" and "index" were not properly reinitialized after a close/open cycle.
2009-03-26pulse: make configuration strings constMax Kellermann2-12/+10
Nobody needs to modify these strings. We can make them const, and convert config_dup_block_string() to config_get_block_string(). This also fixes memory leaks in the pulse mixer.
2009-03-26pulse: don't check config_param!=NULLMax Kellermann2-10/+5
The conf.h functions deal well with config_param==NULL and will return the specified default value then.
2009-03-26pulse_mixer: free libpulse objects on failureMax Kellermann1-0/+6
When the mixer initialization fails, we have to free the libpulse objects we have already created, to prevent resource leaks.
2009-03-26pulse_mixer: unlock the mainloop on failureMax Kellermann1-0/+2
It's illegal to return from pulse_mixer_setup() without unlocking the main loop. In the error handling, that unlock() call was missing.
2009-03-26pulse_mixer: moved code to pulse_mixer_setup()Max Kellermann1-15/+26
Prepare for adding proper error handling.
2009-03-26alsa_mixer: initialize "volume_set" in the open() methodMax Kellermann1-2/+2
"volume_set" is an attribute which becomes undefined when the mixer is closed. That means, it must be initialized each time the mixer is opened.
2009-03-26alsa_mixer: removed superfluous checksMax Kellermann1-10/+6
The MPD core guarantees that methods are always invoked in a consistent state. This means we can remove lots of checks from the volume methods.
2009-03-26alsa_mixer: pass default device to config_get_block_string()Max Kellermann1-14/+7
Instead of replacing NULL with the default device in the open() method, pass the default device to config_get_block_string().
2009-03-26alsa_mixer: make "device" and "control" constMax Kellermann1-6/+5
Use config_get_block_string() instead of config_dup_block_string().
2009-03-26oss_mixer: call oss_find_mixer() in init() methodMax Kellermann1-25/+26
Detect misconfiguration during MPD startup.
2009-03-26oss_mixer: removed superfluous checksMax Kellermann1-8/+8
The MPD core guarantees that methods are always invoked in a consistent state. This means we can remove lots of checks from the volume methods.
2009-03-26oss_mixer: use g_ascii_strncasecmp() instead of strncasecmp()Max Kellermann1-1/+1
strncasecmp() is locale dependent, but we only need ASCII here.
2009-03-26oss_mixer: pass default path to config_get_block_string()Max Kellermann1-8/+5
Instead of replacing NULL with the default path in the open() method, pass the default path to config_get_block_string().
2009-03-26oss_mixer: make "device" and "control" constMax Kellermann1-6/+5
Use config_get_block_string() instead of config_dup_block_string().
2009-03-26mixer: don't reopen failed mixer automaticallyMax Kellermann3-2/+13
If a (global) mixer has been closed due to failure, don't reopen it with every volume get/set. Leave it closed until it is explicitly opened.
2009-03-26mixer_control: close mixer on failureMax Kellermann3-5/+16
When getting or setting the volume fails, the MPD core close the mixer. Moved the duplicated code from the mixer plugins.
2009-03-26mixer: added flag "open"Max Kellermann8-5/+61
Remember if a mixer object is open or closed. Don't call open() again if it is already open. This guarantees that the mixer plugin is always called in a consistent state, and we will be able to remove lots of checks from the implementations. To support mixers which are automatically opened even if the audio output is still closed (to set the volume before playback starts), this patch also adds the "global" flag to the mixer_plugin struct. Both ALSA and OSS set this flag, while PULSE does not.
2009-03-26mixer_control: don't allow mixer==NULLMax Kellermann1-9/+7
As a side effect, the previous patch added the mixer==NULL checks. It is now illegal to call mixer functions with a NULL argument. Convert the runtime checks to assertions.
2009-03-26output_plugin: replaced output_plugin.get_mixer() with mixer_pluginMax Kellermann9-77/+44
The mixer core library is now responsible for creating and managing the mixer object. This removes duplicated code from the output plugins.
2009-03-25player_thread: wait for decoder before seekingMax Kellermann2-0/+12
When the decoder initialization has not been completed yet, all calls to dc_seek() will fail, because dc.seekable is not initialized yet. Wait for the decoder to complete its initialization, i.e. until it has called decoder_initialized().
2009-03-25playlist_state: start playing after restore is completeMax Kellermann1-18/+17
Don't start playback as soon as the "current" song is being loaded from the state file. That is unclean, and leads to an obscure bug: in repeat mode, when the song is started (which is yet the last song in the list), the playlist code marked the very first song in the playlist as "next" song, because the end of the playlist was wrapped. It's easier to set up the playback after all songs have been loaded, and after the random/repeat mode has been set.
2009-03-25output_all: synchronize playback with a notify objectMax Kellermann2-2/+3
Use audio_output_client_notify instead of g_usleep(1ms) in audio_output_all_wait() to synchronize with the output_thread. Signal the audio_output_client_notify object in ao_play().