Max Kellermann 
							
						 
					 
					
						
						
							
						
						f780ac418a 
					 
					
						
						
							
							output/alsa: log when generating silence due to slow decoder  
						
						... 
						
						
						
						MPD used to do that when this code lived in the player thread, but it
was removed by commit 98a7c62d7a4f716d90af6d78e18d1a3b10bc54b3; and
the replacement code in the ALSA output plugin didn't have it. 
						
						
					 
					
						2019-06-28 18:15:30 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						61a72a5d13 
					 
					
						
						
							
							output/alsa: schedule a timer to generate silence  
						
						... 
						
						
						
						Without this timer, DispatchSockets() may disable the
MultiSocketMonitor and if Play() doesn't get called soon, it never
gets a chance to generate silence.  However if Play() gets called,
generating silence isn't necessary anymore...
Resulting from this misdesign (added by commit ccafe3f3cf 
						
						
					 
					
						2019-06-28 18:04:49 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						0c0a354753 
					 
					
						
						
							
							output/alsa: add a new flag "waiting" for xrun management  
						
						... 
						
						
						
						In DispatchSockets(), when there was not enough data, but enough for
current playback, the method would disable the "active" flag so the
next Play() call would re-enable the MultiSocketMonitor.
This was an abuse of the flag which could result in a crash
in Cancel(), because that method asserts that the period_buffer is
empty, which it may be not.
The solution is to add anther flag called "waiting" which shares some
behavior with the old flag. 
						
						
					 
					
						2019-06-28 18:04:49 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						3c5f860fb8 
					 
					
						
						
							
							output/alsa: Cancel() also affects "active" (documentation)  
						
						
						
						
					 
					
						2019-06-28 18:04:49 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						3da1fa88d0 
					 
					
						
						
							
							output/alsa: fix comment typo  
						
						
						
						
					 
					
						2019-06-28 18:04:49 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						fac15aaffb 
					 
					
						
						
							
							output/alsa: fix comment typo  
						
						
						
						
					 
					
						2019-06-28 14:39:54 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						5b01373356 
					 
					
						
						
							
							output/alsa: more assertions in class PeriodBuffer  
						
						
						
						
					 
					
						2019-06-28 09:31:51 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						a92aa0bedc 
					 
					
						
						
							
							output/alsa: use IsCleared() instead of IsDrained() in DrainInternal()  
						
						... 
						
						
						
						Really drain all data from the period_buffer in any case. 
						
						
					 
					
						2019-06-28 09:30:33 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						d66f5a8590 
					 
					
						
						
							
							output/alsa: replace PeriodBuffer::IsEmpty() with IsCleared()  
						
						... 
						
						
						
						This assertion is not about whether all data has been consumed, but
about whether there has been any data at all. 
						
						
					 
					
						2019-06-28 09:29:18 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						30ca6b8881 
					 
					
						
						
							
							Merge branch 'v0.21.x'  
						
						
						
						
					 
					
						2019-06-28 09:28:04 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						c926021599 
					 
					
						
						
							
							output/alsa: always redo DrainInternal() after writing  
						
						... 
						
						
						
						Draining isn't finished just because the period_buffer has run empty.
It is only finished after snd_pcm_drain() has succeeded. 
						
						
					 
					
						2019-06-28 09:10:16 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						543776d9c9 
					 
					
						
						
							
							output/alsa: check PCM state before calling snd_pcm_drain()  
						
						... 
						
						
						
						Apparently, if snd_pcm_drain() returns EAGAIN, it does not actually
want to be called again; the next call will snd_pcm_drain() will also
return EAGAIN, forever, even though the PCM state has meanwhile
switched to SND_PCM_STATE_SETUP.  This causes a busy loop; to fix
this, we should always check snd_pcm_state() to see if draining is
really required. 
						
						
					 
					
						2019-06-28 08:55:25 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						cf631fca50 
					 
					
						
						
							
							output/alsa: check GetFrames()>0 instead of IsEmpty() in WriteFromPeriodBuffer()  
						
						
						
						
					 
					
						2019-06-27 21:59:43 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						f0ac63d5af 
					 
					
						
						
							
							output/alsa: DrainInternal() ignores postponed partial frame  
						
						
						
						
					 
					
						2019-06-27 21:23:28 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						c1eb0583c4 
					 
					
						
						
							
							output/alsa: add "full" assertion to WriteFromPeriodBuffer()  
						
						
						
						
					 
					
						2019-06-27 21:22:52 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						549faa8a9c 
					 
					
						
						
							
							output/alsa: add full check before calling FillWithSilence()  
						
						
						
						
					 
					
						2019-06-27 21:20:38 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						8f6c750064 
					 
					
						
						
							
							output/alsa: improve silence generator test in DrainInternal()  
						
						... 
						
						
						
						There cannot be partial frames in the buffer, so we don't need
GetPeriodPosition(); it's enough to check whether head has been moved
in this period. 
						
						
					 
					
						2019-06-27 21:17:37 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						9fc1668de3 
					 
					
						
						
							
							output/alsa: hold back snd_pcm_writei() until period_buffer is full  
						
						... 
						
						
						
						This gives MPD more control, because attempts to avoid having partial
periods in the ALSA period buffer.  For example, this means that
DrainInternal() doesn't need to generate silence to fill the partial
period. 
						
						
					 
					
						2019-06-27 15:40:07 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						e9190f4249 
					 
					
						
						
							
							lib/alsa/PeriodBuffer: add missing include  
						
						
						
						
					 
					
						2019-06-27 15:34:40 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						127b464c59 
					 
					
						
						
							
							lib/alsa/PeriodBuffer: add API documentation  
						
						
						
						
					 
					
						2019-06-27 14:58:19 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						048990cd2f 
					 
					
						
						
							
							doc/user.rst: two more heading corrections  
						
						
						
						
					 
					
						2019-06-27 14:55:53 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						01fd6e5e82 
					 
					
						
						
							
							Merge branch 'v0.21.x'  
						
						
						
						
					 
					
						2019-06-27 14:51:05 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						8bf3f9b874 
					 
					
						
						
							
							input/tidal: deprecated because Tidal has changed the protocol  
						
						... 
						
						
						
						See https://github.com/MusicPlayerDaemon/MPD/issues/545  
						
						
					 
					
						2019-06-26 23:14:07 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						f07f8f7d88 
					 
					
						
						
							
							decoder/wildmidi: add fallbacks for libwildmidi<0.4  
						
						... 
						
						
						
						Fix build breakage from commit ea639269d8 
						
						
					 
					
						2019-06-26 23:13:23 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						39b40ac1fd 
					 
					
						
						
							
							decoder/wildmidi: remove unused variable wildmidi_domain  
						
						
						
						
					 
					
						2019-06-26 23:10:20 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						ea639269d8 
					 
					
						
						
							
							decoder/wildmidi: throw PluginUnavailable on WildMidi_Init() error  
						
						... 
						
						
						
						Closes https://github.com/MusicPlayerDaemon/MPD/issues/589  
						
						
					 
					
						2019-06-26 22:40:27 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						0abaa3ecc5 
					 
					
						
						
							
							decoder/wildmidi: throw PluginUnavailable if config file does not exist  
						
						... 
						
						
						
						This makes the configuration error more visible, possibly addressing
one part of https://github.com/MusicPlayerDaemon/MPD/issues/589  
						
						
					 
					
						2019-06-26 22:38:40 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						c4d3efe71d 
					 
					
						
						
							
							decoder/List: handle exception PluginUnavailable  
						
						
						
						
					 
					
						2019-06-26 22:02:54 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						85e82e3d4d 
					 
					
						
						
							
							decoder/List: annotate exceptions thrown by DecoderPlugin::Init()  
						
						
						
						
					 
					
						2019-06-26 22:01:45 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						beed004b10 
					 
					
						
						
							
							pcm/Export: add GetSilence()  
						
						
						
						
					 
					
						2019-06-26 16:04:46 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						730e67d766 
					 
					
						
						
							
							test/test_pcm_export: add tests for Get{In,Out}put{Frame,Block}Size()  
						
						
						
						
					 
					
						2019-06-26 16:01:19 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						34c6337887 
					 
					
						
						
							
							pcm/Export: add GetInputBlockSize(), GetOutputBlockSize()  
						
						
						
						
					 
					
						2019-06-26 15:49:08 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						2093e53641 
					 
					
						
						
							
							pcm/Export: add GetInputFrameSize()  
						
						
						
						
					 
					
						2019-06-26 15:48:18 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						2f243f2295 
					 
					
						
						
							
							pcm/Export: rename GetFrameSize() to GetOutputFrameSize()  
						
						
						
						
					 
					
						2019-06-26 15:46:49 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						e69fd0300a 
					 
					
						
						
							
							pcm/Export: rename CalcSourceSize() to CalcInputSize()  
						
						
						
						
					 
					
						2019-06-26 15:46:05 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						f43cafbf7d 
					 
					
						
						
							
							pcm/Export: eliminate the AudioFormat parameter from GetFrameSize()  
						
						
						
						
					 
					
						2019-06-26 15:42:47 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						53faf77d20 
					 
					
						
						
							
							pcm/Export: use the "channels" attribute in GetFrameSize()  
						
						
						
						
					 
					
						2019-06-26 15:41:07 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						bf574dcb0a 
					 
					
						
						
							
							pcm/RestBuffer: make internal methods private  
						
						
						
						
					 
					
						2019-06-26 14:44:20 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						f44011519c 
					 
					
						
						
							
							meson.build: increase protocol version to 0.21.11  
						
						... 
						
						
						
						Commit 1eae9339f2 
						
						
					 
					
						2019-06-18 15:35:38 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						72b8f33272 
					 
					
						
						
							
							pcm/Export: split src_sample_format from alsa_channel_order  
						
						... 
						
						
						
						Combining these two in one single value saves some memory, but is
complicated and we may need the src_sample_format for new features
later. 
						
						
					 
					
						2019-06-18 12:19:40 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						a17f420d6b 
					 
					
						
						
							
							pcm/Export: update API documentation  
						
						
						
						
					 
					
						2019-06-18 12:19:40 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						f97a9ce765 
					 
					
						
						
							
							Revert "MusicChunk: pad MusicChunkInfo to a multiple of 8 bytes"  
						
						... 
						
						
						
						This reverts commit 2c3eeb7194bf26adf55532380d1db0 
						
						
					 
					
						2019-06-18 11:49:52 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						bf26adf555 
					 
					
						
						
							
							pcm/Dsd{16,32}: stash odd frames away for the next call  
						
						... 
						
						
						
						Similar to commit 32380d1db0https://github.com/MusicPlayerDaemon/MPD/issues/469  
						
						
					 
					
						2019-06-18 11:19:27 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						0cc94fe30c 
					 
					
						
						
							
							pcm/Dsd{16,32}: convert public function to stateful class  
						
						
						
						
					 
					
						2019-06-18 10:58:55 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						d5d5705213 
					 
					
						
						
							
							pcm/Export: update API documentation  
						
						
						
						
					 
					
						2019-06-18 10:58:26 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						96d74e77eb 
					 
					
						
						
							
							pcm/Dsd{16,32}: move the conversion loop to a separate function  
						
						
						
						
					 
					
						2019-06-17 22:51:01 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						ca8451cdbc 
					 
					
						
						
							
							tag/Type: add tag "Work"  
						
						... 
						
						
						
						Closes https://github.com/MusicPlayerDaemon/MPD/issues/577  
						
						
					 
					
						2019-06-17 22:40:36 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						28e07e900f 
					 
					
						
						
							
							pcm/Export: convert the DSD bools to an enum  
						
						... 
						
						
						
						These options are exclusive. 
						
						
					 
					
						2019-06-17 22:35:00 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						c75dc4a647 
					 
					
						
						
							
							output/osx: remove redundant initializer  
						
						
						
						
					 
					
						2019-06-17 22:35:00 +02:00 
						 
				 
			
				
					
						
							
							
								Max Kellermann 
							
						 
					 
					
						
						
							
						
						32380d1db0 
					 
					
						
						
							
							pcm/Dop: stash odd frames away for the next call  
						
						... 
						
						
						
						First part of the "real" fix for
https://github.com/MusicPlayerDaemon/MPD/issues/469  
						
						
					 
					
						2019-06-17 22:18:44 +02:00