Commit Graph

3622 Commits

Author SHA1 Message Date
Max Kellermann
1937d29228 output_thread: don't play next chunk after command==PAUSE
When the PAUSE loop ends, re-check the next command before calling
ao_play() again.
2009-06-29 22:20:46 +02:00
Max Kellermann
40851b7cac output_all: don't resume playback when stopping during pause
When MPD was paused, and the client sent the "stop" command (or
"clear"), a glitch caused MPD to continue playback for a split second.
This was because audio_output_all_cancel() calls
audio_output_all_update(), which reopens all output devices, and
re-ignites the playback loop.
2009-06-29 22:20:36 +02:00
Max Kellermann
2536b0da83 decoder_thread: reopen the stream after file_decode() has failed
When decoding a local file, the decoder thread tries to run all
matching decoders, until one succeeds.  Both file_decode() and
stream_decode() can decode a stream, but MPD closes the stream before
calling file_decode().  Problem is: when this decoder fails, and the
next's stream_decode() method is invoked, the input_stream is still
closed.  This patch reopens it.
2009-06-19 08:09:13 +02:00
Max Kellermann
d5ddecb15a listen: bind() failure on secondary address is non-fatal
Several users had problems with binding MPD to "localhost".  The cause
was duplicate /etc/hosts entries: the resolver library returns
127.0.0.1 twice, and of course, MPD attempts to bind to "both" of
them.  This patch makes failures non-fatal, given that at least one
address was bound successfully.  This is a workaround; users should
rather fix their /etc/hosts file.
2009-06-10 08:01:07 +02:00
Max Kellermann
5bb8a5eeef listen: renamed "error" to "error_r" in listen_add_host() 2009-06-10 07:51:14 +02:00
Max Kellermann
7dec2a9bcb listen: print debug message before bind()
Dump each socket address before binding to it.
2009-06-10 07:48:50 +02:00
Max Kellermann
74334a516c ffmpeg: moved code to ffmpeg_copy_metadata() 2009-06-08 08:45:54 +02:00
Max Kellermann
f5d4079d11 ffmpeg: removed "new metadata api" warning
This warning is useless.  I assume the author added it for debugging
purposes.
2009-06-08 08:41:07 +02:00
Max Kellermann
faaf9dafe1 client: check "expired" flag again in client_write_output()
When client_defer_output() aborts the connection to the client,
client_write_output() called client_write_deferred() anyway.  This
caused an assertion failure.  Fix it by checking for the "expired"
flag again after client_defer_output() returns.
2009-06-04 08:59:33 +02:00
Max Kellermann
427dd81678 client: added assertions on channel!=NULL
I'm hunting down a bug where client->channel==NULL during I/O
operations.  These new assertions help avoid this kind of bug in the
future.
2009-06-04 08:42:02 +02:00
Max Kellermann
ed475718e6 decoder_plugin: corrected outdated API documentation 2009-06-04 08:22:43 +02:00
Max Kellermann
70d7c79546 conf: make config_param.num_block_params unsigned 2009-06-03 06:55:09 +02:00
Max Kellermann
ddc2694419 conf: eliminated CamelCase
Renamed all remaining CamelCase functions.
2009-06-03 06:55:04 +02:00
Max Kellermann
9ee53bc76e player_thread: check pipe size again before exiting
When the decoder is finished, break out of the player loop only after
another player.pipe check.  We did check the pipe size a few lines
above, but that check was kind of racy.
2009-06-02 08:40:28 +02:00
Max Kellermann
aa7f5dec87 player_thread: don't leak empty music_chunks
When a music_chunk only contains a tag but no PCM data, play_chunk()
returns true without freeing the chunk.  The caller now assumes that
the chunk is moved into some music_pipe and does not bother to free it
either.
2009-06-02 08:40:28 +02:00
Max Kellermann
1800bde303 player_thread: reinitialize music_buffer in !NDEBUG
To check for leaked music_chunk objects, free the music buffer on
CLOSE_AUDIO.  This invokes an assertion check which ensures that all
chunks have been returned to the buffer.
2009-05-29 23:34:51 +02:00
Max Kellermann
a90c4e5184 output_all: explicitly return "true" from audio_output_all_play()
Instead of returning the local variable "ret" which is always true at
this point, hard-code the "true" return value, because that might be
more readable.
2009-05-29 23:04:45 +02:00
Mathieu Rochette
0dedfe7ddc input/file: log message on error
If a file is removed the library, next time mpd will try to play it it
will result in an error 'ERROR: problems decoding some/file.ogg'.
Nothing is written in log files (verbose mode or not)

