Files
UnrealEngineUWP/Engine/Source/Runtime/ImageWriteQueue/Public/ImageWriteStream.h
ryan gerleve b41214417e Resolving conflict from Dev-Enterprise.
/src/ROBOMERGE_ENGINE_Dev_Networking/Engine/Source/Runtime/Sockets/Private/BSDSockets/SocketsBSD.cpp - merging //UE4/Main/Engine/Source/Runtime/Sockets/Private/BSDSockets/SocketsBSD.cpp#20


--------------------------------------
Copying //UE4/Dev-Enterprise[at]4705006 to Dev-Main (//UE4/Dev-Main)

#rb none
#lockdown Nick.Penwarden

#ROBOMERGE-OWNER: ryan.gerleve
#ROBOMERGE-AUTHOR: francis.hurteau
#ROBOMERGE-SOURCE: CL 4705151 in //UE4/Main/...
#ROBOMERGE-BOT: ENGINE (Main -> Dev-Networking)

[CL 4712032 by ryan gerleve in Dev-Networking branch]
2019-01-11 14:26:15 -05:00

93 lines
2.3 KiB
C++

// Copyright 1998-2019 Epic Games, Inc. All Rights Reserved.
#pragma once
#include "Misc/CoreDefines.h"
#include "HAL/CriticalSection.h"
#include "Templates/UniquePtr.h"
#include "Containers/ArrayView.h"
#include "ImagePixelData.h"
struct FImageStreamEndpoint;
/**
* A pipe that receives image data and forwards it onto 0 or more end points, copying the buffer as few times as possible
*/
struct IMAGEWRITEQUEUE_API FImagePixelPipe
{
/**
* Default constructor (an empty pipe)
*/
FImagePixelPipe()
{}
/**
* Define a new pipe with a single initial endpoint
*/
FImagePixelPipe(const TFunction<void(TUniquePtr<FImagePixelData>&&)>& InEndpoint)
{
AddEndpoint(InEndpoint);
}
/**
* Push the specified pixel data onto this pipe
*
* @param InImagePixelData The data to push through this pipe
*/
void Push(TUniquePtr<FImagePixelData>&& InImagePixelData);
/**
* Add a new end point handler to this pipe.
*
* @param InEndpoint The new endpoint to add. Potentially used on any thread.
*/
void AddEndpoint(TUniquePtr<FImageStreamEndpoint>&& InEndpoint);
/**
* Add a new end point handler to this pipe as a functor.
*
* @param InHandler A handler function implemented as an anonymous functor. Potentially called on any thread.
*/
void AddEndpoint(const TFunction<void(TUniquePtr<FImagePixelData>&& )>& InHandler);
/**
* Access this pipe's current set of end points.
* Warning: Not thread-safe - should only be called where no other modification to the end points can be happening.
*/
TArrayView<const TUniquePtr<FImageStreamEndpoint>> GetEndPoints() const
{
return EndPoints;
}
private:
/** A lock to protect the end points array */
FCriticalSection EndPointLock;
/** array of endpoints to be called in order */
TArray<TUniquePtr<FImageStreamEndpoint>> EndPoints;
};
/**
* Stream end-point that receives a copy of image data from a thread
*/
struct IMAGEWRITEQUEUE_API FImageStreamEndpoint
{
virtual ~FImageStreamEndpoint(){}
/**
* Pipe the specified image data onto this end point
*
* @param InOwnedImage Image data to pass through this end point.
*/
void PipeImage(TUniquePtr<FImagePixelData>&& InOwnedImage);
private:
/**
* Implemented in derived classes to handle image data being received
*/
virtual void OnImageReceived(TUniquePtr<FImagePixelData>&& InOwnedImage) {}
};