summaryrefslogtreecommitdiff
AgeCommit message (Collapse)Author
2016-12-28output/Plugin: delay() returns std::chrono::steady_clock::durationMax Kellermann
2016-12-28thread/Cond: add timed_wait() overload with std::chrono supportMax Kellermann
2016-12-28Stats: use std::chronoMax Kellermann
2016-12-28Stats: initialize start_time automaticallyMax Kellermann
2016-12-28output/Timer: pass size_t to Add()Max Kellermann
2016-12-28output/Timer: use C++11 initializersMax Kellermann
2016-12-28output/Timer: no "time" initialization if !startedMax Kellermann
2016-12-28system/PeriodClock: indent with tabsMax Kellermann
2016-12-28event/Loop: use std::chronoMax Kellermann
2016-12-28config/Global: add std::chrono::steady_clock::duration overloadMax Kellermann
2016-12-27event/Loop: use C++11 initializersMax Kellermann
2016-12-27StateFile: use C++11 initializersMax Kellermann
2016-12-27output/Thread: move software_mixer_set_filter() call to Open()Max Kellermann
.. and remove the obsolete method OpenFilter().
2016-12-27output/Thread: fix assertion failure in CLOSE handlerMax Kellermann
Convert assertion to runtime check; this assertion could fail when the output was closed due to an error before CLOSE arrived.
2016-12-27output/Thread: use "true" instead of "1"Max Kellermann
2016-12-26output/Source: add assertionMax Kellermann
2016-12-26output/SharedPipeConsumer: add thread-safety documentationMax Kellermann
2016-12-26output/Source: release the mutex while the filter runsMax Kellermann
The filter can take some time to finish, even more so on a weak machine with a saturated CPU. By not holding the mutex during that time, we can reduce PlayerThread latency a lot, because that thread needs to synchronize a lot with all outputs.
2016-12-26output/Source: add Fill(), ReadTag(), PeekData(), ConsumeData()Max Kellermann
Don't expose MusicChunk instances, provide higher-level access to chunk contents.
2016-12-26output/Thread: move code to new class AudioOutputSourceMax Kellermann
2016-12-26configure.ac: use MPD_AUTO for libsndio and HaikuMax Kellermann
2016-12-24outputThread: optimize Command::OPENMax Kellermann
Try harder to skip steps (reopen filter, reopen output) if the AudioOutput is already open.
2016-12-22output/Internal: add method ClearTailChunk()Max Kellermann
2016-12-22output/Control: move pipe initialization to the OutputThreadMax Kellermann
Un-protect the SharedPipeConsumer instance, and make it available in the OutputThread only. This gives more well-defined mutex protection.
2016-12-22output/Control: use Command::OPEN to unpause, remove special caseMax Kellermann
2016-12-22output/Thread: update in_audio_format before ReopenFilter()Max Kellermann
2016-12-21output/Thread: keep the device open if the audio format hasn't changedMax Kellermann
Add another condition to Reopen() which allows keeping it open.
2016-12-21output/Internal: add attribute request.audio_formatMax Kellermann
Make in_audio_format accessible only from within the OutputThread, and add a new one for inter-thread communication.
2016-12-20output/Thread: ao_filter_chunk() throws exception on errorMax Kellermann
Move the error logging to AudioOutput::PlayChunk().
2016-12-20output/Thread: use ConstBuffer::skip_front()Max Kellermann
2016-12-20output/Thread: convert pointer to referenceMax Kellermann
2016-12-20output/SharedPipeConsumer: update API documentationMax Kellermann
2016-12-19input/curl: wrap CURLM* in new class CurlMultiMax Kellermann
2016-12-19input/curl: rename class CurlMulti to CurlGlobalMax Kellermann
2016-12-19input/curl: wrap CURL* in new class CurlEasyMax Kellermann
2016-12-19input/curl: remove duplicate InitEasy() callMax Kellermann
2016-12-14output/Client: new interface to replace direct access to class PlayerControlMax Kellermann
2016-12-14player/Thread: reduce unlock/lock overhead in PlayerCommand::PAUSE handlerMax Kellermann
2016-12-14player/Thread: mutex must be locked inside OpenOutput()Max Kellermann
2016-12-14player/Thread: mutex must be locked inside CheckDecoderStartup()Max Kellermann
2016-12-14output/Multiple: move Wait() to struct PlayerControlMax Kellermann
Eliminate a dependency from MultipleOutputs on PlayerControl.
2016-12-14player/Thread: use class ScopeLockMax Kellermann
2016-12-14player/Control: add method LockApplyBorderPause()Max Kellermann
2016-12-14player/Control: add method LockSetOutputError()Max Kellermann
2016-12-14output/MultipleOutputs: parallelize EnableDisable()Max Kellermann
2016-12-14output/MultipleOutputs: parallelize AudioOutput destructionMax Kellermann
Reduce latency by stopping all AudioOutputs asynchronously.
2016-12-14output/Thread: KILL implicitly closes and disables the AudioOutputMax Kellermann
Reduce shutdown latency by two commands per output.
2016-12-14output/MultipleOutputs: move code to AudioOutput::EnableDisableWait()Max Kellermann
2016-12-14output/MultipleOutputs: reduce lock/unlock calls in EnableDisable()Max Kellermann
Use ScopeLock to manage the lock; don't unlock after obtaining the "really_enabled" flag; keep the same lock during EnableWait() / DisableWait().
2016-12-13output/Thread: wake up the player thread periodically while playingMax Kellermann
Without this, the pipe would run empty very often, which may result in an xrun if the roundtrip to the PlayerThread and back takes too long. By waking up the PlayerThread before the pipe runs empty, we make MPD much more latency tolerant, which is a major optimization.