2016-12-08 08:52:44 -05:00
|
|
|
// Copyright 1998-2017 Epic Games, Inc. All Rights Reserved.
|
2014-09-09 12:20:43 -04:00
|
|
|
|
Copying //UE4/Dev-Build to //UE4/Dev-Main (Source: //UE4/Dev-Build @ 3209340)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3209340 on 2016/11/23 by Ben.Marsh
Convert UE4 codebase to an "include what you use" model - where every header just includes the dependencies it needs, rather than every source file including large monolithic headers like Engine.h and UnrealEd.h.
Measured full rebuild times around 2x faster using XGE on Windows, and improvements of 25% or more for incremental builds and full rebuilds on most other platforms.
* Every header now includes everything it needs to compile.
* There's a CoreMinimal.h header that gets you a set of ubiquitous types from Core (eg. FString, FName, TArray, FVector, etc...). Most headers now include this first.
* There's a CoreTypes.h header that sets up primitive UE4 types and build macros (int32, PLATFORM_WIN64, etc...). All headers in Core include this first, as does CoreMinimal.h.
* Every .cpp file includes its matching .h file first.
* This helps validate that each header is including everything it needs to compile.
* No engine code includes a monolithic header such as Engine.h or UnrealEd.h any more.
* You will get a warning if you try to include one of these from the engine. They still exist for compatibility with game projects and do not produce warnings when included there.
* There have only been minor changes to our internal games down to accommodate these changes. The intent is for this to be as seamless as possible.
* No engine code explicitly includes a precompiled header any more.
* We still use PCHs, but they're force-included on the compiler command line by UnrealBuildTool instead. This lets us tune what they contain without breaking any existing include dependencies.
* PCHs are generated by a tool to get a statistical amount of coverage for the source files using it, and I've seeded the new shared PCHs to contain any header included by > 15% of source files.
Tool used to generate this transform is at Engine\Source\Programs\IncludeTool.
[CL 3209342 by Ben Marsh in Main branch]
2016-11-23 15:48:37 -05:00
|
|
|
#include "TargetDeviceService.h"
|
|
|
|
|
#include "HAL/PlatformProcess.h"
|
|
|
|
|
#include "HAL/FileManager.h"
|
|
|
|
|
#include "Misc/Paths.h"
|
|
|
|
|
#include "Misc/ConfigCacheIni.h"
|
|
|
|
|
#include "Interfaces/ITargetPlatform.h"
|
|
|
|
|
#include "Helpers/MessageEndpointBuilder.h"
|
|
|
|
|
#include "TargetDeviceServiceMessages.h"
|
2014-09-09 12:20:43 -04:00
|
|
|
#include "PlatformInfo.h"
|
|
|
|
|
|
2014-10-08 16:57:50 -04:00
|
|
|
|
|
|
|
|
/* Local helpers
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
struct FVariantSortCallback
|
|
|
|
|
{
|
|
|
|
|
FORCEINLINE bool operator()(const ITargetDeviceWeakPtr& A, const ITargetDeviceWeakPtr& B) const
|
|
|
|
|
{
|
|
|
|
|
ITargetDevicePtr APtr = A.Pin();
|
|
|
|
|
ITargetDevicePtr BPtr = B.Pin();
|
|
|
|
|
|
|
|
|
|
return APtr->GetTargetPlatform().GetVariantPriority() > BPtr->GetTargetPlatform().GetVariantPriority();
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* FTargetDeviceService structors
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
Copying //UE4/Dev-Sequencer to //UE4/Dev-Main (Source: //UE4/Dev-Sequencer @ 3178529)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3149443 on 2016/10/03 by Max.Preussner
MediaAssets: Better parameter names for MediaPlayer BP functions
Change 3149756 on 2016/10/03 by Max.Chen
Sequence Recorder: Set some settings to be clamped at 0 (sequence length, recording delay, audio gain, audio input buffer size, nearby actor recording proximity)
#jira UE-35233
Change 3149795 on 2016/10/03 by Max.Chen
Curve Editor: Set tangent to user when flattening or straightening tangents only when the tangent mode is auto and the interp mode is cubic.
#jira UE-36734
Change 3150378 on 2016/10/04 by Max.Preussner
PS4Media: Made video buffer sizes for file and HLS sources configurable (UE-36807)
#jira UE-36807
Change 3151414 on 2016/10/05 by Max.Chen
Sequencer: Fix case where restoring the last view target was getting skipped. It should always restore if the camera object and the unlock if camera actor object is null.
#jira UE-35285
Change 3152038 on 2016/10/05 by Max.Preussner
UdpMessaging: Code & documentation modernization pass
Change 3152471 on 2016/10/05 by Max.Chen
Cine Camera: Don't enable/disable actor ticking based soley on actor tracking since actor ticking is needed for other purposes. Instead, always enable actor ticking and only update actor tracking on tick if necessary. This fixes a
bug where the cine camera actor won't tick if you hook in event tick.
#jira UE-36625
Change 3152692 on 2016/10/05 by Max.Preussner
Messaging: API code & documentation modernization pass
Mostly removed shared pointer/ref typedefs as they prevent forward declarations and increase include complexity.
Change 3153824 on 2016/10/06 by Max.Preussner
Messaging: Renamed IConnectionBasedMessagingModule to ITcpMessagingModule and moved it into TcpMessaging
I recommend that we refactor this API. The dependency should be reversed, i.e. instead of AndroidDeviceDiscovery depending on the TcpMessaging plug-in module, the Engine should provide a central registry that device discovery
modules can notify, and that message transport plug-ins can register with and listen to OnConnectionAdded/Removed events etc. That way it supports an arbitrary number of transport plug-ins, and the Engine is not coupled to any of them. This
functionality is not necessarily related to messaging, and the Messaging API is transport agnostic anyway. I'll think about this some more.
Change 3153826 on 2016/10/06 by Max.Preussner
Messaging: Removed remaining typedefs in IMessageTracer to enable forward declaration and reduce include dependencies
Change 3153857 on 2016/10/06 by Max.Chen
Sequencer: Set snap time to dragged key on by default.
Change 3153980 on 2016/10/06 by Max.Preussner
SessionServices: Removed typedefs; code and documentation modernization pass
Change 3154313 on 2016/10/06 by Max.Chen
Sequencer: Set the paste keys time to the current time, rather than the mouse time.
Change 3154332 on 2016/10/06 by Max.Chen
Sequencer: Remove click to rename shot functionality in the shot thumbnail. Added rename shot to the shot context menu.
Change 3154377 on 2016/10/07 by Max.Chen
Sequencer: Add ability to step to beginning and ends of sections/shots using the hotkeys: , and .
Change 3154788 on 2016/10/07 by Max.Chen
Sequencer: Fix offsets that created when moving multiple sections. The offsets were being created because section bounds were being generated for all sections except for the current section. Instead, they should be computed for all
sections except for any that aren't being moved.
#jira UE-29152
Change 3159274 on 2016/10/11 by Max.Preussner
Core: Documentation fixes
Change 3159275 on 2016/10/11 by Max.Preussner
UdpMessaging: Added missing header
Change 3160746 on 2016/10/12 by Max.Preussner
MediaAssets: Added BP functions to query width, height, and aspect ratio of UMediaTexture instances
#jira UE-37241
Change 3160975 on 2016/10/12 by Max.Preussner
PS4Media: Better logging for SetRate failures
Change 3160995 on 2016/10/12 by Max.Preussner
MediaPlayerEditor: Fixed Media player selection is ignored if media specifies player overrides (UE-37248)
#jira UE-37248
Change 3161066 on 2016/10/12 by Max.Preussner
PS4Media: Enforcing minimum 8 byte alignment for media allocations
Change 3161069 on 2016/10/12 by Max.Preussner
PS4Media: Fixed log spam when setting play rate to current rate
Change 3162567 on 2016/10/13 by Max.Preussner
PS4Media: Made track switching code more readable
Change 3163447 on 2016/10/14 by Max.Preussner
PS4Media: Fixed array out of bounds assertions
Change 3163772 on 2016/10/14 by Max.Preussner
MfMedia: Fixed a number of timing related issues
Change 3163980 on 2016/10/15 by Max.Chen
Sequencer: Remove folder name numeric padding so that the naming convention is similar to creating objects in the level.
Change 3164581 on 2016/10/17 by Andrew.Rodham
Sequencer: Ensure global pre-animated state is restored in reverse order
Change 3164582 on 2016/10/17 by Andrew.Rodham
Sequencer: Ensure pre animated state is restored for all actor components before saving default state
Change 3164583 on 2016/10/17 by Andrew.Rodham
Sequencer: Re-enabled support for pre and post roll
Change 3165464 on 2016/10/17 by Max.Chen
Sequencer: Default number frame handles to 0 so that there's no change in behavior when rendering out a master sequence of shots. Handle frames need to enabled explicitly by the user.
Copy from Release-4.14
#jira UE-37416
Change 3165483 on 2016/10/17 by Max.Chen
Sequencer: Enable restore state for attach section completion
Change 3165771 on 2016/10/18 by Andrew.Rodham
Sequencer: Force evaluate when rendering thumbnails
#jira UE-37321
Change 3166057 on 2016/10/18 by Andrew.Rodham
Sequencer: Only set defaults for tracks that have no keys, and where the requested default has changed
#jira UE-37285
Change 3166218 on 2016/10/18 by Max.Preussner
MediaPlayerEditor: Failure opening media, even though it opened successfully (UE-37470)
#jira UE-37470
Change 3166247 on 2016/10/18 by Max.Preussner
WmfMedia: Showing progress bar while media is being resolved
Change 3166289 on 2016/10/18 by Max.Preussner
MfMedia: Showing progress bar while media is being resolved
Change 3166993 on 2016/10/18 by Max.Preussner
MfMedia: Fixed info string not reset on media close.
Change 3166999 on 2016/10/19 by Max.Preussner
Media: Fixed NV12 and NV21 support
Change 3167008 on 2016/10/19 by Max.Preussner
Media: Removed vertical NV12 alignment
Change 3167029 on 2016/10/19 by Max.Preussner
WmfMedia: Temp fix for RGB32 encoded AVIs rendering upside-down and too bright (UE-37505)
#jira UE-37505
Change 3168593 on 2016/10/19 by Max.Chen
Sequencer: Change paste at time to local time, so that the paste happens in the local time of the sequence rather than the global time if pasting in a shot level sequence.
Change 3168626 on 2016/10/19 by Max.Chen
Sequencer: Clamp to view bounds should snap to frame if frame snapping is on.
Change 3168627 on 2016/10/19 by Max.Chen
Sequencer: Initialize working and view range to be 10% larger than playback range.
Change 3168760 on 2016/10/20 by Max.Preussner
Media: Revamped media texture buffer management to support padded frames
Added support for Windows bitmap buffers.
Fixed a number of format, conversion and/or looping issues in WmfMedia and MfMedia.
Not all shaders have been updated yet.
Change 3169640 on 2016/10/20 by Max.Chen
Sequencer: Add current camera to FLevelSequencePlayerSnapshot. Adjust DefaultBurnIn to include a few more parameters like focal length and focus distance.
#jira UE-37407
Change 3170677 on 2016/10/21 by Max.Chen
Movie Scene Capture: Add toggle to override engine scalability settings to cinematic scalability.
#jira UE-36560
Change 3170710 on 2016/10/21 by Max.Preussner
Media: Optimized handling of RGB input
Change 3170712 on 2016/10/21 by Max.Preussner
Media: Fixed NV21 conversion shader scaling
Change 3170923 on 2016/10/21 by Max.Preussner
UBT: Copied XboxOne project generator fix from Fortnite CL# 3170868
Change 3171494 on 2016/10/23 by Max.Chen
Sequencer: Fix fbx export from master sequence not finding bound objects.
#jira UE-35752
Change 3171506 on 2016/10/23 by Max.Chen
Sequencer: Draw where in and out points of the shot section are, just like subsequences do. Change to only draw the green starting line if StartOffset is negative.
#jira UE-35473
Change 3171743 on 2016/10/24 by Andrew.Rodham
Editor: Added support for detail customizations on root structs
- Also added the ability to add external struct data onto a detail category builder, and property type customization.
Change 3171752 on 2016/10/24 by Andrew.Rodham
Sequencer: Fixed spawnable ownership
- Spawnables are no longer destroyed when the cursor leaves the master playback range.
- Spawnable ownership now operates as it previously did before the evaluation rework.
- bIgnoreOwnershipInEditor has been removed since its existence was a work around for when we didn't evaluate sub sequences from the master sequence.
- FMovieSceneSequenceID is now a struct so that it can be used in array properties
- Meta data now exists for each segment of an evaluation field. Currently this only includes the sub sequence IDs that exist at that time, but it may be expanded to include all evaluation entities (tracks + sections) in future so
we don't have to calculate that at runtime.
Change 3171756 on 2016/10/24 by Andrew.Rodham
Sequencer: Added ability to trigger events with parameters
- It's now possible to supply an event payload on event track keys which are to be passed to a given event. The structure must match the signature of the event, or a warning will be emitted.
- Added a templated TGenericKeyArea, TKeyFrameManipulator and TCurveInterface that allow to generic manipulation of keyframe section data. In time we will port the other key areas over to this representation.
- This new architecture affords the common manipulation of time-based keyframes in a value-agnostic manner.
Change 3172935 on 2016/10/24 by Max.Preussner
MediaPlayerEditor: Fixed MediaPlayer asset not being dirtied when creating media sound wave or texture for it
Change 3173947 on 2016/10/25 by Max.Preussner
SlateRemote: Disabled plug-in, but enabled server by default
Change 3174510 on 2016/10/26 by Max.Chen
Sequencer: Fix slomo track crash
#jira UE-37802
Change 3174698 on 2016/10/26 by Andrew.Rodham
UMG: Fixed objects bound to a panel slot animating their slot's content instead of the slot itself
#jira UE-37775
Change 3174780 on 2016/10/26 by Max.Preussner
MediaAssets: Accepting decoder defined buffer dimensions for RGB buffers
Change 3174789 on 2016/10/26 by Max.Preussner
MediaPlayerEditor: Showing desired player name instead of current player name if no media loaded
Change 3174817 on 2016/10/26 by Max.Preussner
WmfMedia: Added support for Motion JPEG (MJPG)
Change 3174825 on 2016/10/26 by Max.Preussner
WmfMedia: Added support for non-RGB32 uncompressed formats
Change 3174834 on 2016/10/26 by Max.Preussner
MediaPlayerAssets: Allow pausing while buffering media
Change 3174886 on 2016/10/26 by Andrew.Rodham
Core: Fixed range test that was testing incorrect behavior
Change 3174889 on 2016/10/26 by Andrew.Rodham
Sequencer: Fixed AssignActor behavior
- Also ensure that cached object state is invalidated when playback context changes
#jira UE-37798
Change 3174905 on 2016/10/26 by Andrew.Rodham
Sequencer: Changed assert when failing to create an audio component to a log message
- Audio no longer plays when GEngine->UseSound() is false
#jira UE-37772
Change 3174980 on 2016/10/26 by Andrew.Rodham
Sequencer: Remove warning when event endpoint could not be found for a given context
#jira UE-37824
Change 3175001 on 2016/10/26 by Andrew.Rodham
Sequencer: Evaluate sequence with EMovieScenePlaybackStatus::Jumping on Pause.
- Also protect Pause() against reentrancy when being called from an event
Change 3175012 on 2016/10/26 by Max.Chen
Sequence Recorder: Fixes an empty working and view range after recording.
On StopRecording() update playback range after nullifying the current sequence so that the playback range isn't empty.
Added SetViewRange and SetWorkingRange.
#jira UE-34191
Change 3177760 on 2016/10/28 by Max.Chen
Sequence Recorder: Don't update the current sequence name if it's already set. This fixes a bug where if you pass in a sequence name to record to, it gets reset to the name in the sequence recorder settings.
#jira UE-37808
Change 3178529 on 2016/10/28 by Max.Chen
Matinee to Level Sequence: Added interface to extend the matinee to level sequence converter
#jira UE-37328
#2864
[CL 3178562 by Max Chen in Main branch]
2016-10-28 15:04:38 -04:00
|
|
|
FTargetDeviceService::FTargetDeviceService(const FString& InDeviceName, const TSharedRef<IMessageBus, ESPMode::ThreadSafe>& InMessageBus)
|
2014-10-08 16:57:50 -04:00
|
|
|
: DeviceName(InDeviceName)
|
|
|
|
|
, Running(false)
|
|
|
|
|
, Shared(false)
|
|
|
|
|
{
|
|
|
|
|
// initialize messaging
|
|
|
|
|
MessageEndpoint = FMessageEndpoint::Builder(FName(*FString::Printf(TEXT("FTargetDeviceService (%s)"), *DeviceName)), InMessageBus)
|
|
|
|
|
.Handling<FTargetDeviceClaimDenied>(this, &FTargetDeviceService::HandleClaimDeniedMessage)
|
|
|
|
|
.Handling<FTargetDeviceClaimed>(this, &FTargetDeviceService::HandleClaimedMessage)
|
|
|
|
|
.Handling<FTargetDeviceServiceDeployCommit>(this, &FTargetDeviceService::HandleDeployCommitMessage)
|
|
|
|
|
.Handling<FTargetDeviceServiceDeployFile>(this, &FTargetDeviceService::HandleDeployFileMessage)
|
|
|
|
|
.Handling<FTargetDeviceServiceLaunchApp>(this, &FTargetDeviceService::HandleLaunchAppMessage)
|
|
|
|
|
.Handling<FTargetDeviceServicePing>(this, &FTargetDeviceService::HandlePingMessage)
|
|
|
|
|
.Handling<FTargetDeviceServicePowerOff>(this, &FTargetDeviceService::HandlePowerOffMessage)
|
|
|
|
|
.Handling<FTargetDeviceServicePowerOn>(this, &FTargetDeviceService::HandlePowerOnMessage)
|
|
|
|
|
.Handling<FTargetDeviceServiceReboot>(this, &FTargetDeviceService::HandleRebootMessage)
|
|
|
|
|
.Handling<FTargetDeviceServiceRunExecutable>(this, &FTargetDeviceService::HandleRunExecutableMessage)
|
|
|
|
|
.Handling<FTargetDeviceUnclaimed>(this, &FTargetDeviceService::HandleUnclaimedMessage);
|
|
|
|
|
|
|
|
|
|
if (MessageEndpoint.IsValid())
|
|
|
|
|
{
|
|
|
|
|
MessageEndpoint->Subscribe<FTargetDeviceClaimed>();
|
|
|
|
|
MessageEndpoint->Subscribe<FTargetDeviceUnclaimed>();
|
|
|
|
|
MessageEndpoint->Subscribe<FTargetDeviceServicePing>();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
FTargetDeviceService::~FTargetDeviceService()
|
|
|
|
|
{
|
|
|
|
|
Stop();
|
|
|
|
|
FMessageEndpoint::SafeRelease(MessageEndpoint);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* ITargetDeviceService interface
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
2014-09-09 12:20:43 -04:00
|
|
|
void FTargetDeviceService::AddTargetDevice(ITargetDevicePtr InDevice)
|
|
|
|
|
{
|
2014-09-10 12:32:10 -04:00
|
|
|
if (!InDevice.IsValid())
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2014-09-09 12:20:43 -04:00
|
|
|
FName Variant = FName(InDevice->GetTargetPlatform().PlatformName().GetCharArray().GetData());
|
|
|
|
|
|
|
|
|
|
if (DevicePlatformName == NAME_None)
|
|
|
|
|
{
|
|
|
|
|
// If this seems nasty your right!
|
|
|
|
|
// This is just one more nastiness in this class due to the fact that we intend to refactor the target platform stuff as a separate task.
|
|
|
|
|
const PlatformInfo::FPlatformInfo& Info = InDevice->GetTargetPlatform().GetPlatformInfo();
|
|
|
|
|
DevicePlatformName = Info.PlatformInfoName;
|
|
|
|
|
const PlatformInfo::FPlatformInfo* VanillaInfo = PlatformInfo::FindVanillaPlatformInfo(Info.VanillaPlatformName);
|
|
|
|
|
DevicePlatformDisplayName = VanillaInfo->DisplayName.ToString();
|
|
|
|
|
|
|
|
|
|
// Sigh the hacks... Should be able to remove if platform info gets cleaned up.... Windows doesn't have a reasonable vanilla platform.
|
|
|
|
|
const FString VariableSplit(TEXT("("));
|
|
|
|
|
FString Full = VanillaInfo->DisplayName.ToString();
|
|
|
|
|
FString Left;
|
|
|
|
|
FString Right;
|
|
|
|
|
bool bSplit = Full.Split(VariableSplit, &Left, &Right);
|
|
|
|
|
DevicePlatformDisplayName = bSplit ? Left.Trim() : Full;
|
|
|
|
|
}
|
|
|
|
|
|
2015-01-13 15:11:55 -05:00
|
|
|
// double add, which due to the async nature of some device discovery can't be easily avoided.
|
|
|
|
|
if (!(TargetDevicePtrs.FindRef(Variant).IsValid()))
|
2014-09-10 12:32:10 -04:00
|
|
|
{
|
2015-01-13 15:11:55 -05:00
|
|
|
TargetDevicePtrs.Add(Variant, InDevice);
|
|
|
|
|
|
|
|
|
|
// sort and choose cache the default
|
|
|
|
|
TargetDevicePtrs.ValueSort(FVariantSortCallback());
|
|
|
|
|
auto DeviceIterator = TargetDevicePtrs.CreateIterator();
|
|
|
|
|
|
|
|
|
|
if (DeviceIterator)
|
|
|
|
|
{
|
|
|
|
|
DefaultDevicePtr = (*DeviceIterator).Value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DefaultDevicePtr = nullptr;
|
|
|
|
|
}
|
2014-09-10 12:32:10 -04:00
|
|
|
}
|
2014-09-09 12:20:43 -04:00
|
|
|
}
|
|
|
|
|
|
2014-10-08 16:57:50 -04:00
|
|
|
|
|
|
|
|
bool FTargetDeviceService::CanStart(FName InFlavor) const
|
|
|
|
|
{
|
|
|
|
|
ITargetDevicePtr TargetDevice = GetDevice(InFlavor);
|
|
|
|
|
|
|
|
|
|
if (TargetDevice.IsValid())
|
|
|
|
|
{
|
|
|
|
|
return TargetDevice->IsConnected();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ITargetDevicePtr FTargetDeviceService::GetDevice(FName InVariant) const
|
|
|
|
|
{
|
|
|
|
|
ITargetDevicePtr TargetDevice;
|
|
|
|
|
|
|
|
|
|
if (InVariant == NAME_None)
|
|
|
|
|
{
|
|
|
|
|
TargetDevice = DefaultDevicePtr.Pin();
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
const ITargetDeviceWeakPtr * WeakTargetDevicePtr = TargetDevicePtrs.Find(InVariant);
|
|
|
|
|
|
|
|
|
|
if (WeakTargetDevicePtr != nullptr)
|
|
|
|
|
{
|
|
|
|
|
TargetDevice = WeakTargetDevicePtr->Pin();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return TargetDevice;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2014-09-09 12:20:43 -04:00
|
|
|
void FTargetDeviceService::RemoveTargetDevice(ITargetDevicePtr InDevice)
|
|
|
|
|
{
|
2014-09-10 12:32:10 -04:00
|
|
|
if (!InDevice.IsValid())
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2014-09-09 12:20:43 -04:00
|
|
|
FName Variant = FName(InDevice->GetTargetPlatform().PlatformName().GetCharArray().GetData());
|
|
|
|
|
|
|
|
|
|
TargetDevicePtrs.Remove(Variant);
|
|
|
|
|
|
|
|
|
|
// Cache the default
|
|
|
|
|
auto DeviceIterator = TargetDevicePtrs.CreateIterator();
|
2014-10-08 16:57:50 -04:00
|
|
|
|
2014-09-10 12:32:10 -04:00
|
|
|
if (DeviceIterator)
|
|
|
|
|
{
|
|
|
|
|
DefaultDevicePtr = (*DeviceIterator).Value;
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
DefaultDevicePtr = nullptr;
|
|
|
|
|
}
|
2014-09-09 12:20:43 -04:00
|
|
|
}
|
|
|
|
|
|
2014-10-08 16:57:50 -04:00
|
|
|
|
|
|
|
|
bool FTargetDeviceService::Start()
|
|
|
|
|
{
|
|
|
|
|
if (!Running && MessageEndpoint.IsValid())
|
|
|
|
|
{
|
|
|
|
|
// notify other services
|
|
|
|
|
ClaimAddress = MessageEndpoint->GetAddress();
|
|
|
|
|
ClaimHost = FPlatformProcess::ComputerName();
|
2015-09-17 21:14:52 -04:00
|
|
|
ClaimUser = FPlatformProcess::UserName(false);
|
2014-10-08 16:57:50 -04:00
|
|
|
|
|
|
|
|
MessageEndpoint->Publish(new FTargetDeviceClaimed(DeviceName, ClaimHost, ClaimUser));
|
|
|
|
|
|
|
|
|
|
Running = true;
|
|
|
|
|
}
|
2015-10-28 08:58:16 -04:00
|
|
|
|
2014-10-08 16:57:50 -04:00
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::Stop()
|
|
|
|
|
{
|
|
|
|
|
if (Running)
|
|
|
|
|
{
|
2015-10-28 08:58:16 -04:00
|
|
|
|
2015-09-17 21:14:52 -04:00
|
|
|
MessageEndpoint->Publish(new FTargetDeviceUnclaimed(DeviceName, FPlatformProcess::ComputerName(), FPlatformProcess::UserName(false)));
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
FPlatformProcess::SleepNoStats(0.01);
|
2014-10-08 16:57:50 -04:00
|
|
|
|
Merging //UE4/Release-4.11 to //UE4/Main (up to CL#2852902)
==========================
MAJOR FEATURES + CHANGES
==========================
Change 2835191 on 2016/01/19 by Nick.Whiting
Invert the y-axis on the SteamVR controllers to match the convention of the engine and the rest of the gamepads
#jira UE-22705
Change 2835686 on 2016/01/20 by Gareth.Martin
Fixed landscape material instances not being updated if holes are painted on a landscape that doesn't have the landscape visibility mask node in the material and then the visibility mask node is added to the material later.
#jira UE-18187
Change 2835767 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Added a cursor to TopDown template (C++ version) to match the BP version.
Change 2835772 on 2016/01/20 by Richard.Hinckley
#jira UE-25499 Adding the material asset for the C++ TopDown template's cursor.
Change 2835811 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25699 Added Validity Checks in BP logic, unchecked CDO for Pixel Ship, to Fix Log Warnings
#jira UE-25704 Adjusted Matinee to happen at Box Location
#jira UE-25688 Adjusted Player Starts
#jira UE-25693 Adjusted Player Starts
Change 2835863 on 2016/01/20 by Gareth.Martin
Fixed crash in the landscape ramp and mirror tools if the streaming level containing the landscape is hidden (or possibly if the landscape actor is deleted)
#jira UE-24883
Change 2835889 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25698 Enabled V-sync, also fixed up player Respawn Issue
Change 2835995 on 2016/01/20 by Jamie.Dale
The output log now hard-wraps lines to prevent long lines causing performance issues
#jira UE-24187
Change 2836052 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25675 Added Blocking Volume to prevent Player from Falling off map
#jira UE-25676 Added Blocking Volumes so that the Player doesn't get stucl at awkward corners under the Bridge
Change 2836137 on 2016/01/20 by Chad.Taylor
Vehicle and VehicleAdv template content fixes for new VR camera
#jira UE-25507
Change 2836166 on 2016/01/20 by Gareth.Martin
Fixed hiding a streaming level containing a landscape causing the landscape editor to switch to the "New Landscape" tool instead of exiting
#jira UE-25093
Change 2836174 on 2016/01/20 by Chad.Taylor
IHeadMountedDisplay crash fix associated with accessing a dangling pointer.
#jira UE-25272
Change 2836179 on 2016/01/20 by Jamie.Dale
Optimized FShapedGlyphSequence reverse look-up
There's now a reverse look-up map of cluster indices to their glyph data in order to avoid brute force looping
#jira UE-24187
Change 2836286 on 2016/01/20 by Chris.Babcock
Update Qualcomm TextureConverter for OSX
#jira UE-22092
#ue4
#android
Change 2836328 on 2016/01/20 by Nick.Darnell
Fixing a problem with widget components crashing on destruction with the render commands to pre/post render for window render commands needing access to the policy, but it potentially being deleted. Inserting a NoOp command that keeps the shared ptr alive through the RHI render process.
#jira UE-25752
Change 2836342 on 2016/01/20 by Nick.Darnell
Depending on shutdown order, the Slate Renderer may go away, and then render data handles may not be collected correctly because they are trying to reference a pointer that's no longer valid and cause a crash on exit. The correct approach would be to have render handles actually have a pointer back to who owns them, in this case the RHI Resource Manager, which is still alive and well at this point in the pipeline. Then if the resource manager is collected, it forces all handles to get cleaned up correctly, or if the handles are collected first, they can be sure they've got a valid pointer back to the resource manager.
#jira UE-25753
Change 2836358 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25710 Replaced Deprecated Nodes
Change 2836510 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25718 Adjsuted BP to make pointer decal rotate in the direction of surface
Change 2836564 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25716 Added bool to store last Moved Direction
Change 2836697 on 2016/01/20 by Taizyd.Korambayil
#jira UE-25740 Removed unused VR Nodes to remove Log errors on Mac
Change 2836725 on 2016/01/20 by Peter.Sauerbrei
workaround for thread race when trying to release the TargetDeviceService endpoint after an unclaim message is sent
#jira UE-25123
Change 2836782 on 2016/01/20 by Jamie.Dale
Added FTextLayout::AddLines
This is similar to AddLine, however it allows you to add multiple lines in a single call, thus avoiding the re-justification cost associated with each call to AddLine.
AddLine has also been changed to take the same structure type as AddLines (which takes an array of these structures), and the existing version of AddLine has been deprecated.
#jira UE-24187
Change 2836801 on 2016/01/20 by Jeff.Campeau
[CL 2857187 by Matthew Griffin in Main branch]
2016-02-05 11:54:00 -05:00
|
|
|
// Only stop the device if we care about device claiming
|
2015-10-28 08:58:16 -04:00
|
|
|
GConfig->GetBool(TEXT("/Script/Engine.Engine"), TEXT("DisableDeviceClaiming"), Running, GEngineIni);
|
2014-10-08 16:57:50 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* FTargetDeviceService implementation
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
bool FTargetDeviceService::StoreDeployedFile(FArchive* FileReader, const FString& TargetFileName) const
|
|
|
|
|
{
|
|
|
|
|
if (FileReader == nullptr)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// create target file
|
|
|
|
|
FArchive* FileWriter = IFileManager::Get().CreateFileWriter(*TargetFileName);
|
|
|
|
|
|
|
|
|
|
if (FileWriter == nullptr)
|
|
|
|
|
{
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
FileReader->Seek(0);
|
|
|
|
|
|
|
|
|
|
// copy file contents
|
|
|
|
|
int64 BytesRemaining = FileReader->TotalSize();
|
|
|
|
|
int32 BufferSize = 128 * 1024;
|
|
|
|
|
|
|
|
|
|
if (BytesRemaining < BufferSize)
|
|
|
|
|
{
|
|
|
|
|
BufferSize = BytesRemaining;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
void* Buffer = FMemory::Malloc(BufferSize);
|
|
|
|
|
|
|
|
|
|
while (BytesRemaining > 0)
|
|
|
|
|
{
|
|
|
|
|
FileReader->Serialize(Buffer, BufferSize);
|
|
|
|
|
FileWriter->Serialize(Buffer, BufferSize);
|
|
|
|
|
|
|
|
|
|
BytesRemaining -= BufferSize;
|
|
|
|
|
|
|
|
|
|
if (BytesRemaining < BufferSize)
|
|
|
|
|
{
|
|
|
|
|
BufferSize = BytesRemaining;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
// clean up
|
|
|
|
|
FMemory::Free(Buffer);
|
|
|
|
|
delete FileWriter;
|
|
|
|
|
|
|
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* FTargetDeviceService callbacks
|
|
|
|
|
*****************************************************************************/
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::HandleClaimDeniedMessage(const FTargetDeviceClaimDenied& Message, const IMessageContextRef& Context)
|
|
|
|
|
{
|
2015-07-22 05:11:19 -04:00
|
|
|
// HACK: Disabling claim denied message. Allows the editor to always claim a device and should prevent cases where instances of the
|
|
|
|
|
// editor running on other machines can steal a device from us - which is undesirable on some platforms.
|
|
|
|
|
// Also see FTargetDeviceProxyManager::HandlePongMessage()
|
2015-07-20 05:30:33 -04:00
|
|
|
#if 0
|
|
|
|
|
if (Running && (Message.DeviceName == DeviceName))
|
|
|
|
|
{
|
|
|
|
|
Stop();
|
|
|
|
|
|
|
|
|
|
ClaimAddress = Context->GetSender();
|
|
|
|
|
ClaimHost = Message.HostName;
|
|
|
|
|
ClaimUser = Message.HostUser;
|
|
|
|
|
}
|
|
|
|
|
#endif
|
2014-10-08 16:57:50 -04:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::HandleClaimedMessage(const FTargetDeviceClaimed& Message, const IMessageContextRef& Context)
|
|
|
|
|
{
|
|
|
|
|
if (Message.DeviceName != DeviceName)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (Running)
|
|
|
|
|
{
|
|
|
|
|
if (Context->GetSender() != MessageEndpoint->GetAddress())
|
|
|
|
|
{
|
2015-09-17 21:14:52 -04:00
|
|
|
MessageEndpoint->Send(new FTargetDeviceClaimDenied(DeviceName, FPlatformProcess::ComputerName(), FPlatformProcess::UserName(false)), Context->GetSender());
|
2014-10-08 16:57:50 -04:00
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
else
|
|
|
|
|
{
|
|
|
|
|
ClaimAddress = Context->GetSender();
|
|
|
|
|
ClaimHost = Message.HostName;
|
|
|
|
|
ClaimUser = Message.HostUser;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::HandleUnclaimedMessage(const FTargetDeviceUnclaimed& Message, const IMessageContextRef& Context)
|
|
|
|
|
{
|
|
|
|
|
if (Message.DeviceName == DeviceName)
|
|
|
|
|
{
|
|
|
|
|
if (Context->GetSender() == ClaimAddress)
|
|
|
|
|
{
|
2014-10-17 19:15:09 -04:00
|
|
|
ClaimAddress.Invalidate();
|
2014-10-08 16:57:50 -04:00
|
|
|
ClaimHost.Empty();
|
|
|
|
|
ClaimUser.Empty();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::HandleDeployFileMessage(const FTargetDeviceServiceDeployFile& Message, const IMessageContextRef& Context)
|
|
|
|
|
{
|
|
|
|
|
if (!Running)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
Copying //UE4/Dev-Sequencer to //UE4/Dev-Main (Source: //UE4/Dev-Sequencer @ 3178529)
#lockdown Nick.Penwarden
#rb none
==========================
MAJOR FEATURES + CHANGES
==========================
Change 3149443 on 2016/10/03 by Max.Preussner
MediaAssets: Better parameter names for MediaPlayer BP functions
Change 3149756 on 2016/10/03 by Max.Chen
Sequence Recorder: Set some settings to be clamped at 0 (sequence length, recording delay, audio gain, audio input buffer size, nearby actor recording proximity)
#jira UE-35233
Change 3149795 on 2016/10/03 by Max.Chen
Curve Editor: Set tangent to user when flattening or straightening tangents only when the tangent mode is auto and the interp mode is cubic.
#jira UE-36734
Change 3150378 on 2016/10/04 by Max.Preussner
PS4Media: Made video buffer sizes for file and HLS sources configurable (UE-36807)
#jira UE-36807
Change 3151414 on 2016/10/05 by Max.Chen
Sequencer: Fix case where restoring the last view target was getting skipped. It should always restore if the camera object and the unlock if camera actor object is null.
#jira UE-35285
Change 3152038 on 2016/10/05 by Max.Preussner
UdpMessaging: Code & documentation modernization pass
Change 3152471 on 2016/10/05 by Max.Chen
Cine Camera: Don't enable/disable actor ticking based soley on actor tracking since actor ticking is needed for other purposes. Instead, always enable actor ticking and only update actor tracking on tick if necessary. This fixes a
bug where the cine camera actor won't tick if you hook in event tick.
#jira UE-36625
Change 3152692 on 2016/10/05 by Max.Preussner
Messaging: API code & documentation modernization pass
Mostly removed shared pointer/ref typedefs as they prevent forward declarations and increase include complexity.
Change 3153824 on 2016/10/06 by Max.Preussner
Messaging: Renamed IConnectionBasedMessagingModule to ITcpMessagingModule and moved it into TcpMessaging
I recommend that we refactor this API. The dependency should be reversed, i.e. instead of AndroidDeviceDiscovery depending on the TcpMessaging plug-in module, the Engine should provide a central registry that device discovery
modules can notify, and that message transport plug-ins can register with and listen to OnConnectionAdded/Removed events etc. That way it supports an arbitrary number of transport plug-ins, and the Engine is not coupled to any of them. This
functionality is not necessarily related to messaging, and the Messaging API is transport agnostic anyway. I'll think about this some more.
Change 3153826 on 2016/10/06 by Max.Preussner
Messaging: Removed remaining typedefs in IMessageTracer to enable forward declaration and reduce include dependencies
Change 3153857 on 2016/10/06 by Max.Chen
Sequencer: Set snap time to dragged key on by default.
Change 3153980 on 2016/10/06 by Max.Preussner
SessionServices: Removed typedefs; code and documentation modernization pass
Change 3154313 on 2016/10/06 by Max.Chen
Sequencer: Set the paste keys time to the current time, rather than the mouse time.
Change 3154332 on 2016/10/06 by Max.Chen
Sequencer: Remove click to rename shot functionality in the shot thumbnail. Added rename shot to the shot context menu.
Change 3154377 on 2016/10/07 by Max.Chen
Sequencer: Add ability to step to beginning and ends of sections/shots using the hotkeys: , and .
Change 3154788 on 2016/10/07 by Max.Chen
Sequencer: Fix offsets that created when moving multiple sections. The offsets were being created because section bounds were being generated for all sections except for the current section. Instead, they should be computed for all
sections except for any that aren't being moved.
#jira UE-29152
Change 3159274 on 2016/10/11 by Max.Preussner
Core: Documentation fixes
Change 3159275 on 2016/10/11 by Max.Preussner
UdpMessaging: Added missing header
Change 3160746 on 2016/10/12 by Max.Preussner
MediaAssets: Added BP functions to query width, height, and aspect ratio of UMediaTexture instances
#jira UE-37241
Change 3160975 on 2016/10/12 by Max.Preussner
PS4Media: Better logging for SetRate failures
Change 3160995 on 2016/10/12 by Max.Preussner
MediaPlayerEditor: Fixed Media player selection is ignored if media specifies player overrides (UE-37248)
#jira UE-37248
Change 3161066 on 2016/10/12 by Max.Preussner
PS4Media: Enforcing minimum 8 byte alignment for media allocations
Change 3161069 on 2016/10/12 by Max.Preussner
PS4Media: Fixed log spam when setting play rate to current rate
Change 3162567 on 2016/10/13 by Max.Preussner
PS4Media: Made track switching code more readable
Change 3163447 on 2016/10/14 by Max.Preussner
PS4Media: Fixed array out of bounds assertions
Change 3163772 on 2016/10/14 by Max.Preussner
MfMedia: Fixed a number of timing related issues
Change 3163980 on 2016/10/15 by Max.Chen
Sequencer: Remove folder name numeric padding so that the naming convention is similar to creating objects in the level.
Change 3164581 on 2016/10/17 by Andrew.Rodham
Sequencer: Ensure global pre-animated state is restored in reverse order
Change 3164582 on 2016/10/17 by Andrew.Rodham
Sequencer: Ensure pre animated state is restored for all actor components before saving default state
Change 3164583 on 2016/10/17 by Andrew.Rodham
Sequencer: Re-enabled support for pre and post roll
Change 3165464 on 2016/10/17 by Max.Chen
Sequencer: Default number frame handles to 0 so that there's no change in behavior when rendering out a master sequence of shots. Handle frames need to enabled explicitly by the user.
Copy from Release-4.14
#jira UE-37416
Change 3165483 on 2016/10/17 by Max.Chen
Sequencer: Enable restore state for attach section completion
Change 3165771 on 2016/10/18 by Andrew.Rodham
Sequencer: Force evaluate when rendering thumbnails
#jira UE-37321
Change 3166057 on 2016/10/18 by Andrew.Rodham
Sequencer: Only set defaults for tracks that have no keys, and where the requested default has changed
#jira UE-37285
Change 3166218 on 2016/10/18 by Max.Preussner
MediaPlayerEditor: Failure opening media, even though it opened successfully (UE-37470)
#jira UE-37470
Change 3166247 on 2016/10/18 by Max.Preussner
WmfMedia: Showing progress bar while media is being resolved
Change 3166289 on 2016/10/18 by Max.Preussner
MfMedia: Showing progress bar while media is being resolved
Change 3166993 on 2016/10/18 by Max.Preussner
MfMedia: Fixed info string not reset on media close.
Change 3166999 on 2016/10/19 by Max.Preussner
Media: Fixed NV12 and NV21 support
Change 3167008 on 2016/10/19 by Max.Preussner
Media: Removed vertical NV12 alignment
Change 3167029 on 2016/10/19 by Max.Preussner
WmfMedia: Temp fix for RGB32 encoded AVIs rendering upside-down and too bright (UE-37505)
#jira UE-37505
Change 3168593 on 2016/10/19 by Max.Chen
Sequencer: Change paste at time to local time, so that the paste happens in the local time of the sequence rather than the global time if pasting in a shot level sequence.
Change 3168626 on 2016/10/19 by Max.Chen
Sequencer: Clamp to view bounds should snap to frame if frame snapping is on.
Change 3168627 on 2016/10/19 by Max.Chen
Sequencer: Initialize working and view range to be 10% larger than playback range.
Change 3168760 on 2016/10/20 by Max.Preussner
Media: Revamped media texture buffer management to support padded frames
Added support for Windows bitmap buffers.
Fixed a number of format, conversion and/or looping issues in WmfMedia and MfMedia.
Not all shaders have been updated yet.
Change 3169640 on 2016/10/20 by Max.Chen
Sequencer: Add current camera to FLevelSequencePlayerSnapshot. Adjust DefaultBurnIn to include a few more parameters like focal length and focus distance.
#jira UE-37407
Change 3170677 on 2016/10/21 by Max.Chen
Movie Scene Capture: Add toggle to override engine scalability settings to cinematic scalability.
#jira UE-36560
Change 3170710 on 2016/10/21 by Max.Preussner
Media: Optimized handling of RGB input
Change 3170712 on 2016/10/21 by Max.Preussner
Media: Fixed NV21 conversion shader scaling
Change 3170923 on 2016/10/21 by Max.Preussner
UBT: Copied XboxOne project generator fix from Fortnite CL# 3170868
Change 3171494 on 2016/10/23 by Max.Chen
Sequencer: Fix fbx export from master sequence not finding bound objects.
#jira UE-35752
Change 3171506 on 2016/10/23 by Max.Chen
Sequencer: Draw where in and out points of the shot section are, just like subsequences do. Change to only draw the green starting line if StartOffset is negative.
#jira UE-35473
Change 3171743 on 2016/10/24 by Andrew.Rodham
Editor: Added support for detail customizations on root structs
- Also added the ability to add external struct data onto a detail category builder, and property type customization.
Change 3171752 on 2016/10/24 by Andrew.Rodham
Sequencer: Fixed spawnable ownership
- Spawnables are no longer destroyed when the cursor leaves the master playback range.
- Spawnable ownership now operates as it previously did before the evaluation rework.
- bIgnoreOwnershipInEditor has been removed since its existence was a work around for when we didn't evaluate sub sequences from the master sequence.
- FMovieSceneSequenceID is now a struct so that it can be used in array properties
- Meta data now exists for each segment of an evaluation field. Currently this only includes the sub sequence IDs that exist at that time, but it may be expanded to include all evaluation entities (tracks + sections) in future so
we don't have to calculate that at runtime.
Change 3171756 on 2016/10/24 by Andrew.Rodham
Sequencer: Added ability to trigger events with parameters
- It's now possible to supply an event payload on event track keys which are to be passed to a given event. The structure must match the signature of the event, or a warning will be emitted.
- Added a templated TGenericKeyArea, TKeyFrameManipulator and TCurveInterface that allow to generic manipulation of keyframe section data. In time we will port the other key areas over to this representation.
- This new architecture affords the common manipulation of time-based keyframes in a value-agnostic manner.
Change 3172935 on 2016/10/24 by Max.Preussner
MediaPlayerEditor: Fixed MediaPlayer asset not being dirtied when creating media sound wave or texture for it
Change 3173947 on 2016/10/25 by Max.Preussner
SlateRemote: Disabled plug-in, but enabled server by default
Change 3174510 on 2016/10/26 by Max.Chen
Sequencer: Fix slomo track crash
#jira UE-37802
Change 3174698 on 2016/10/26 by Andrew.Rodham
UMG: Fixed objects bound to a panel slot animating their slot's content instead of the slot itself
#jira UE-37775
Change 3174780 on 2016/10/26 by Max.Preussner
MediaAssets: Accepting decoder defined buffer dimensions for RGB buffers
Change 3174789 on 2016/10/26 by Max.Preussner
MediaPlayerEditor: Showing desired player name instead of current player name if no media loaded
Change 3174817 on 2016/10/26 by Max.Preussner
WmfMedia: Added support for Motion JPEG (MJPG)
Change 3174825 on 2016/10/26 by Max.Preussner
WmfMedia: Added support for non-RGB32 uncompressed formats
Change 3174834 on 2016/10/26 by Max.Preussner
MediaPlayerAssets: Allow pausing while buffering media
Change 3174886 on 2016/10/26 by Andrew.Rodham
Core: Fixed range test that was testing incorrect behavior
Change 3174889 on 2016/10/26 by Andrew.Rodham
Sequencer: Fixed AssignActor behavior
- Also ensure that cached object state is invalidated when playback context changes
#jira UE-37798
Change 3174905 on 2016/10/26 by Andrew.Rodham
Sequencer: Changed assert when failing to create an audio component to a log message
- Audio no longer plays when GEngine->UseSound() is false
#jira UE-37772
Change 3174980 on 2016/10/26 by Andrew.Rodham
Sequencer: Remove warning when event endpoint could not be found for a given context
#jira UE-37824
Change 3175001 on 2016/10/26 by Andrew.Rodham
Sequencer: Evaluate sequence with EMovieScenePlaybackStatus::Jumping on Pause.
- Also protect Pause() against reentrancy when being called from an event
Change 3175012 on 2016/10/26 by Max.Chen
Sequence Recorder: Fixes an empty working and view range after recording.
On StopRecording() update playback range after nullifying the current sequence so that the playback range isn't empty.
Added SetViewRange and SetWorkingRange.
#jira UE-34191
Change 3177760 on 2016/10/28 by Max.Chen
Sequence Recorder: Don't update the current sequence name if it's already set. This fixes a bug where if you pass in a sequence name to record to, it gets reset to the name in the sequence recorder settings.
#jira UE-37808
Change 3178529 on 2016/10/28 by Max.Chen
Matinee to Level Sequence: Added interface to extend the matinee to level sequence converter
#jira UE-37328
#2864
[CL 3178562 by Max Chen in Main branch]
2016-10-28 15:04:38 -04:00
|
|
|
TSharedPtr<IMessageAttachment, ESPMode::ThreadSafe> Attachment = Context->GetAttachment();
|
2014-10-08 16:57:50 -04:00
|
|
|
|
|
|
|
|
if (Attachment.IsValid())
|
|
|
|
|
{
|
|
|
|
|
FArchive* FileReader = Attachment->CreateReader();
|
|
|
|
|
|
|
|
|
|
if (FileReader != nullptr)
|
|
|
|
|
{
|
|
|
|
|
FString DeploymentFolder = FPaths::EngineIntermediateDir() / TEXT("Deploy") / Message.TransactionId.ToString();
|
|
|
|
|
FString TargetPath = DeploymentFolder / Message.TargetFileName;
|
|
|
|
|
|
|
|
|
|
StoreDeployedFile(FileReader, TargetPath);
|
|
|
|
|
|
|
|
|
|
delete FileReader;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::HandleDeployCommitMessage(const FTargetDeviceServiceDeployCommit& Message, const IMessageContextRef& Context)
|
|
|
|
|
{
|
|
|
|
|
if (!Running)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ITargetDevicePtr TargetDevice = GetDevice(Message.Variant);
|
|
|
|
|
|
|
|
|
|
if (TargetDevice.IsValid())
|
|
|
|
|
{
|
|
|
|
|
FString SourceFolder = FPaths::EngineIntermediateDir() / TEXT("Deploy") / Message.TransactionId.ToString();
|
|
|
|
|
FString OutAppId;
|
|
|
|
|
|
|
|
|
|
bool Succeeded = TargetDevice->Deploy(SourceFolder, OutAppId);
|
|
|
|
|
|
|
|
|
|
IFileManager::Get().DeleteDirectory(*SourceFolder, false, true);
|
|
|
|
|
MessageEndpoint->Send(new FTargetDeviceServiceDeployFinished(Message.Variant, OutAppId, Succeeded, Message.TransactionId), Context->GetSender());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::HandleLaunchAppMessage(const FTargetDeviceServiceLaunchApp& Message, const IMessageContextRef& Context)
|
|
|
|
|
{
|
|
|
|
|
if (!Running)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ITargetDevicePtr TargetDevice = GetDevice(Message.Variant);
|
|
|
|
|
|
|
|
|
|
if (TargetDevice.IsValid())
|
|
|
|
|
{
|
|
|
|
|
uint32 ProcessId;
|
|
|
|
|
bool Succeeded = TargetDevice->Launch(Message.AppID, (EBuildConfigurations::Type)Message.BuildConfiguration, EBuildTargets::Game, Message.Params, &ProcessId);
|
|
|
|
|
|
|
|
|
|
if (MessageEndpoint.IsValid())
|
|
|
|
|
{
|
|
|
|
|
MessageEndpoint->Send(new FTargetDeviceServiceLaunchFinished(Message.AppID, ProcessId, Succeeded), Context->GetSender());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
2014-09-09 12:20:43 -04:00
|
|
|
void FTargetDeviceService::HandlePingMessage(const FTargetDeviceServicePing& InMessage, const IMessageContextRef& Context)
|
|
|
|
|
{
|
|
|
|
|
if (!Running)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
2015-09-17 21:14:52 -04:00
|
|
|
if (!Shared && (InMessage.HostUser != FPlatformProcess::UserName(false)))
|
2014-09-09 12:20:43 -04:00
|
|
|
{
|
2014-10-08 16:57:50 -04:00
|
|
|
return;
|
2014-09-09 12:20:43 -04:00
|
|
|
}
|
2014-10-08 16:57:50 -04:00
|
|
|
|
|
|
|
|
ITargetDevicePtr DefaultDevice = GetDevice(); // Default Device is needed here!
|
|
|
|
|
|
|
|
|
|
if (DefaultDevice.IsValid())
|
|
|
|
|
{
|
|
|
|
|
const FString& PlatformName = DefaultDevice->GetTargetPlatform().PlatformName();
|
|
|
|
|
const PlatformInfo::FPlatformInfo* VanillaInfo = PlatformInfo::FindVanillaPlatformInfo(FName(*PlatformName));
|
|
|
|
|
|
|
|
|
|
FTargetDeviceServicePong* Message = new FTargetDeviceServicePong();
|
|
|
|
|
|
|
|
|
|
Message->Name = DefaultDevice->GetName();
|
2014-10-10 20:14:21 -04:00
|
|
|
Message->Type = TargetDeviceTypes::ToString(DefaultDevice->GetDeviceType());
|
2014-10-08 16:57:50 -04:00
|
|
|
Message->HostName = FPlatformProcess::ComputerName();
|
2015-09-17 21:14:52 -04:00
|
|
|
Message->HostUser = FPlatformProcess::UserName(false);
|
2014-10-08 16:57:50 -04:00
|
|
|
Message->Connected = DefaultDevice->IsConnected();
|
|
|
|
|
Message->Make = TEXT("@todo");
|
|
|
|
|
Message->Model = TEXT("@todo");
|
|
|
|
|
DefaultDevice->GetUserCredentials(Message->DeviceUser, Message->DeviceUserPassword);
|
|
|
|
|
Message->Shared = Shared;
|
|
|
|
|
Message->SupportsMultiLaunch = DefaultDevice->SupportsFeature(ETargetDeviceFeatures::MultiLaunch);
|
|
|
|
|
Message->SupportsPowerOff = DefaultDevice->SupportsFeature(ETargetDeviceFeatures::PowerOff);
|
|
|
|
|
Message->SupportsPowerOn = DefaultDevice->SupportsFeature(ETargetDeviceFeatures::PowerOn);
|
|
|
|
|
Message->SupportsReboot = DefaultDevice->SupportsFeature(ETargetDeviceFeatures::Reboot);
|
|
|
|
|
Message->SupportsVariants = DefaultDevice->GetTargetPlatform().SupportsVariants();
|
|
|
|
|
Message->DefaultVariant = FName(DefaultDevice->GetTargetPlatform().PlatformName().GetCharArray().GetData());
|
|
|
|
|
|
|
|
|
|
// Add the data for all the flavors
|
|
|
|
|
Message->Variants.SetNumZeroed(TargetDevicePtrs.Num());
|
|
|
|
|
|
|
|
|
|
int Index = 0;
|
|
|
|
|
for (auto TargetDeviceIt = TargetDevicePtrs.CreateIterator(); TargetDeviceIt; ++TargetDeviceIt, ++Index)
|
|
|
|
|
{
|
|
|
|
|
const ITargetDevicePtr& TargetDevice = TargetDeviceIt.Value().Pin();
|
|
|
|
|
const PlatformInfo::FPlatformInfo& Info = TargetDevice->GetTargetPlatform().GetPlatformInfo();
|
|
|
|
|
|
|
|
|
|
FTargetDeviceVariant& Variant = Message->Variants[Index];
|
|
|
|
|
|
|
|
|
|
Variant.DeviceID = TargetDevice->GetId().ToString();
|
|
|
|
|
Variant.VariantName = TargetDeviceIt.Key();
|
|
|
|
|
Variant.TargetPlatformName = TargetDevice->GetTargetPlatform().PlatformName();
|
|
|
|
|
Variant.TargetPlatformId = Info.TargetPlatformName;
|
|
|
|
|
Variant.VanillaPlatformId = Info.VanillaPlatformName;
|
|
|
|
|
Variant.PlatformDisplayName = Info.DisplayName.ToString();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
MessageEndpoint->Send(Message, Context->GetSender());
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::HandlePowerOffMessage( const FTargetDeviceServicePowerOff& Message, const IMessageContextRef& Context )
|
|
|
|
|
{
|
|
|
|
|
if (!Running)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ITargetDevicePtr TargetDevice = GetDevice(); // Any Device is fine here
|
|
|
|
|
|
|
|
|
|
if (TargetDevice.IsValid())
|
|
|
|
|
{
|
|
|
|
|
TargetDevice->PowerOff(Message.Force);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::HandlePowerOnMessage( const FTargetDeviceServicePowerOn& Message, const IMessageContextRef& Context )
|
|
|
|
|
{
|
|
|
|
|
if (!Running)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ITargetDevicePtr TargetDevice = GetDevice(); // Any Device is fine here
|
|
|
|
|
|
|
|
|
|
if (TargetDevice.IsValid())
|
|
|
|
|
{
|
|
|
|
|
TargetDevice->PowerOn();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::HandleRebootMessage( const FTargetDeviceServiceReboot& Message, const IMessageContextRef& Context )
|
|
|
|
|
{
|
|
|
|
|
if (!Running)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ITargetDevicePtr TargetDevice = GetDevice(); // Any Device is fine here
|
|
|
|
|
|
|
|
|
|
if (TargetDevice.IsValid())
|
|
|
|
|
{
|
|
|
|
|
TargetDevice->Reboot();
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void FTargetDeviceService::HandleRunExecutableMessage(const FTargetDeviceServiceRunExecutable& Message, const IMessageContextRef& Context)
|
|
|
|
|
{
|
|
|
|
|
if (!Running)
|
|
|
|
|
{
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
ITargetDevicePtr TargetDevice = GetDevice(Message.Variant);
|
|
|
|
|
|
|
|
|
|
if (TargetDevice.IsValid())
|
|
|
|
|
{
|
|
|
|
|
uint32 OutProcessId;
|
|
|
|
|
bool Succeeded = TargetDevice->Run(Message.ExecutablePath, Message.Params, &OutProcessId);
|
|
|
|
|
|
|
|
|
|
MessageEndpoint->Send(new FTargetDeviceServiceRunFinished(Message.Variant, Message.ExecutablePath, OutProcessId, Succeeded), Context->GetSender());
|
|
|
|
|
}
|
|
|
|
|
}
|