/[svn]/linuxsampler/trunk/src/drivers/audio/AudioOutputDeviceCoreAudio.h
ViewVC logotype

Diff of /linuxsampler/trunk/src/drivers/audio/AudioOutputDeviceCoreAudio.h

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 1831 by iliev, Fri Jan 30 19:22:36 2009 UTC revision 1832 by iliev, Thu Feb 5 17:48:54 2009 UTC
# Line 28  Line 28 
28  #include "../../common/Thread.h"  #include "../../common/Thread.h"
29    
30  #include "AudioOutputDevice.h"  #include "AudioOutputDevice.h"
31    #include "CAAudioDeviceModel.h"
32    
33  #include <AudioToolbox/AudioToolbox.h>  #include <AudioToolbox/AudioToolbox.h>
34  #include <CoreAudio/CoreAudio.h>  #include <CoreAudio/CoreAudio.h>
# Line 38  namespace LinuxSampler { Line 39  namespace LinuxSampler {
39       *       *
40       * Implements audio output to the Core Audio architecture.       * Implements audio output to the Core Audio architecture.
41       */       */
42      class AudioOutputDeviceCoreAudio : public AudioOutputDevice, protected Thread {      class AudioOutputDeviceCoreAudio : public AudioOutputDevice,
43                public CAAudioDeviceModelListener, protected Thread {
44    
45          private:          private:
46              struct AQPlayerState {              struct AQPlayerState {
47                  AudioStreamBasicDescription   mDataFormat;                  AudioStreamBasicDescription   mDataFormat;
# Line 50  namespace LinuxSampler { Line 53  namespace LinuxSampler {
53                  AudioOutputDeviceCoreAudio*   pDevice; // needed for the callback                  AudioOutputDeviceCoreAudio*   pDevice; // needed for the callback
54              };              };
55    
             struct DeviceInfo {  
                 uint uiSamplerate;  
                 uint uiChannelNumber;  
             };  
   
56          public:          public:
57              AudioOutputDeviceCoreAudio(std::map<String,DeviceCreationParameter*> Parameters);              AudioOutputDeviceCoreAudio(std::map<String,DeviceCreationParameter*> Parameters);
58              virtual ~AudioOutputDeviceCoreAudio();              virtual ~AudioOutputDeviceCoreAudio();
59    
60                virtual void DeviceChanged(); // from CAAudioDeviceModelListener
61    
62              // derived abstract methods from class 'AudioOutputDevice'              // derived abstract methods from class 'AudioOutputDevice'
63              virtual void Play();              virtual void Play();
64              virtual bool IsPlaying();              virtual bool IsPlaying();
# Line 75  namespace LinuxSampler { Line 75  namespace LinuxSampler {
75    
76  // *************** PARAMETERS ***************  // *************** PARAMETERS ***************
77    
78                /** Device Parameter 'DEVICE'
79                 *
80                 * Used to select the desired output device.
81                 */
82                class ParameterDevice : public DeviceCreationParameterString {
83                    public:
84                        ParameterDevice();
85                        ParameterDevice(String s) throw (Exception);
86                        virtual String Description();
87                        virtual bool   Fix();
88                        virtual bool   Mandatory();
89                        virtual std::map<String,DeviceCreationParameter*> DependsAsParameters();
90                        virtual optional<String>    DefaultAsString(std::map<String,String> Parameters);
91                        virtual std::vector<String> PossibilitiesAsString(std::map<String,String> Parameters);
92                        virtual void                OnSetValue(String s) throw (Exception);
93                        int GetDeviceIndex();
94                        static String Name();
95    
96                    private:
97                        String CreateDeviceName(int devIndex);
98                };
99    
100              /** Device Parameter 'SAMPLERATE'              /** Device Parameter 'SAMPLERATE'
101               *               *
102               * Used to set the sample rate of the audio output device.               * Used to set the sample rate of the audio output device.
# Line 83  namespace LinuxSampler { Line 105  namespace LinuxSampler {
105                  public:                  public:
106                      ParameterSampleRate();                      ParameterSampleRate();
107                      ParameterSampleRate(String s);                      ParameterSampleRate(String s);
108                        virtual std::map<String,DeviceCreationParameter*> DependsAsParameters();
109                      virtual optional<int> DefaultAsInt(std::map<String,String> Parameters);                      virtual optional<int> DefaultAsInt(std::map<String,String> Parameters);
110                        virtual std::vector<int> PossibilitiesAsInt(std::map<String,String> Parameters);
111              };              };
112    
113              /** Device Parameters 'CHANNELS'              /** Device Parameters 'CHANNELS'
# Line 96  namespace LinuxSampler { Line 120  namespace LinuxSampler {
120                      ParameterChannels();                      ParameterChannels();
121                      ParameterChannels(String s);                      ParameterChannels(String s);
122                      virtual optional<int> DefaultAsInt(std::map<String,String> Parameters);                      virtual optional<int> DefaultAsInt(std::map<String,String> Parameters);
123                        virtual std::vector<int> PossibilitiesAsInt(std::map<String,String> Parameters);
124              };              };
125    
126              /** Device Parameter 'BUFFERS'              /** Device Parameter 'BUFFERS'
# Line 142  namespace LinuxSampler { Line 167  namespace LinuxSampler {
167              int Main();  ///< Implementation of virtual method from class Thread              int Main();  ///< Implementation of virtual method from class Thread
168    
169          private:          private:
170              uint           uiCoreAudioChannels;              CAAudioDeviceModel  CurrentDevice;
171              uint           uiBufferNumber; // once initialized this value shouldn't be changed              uint                uiCoreAudioChannels;
172              uint           uiBufferSize; // once initialized this value shouldn't be changed              uint                uiBufferNumber; // once initialized this value shouldn't be changed
173              AQPlayerState  aqPlayerState;              uint                uiBufferSize; // once initialized this value shouldn't be changed
174              atomic_t       pausedNew;              AQPlayerState       aqPlayerState;
175              uint           pausedOld;              atomic_t            pausedNew;
176              Mutex          destroyMutex;              uint                pausedOld;
177                atomic_t            restartQueue;
178              static DeviceInfo* pDeviceInfo;              Mutex               destroyMutex;
179    
180                void CreateAndStartAudioQueue();
181                void DestroyAudioQueue();
182                void FillBuffers();
183                void PrimeAudioQueue();
184    
185                static void AudioQueueListener(void *inUserData, AudioQueueRef inAQ, AudioQueuePropertyID inID);
186              static void HandleOutputBuffer(void *aqData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer);              static void HandleOutputBuffer(void *aqData, AudioQueueRef inAQ, AudioQueueBufferRef inBuffer);
187              static void SetAudioDataFormat(AudioStreamBasicDescription* pDataFormat);              static void SetAudioDataFormat(AudioStreamBasicDescription* pDataFormat);
             static DeviceInfo* GetDeviceInfo();  
188      };      };
189  } // namespace LinuxSampler  } // namespace LinuxSampler
190    

Legend:
Removed from v.1831  
changed lines
  Added in v.1832

  ViewVC Help
Powered by ViewVC