Files
UnrealEngineUWP/Engine/Source/Runtime/AudioCaptureCore/Private/AudioCaptureInternal.h
maxwell hayes e6b842bbc2 Port of audio capture implementation fixes
#jira UE-91858
#rb Ethan.Geller

#ROBOMERGE-SOURCE: CL 12926579 in //UE4/Release-4.25/... via CL 12926596 via CL 12926657
#ROBOMERGE-BOT: RELEASE (Release-Engine-Staging -> Main) (v682-12900288)

[CL 12926695 by maxwell hayes in Main branch]
2020-04-20 12:56:15 -04:00

50 lines
2.1 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
#include "AudioCaptureCore.h"
#include "AudioCaptureCoreLog.h"
#include "Features/IModularFeatures.h"
namespace Audio
{
// Null implementation for compiler
class FNullAudioCaptureDevice : public IAudioCaptureStream
{
public:
FNullAudioCaptureDevice() {}
// Begin IAudioCaptureStream
virtual bool GetCaptureDeviceInfo(FCaptureDeviceInfo& OutInfo, int32 DeviceIndex) override { return false; }
virtual bool OpenCaptureStream(const FAudioCaptureDeviceParams& InParams, FOnCaptureFunction OnCapture, uint32 NumFramesDesired) override { return false; }
virtual bool CloseStream() override { return false; }
virtual bool StartStream() override { return false; }
virtual bool StopStream() override { return false; }
virtual bool AbortStream() override { return false; }
virtual bool GetStreamTime(double& OutStreamTime) override { return false; }
virtual int32 GetSampleRate() const override { return 0; }
virtual bool IsStreamOpen() const override { return false; }
virtual bool IsCapturing() const override { return false; }
virtual void OnAudioCapture(void* InBuffer, uint32 InBufferFrames, double StreamTime, bool bOverflow) override {}
virtual bool GetInputDevicesAvailable(TArray<FCaptureDeviceInfo>& OutDevices) override { return false; }
// ~End IAudioCaptureStream
};
FORCEINLINE TUniquePtr<IAudioCaptureStream> FAudioCapture::CreateImpl()
{
TArray<IAudioCaptureFactory*> AudioCaptureStreamFactories = IModularFeatures::Get().GetModularFeatureImplementations<IAudioCaptureFactory>(IAudioCaptureFactory::GetModularFeatureName());
// For now, just return the first audio capture stream implemented. We can make this configurable at a later point.
if (AudioCaptureStreamFactories.Num() > 0 && AudioCaptureStreamFactories[0] != nullptr)
{
return AudioCaptureStreamFactories[0]->CreateNewAudioCaptureStream();
}
else
{
UE_LOG(LogAudioCaptureCore, Display, TEXT("No Audio Capture implementations found. Audio input will be silent."));
return TUniquePtr<IAudioCaptureStream>(new FNullAudioCaptureDevice());
}
}
} // namespace audio