Age | Commit message (Collapse) | Author | |
---|---|---|---|
2017-01-24 | output/alsa: convert to class, make attributes private | Max Kellermann | |
2017-01-24 | output/alsa: make AlsaSetup() an AlsaOutput method | Max Kellermann | |
2017-01-24 | output/alsa: move code from AlsaSetup() to AlsaSetupSw() | Max Kellermann | |
2017-01-24 | output/alsa: move code from AlsaSetup() to AlsaSetupHw() | Max Kellermann | |
2017-01-23 | lib/upnp/Util: pass single delimiter character to stringToTokens() | Max Kellermann | |
2017-01-23 | lib/upnp/Util: remove parameter "skipinit", always true | Max Kellermann | |
2017-01-23 | lib/upnp/WorkQueue: fix race condition | Max Kellermann | |
With "ok==false", newly created threads may quit instantly. | |||
2017-01-23 | lib/upnp: fix bad std::chrono cast | Max Kellermann | |
libupnp provides seconds, not whatever time unit is used by std::chrono::steady_clock. | |||
2017-01-23 | db/simple: drop redundant "virtual" | Max Kellermann | |
2017-01-23 | db/proxy: drop redundant "virtual" | Max Kellermann | |
2017-01-23 | db/proxy: make connect errors during startup non-fatal | Max Kellermann | |
2017-01-23 | db/proxy: improve Connect() error message | Max Kellermann | |
2017-01-23 | Main, db/Glue: improve error messages | Max Kellermann | |
2017-01-23 | lib/upnp/WorkQueue: disallow copying | Max Kellermann | |
2017-01-23 | lib/upnp/WorkQueue: make constructor explicit | Max Kellermann | |
2017-01-23 | lib/upnp/WorkQueue: use C++11 initializers | Max Kellermann | |
2017-01-23 | db/proxy: make the base class of LibmpdclientError public | Max Kellermann | |
If the base class is not accessible, the "catching" the base class won't work. This caused the fatal error: terminate called after throwing an instance of 'LibmpdclientError' | |||
2017-01-23 | output/Source: reset the ReplayGain serials ion OpenFilter() | Max Kellermann | |
Each close/open cycle resets the Filter's state, because a new Filter instance is being created. That results in the serials (replay_gain_serial and other_replay_gain_serial) being out of sync with the internal ReplayGainFilter state. So instead of initializing those serials once, we need to initialize them each time we create new ReplayGainFilter instances, i.e. in OpenFilter(). https://bugs.musicpd.org/view.php?id=4632 | |||
2017-01-20 | playlist/SoundCloud: eliminate unnecessary casted variable | Max Kellermann | |
2017-01-20 | pcm/Traits: add "SILENCE" attribute | Max Kellermann | |
2017-01-20 | pcm/Traits: add specialization for SampleFormat::DSD | Max Kellermann | |
2017-01-19 | pcm/PcmChannels: silence surround channels when converting from stereo | Max Kellermann | |
Previously, there was no special code to convert stereo to multi-channel. The generic solution for this was to convert to mono, and then copy the result to all channels. That's a pretty bad solution, but at least something which always renders audio. MPD does something, instead of failing. Now that MPD has proper support for multi-channel (by defining the channel order), we can do better than that. It is a (somewhat) common case to play back stereo music on a DAC which can only do multi-channel. The best approach here is to copy the stereo channels to front-left and front-right, and apply the "silence" pattern to all other channels. | |||
2017-01-18 | DetachedSong: use C++11 initializers | Max Kellermann | |
2017-01-17 | pcm/SampleFormat: make the two inline functions "constexpr" | Max Kellermann | |
2017-01-17 | AudioFormat: update ToString() API documentatio | Max Kellermann | |
2017-01-17 | Audio{Format,Parser}: use shortcuts such as "dsd64" in log messages | Max Kellermann | |
2017-01-17 | AudioFormat: replace struct audio_format_string with class StringBuffer, ↵ | Max Kellermann | |
return it | |||
2017-01-17 | util/StringBuffer: new utility class | Max Kellermann | |
2017-01-17 | AudioFormat: move enum SampleFormat to pcm/SampleFormat.hxx | Max Kellermann | |
2017-01-17 | AUTHORS, ...: update my email address | Max Kellermann | |
2017-01-16 | PlaylistFile: "playlistadd" creates new playlist if it does not exist, as ↵ | Max Kellermann | |
documented | |||
2017-01-16 | CommandLine: update copyright year | Max Kellermann | |
2017-01-15 | output/Thread: reconfigure ConvertFilter for its new input AudioFormat | Max Kellermann | |
If the input AudioFormat changes but the out_audio_format doesn't change (e.g. because there is a fixed "format" setting in this "audio_output" section), the ConvertFilter needs to be reconfigured. This didn't happen, resulting in awful static noise after changing songs. | |||
2017-01-15 | output/Thread: move AudioFormat logging code around | Max Kellermann | |
2017-01-15 | output/Thread: remember the original filter audio format in local variable | Max Kellermann | |
2017-01-15 | lib/nfs: add more API documentation | Max Kellermann | |
2017-01-15 | DetachedSong: compare start_time and end_time in IsSame() | Max Kellermann | |
This method is used by DecoderControl::IsCurrentSong(), which is used by the player thread to check whether the current decoder instance can be reused to seek. When switching to another song in the same CUE sheet, previously DetachedSong::IsSame() returned true, and thus the old decoder instance was used for the new song, not considering the new end_time. This led to the old decoder quickly quitting. | |||
2017-01-14 | input/alsa: set period_size=buffer_size/4 | Max Kellermann | |
This way, we have four periods instead of the default of two. With only two periods, we don't get woken up often enough, and we frequently encounter buffer overruns. With four periods, we have more time to breathe, and the buffer overruns magically disappear. | |||
2017-01-14 | input/alsa: remove the start_threshold setting | Max Kellermann | |
This setting is mostly useless for capture devices. There's no point in configuring it. | |||
2017-01-14 | input/alsa: dump buffer/period sizes | Max Kellermann | |
2017-01-14 | input/alsa: enable non-blocking mode | Steven O'Brien | |
2017-01-14 | input/alsa: handle EAGAIN | Steven O'Brien | |
2017-01-14 | input/alsa: call snd_pcm_start() after snd_pcm_prepare() | Max Kellermann | |
This is necessary because we'll never get woken up again by epoll_wait() after a buffer overrun recovery, unless we start the PCM explicitly before returning to the I/O loop. | |||
2017-01-14 | input/alsa: improve logging in Recover() | Max Kellermann | |
Copy yet more code from the ALSA output plugin. | |||
2017-01-14 | input/alsa: check snd_pcm_state() in Recover() | Max Kellermann | |
Copy some good code from the ALSA output plugin. | |||
2017-01-14 | output/alsa: explicitly mention all snd_pcm_state() enums | Max Kellermann | |
I want a compiler warning when a new state needs to be considered here. | |||
2017-01-13 | input/alsa: make two attributes "const" | Max Kellermann | |
2017-01-13 | input/alsa: clear sockets from within IOThread | Max Kellermann | |
Fixes assertion failure in implicit destructor. | |||
2017-01-12 | output/recorder: fix typo in variable name | Max Kellermann | |
Fixes the dreaded error "Failed to create : No such file or directory". https://bugs.musicpd.org/view.php?id=4625 | |||
2017-01-11 | output/alsa: log DoP mode | Max Kellermann | |