[mk: append strerror(errno)]
2009-05-28 23:46:19 +02:00
Max Kellermann
535da8b797 volume: changed "default" to "DISABLED" in switch statement
Make gcc warn us if we add a new mixer type, and forget to add a new
"case" line.
2009-05-28 23:39:51 +02:00
Max Kellermann
68f1aed452 volume: converted volume_mixer_type to an enum
Don't use CPP macros when you can use C enums.
2009-05-28 23:37:26 +02:00
Max Kellermann
a54f14f31d volume: removed unused macro "VOLUME_MIXER_SOFTWARE_DEFAULT" 2009-05-28 23:34:45 +02:00
Max Kellermann
4e8208717b playlist: reset "current song" when playlist ends
Commit f78cddb4 introduced a regression: when the playlist reached its
end, MPD did not reset the "current song" pointer anymore after stop.
Add a "current = -1" code line.
2009-05-28 23:23:32 +02:00
Max Kellermann
d8ef153729 music_chunk: added more audio_format_valid() assertions
Check the validity of the audio_format during write operations.
2009-05-11 17:25:34 +02:00
Max Kellermann
1a9a65b23b music_pipe: added assertion on chunk->audio_format
Always assert that the audio format of the new chunk is valid.
2009-05-11 16:33:48 +02:00
Patrik Weiskircher
7e678d2ba9 latest git, httpd_output_plugin compile fix, mac os x
Hello,

While compiling latest git I've received a compile error in the
httpd_output_plugin.
Small patch attached.

