Commit Graph

2689 Commits

Author SHA1 Message Date
Max Kellermann
25f4efcdb8 ffmpeg: eliminated local variable "tag"
The function ffmpeg_tag() already has the variable base.tag, which can
be used for this.
2008-10-30 19:01:31 +01:00
Max Kellermann
7cbd9821c6 ffmpeg: make ffmpeg_helper() return bool
ffmpeg_try_decode() did not interpret ffmpeg_helper()'s return value
properly; migrate everything to bool to make it consistent.
2008-10-30 19:01:23 +01:00
Max Kellermann
078d83ca13 ffmpeg: removed debug messages
We don't need those anymore, they just fill the log.
2008-10-30 19:01:18 +01:00
Max Kellermann
b180d0b47f ffmpeg: initialize base.decoder
ffmpeg_tag() did not initialize base.decoder, which made valgrind
unhappy, and can lead to a egmentation fault.
2008-10-30 18:08:52 +01:00
Max Kellermann
4d72bda4c3 listen: set file mode 666 on the unix socket
Depending on MPD's umask, the file permissions of the unix socket were
too restrictive, and many clients were not able to connect.  Do a
chmod(0666) on the socket, to allow everybody to connect.
2008-10-30 18:03:18 +01:00
Max Kellermann
9ec695559f pulse: fix segfault without sink name
Commit d692e9 broke configurations without explicit server or sink
configuration.  Check for getBlockParam()==NULL.
2008-10-30 17:46:56 +01:00
Richard Brown
bc5429580e autogen.sh: don't call aclocal with the $PWD prefix
calling aclocal -I PWD/m4 in autogen.sh, rather than aclocal -I m4 is
causing autotools to to not include the m4 directory in the dist
tarball. This makes it quite hard to regenerate aclocal/configure.
2008-10-30 10:37:41 +01:00
Max Kellermann
5f6383d68c mpc: provide 24 bit samples
Similar to libmad, libmpcdec provides samples with higher quality than
16 bit.  Send 24 bit samples to MPD, which allows MPD to apply
dithering just in case the output devices are only 16 bit capable.
2008-10-30 08:45:00 +01:00
Max Kellermann
0db07a920e mpc: moved sample size into a constant
Don't hard-code the "16 bits" or "2 bytes" in multiple locations.
2008-10-30 08:44:51 +01:00
Max Kellermann
6773dea5b0 mpc: renamed variable "s16" to "dest"
The name "s16" implies 16 bit integers.  To make the code more
generic, rename it to "dest".
2008-10-30 08:44:43 +01:00
Max Kellermann
51348d6992 mpc: fix broken integer sample conversion
The conversion of integer samples was completely broken, which
presumably didn't annoy anybody because libmpcdec provides float
samples on most installations.
2008-10-30 08:44:28 +01:00
Max Kellermann
ecd485acbd mpc: fix boolean interpretation of input_stream_seek()
When input_stream_seek() was converted to return a bool, this wasn't
adjusted in the musepack plugin.
2008-10-30 08:42:18 +01:00
Max Kellermann
62d4fa9306 decoder: use bool for return values and flags
Don't return 0/-1 on success/error, but true/false.  Instead of int,
use bool for storing flags.
2008-10-30 08:38:54 +01:00
Max Kellermann
d29bad4410 mp3: make mp3_read() return bool
Its only caller in mp3_decode() just compared its value with
DECODE_BREAK.  Convert that to bool, and return false if the loop
should be ended.  Also eliminate some superfluous command checking
code, which was already done in the preceding while loop.
2008-10-30 06:09:28 +01:00
Max Kellermann
f8722913cf output: removed audio_output.result
Since open() and play() close the device on error, we can simply check
audio_output.open instead of audio_output.result after a call.
2008-10-29 22:34:37 +01:00
Max Kellermann
7da0e005f3 output: delay reopen after device failure
When one of several output devices failed, MPD tried to reopen it
quite often, wasting a lot of resources.  This patch adds a delay:
wait 10 seconds before retrying.  This might be changed to exponential
delays later, but for now, it makes the problem go away.
2008-10-29 22:32:50 +01:00
Max Kellermann
0eae1c55ad output: moved code to audio_output_update()
Moved code from syncAudioDeviceStates() to audio_output_update().
2008-10-29 22:17:44 +01:00
Max Kellermann
678314534a output: always call cancel() before stop()
Stopping an audio output device without cancelling its buffer doesn't
make sense.  Combine the two operations, which saves several cancel
calls.
2008-10-29 22:17:42 +01:00
Max Kellermann
07bb46de88 input_file: refuse to open non-regular files
Don't allow users to open a file which is non-regular (e.g. pipes,
devices).
2008-10-29 21:11:28 +01:00
Max Kellermann
84f7d9c6b3 input_file: check fstat() failure 2008-10-29 21:11:20 +01:00
Max Kellermann
fb08213659 input_file: use GLib for logging 2008-10-29 21:11:04 +01:00
Max Kellermann
8f3d962219 log: don't use utils.h
Prefer GLib over utils.h.
2008-10-29 21:02:22 +01:00
Max Kellermann
cf376b4bc8 output: moved audioDeviceStates to audio_output.enabled 2008-10-29 20:49:51 +01:00
Max Kellermann
2f76db4c78 output: close device on play error
When an output plugin fails to play a chunk, close it.  This replaces
various manual close() calls in nearly all plugins.
2008-10-29 20:40:33 +01:00
Max Kellermann
58c5bee9f0 output: use bool for return values and flags
Don't return 0/-1 on success/error, but true/false.  Instead of int,
use bool for storing flags.
2008-10-29 20:40:27 +01:00
Max Kellermann
03390d8be1 audio: call closeAudioDevice() on error
Instead of implementing another loop which calls audio_output_close()
on all configured devices, simply call closeAudioDevice().
2008-10-29 20:39:56 +01:00
Max Kellermann
030238bb10 audio: removed variable "audioOpened"
This variable is never read, and can be removed.
2008-10-29 20:39:48 +01:00
Max Kellermann
b967702059 pulse: clear pa_simple pointer in pulse_close()
The pointer becomes invalid due to pa_simple_free(), which may lead to
segmentation faults when the output is reopened later.
2008-10-29 20:38:20 +01:00
Max Kellermann
d692e925a4 pulse: use GLib instead of util.h/log.h
Use GLib allocation and logging functions.
2008-10-29 20:37:36 +01:00
Max Kellermann
38df17546a pulse: no CamelCase 2008-10-29 20:37:15 +01:00
Max Kellermann
2867c8e9b1 player: handle songs shorter than the initial buffer
When the decoder exited before the buffer has grown big enough
("buffer_before_play"), the player thread waited forever.  Add an
additional check which disables buffering as soon as the decoder
exits.
2008-10-29 18:35:10 +01:00
Max Kellermann
5c4dc8d03c oss: check and override audio_format properly
Don't accept 24 bit audio.  Force MPD to use 16 bit if anything other
than 8 or 16 bit is selected.
2008-10-29 18:35:03 +01:00
Max Kellermann
c6714f1755 player: added variable "play_audio_format"
The local variable "play_audio_format" is updated every time the
player starts playing a new song.  This way, we always know exactly
which audio format is current.  The old code broke when a new song had
a different format: ob.audio_format is the format of the next song,
not of the current one - using this caused breakage for the software
volume control.
2008-10-29 17:29:30 +01:00
Max Kellermann
528b7c3f5e decoder: automatically flush the output buffer after decoder exits
A decoder_flush() invocation was missing in the FLAC plugin, resulting
in casual assertion failures due to a wrong assumption about the last
chunk's audio format.  It's much easier to remove that decoder_flush()
function and make the decoder thread call ob_flush().
2008-10-29 17:29:06 +01:00
Max Kellermann
74c85811af decoder_api: make the audio_format parameter mandatory
There are no callers which pass audio_format==NULL, and it shouldn't
be allowed.
2008-10-29 17:29:03 +01:00
Max Kellermann
c042faab42 player: request new song only if there is no pending command
Request the next song from the playlist (by clearing pc.next_song)
only if the player command is empty.  If it is not, the player may be
clearing the song that has already been queued, leading to an
assertion failure.
2008-10-29 17:28:49 +01:00
Max Kellermann
be90199c5a decoder_api: removed decoder_clear()
Call ob_clear() in decoder_command_finished() instead of implementing
that call in every decoder plugin.
2008-10-29 17:28:47 +01:00
Max Kellermann
d6c4441c78 mp3: seek in background
Remember the seek_where argument and call decoder_command_finished()
immediately.  This way, the player thread can continue working, and we
can receive more commands.

