Files
UnrealEngineUWP/Engine/Source/Runtime/MovieSceneCapture/Private/FrameGrabberProtocol.cpp
Ben Marsh 20bf0eb6a1 Updating copyright notices to 2017 (copying from //Tasks/UE4/Dev-Copyright-2017).
#rb none
#lockdown Nick.Penwarden

[CL 3226823 by Ben Marsh in Main branch]
2016-12-08 08:52:44 -05:00

48 lines
1.4 KiB
C++

// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
#include "Protocols/FrameGrabberProtocol.h"
#include "Templates/Casts.h"
bool FFrameGrabberProtocol::HasFinishedProcessing() const
{
return !FrameGrabber->HasOutstandingFrames();
}
bool FFrameGrabberProtocol::Initialize(const FCaptureProtocolInitSettings& InSettings, const ICaptureProtocolHost& Host)
{
EPixelFormat PixelFormat = PF_B8G8R8A8;
uint32 RingBufferSize = 3;
if (UFrameGrabberProtocolSettings* Settings = Cast<UFrameGrabberProtocolSettings>(InSettings.ProtocolSettings))
{
PixelFormat = Settings->DesiredPixelFormat;
RingBufferSize = Settings->RingBufferSize;
}
// We'll use our own grabber to capture the entire viewport
FrameGrabber.Reset(new FFrameGrabber(InSettings.SceneViewport.ToSharedRef(), InSettings.DesiredSize, PixelFormat, RingBufferSize));
FrameGrabber->StartCapturingFrames();
return true;
}
void FFrameGrabberProtocol::CaptureFrame(const FFrameMetrics& FrameMetrics, const ICaptureProtocolHost& Host)
{
FrameGrabber->CaptureThisFrame(GetFramePayload(FrameMetrics, Host));
}
void FFrameGrabberProtocol::Tick()
{
TArray<FCapturedFrameData> CapturedFrames = FrameGrabber->GetCapturedFrames();
for (FCapturedFrameData& Frame : CapturedFrames)
{
ProcessFrame(MoveTemp(Frame));
}
}
void FFrameGrabberProtocol::Finalize()
{
FrameGrabber->Shutdown();
FrameGrabber.Reset();
}