Patrik
2009-05-10 21:15:53 +02:00
Max Kellermann
7c13249b59 pcm_resample: fixed typo in libsamplerate runtime check
The string comparison should be "!= 0", not "== 0".  Ouch.
2009-05-07 12:19:01 +02:00
Max Kellermann
a4c59943d1 player_control: assert that pc.next_song is NULL after seeking
The player thread must reset pc.next_song after seeking, even if that
operation has failed.  This patch adds an assertion.
2009-05-06 18:46:59 +02:00
Max Kellermann
438f3547cc player_control: removed pc.error check from pc_seek()
The only pc_seek() caller clears the error, rendering the check
useless.  Even if the previous PLAY command resulted in a player
error, this check is not very useful.
2009-05-06 18:46:52 +02:00
Max Kellermann
3083df5a5f player_control: renamed playerSeek(), return bool
Renamed playerSeek() to pc_seek() to get rid of CamelCase.  Convert
the return value to bool.
2009-05-06 18:35:22 +02:00
Max Kellermann
0935d85c69 tag_id3: added support for the UFID frame
If the UFID frame's owner is "http://musicbrainz.org", assume its
value is the MusicBrainz track id.
2009-05-06 14:42:07 +02:00
Max Kellermann
4818d38677 httpd_output: save the page generated by encoder_tag()
Flush the encoder before calling encoder_tag().  The first page
generated by the encoder after sending the tag will be the new
"header" page, which is sent to all HTTP clients when they connect.
This is a little bit specific to the vorbis encoder, but there are no
other encoders which support tags (yet).
2009-05-05 22:51:17 +02:00
Max Kellermann
e55e560d4e httpd_output: moved code to httpd_output_encoder_to_clients()
Moved some code from httpd_output_encode_and_play() into separate
functions httpd_output_broadcast_page() and
httpd_output_encoder_to_clients().
2009-05-05 22:43:28 +02:00
Max Kellermann
9080797025 httpd_output: disable Icy-Metadata when encoder supports tags
There's no reason to send both encoder tags and Icy-Metadata to the
client.  Let's disable Icy-Metadata when the encoder supports embedded
tags.
2009-05-05 22:41:36 +02:00
Max Kellermann
ebc1d3516c vorbis_encoder: start a new stream in tag()
When a new tag is set, end the current stream and begin a new one.
Use vorbis_analysis_headerout() to write a full ogg header.  This
fixes a problem with icecast: after a song change in MPD, icecast
stops forwarding ogg packets to its clients.
2009-05-05 22:40:51 +02:00
Max Kellermann
7875072d38 vorbis_encoder: moved code to vorbis_encoder_headerout() 2009-05-05 22:37:13 +02:00
Max Kellermann
795569208a httpd_output: assert that tag!=NULL
In the tag() method, MPD guarantees that it does not pass tag==NULL.
Converted the runtime check to an assertion.
2009-05-05 22:36:44 +02:00
Max Kellermann
7dcdb2ce39 archive/zip: pass NULL instead of 0 to zzip_dir_open()
The second parameter of zzip_dir_open() is a pointer.  Pass the NULL
pointer instead of 0 (with implicit conversion at compile time).
2009-05-04 09:46:15 +02:00
Max Kellermann
e710037760 output_init: added option to disable the hardware mixer
Added the per-device option "mixer_enabled" which allows users to
disable the hardware mixer of an audio output.
2009-04-28 20:33:06 +02:00
Max Kellermann
61b0835512 command: added "sticker delete" command 2009-04-28 20:25:07 +02:00
Max Kellermann
610940a06d sticker: added sticker_delete_value()
sticker_delete_value() deletes only one value in a sticker, while
the old function sticker_delete() deletes all values.
2009-04-28 20:23:27 +02:00
Max Kellermann
7d9316a52d song_save: don't call tag_free(NULL)
When a song was in the database twice (which shouldn't happen), and
the first song had no tag items, MPD calledd tag_free(NULL).  Add a
check to that source location, and an assertion to tag_free().
2009-04-28 19:57:49 +02:00
Max Kellermann
fd81e7e3b6 libsamplerate: use g_ascii_strncasecmp() instead of strncasecmp()
strncasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
2009-04-28 09:42:05 +02:00
Max Kellermann
3db834f6b3 command: use g_ascii_strcasecmp() instead of strcasecmp()
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
2009-04-28 09:34:03 +02:00
Max Kellermann
b546cf65bc utils: use g_ascii_strcasecmp() instead of strcasecmp()
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
2009-04-28 09:33:44 +02:00
Max Kellermann
d3c93c1c77 tag: use g_ascii_strcasecmp() instead of strcasecmp()
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
2009-04-28 09:32:38 +02:00
Max Kellermann
b2924405ae conf: use g_ascii_strcasecmp() instead of strcasecmp()
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
2009-04-28 09:32:09 +02:00
Max Kellermann
b1c177528f locate: use g_ascii_strcasecmp() instead of strcasecmp()
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
2009-04-28 09:31:44 +02:00
Max Kellermann
0edfbc8a5f input_curl: use g_ascii_strcasecmp() instead of strcasecmp()
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
2009-04-28 09:30:12 +02:00
Max Kellermann
c434379d79 mad_decoder: use g_ascii_strcasecmp() instead of strcasecmp()
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
2009-04-28 09:29:39 +02:00
Max Kellermann
d5b3dd36fd mp4ff_decoder: use g_ascii_strcasecmp() instead of strcasecmp()
strcasecmp() is locale dependent, making it a bad choice for internal
string comparisons.
2009-04-28 09:29:11 +02:00