Files
UnrealEngineUWP/Engine/Source/Runtime/AVEncoder/Private/CodecPacket.cpp
aurel cordonnier 02c0f425e8 Copy up from Release-Engine-Staging @ 16738359
This represents UE4/Main @ 16738161 and Dev-PerfTest @ 16737719

[CL 16738582 by aurel cordonnier in ue5-release-engine-test branch]
2021-06-22 00:27:54 -04:00

67 lines
1.3 KiB
C++

// Copyright Epic Games, Inc. All Rights Reserved.
#include "CodecPacket.h"
#include "CoreMinimal.h"
#include "VideoEncoderCommon.h"
namespace AVEncoder
{
FCodecPacketImpl::~FCodecPacketImpl()
{
FScopeLock Guard(&ProtectClone);
if (MyClone)
{
MyClone->ReleaseClone();
}
}
const FCodecPacket* FCodecPacketImpl::Clone() const
{
FScopeLock Guard(&ProtectClone);
if (!MyClone)
{
FClone* NewClone = new FClone();
NewClone->Copy(*this);
MyClone = NewClone;
}
return MyClone->Clone();
}
void FCodecPacketImpl::ReleaseClone() const
{
UE_LOG(LogVideoEncoder, Error, TEXT("Can't release original FCodecPacket!"));
check(false);
}
FCodecPacketImpl::FClone::~FClone()
{
FMemory::Free(const_cast<uint8*>(Data));
}
void FCodecPacketImpl::FClone::Copy(const FCodecPacketImpl& InOriginal)
{
DataSize = InOriginal.DataSize;
Data = static_cast<const uint8*>(FMemory::Malloc(DataSize));
FMemory::BigBlockMemcpy(const_cast<uint8*>(Data), InOriginal.Data, DataSize);
IsKeyFrame = InOriginal.IsKeyFrame;
}
const FCodecPacket* FCodecPacketImpl::FClone::Clone() const
{
RefCounter.Increment();
return this;
}
void FCodecPacketImpl::FClone::ReleaseClone() const
{
if (RefCounter.Decrement() == 0)
{
delete const_cast<FClone*>(this);
}
}
} /* namespace AVEncoder */