Commit Graph

4156 Commits

Author SHA1 Message Date
Max Kellermann
f15d879e37 volume: use bool instead of int
Return true/false on success/failure, instead of 0/-1.  Pass
true/false instead of 1/0 for the "rel" boolean parameter.
2009-03-14 11:10:21 +01:00
Jochen Keil
f31c371fbd Removed superfluous if statement in update.c:453
Check for NULL not necessary here
2009-03-14 09:33:55 +01:00
Avuton Olrich
0aee49bdf8 all: Update copyright header.
This updates the copyright header to all be the same, which is
pretty much an update of where to mail request for a copy of the GPL
and the years of the MPD project. This also puts all committers under
'The Music Player Project' umbrella. These entries should go
individually in the AUTHORS file, for consistancy.
2009-03-13 11:51:55 -07:00
Jeffrey Middleton
6e72755204 crossfade: added missing '&' 2009-03-12 20:23:46 +01:00
Max Kellermann
6352e75910 crossfade: copy chunk.audio_format in !NDEBUG
When the destination chunk was empty in cross_fade_apply(), it had no
audio_format attached (an attribute which is only used for assertion
in the debug build).  cross_fade_apply() should assign it the
audio_format of the second chunk (if available), otherwise MPD will
crash.
2009-03-12 19:49:15 +01:00
Max Kellermann
e3b9b57ecd output_all: fix off-by-one error in audio_output_all_check()
When there are chunks which are not yet finished,
audio_output_all_check() returned the size of its music pipe minus
one.  I can't remember exactly why I subtracted 1 from the return
value, it must have had something to do with a former meaning of this
function.  Now it induces assertion failures.
2009-03-12 19:49:10 +01:00
Max Kellermann
d8218cae6b Makefile.am: link test/software_volume with GLib
That linker flag got lost when AM_LDFLAGS was removed.
2009-03-12 19:41:11 +01:00
Max Kellermann
0bc7f584f4 mixer_control: don't touch mixers of disabled outputs
When an audio output device is disabled, also disable its mixer.
2009-03-12 18:40:03 +01:00
Max Kellermann
c37567a14f audio: converted device number check to assertion
No caller must ever pass an invalid device number to
mixer_control_setvol() or mixer_control_getvol().
2009-03-12 18:34:38 +01:00
Max Kellermann
e9cbb6be3f audio: moved mixer functions to mixer_control.c 2009-03-12 18:34:37 +01:00
Max Kellermann
9feaedd799 volume: removed unused variable "default_mixer" 2009-03-12 18:24:13 +01:00
Max Kellermann
869f440f87 doc: added installation manual to the User's Manual
Very small start..
2009-03-12 17:12:53 +01:00
Max Kellermann
0cb8e7f2cb doc: added skeleton for the user manual 2009-03-12 17:06:48 +01:00
Eric Wollesen
e2dc3c948f Move from the opaque GPtrArray to GHashTable for sticker lists. 2009-03-11 17:03:01 -06:00
Diego Elio 'Flameeyes' Pettenò
ce6ef89f26 Pass glib libs properly to libtool.
Passing libraries through LDFLAGS is a mistake that causes link to fail
when using --as-needed. Since the ld arguments are positional, so are
libtool's. Use the proper variable, thus, to pass the libraries.
2009-03-11 12:45:46 +01:00
Max Kellermann
bc3702a4fd player_thread: added comments 2009-03-11 09:35:16 +01:00
Max Kellermann
13cd6b2834 player_thread: removed player_stop_decoder()
Replaced both player_stop_decoder() invocations with player_dc_stop(),
which also cleans up the pipe.
2009-03-11 09:20:34 +01:00
Max Kellermann
903a07b80e player_thread: don't call dc_stop() twice
In the "CANCEL" command handler, the decoder is stopped twice: first
by player_dc_stop(), then by dc_stop().  Remove the latter.
2009-03-11 09:20:33 +01:00
Max Kellermann
a7318a6476 configure.ac: add -pg to MPD_LIBS with --enable-gprof 2009-03-11 09:20:29 +01:00
Max Kellermann
923ac213b5 output_control: removed audio_output_signal()
This function was part of a workaround which we don't need anymore.
2009-03-10 22:48:12 +01:00
Jochen Keil
756b0022da Cleaned up update_regular_file() method in update.c
After adding the container_scan() method the update_regular_file() method was quite hard to read.
Now there's update_container_file() which deals with container files.
That way normal container files (i.e. without embedded tracks) are handled by the old code like a regular file.
This will fix some of the odd behaviour observed.
2009-03-10 22:09:51 +01:00
Max Kellermann
cff29f5e86 alsa: use snd_pcm_sframes_t instead of int
snd_pcm_writei() returns the type snd_pcm_sframes_t, not int.  Use the
correct variable type.
2009-03-10 21:31:13 +01:00
Max Kellermann
855054fee1 alsa: don't close PCM handle in alsa_recover()
If the PCM handle gets disconnected, don't close and clear it in
alsa_recover().  The MPD core will call alsa_close() anyway.  This
way, we can always assume that alsa_data.pcm is always valid.
2009-03-10 21:25:45 +01:00
Max Kellermann
538701e7c6 player_thread: fill buffer after seeking
After a seek, wait until enough new chunks are decoded before starting
playback.  If this takes too long, send silence chunks to the audio
outputs meanwhile.
2009-03-10 21:19:51 +01:00
Max Kellermann
2b57863144 output_all: clear input_audio_format on close
When the audio outputs are closed, also clear the audio format.  If we
don't do this, every call to audio_output_all_update() will open the
device, even if it's meant to be paused.
2009-03-10 21:04:47 +01:00
Max Kellermann
f2ec6ee184 output_all: don't allow audio_format==NULL in audio_output_all_open()
Don't allow reopening an audio device after pause with
audio_format==NULL, force the caller to provide the audio_format each
time.
2009-03-10 21:04:45 +01:00
Max Kellermann
d3eccb2324 player_thread: pass format to audio_output_all_open() after resume
When playback is unpaused, pass the audio_format to
audio_output_all_open().  Don't assume that output_all.c remembers the
previous audio format.  Also check if there has been an audio format
yet.
2009-03-10 21:00:52 +01:00
Max Kellermann
a790b64568 player_thread: moved code to player_send_silence() 2009-03-10 20:43:19 +01:00
Max Kellermann
5dfad1d5d6 output_thread: check commands while playing
Check audio_output.command after each sub-chunk has been played.  It
discards the rest of the chunk, but since all commands make the device
stop anyway, this is not a problem, but part of the improvement.  This
improves the latency of audio output commands.
2009-03-10 20:41:27 +01:00
Max Kellermann
92d74d4a78 player_thread: finish failed seek command
When seeking into a new song, and the decoder for the new song fails
to start up, MPD forgot to send the "command_finished" signal to the
main thread.
2009-03-10 18:04:09 +01:00
Max Kellermann
c6a43b691f player_thread: clear player.queued after failure
When pc.next_song is reset due to a decoder failure, also reset the
player.queued flag.  player.queued must not be true when there is no
pc.next_song.
2009-03-10 18:03:38 +01:00
Max Kellermann
7d52284a96 player_thread: moved code to player_seek_decoder()
Reset player.xfade and player.buffering from within
player_seek_decoder(), not in the player_process_command() switch
statement.
2009-03-10 17:52:38 +01:00
Max Kellermann
3ef8cba274 music_chunk: increased chunk size to 4 kB
A larger chunk size means less overhead for managing them.  4 kB seems
to be a reasonable choice: it contains 23 ms of 44.1 kHz 16 bit stereo
data, or 3 ms of 192 kHz 24 bit stereo data.  The original value of
1020 seemed to be too small, there were quite a lot of system calls
and context switches.
2009-03-10 16:11:58 +01:00
Max Kellermann
79ef9166df test: added program "run_output"
The "run_output" program can be used to test an audio output plugin in
an isolated environment.
2009-03-10 15:46:55 +01:00
Max Kellermann
296c1bb3b6 Makefile.am: moved file names to $(OUTPUT_API_SRC) 2009-03-10 15:46:55 +01:00
Max Kellermann
eeb54a5f35 player_thread: don't free music buffer after decoder failure
The music_buffer is a global variable, and must not be freed until the
player thread exits.
2009-03-10 07:17:14 +01:00
Max Kellermann
3291666b57 output: play from a music_pipe object
Instead of passing individual buffers to audio_output_all_play(), pass
music_chunk objects.  Append all those chunks asynchronously to a
music_pipe instance.  All output threads may then read chunks from
this pipe.  This reduces MPD's internal latency by an order of
magnitude.
2009-03-09 19:25:26 +01:00
Max Kellermann
ab3d7c29da player_thread: don't open audio device when paused
When a PAUSE command is received while the decoder starts, don't open
the audio device when the decoder becomes ready.  It's pointless,
because MPD will close if after that.
2009-03-09 19:16:50 +01:00
Max Kellermann
e1bd2c65d5 music_pipe: added music_pipe_contains() 2009-03-09 19:15:54 +01:00
Max Kellermann
9f79c05e43 player_thread: moved code to player_song_border()
Moved some more cruft out of do_play().
2009-03-09 19:15:14 +01:00
Max Kellermann
4459a46181 player_thread: moved code to play_next_chunk()
Moved some cruft out of do_play().
2009-03-09 19:14:06 +01:00
Max Kellermann
d213f9a3e5 player_thread: make the music_buffer instance global
Preparation for the next patch: since the output devices stay open
even when the player thread stops playing, we will need a persistent
music buffer.
2009-03-09 19:12:06 +01:00
Max Kellermann
8de179ef7b output_control: make audio_output_open() static
audio_output_open() is only called by audio_output_update().  Don't
export it.
2009-03-09 19:11:13 +01:00
Max Kellermann
c5c86452ce music_buffer: poison unallocated chunks
When a music chunk is freed (returned to the buffer), poison its
memory.
2009-03-09 19:11:10 +01:00
Max Kellermann
940af669b3 poison: added valgrind support
If the header valgrind/memcheck.h is available, add
VALGRIND_MAKE_MEM_NOACCESS() and VALGRIND_MAKE_MEM_UNDEFINED()
support, which enables nice warnings in the valgrind memory checker.
2009-03-09 19:10:18 +01:00
Max Kellermann
fd76e29fba added memory poisoning library
Memory poisoning is useful for marking memory regions as "undefined".
This poisoning only enabled in the debug build (!NDEBUG).
2009-03-09 19:09:30 +01:00
Max Kellermann
71e88271d9 output_thread: wait 10 seconds before reopening after play failure
This is similar to the MPD 0.14 patch "wait 10 seconds before
reopening a failed device", which only covered open() failures.  This
patch adds the same feature for play().
2009-03-09 19:08:35 +01:00
Jochen Keil
4d3d091c22 Fix remove-flac-song-on-every-update
Until now every flac file got removed unconditionally (and then re-added)
whenever the update command was issued. Now there is a check if we need
to that, so the file will only be removed if there is a embedded cuesheet
in that file
2009-03-09 15:15:26 +01:00
Jochen Keil
706112bb88 Initial support for embedded cue sheets found in flac files
So far only seekpoints are supported, so no proper tagging yet
except for track number and track length.
Tagging should be done by parsing the cue sheet which
is often embedded as vorbis comment in flac files.
Furthermore the pathname should be configurable like "%A - %t - %T",
where %A means Artist, %t track number and %T Title or so.
2009-03-09 07:58:44 +01:00
Jochen Keil
ab3d89f484 decoder_plugin: added method container_scan()
[mk: fixed whitespace errors; use delete_song() instead of
songvec_delete()]
2009-03-09 07:58:26 +01:00