| 
									
										
										
										
											2009-09-09 21:26:33 +00:00
										 |  |  | // Copyright (C) 2003 Dolphin Project.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // This program is free software: you can redistribute it and/or modify
 | 
					
						
							|  |  |  | // it under the terms of the GNU General Public License as published by
 | 
					
						
							|  |  |  | // the Free Software Foundation, version 2.0.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // This program is distributed in the hope that it will be useful,
 | 
					
						
							|  |  |  | // but WITHOUT ANY WARRANTY; without even the implied warranty of
 | 
					
						
							|  |  |  | // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 | 
					
						
							|  |  |  | // GNU General Public License 2.0 for more details.
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // A copy of the GPL 2.0 should have been included with the program.
 | 
					
						
							|  |  |  | // If not, see http://www.gnu.org/licenses/
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | // Official SVN repository and contact information can be found at
 | 
					
						
							|  |  |  | // http://code.google.com/p/dolphin-emu/
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #ifndef _ALSA_SOUND_STREAM_H
 | 
					
						
							|  |  |  | #define _ALSA_SOUND_STREAM_H
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2009-09-09 22:56:23 +00:00
										 |  |  | #if defined(HAVE_ALSA) && HAVE_ALSA
 | 
					
						
							| 
									
										
										
										
											2009-09-09 21:26:33 +00:00
										 |  |  | #include <alsa/asoundlib.h>
 | 
					
						
							| 
									
										
										
										
											2009-09-09 22:56:23 +00:00
										 |  |  | #endif
 | 
					
						
							| 
									
										
										
										
											2009-09-09 21:26:33 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | #include "Common.h"
 | 
					
						
							|  |  |  | #include "SoundStream.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #include "Thread.h"
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | class AlsaSound : public SoundStream | 
					
						
							|  |  |  | { | 
					
						
							|  |  |  | #if defined(HAVE_ALSA) && HAVE_ALSA
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	AlsaSound(CMixer *mixer); | 
					
						
							|  |  |  | 	virtual ~AlsaSound(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual bool Start(); | 
					
						
							|  |  |  | 	virtual void SoundLoop(); | 
					
						
							| 
									
										
										
										
											2009-12-13 11:51:29 +00:00
										 |  |  | 	virtual void Stop(); | 
					
						
							| 
									
										
										
										
											2009-09-09 21:26:33 +00:00
										 |  |  | 
 | 
					
						
							|  |  |  | 	static bool isValid() { | 
					
						
							|  |  |  | 		return true; | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 	virtual bool usesMixer() const {  | 
					
						
							|  |  |  | 		return true;  | 
					
						
							|  |  |  | 	} | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	virtual void Update(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | private: | 
					
						
							|  |  |  | 	bool AlsaInit(); | 
					
						
							|  |  |  | 	void AlsaShutdown(); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	u8 *mix_buffer; | 
					
						
							|  |  |  | 	Common::Thread *thread; | 
					
						
							|  |  |  | 	// 0 = continue
 | 
					
						
							|  |  |  | 	// 1 = shutdown
 | 
					
						
							|  |  |  | 	// 2 = done shutting down.
 | 
					
						
							|  |  |  | 	volatile int thread_data; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | 	snd_pcm_t *handle; | 
					
						
							| 
									
										
										
										
											2010-05-21 22:48:57 +00:00
										 |  |  | 	int frames_to_deliver; | 
					
						
							| 
									
										
										
										
											2009-09-09 21:26:33 +00:00
										 |  |  | #else
 | 
					
						
							|  |  |  | public: | 
					
						
							|  |  |  | 	AlsaSound(CMixer *mixer) : SoundStream(mixer) {} | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | }; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | #endif
 | 
					
						
							|  |  |  | 
 |