Skip to content

Commit ea6438c

Browse files
author
Roberto De Ioris
committed
added structure for video grabbing of viewports
1 parent 8a7ac70 commit ea6438c

5 files changed

Lines changed: 84 additions & 1 deletion

File tree

‎Source/UnrealEnginePython/Private/Slate/UEPySPythonEditorViewport.h‎

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,10 @@ class SPythonEditorViewport : public SEditorViewport, public ICommonEditorViewpo
4242
return PreviewScene;
4343
}
4444

45+
TSharedPtr<FSceneViewport> GetSceneViewport() {
46+
return SceneViewport;
47+
}
48+
4549
virtual void OnFloatingButtonClicked() override {};
4650
virtual TSharedPtr<FExtender> GetExtenders() const override;
4751
virtual TSharedRef<SEditorViewport> GetViewportWidget() override;

‎Source/UnrealEnginePython/Private/UEPyModule.cpp‎

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@
3232
#include "UObject/UEPyController.h"
3333
#include "UObject/UEPyHUD.h"
3434
#include "UObject/UEPyAnimSequence.h"
35+
#include "UObject/UEPyCapture.h"
3536

3637

3738
#include "UEPyAssetUserData.h"
@@ -684,6 +685,11 @@ static PyMethodDef ue_PyUObject_methods[] = {
684685
{ "get_overlapping_actors", (PyCFunction)py_ue_get_overlapping_actors, METH_VARARGS, "" },
685686
{ "actor_set_level_sequence", (PyCFunction)py_ue_actor_set_level_sequence, METH_VARARGS, "" },
686687

688+
// MovieSceneCapture
689+
{ "capture_initialize", (PyCFunction)py_ue_capture_initialize, METH_VARARGS, "" },
690+
{ "capture_start", (PyCFunction)py_ue_capture_start, METH_VARARGS, "" },
691+
{ "capture_stop", (PyCFunction)py_ue_capture_stop, METH_VARARGS, "" },
692+
687693
// Pawn
688694
{ "get_controller", (PyCFunction)py_ue_pawn_get_controller, METH_VARARGS, "" },
689695

Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
#include "UnrealEnginePythonPrivatePCH.h"
2+
3+
#include "Runtime/MovieSceneCapture/Public/MovieSceneCapture.h"
4+
5+
6+
PyObject *py_ue_capture_initialize(ue_PyUObject * self, PyObject * args) {
7+
8+
ue_py_check(self);
9+
10+
PyObject *py_widget;
11+
12+
if (!PyArg_ParseTuple(args, "O", &py_widget)) {
13+
return nullptr;
14+
}
15+
16+
UMovieSceneCapture *capture = ue_py_check_type<UMovieSceneCapture>(self);
17+
if (!capture)
18+
return PyErr_Format(PyExc_Exception, "uobject is not a UMovieSceneCapture");
19+
20+
ue_PySWidget *s_widget = py_ue_is_swidget(py_widget);
21+
if (!s_widget)
22+
return PyErr_Format(PyExc_Exception, "argument is not a SWidget");
23+
24+
if (s_widget->s_widget->GetType().Compare(FName("SPythonEditorViewport")) == 0) {
25+
TSharedRef<SPythonEditorViewport> s_viewport = StaticCastSharedRef<SPythonEditorViewport>(s_widget->s_widget);
26+
capture->Initialize(s_viewport->GetSceneViewport());
27+
}
28+
else {
29+
return PyErr_Format(PyExc_Exception, "argument is not a supported Viewport-based SWidget");
30+
}
31+
32+
capture->StartWarmup();
33+
34+
35+
Py_RETURN_NONE;
36+
}
37+
38+
PyObject *py_ue_capture_start(ue_PyUObject * self, PyObject * args) {
39+
40+
ue_py_check(self);
41+
42+
UMovieSceneCapture *capture = ue_py_check_type<UMovieSceneCapture>(self);
43+
if (!capture)
44+
return PyErr_Format(PyExc_Exception, "uobject is not a UMovieSceneCapture");
45+
46+
capture->StartCapture();
47+
48+
Py_RETURN_NONE;
49+
}
50+
51+
PyObject *py_ue_capture_stop(ue_PyUObject * self, PyObject * args) {
52+
53+
ue_py_check(self);
54+
55+
UMovieSceneCapture *capture = ue_py_check_type<UMovieSceneCapture>(self);
56+
if (!capture)
57+
return PyErr_Format(PyExc_Exception, "uobject is not a UMovieSceneCapture");
58+
59+
capture->Finalize();
60+
capture->Close();
61+
62+
Py_RETURN_NONE;
63+
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
#pragma once
2+
3+
4+
#include "UnrealEnginePython.h"
5+
6+
7+
PyObject *py_ue_capture_initialize(ue_PyUObject *, PyObject *);
8+
PyObject *py_ue_capture_start(ue_PyUObject *, PyObject *);
9+
PyObject *py_ue_capture_stop(ue_PyUObject *, PyObject *);

‎Source/UnrealEnginePython/UnrealEnginePython.Build.cs‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,8 @@ public UnrealEnginePython(TargetInfo Target)
119119
"AppFramework",
120120
"RHI",
121121
"Voice",
122-
"RenderCore"
122+
"RenderCore",
123+
"MovieSceneCapture"
123124
// ... add private dependencies that you statically link with here ...
124125
}
125126
);

0 commit comments

Comments
 (0)