Implementation of macOS audio capture with dual input paths. More...
import "av_audio.h"#include <atomic>#include "coreaudio_helpers.h"#include "src/logging.h"#include "src/utility.h"import <AudioToolbox/AudioConverter.h>import <CoreAudio/CATapDescription.h>Functions | |
| OSStatus | platf::audioConverterComplexInputProc (AudioConverterRef inAudioConverter, UInt32 *ioNumberDataPackets, AudioBufferList *ioData, AudioStreamPacketDescription **outDataPacketDescription, void *inUserData) |
| Real-time AudioConverter input callback for format conversion. Provides audio data to AudioConverter during format conversion process using pure C++ for optimal performance. This function must avoid all Objective-C runtime calls to meet real-time audio constraints. | |
| bool | platf::request_microphone_permission () |
| Ensure Sunshine has permission to capture microphone audio. | |
| bool | platf::request_microphone_permission (AVAuthorizationStatus authorization_status, const microphone_permission_request_t &request_access) |
| Resolve microphone access from an AVFoundation authorization state. | |
| bool | platf::request_system_audio_permission () |
| Start and stop an unmuted Core Audio tap to request system audio access. | |
| OSStatus | platf::systemAudioIOProc (AudioObjectID inDevice, const AudioTimeStamp *inNow, const AudioBufferList *inInputData, const AudioTimeStamp *inInputTime, AudioBufferList *outOutputData, const AudioTimeStamp *inOutputTime, void *inClientData) |
| Real-time audio processing function for Core Audio IOProc callbacks. Handles system-wide audio capture with format conversion and buffering using pure C++ for optimal performance. This function must avoid all Objective-C runtime calls to meet real-time audio constraints. | |
Implementation of macOS audio capture with dual input paths.
This file implements the AVAudio class which provides two distinct audio capture methods:
The implementation handles format conversion, real-time audio processing, and provides a unified interface for both capture methods through a shared circular buffer.
| OSStatus platf::audioConverterComplexInputProc | ( | AudioConverterRef | inAudioConverter, |
| UInt32 * | ioNumberDataPackets, | ||
| AudioBufferList * | ioData, | ||
| AudioStreamPacketDescription ** | outDataPacketDescription, | ||
| void * | inUserData ) |
Real-time AudioConverter input callback for format conversion. Provides audio data to AudioConverter during format conversion process using pure C++ for optimal performance. This function must avoid all Objective-C runtime calls to meet real-time audio constraints.
| inAudioConverter | The audio converter requesting input data |
| ioNumberDataPackets | Number of data packets to provide |
| ioData | Buffer list to fill with audio data |
| outDataPacketDescription | Packet description for output data |
| inUserData | User data containing AudioConverterInputData structure |
| bool platf::request_microphone_permission | ( | ) |
Ensure Sunshine has permission to capture microphone audio.
Requests access and waits for the user's response when authorization has not yet been determined.
| bool platf::request_microphone_permission | ( | AVAuthorizationStatus | authorization_status, |
| const microphone_permission_request_t & | request_access ) |
Resolve microphone access from an AVFoundation authorization state.
| authorization_status | Current authorization state for audio capture. |
| request_access | Function used to request access when authorization has not been determined. |
| bool platf::request_system_audio_permission | ( | ) |
Start and stop an unmuted Core Audio tap to request system audio access.
| OSStatus platf::systemAudioIOProc | ( | AudioObjectID | inDevice, |
| const AudioTimeStamp * | inNow, | ||
| const AudioBufferList * | inInputData, | ||
| const AudioTimeStamp * | inInputTime, | ||
| AudioBufferList * | outOutputData, | ||
| const AudioTimeStamp * | inOutputTime, | ||
| void * | inClientData ) |
Real-time audio processing function for Core Audio IOProc callbacks. Handles system-wide audio capture with format conversion and buffering using pure C++ for optimal performance. This function must avoid all Objective-C runtime calls to meet real-time audio constraints.
| inDevice | The audio device identifier |
| inNow | Current audio time stamp |
| inInputData | Input audio buffer list from the device |
| inInputTime | Time stamp for input data |
| outOutputData | Output audio buffer list (not used in our implementation) |
| inOutputTime | Time stamp for output data |
| inClientData | Client data containing AVAudioIOProcData structure |