This also fixes several issues which resulted in broken frames,
leading to erroneos "elapsed" values: frames weren't parsed properly,
since the code was checking for command!=NONE.
2008-10-29 17:22:56 +01:00
Max Kellermann
de588448df mp3: return from mp3_synth_and_send() on any command
Previously, the function would only return when a STOP was issued.  It
makes more sense to consider all possible commands.
2008-10-29 16:17:21 +01:00
Max Kellermann
6158858f82 mp3: moved code to mp3_synth_and_send()
Break the large function mp3_read() into smaller pieces.
2008-10-29 16:14:08 +01:00
Max Kellermann
e0532ae0a8 mp3: moved code to mp3_send_pcm()
Break the large function mp3_read() into smaller pieces.
2008-10-29 16:14:02 +01:00
Max Kellermann
a6ad0e4047 mp3: moved code to mp3_update_timer_next_frame()
Break the large function mp3_read() into smaller pieces.
2008-10-29 16:13:51 +01:00
Max Kellermann
0d079ee515 mp3: moved code to mp3_this_frame_offset()
Break the large function mp3_read() into smaller pieces.
2008-10-29 16:13:01 +01:00
Max Kellermann
a6f8776c94 mp3: moved code to mp3_time_to_frame()
Break the large function mp3_read() into smaller pieces.
2008-10-29 16:12:26 +01:00
Max Kellermann
ec3083948f mp3: assert that the stream is seekable
dc_seek() won't send a SEEK command to the decoder thread unless the
stream is seekable.  No need to do another check; convert that to an
assertion.
2008-10-29 16:11:16 +01:00
Max Kellermann
78b08f03f2 decoder_api: don't cast need_chunks() to int
need_chunks() returns a decoder_command enum.  Store its return value
as this type.
2008-10-29 16:11:15 +01:00
Max Kellermann
a0b57f3782 mp3: moved code to mp3_filesize_to_song_length()
The function mp3_decode_first_frame() is too large.  Move some code to
separate smaller functions.
2008-10-28 20:44:08 +01:00
Max Kellermann
898978a67d mp3: no "goto"
http://xkcd.com/292/
2008-10-28 20:43:17 +01:00
Max Kellermann
28b47725ff mp3: use GLib allocation functions
This removes the need for util.h.
2008-10-28 20:43:15 +01:00
Max Kellermann
56ebdf1cd1 mp3: use bool
Use the C99 bool data type for boolean values.
2008-10-28 20:42:33 +01:00