Commit message (Collapse) | Author | Age | Files | Lines | |
---|---|---|---|---|---|
* | decoder_api: move code to _prepare_initial_seek() | Max Kellermann | 2011-10-06 | 1 | -7/+31 |
| | | | | .. and add a few code comments. | ||||
* | decoder_control: add attributes start_ms, end_ms | Max Kellermann | 2011-10-05 | 5 | -6/+31 |
| | | | | | Don't read song.start_ms and song.end_ms, let the player thread manage this logic instead. | ||||
* | decoder_api: don't copy tag to pipe during initial seek | Max Kellermann | 2011-10-05 | 1 | -3/+8 |
| | | | | Fixes one more assertion failure. | ||||
* | decoder_api: clear initial_seek_running on error | Max Kellermann | 2011-10-04 | 1 | -1/+3 |
| | | | | Fixes possible assertion failure. | ||||
* | decoder_api: emulate SEEK command for initial seek to CUE track | Max Kellermann | 2011-09-22 | 4 | -16/+73 |
| | | | | | | | | | | | | | When playing a CUE track, the player thread waited for the decoder to become ready, and then sent a SEEK command to the beginning of the CUE track. If that is near the start of the song file, and the track is short enough, the decoder could have finished decoding already at that point, and seeking fails. This commit makes this initial seek more robust: instead of letting the player thread deal with the difficult timings, let the decoder API emulate a SEEK command, and return it to the decoder plugin, as soon as the plugin finishes its initialization. | ||||
* | decoder_internal.h: more API documentation | Max Kellermann | 2011-09-22 | 1 | -0/+5 |
| | |||||
* | utils: uri.h: fix a typo: "schema" | Jonathan Neuschäfer | 2011-09-21 | 1 | -1/+1 |
| | |||||
* | fd_util: add function close_socket() | Max Kellermann | 2011-09-20 | 6 | -8/+25 |
| | | | | Wrap close(), use closesocket() on WIN32/WinSock. | ||||
* | fd_util: check HAVE_INOTIFY_INIT in header | Max Kellermann | 2011-09-20 | 1 | -0/+4 |
| | | | | Don't provide the prototype if inotify_init() was not detected. | ||||
* | fd_util: include check.h, verify config.h was included | Max Kellermann | 2011-09-20 | 1 | -0/+2 |
| | |||||
* | glib_socket.h: wrap g_io_channel_*_new() calls portably | Max Kellermann | 2011-09-20 | 5 | -16/+48 |
| | | | | | The server_socket library (used by the httpd output plugin) didn't check for WIN32, that's fixed now. | ||||
* | configure.ac: add option --enable-solaris-output | Max Kellermann | 2011-09-19 | 1 | -1/+19 |
| | | | | | Allow enabling the plugin explicitly without running Solaris, to test the build. | ||||
* | decoder/audiofile: include stdio header for SEEK_* defines | Tim Harder | 2011-09-17 | 1 | -0/+1 |
| | | | | The stdio header is no longer pulled in by af_vfs.h in audiofile-0.3.0. | ||||
* | output/pulse: improve locking | Max Kellermann | 2011-09-17 | 1 | -11/+11 |
| | | | | | Always lock the main loop when operating on PULSE objects. Document this. | ||||
* | input/curl, output/pulse: fix "unused local variable" warnings | Max Kellermann | 2011-09-16 | 2 | -2/+3 |
| | |||||
* | decoder/ffmpeg: flush the codec after seeking | Max Kellermann | 2011-09-15 | 1 | -1/+3 |
| | | | | | Let the codec start with fresh buffers. This should fix the remaining seeking issues. | ||||
* | decoder/ffmpeg: explicitly specify the current stream for seeking | Max Kellermann | 2011-09-15 | 1 | -2/+11 |
| | | | | | Use AVStream.time_base to convert the decoder_seek_where() value, and pass the current stream number to av_seek_frame(). | ||||
* | decoder/ffmpeg: don't require key frame for seeking | Max Kellermann | 2011-09-15 | 1 | -1/+2 |
| | | | | Use flag AV_TIME_BASE. | ||||
* | decoder/ffmpeg: higher precision timestamps | Max Kellermann | 2011-09-15 | 1 | -1/+2 |
| | |||||
* | decoder/ffmpeg: move formula to time_from_ffmpeg() | Max Kellermann | 2011-09-15 | 1 | -2/+10 |
| | |||||
* | decoder/ffmpeg: add local variable "av_stream" | Max Kellermann | 2011-09-15 | 1 | -3/+4 |
| | | | | Code simplification. | ||||
* | input/rewind: copy the MIME type only once | Max Kellermann | 2011-09-15 | 1 | -1/+3 |
| | | | | Reduce heap usage by reducing the number of malloc() / free() calls. | ||||
* | pcm_format: fix 32-to-24 bit conversion (the "silence" bug) | Max Kellermann | 2011-09-08 | 1 | -2/+2 |
| | | | | | | D'oh, we were reading 16 bit integers instead of 32 bit integers! That caused silence when trying to play a 32 bit input file on a 24 bit sound card (e.g. USB sound chips with 24 bit packed samples). | ||||
* | output/osx: don't drain the buffer when closing | Max Kellermann | 2011-09-01 | 1 | -6/+0 |
| | | | | Eliminate an unnecessary source of deadlocks. | ||||
* | output/osx: signal the GCond while mutex is locked | Max Kellermann | 2011-09-01 | 1 | -1/+1 |
| | |||||
* | output_all: move _lock_signal() to output_control.c | Max Kellermann | 2011-09-01 | 3 | -21/+23 |
| | | | | Better name, better documentation. | ||||
* | output_thread: reimplement CANCEL synchronization | Max Kellermann | 2011-09-01 | 6 | -14/+34 |
| | | | | | | | | | | | | | | The output thread could hang indefinitely after finishing CANCEL, because it could have missed the signal while the output was not unlocked in ao_command_finished(). This patch removes the wait() call after CANCEL, and adds the flag "allow_play" instead. While this flag is set, playback is skipped. With this flag, there will not be any excess wait() call after the pipe has been cleared. This patch fixes a bug that causes mpd to discontinue playback after seeking, due to the race condition described above. | ||||
* | output/pulse: reset callbacks before closing stream/context | Max Kellermann | 2011-08-31 | 1 | -0/+10 |
| | | | | | Fixes assertion failure when a stream callback is invoked too late after a format change. | ||||
* | output/pulse: add function _delete_stream() | Max Kellermann | 2011-08-31 | 1 | -5/+16 |
| | | | | Merge common code. | ||||
* | output/pulse: use _delete_context() | Max Kellermann | 2011-08-31 | 1 | -16/+15 |
| | | | | Eliminate duplicate code. | ||||
* | input/curl: implement a hard-coded timeout of 10 seconds | Max Kellermann | 2011-08-26 | 1 | -0/+3 |
| | | | | | Be sure to stop the operation at some point when the server isn't responding. | ||||
* | output/pulse: fix deadlock when the stream was suspended | Max Kellermann | 2011-08-23 | 1 | -0/+31 |
| | | | | | Check if the stream is suspended; wake up the main loop when it becomes suspended. | ||||
* | output/pulse: add assertions | Max Kellermann | 2011-08-23 | 1 | -0/+30 |
| | |||||
* | output/pulse: return 0 on error | Max Kellermann | 2011-08-23 | 1 | -1/+1 |
| | | | | Not a bool. | ||||
* | pulse/output: fix deadlock when resuming the stream | Max Kellermann | 2011-08-23 | 1 | -1/+3 |
| | | | | Unlock the mainloop in all code paths. | ||||
* | input/curl: limit the receive buffer size | Max Kellermann | 2011-08-23 | 1 | -0/+30 |
| | |||||
* | output/httpd: add assertions | Max Kellermann | 2011-08-23 | 1 | -1/+17 |
| | |||||
* | output/httpd: don't warn on client disconnect | Max Kellermann | 2011-08-23 | 1 | -1/+8 |
| | | | | | | This warning should only be logged when we really received something. When the client disconnects, G_IO_IN is triggered, and the read returns G_IO_STATUS_EOF. | ||||
* | decoder/mpcdec: fix gcc warning | Max Kellermann | 2011-08-23 | 1 | -2/+2 |
| | | | | Move the variable "vbr_update_acc" into the #ifdef block. | ||||
* | encoder_plugin: add method pre_tag() | Max Kellermann | 2011-07-20 | 4 | -2/+37 |
| | | | | | | | In the "vorbis" plugin, this is a copy of the old flush() method, while flush() gets a lot of code remove, it just sets the "flush" flag and nothing else. It doesn't start a new stream now, which should fix a few problems in some players. | ||||
* | output/httpd: explicitly convert size_t to bool in pause() | Max Kellermann | 2011-07-20 | 1 | -1/+2 |
| | |||||
* | pipe: lock the mutex in music_pipe_size() | Max Kellermann | 2011-07-20 | 1 | -1/+4 |
| | |||||
* | pipe: make read-only functions "pure" | Max Kellermann | 2011-07-20 | 1 | -0/+5 |
| | | | | Enable gcc optimizations. | ||||
* | output_thread: unlock the mutex while calling cancel() | Max Kellermann | 2011-07-20 | 1 | -1/+6 |
| | | | | The method may take longer, and we shouldn't be holding the lock. | ||||
* | player_thread: lock the player while setting the bite_rate | Max Kellermann | 2011-07-20 | 1 | -0/+2 |
| | |||||
* | update_walk: apply follow_inside_symlinks to absolute symlinks | Max Kellermann | 2011-07-20 | 1 | -2/+8 |
| | |||||
* | wavpack: obey all decoder commands, stop at CUE track border | Max Kellermann | 2011-07-20 | 1 | -9/+6 |
| | | | | It used to ignore the decoder_data() return value. | ||||
* | decoder/wavpack: use the correct integer types | Max Kellermann | 2011-07-20 | 1 | -10/+5 |
| | | | | | libwavpack provides int32_t samples, and wants uin32_t for sample counts. | ||||
* | decoder/wavpack: simplify the WavpackUnpackSamples()==0 check | Max Kellermann | 2011-07-20 | 1 | -17/+14 |
| | | | | .. and remove one indent level. | ||||
* | playlist_control: don't resume playback when seeking to another song while ↵ | Max Kellermann | 2011-07-20 | 1 | -3/+5 |
| | | | | | | | paused Use a shortcut in playlist_seek_song(), don't call playlist_play_order() because that would reset the "paused" state. |