aboutsummaryrefslogtreecommitdiffstats
Commit message (Collapse)AuthorAgeFilesLines
* player: handle songs shorter than the initial bufferMax Kellermann2008-10-291-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.
* oss: check and override audio_format properlyMax Kellermann2008-10-291-0/+7
| | | | | Don't accept 24 bit audio. Force MPD to use 16 bit if anything other than 8 or 16 bit is selected.
* player: added variable "play_audio_format"Max Kellermann2008-10-291-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.
* decoder: automatically flush the output buffer after decoder exitsMax Kellermann2008-10-2912-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().
* decoder_api: make the audio_format parameter mandatoryMax Kellermann2008-10-291-5/+3
| | | | | There are no callers which pass audio_format==NULL, and it shouldn't be allowed.
* player: request new song only if there is no pending commandMax Kellermann2008-10-291-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.
* decoder_api: removed decoder_clear()Max Kellermann2008-10-2910-23/+7
| | | | | Call ob_clear() in decoder_command_finished() instead of implementing that call in every decoder plugin.
* mp3: seek in backgroundMax Kellermann2008-10-291-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.
* mp3: return from mp3_synth_and_send() on any commandMax Kellermann2008-10-291-2/+2
| | | | | Previously, the function would only return when a STOP was issued. It makes more sense to consider all possible commands.
* mp3: moved code to mp3_synth_and_send()Max Kellermann2008-10-291-60/+74
| | | | Break the large function mp3_read() into smaller pieces.
* mp3: moved code to mp3_send_pcm()Max Kellermann2008-10-291-29/+48
| | | | Break the large function mp3_read() into smaller pieces.
* mp3: moved code to mp3_update_timer_next_frame()Max Kellermann2008-10-291-16/+28
| | | | Break the large function mp3_read() into smaller pieces.
* mp3: moved code to mp3_this_frame_offset()Max Kellermann2008-10-291-10/+10
| | | | Break the large function mp3_read() into smaller pieces.
* mp3: moved code to mp3_time_to_frame()Max Kellermann2008-10-291-11/+21
| | | | Break the large function mp3_read() into smaller pieces.
* mp3: assert that the stream is seekableMax Kellermann2008-10-291-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.
* decoder_api: don't cast need_chunks() to intMax Kellermann2008-10-291-4/+4
| | | | | need_chunks() returns a decoder_command enum. Store its return value as this type.
* mp3: moved code to mp3_filesize_to_song_length()Max Kellermann2008-10-281-23/+42
| | | | | The function mp3_decode_first_frame() is too large. Move some code to separate smaller functions.
* mp3: no "goto"Max Kellermann2008-10-281-19/+36
| | | | http://xkcd.com/292/
* mp3: use GLib allocation functionsMax Kellermann2008-10-281-11/+9
| | | | This removes the need for util.h.
* mp3: use boolMax Kellermann2008-10-281-50/+51
| | | | Use the C99 bool data type for boolean values.
* mp3: no CamelCaseMax Kellermann2008-10-281-255/+254
| | | | | Renamed all functions and variables. Also removed the mp3DecodeData typedef.
* mp3: remove obsolete commentsMax Kellermann2008-10-281-4/+0
|
* input_file: don't use buffered I/OMax Kellermann2008-10-281-28/+31
| | | | | Yet another superfluous buffering layer. input_file was using FILE*, but we're better off with unbuffered I/O using open(), read(), ...
* input_stream: convert offset and size to the off_t data typeMax Kellermann2008-10-285-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.
* utils: use g_str_has_prefix() instead of prefixcmp()Max Kellermann2008-10-2810-35/+28
| | | | Remove duplicated code from MPD.
* player: reset pc.command when decoder startup failsMax Kellermann2008-10-271-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.
* input_file, input_curl: check URL type before attempting to openMax Kellermann2008-10-272-0/+6
| | | | | Don't attempt to open a HTTP URL as a local file, and don't send a local path to libcurl.
* configure.ac: fix "xyes: command not found"Max Kellermann2008-10-261-1/+1
| | | | | Due to a missing "test", the "xyes" token was interpreted as a command.
* output: don't compile plugins which are disabledMax Kellermann2008-10-2615-104/+92
| | | | Don't compile the sources of disabled output plugins at all.
* dirvec: fixed GCC shadow warningMax Kellermann2008-10-261-4/+4
| | | | | On some systems, string.h declares basename(). This emits a shadow warning. Change the variable name.
* curl: read stream name from HTTP response headersMax Kellermann2008-10-261-0/+5
| | | | | If the server sends the headers "icy-name", "ice-name", "x-audiocast-name", set the stream title.
* input_curl: set input_stream.mime from Content-Type response headerMax Kellermann2008-10-261-0/+3
|
* input_curl: added local variable "value"Max Kellermann2008-10-261-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.
* input_stream: use g_free() in input_stream_close()Max Kellermann2008-10-261-8/+5
| | | | g_free() allows passing the NULL pointer.
* input_stream: use "bool" instead of "int"Max Kellermann2008-10-2614-49/+55
| | | | | For boolean values and success flags, use bool instead of integer (1/0 for true/false, 0/-1 for success/failure).
* input_stream: input_stream_close() returns voidMax Kellermann2008-10-264-13/+7
| | | | close() shouldn't fail with read-only streams.
* input_stream: added struct input_pluginMax Kellermann2008-10-266-56/+63
| | | | | | | Instead of managing a set of method pointers in each input_stream struct, move these into the new input_plugin struct. Each input_stream has only a pointer to the plugin struct. Pointers to all implementations are kept in the array "input_plugins".
* input_stream: no CamelCaseMax Kellermann2008-10-2617-160/+158
| | | | Renamed all functions and variables.
* input_file: removed global constructorMax Kellermann2008-10-263-7/+0
| | | | The global constructor is empty, and can be removed.
* input_file: don't export internal methodsMax Kellermann2008-10-262-19/+25
| | | | | The methods are only used in inputStream_fileOpen(), and should not be exported.
* input_stream: removed the InputStream typedefMax Kellermann2008-10-2613-50/+65
| | | | Everybody should use struct input_stream.
* input_stream: renamed sources, no CamelCaseMax Kellermann2008-10-268-11/+11
| | | | Renamed inputStream.c and inputStream_file.c.
* http: use libcurlMax Kellermann2008-10-269-1171/+547
| | | | | | | MPD's HTTP client code has always been broken, no matter how effort was put into fixing it. Replace it with libcurl, which is known to be quite stable. This adds a fat library dependency, but only for people who need streaming.
* input_stream: added input_stream_global_finish()Max Kellermann2008-10-263-0/+7
| | | | | The hook input_stream_global_finish() deinitializes global structures of all input stream implementations.
* stored_playlist: fixed signed comparison warningMax Kellermann2008-10-261-1/+1
| | | | Cast playlist_max_length to off_t before comparing it to stat.st_size.
* command: removed range check from check_bool()Max Kellermann2008-10-261-6/+0
| | | | check_bool() accepts only "0" or "1". The range check is superfluous.
* renamed src/audioOutputs/ to src/output/Max Kellermann2008-10-2614-19/+18
| | | | Again, no CamelCase in the directory name.
* renamed src/inputPlugins/ to src/decoder/Max Kellermann2008-10-2616-14/+14
| | | | | These plugins are not input plugins, they are decoder plugins. No CamelCase in the directory name.
* configure.ac: reverted protocol version to 0.14.0Max Kellermann2008-10-261-1/+1
| | | | | | | Several clients refuse to accept the protocol version "0.14~git", because they think it is malformed. This is clearly a client bug, but we cannot wait for all clients to fix this bug right now. For now, change the version back to "0.14.0".
* Makefile.am: install documentationMax Kellermann2008-10-252-5/+5
|