this repo has no description
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at vchroot 64 lines 2.6 kB view raw
1#ifndef AUCOMPONENTINTERNAL_H 2#define AUCOMPONENTINTERNAL_H 3#include "AudioUnit.h" 4#include <CoreServices/ComponentsInternal.h> 5#include <asoundlib.h> 6#include <dispatch/dispatch.h> 7#include <vector> 8#include "AudioOutputUnitComponent.h" 9 10#ifndef kOutputBus 11# define kOutputBus 0 // playback 12# define kInputBus 1 // recording 13#endif 14 15class AudioUnitALSA : public AudioOutputUnitComponent 16{ 17private: 18 AudioUnitALSA(int cardIndex, char* cardName); 19public: 20 static AudioUnitComponent* create(int cardIndex); 21 virtual ~AudioUnitALSA(); 22 23 int cardIndex() const override { return m_cardIndex; } 24 25 OSStatus init() override; 26 OSStatus deinit() override; 27 28 OSStatus start() override; 29 OSStatus stop() override; 30 31 OSStatus reset(AudioUnitScope inScope, AudioUnitElement inElement) override; 32 33 OSStatus render(AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList *ioData) override; 34private: 35 void initOutput(); 36 void initInput(); 37 38 void startOutput(); 39 void startInput(); 40 void startDescriptors(const struct pollfd* fds, int count); 41 42 void processAudioEvent(struct pollfd origPoll, int event); 43 void requestDataForPlayback(); 44 void pushDataFromInput(); 45 46 OSStatus renderOutput(AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inNumberFrames, AudioBufferList *ioData); 47 OSStatus renderInterleavedOutput(AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inNumberFrames, AudioBufferList *ioData); 48 OSStatus renderPlanarOutput(AudioUnitRenderActionFlags *ioActionFlags, const AudioTimeStamp *inTimeStamp, UInt32 inNumberFrames, AudioBufferList *ioData); 49 50 OSStatus renderInput(AudioUnitRenderActionFlags *ioActionFlags,const AudioTimeStamp *inTimeStamp, UInt32 inNumberFrames, AudioBufferList *ioData); 51 OSStatus renderInterleavedInput(AudioUnitRenderActionFlags *ioActionFlags,const AudioTimeStamp *inTimeStamp, UInt32 inNumberFrames, AudioBufferList *ioData); 52 OSStatus renderPlanarInput(AudioUnitRenderActionFlags *ioActionFlags,const AudioTimeStamp *inTimeStamp, UInt32 inNumberFrames, AudioBufferList *ioData); 53 54 inline bool isOutputPlanar() const { return m_config[kOutputBus].second.mFormatFlags & kAudioFormatFlagIsNonInterleaved; } 55 inline bool isInputPlanar() const { return m_config[kInputBus].first.mFormatFlags & kAudioFormatFlagIsNonInterleaved; } 56private: 57 int m_cardIndex; 58 char* m_cardName; 59 snd_pcm_t *m_pcmOutput, *m_pcmInput; 60 std::vector<dispatch_source_t> m_sources; 61}; 62 63#endif 64