aboutsummaryrefslogtreecommitdiffstats
path: root/src (unfollow)
Commit message (Collapse)AuthorFilesLines
2008-10-29output: removed audio_output.resultMax Kellermann4-27/+12
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-29output: delay reopen after device failureMax Kellermann5-3/+24
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-29output: moved code to audio_output_update()Max Kellermann3-8/+19
Moved code from syncAudioDeviceStates() to audio_output_update().
2008-10-29output: always call cancel() before stop()Max Kellermann3-14/+7
Stopping an audio output device without cancelling its buffer doesn't make sense. Combine the two operations, which saves several cancel calls.
2008-10-29input_file: refuse to open non-regular filesMax Kellermann1-0/+7
Don't allow users to open a file which is non-regular (e.g. pipes, devices).
2008-10-29input_file: check fstat() failureMax Kellermann1-0/+6
2008-10-29input_file: use GLib for loggingMax Kellermann1-3/+3
2008-10-29log: don't use utils.hMax Kellermann3-27/+17
Prefer GLib over utils.h.
2008-10-29output: moved audioDeviceStates to audio_output.enabledMax Kellermann3-20/+12
2008-10-29output: close device on play errorMax Kellermann7-12/+7
When an output plugin fails to play a chunk, close it. This replaces various manual close() calls in nearly all plugins.
2008-10-29output: use bool for return values and flagsMax Kellermann21-153/+162
Don't return 0/-1 on success/error, but true/false. Instead of int, use bool for storing flags.
2008-10-29audio: call closeAudioDevice() on errorMax Kellermann1-5/+2
Instead of implementing another loop which calls audio_output_close() on all configured devices, simply call closeAudioDevice().
2008-10-29audio: removed variable "audioOpened"Max Kellermann1-9/+1
This variable is never read, and can be removed.
2008-10-29pulse: clear pa_simple pointer in pulse_close()Max Kellermann1-0/+1
The pointer becomes invalid due to pa_simple_free(), which may lead to segmentation faults when the output is reopened later.
2008-10-29pulse: use GLib instead of util.h/log.hMax Kellermann1-28/+25
Use GLib allocation and logging functions.
2008-10-29pulse: no CamelCaseMax Kellermann2-50/+51
2008-10-29player: handle songs shorter than the initial bufferMax Kellermann1-1/+2
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-29oss: check and override audio_format properlyMax Kellermann1-0/+7
Don't accept 24 bit audio. Force MPD to use 16 bit if anything other than 8 or 16 bit is selected.
2008-10-29player: added variable "play_audio_format"Max Kellermann1-2/+4
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-29decoder: automatically flush the output buffer after decoder exitsMax Kellermann12-30/+3
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-29decoder_api: make the audio_format parameter mandatoryMax Kellermann1-5/+3
There are no callers which pass audio_format==NULL, and it shouldn't be allowed.
2008-10-29player: request new song only if there is no pending commandMax Kellermann1-1/+2
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-29decoder_api: removed decoder_clear()Max Kellermann10-23/+7
Call ob_clear() in decoder_command_finished() instead of implementing that call in every decoder plugin.
2008-10-29mp3: seek in backgroundMax Kellermann1-5/+7
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-29mp3: return from mp3_synth_and_send() on any commandMax Kellermann1-2/+2
Previously, the function would only return when a STOP was issued. It makes more sense to consider all possible commands.
2008-10-29mp3: moved code to mp3_synth_and_send()Max Kellermann1-60/+74
Break the large function mp3_read() into smaller pieces.
2008-10-29mp3: moved code to mp3_send_pcm()Max Kellermann1-29/+48
Break the large function mp3_read() into smaller pieces.
2008-10-29mp3: moved code to mp3_update_timer_next_frame()Max Kellermann1-16/+28
Break the large function mp3_read() into smaller pieces.
2008-10-29mp3: moved code to mp3_this_frame_offset()Max Kellermann1-10/+10
Break the large function mp3_read() into smaller pieces.
2008-10-29mp3: moved code to mp3_time_to_frame()Max Kellermann1-11/+21
Break the large function mp3_read() into smaller pieces.
2008-10-29mp3: assert that the stream is seekableMax Kellermann1-5/+5
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-29decoder_api: don't cast need_chunks() to intMax Kellermann1-4/+4
need_chunks() returns a decoder_command enum. Store its return value as this type.
2008-10-28mp3: moved code to mp3_filesize_to_song_length()Max Kellermann1-23/+42
The function mp3_decode_first_frame() is too large. Move some code to separate smaller functions.
2008-10-28mp3: no "goto"Max Kellermann1-19/+36
http://xkcd.com/292/
2008-10-28mp3: use GLib allocation functionsMax Kellermann1-11/+9
This removes the need for util.h.
2008-10-28mp3: use boolMax Kellermann1-50/+51
Use the C99 bool data type for boolean values.
2008-10-28mp3: no CamelCaseMax Kellermann1-255/+254
Renamed all functions and variables. Also removed the mp3DecodeData typedef.
2008-10-28mp3: remove obsolete commentsMax Kellermann1-4/+0
2008-10-28input_file: don't use buffered I/OMax Kellermann1-28/+31
Yet another superfluous buffering layer. input_file was using FILE*, but we're better off with unbuffered I/O using open(), read(), ...
2008-10-28input_stream: convert offset and size to the off_t data typeMax Kellermann5-13/+12
size_t and long aren't 64 bit safe (i.e. files larger than 2 GB on a 32 bit OS). Use off_t instead, which is a 64 bit integer if compiled with large file support.
2008-10-28utils: use g_str_has_prefix() instead of prefixcmp()Max Kellermann10-35/+28
Remove duplicated code from MPD.
2008-10-27player: reset pc.command when decoder startup failsMax Kellermann1-0/+1
When the decoder failed to start, the function do_play() returned, still having pc.command==PLAY. This is because pc.command was reset only when the decoder started up successfully. Add another player_command_finished() call in the error handler.
2008-10-27input_file, input_curl: check URL type before attempting to openMax Kellermann2-0/+6
Don't attempt to open a HTTP URL as a local file, and don't send a local path to libcurl.
2008-10-26output: don't compile plugins which are disabledMax Kellermann14-104/+72
Don't compile the sources of disabled output plugins at all.
2008-10-26dirvec: fixed GCC shadow warningMax Kellermann1-4/+4
On some systems, string.h declares basename(). This emits a shadow warning. Change the variable name.
2008-10-26curl: read stream name from HTTP response headersMax Kellermann1-0/+5
If the server sends the headers "icy-name", "ice-name", "x-audiocast-name", set the stream title.
2008-10-26input_curl: set input_stream.mime from Content-Type response headerMax Kellermann1-0/+3
2008-10-26input_curl: added local variable "value"Max Kellermann1-14/+22
Replaced the local variable "colon" (which had only temporary meaning) with the variable "value". It is a pointer to the first byte of the header value.
2008-10-26input_stream: use g_free() in input_stream_close()Max Kellermann1-8/+5
g_free() allows passing the NULL pointer.
2008-10-26input_stream: use "bool" instead of "int"Max Kellermann14-49/+55
For boolean values and success flags, use bool instead of integer (1/0 for true/false, 0/-1 for success/failure).