Files
UnrealEngineUWP/Engine/Source/Runtime/AudioCaptureImplementations/IOS/AudioCaptureAudioUnit/Private/AudioCaptureAudioUnit.h
maxwell hayes 800c50d58d Fix for crash in Audio Capture Component when OpenCaptureStream() hasn't been called
#jira UE-114101
#rb Anna.Lantz

#ROBOMERGE-AUTHOR: maxwell.hayes
#ROBOMERGE-SOURCE: CL 18450188 in //UE5/Release-5.0/... via CL 18450204
#ROBOMERGE-BOT: STARSHIP (Release-Engine-Staging -> Release-Engine-Test) (v897-18405271)

[CL 18450224 by maxwell hayes in ue5-release-engine-test branch]
2021-12-13 18:34:32 -05:00

45 lines
1.6 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "AudioCaptureCore.h"
#include <AudioToolbox/AudioToolbox.h>
#include <AudioUnit/AudioUnit.h>
namespace Audio
{
class FAudioCaptureAudioUnitStream : public IAudioCaptureStream
{
public:
FAudioCaptureAudioUnitStream();
virtual bool GetCaptureDeviceInfo(FCaptureDeviceInfo& OutInfo, int32 DeviceIndex) override;
virtual bool OpenCaptureStream(const FAudioCaptureDeviceParams& InParams, FOnCaptureFunction InOnCapture, uint32 NumFramesDesired) override;
virtual bool CloseStream() override;
virtual bool StartStream() override;
virtual bool StopStream() override;
virtual bool AbortStream() override;
virtual bool GetStreamTime(double& OutStreamTime) override;
virtual int32 GetSampleRate() const override { return SampleRate; }
virtual bool IsStreamOpen() const override;
virtual bool IsCapturing() const override;
virtual void OnAudioCapture(void* InBuffer, uint32 InBufferFrames, double StreamTime, bool bOverflow) override;
virtual bool GetInputDevicesAvailable(TArray<FCaptureDeviceInfo>& OutDevices) override;
virtual void SetHardwareFeatureEnabled(EHardwareInputFeature FeatureType, bool bEnabled);
OSStatus OnCaptureCallback( AudioUnitRenderActionFlags* ioActionFlags, const AudioTimeStamp* inTimeStamp, UInt32 inBusNumber, UInt32 inNumberFrames, AudioBufferList* ioData );
private:
void AllocateBuffer(int SizeInBytes);
AudioComponentInstance IOUnit;
FOnCaptureFunction OnCapture;
int32 NumChannels;
int32 SampleRate;
TArray<uint8> CaptureBuffer;
int BufferSize = 0;
bool bIsStreamOpen;
bool bHasCaptureStarted;
};
}