Skip to content

Commit 0bec705

Browse files
committed
Move MovieWriterMJPEG class to jpg module it depends on
Fixes #90932.
1 parent 8f78e75 commit 0bec705

File tree

6 files changed

+33
-21
lines changed

6 files changed

+33
-21
lines changed

doc/classes/MovieWriter.xml

+1
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
If you need to encode to a different format or pipe a stream through third-party software, you can extend the [MovieWriter] class to create your own movie writers. This should typically be done using GDExtension for performance reasons.
1212
[b]Editor usage:[/b] A default movie file path can be specified in [member ProjectSettings.editor/movie_writer/movie_file]. Alternatively, for running single scenes, a [code]movie_file[/code] metadata can be added to the root node, specifying the path to a movie file that will be used when recording that scene. Once a path is set, click the video reel icon in the top-right corner of the editor to enable Movie Maker mode, then run any scene as usual. The engine will start recording as soon as the splash screen is finished, and it will only stop recording when the engine quits. Click the video reel icon again to disable Movie Maker mode. Note that toggling Movie Maker mode does not affect project instances that are already running.
1313
[b]Note:[/b] MovieWriter is available for use in both the editor and exported projects, but it is [i]not[/i] designed for use by end users to record videos while playing. Players wishing to record gameplay videos should install tools such as [url=https://obsproject.com/]OBS Studio[/url] or [url=https://www.maartenbaert.be/simplescreenrecorder/]SimpleScreenRecorder[/url] instead.
14+
[b]Note:[/b] The MJPEG support ([code].avi[/code] file extension) depends on the [code]jpg[/code] module being enabled at compile time (default behavior).
1415
</description>
1516
<tutorials>
1617
</tutorials>

main/main.cpp

-1
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,6 @@
7171
#include "servers/camera_server.h"
7272
#include "servers/display_server.h"
7373
#include "servers/movie_writer/movie_writer.h"
74-
#include "servers/movie_writer/movie_writer_mjpeg.h"
7574
#include "servers/register_server_types.h"
7675
#include "servers/rendering/rendering_server_default.h"
7776
#include "servers/text/text_server_dummy.h"

modules/jpg/register_types.cpp

+31-10
Original file line numberDiff line numberDiff line change
@@ -31,23 +31,44 @@
3131
#include "register_types.h"
3232

3333
#include "image_loader_libjpeg_turbo.h"
34+
#include "movie_writer_mjpeg.h"
3435

3536
static Ref<ImageLoaderLibJPEGTurbo> image_loader_libjpeg_turbo;
37+
static MovieWriterMJPEG *writer_mjpeg = nullptr;
3638

3739
void initialize_jpg_module(ModuleInitializationLevel p_level) {
38-
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
39-
return;
40-
}
40+
switch (p_level) {
41+
case MODULE_INITIALIZATION_LEVEL_SERVERS: {
42+
if (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
43+
writer_mjpeg = memnew(MovieWriterMJPEG);
44+
MovieWriter::add_writer(writer_mjpeg);
45+
}
46+
} break;
47+
48+
case MODULE_INITIALIZATION_LEVEL_SCENE: {
49+
image_loader_libjpeg_turbo.instantiate();
50+
ImageLoader::add_image_format_loader(image_loader_libjpeg_turbo);
51+
} break;
4152

42-
image_loader_libjpeg_turbo.instantiate();
43-
ImageLoader::add_image_format_loader(image_loader_libjpeg_turbo);
53+
default:
54+
break;
55+
}
4456
}
4557

4658
void uninitialize_jpg_module(ModuleInitializationLevel p_level) {
47-
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
48-
return;
49-
}
59+
switch (p_level) {
60+
case MODULE_INITIALIZATION_LEVEL_SCENE: {
61+
ImageLoader::remove_image_format_loader(image_loader_libjpeg_turbo);
62+
image_loader_libjpeg_turbo.unref();
63+
} break;
64+
65+
case MODULE_INITIALIZATION_LEVEL_SERVERS: {
66+
if (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
67+
memdelete(writer_mjpeg);
68+
}
69+
} break;
5070

51-
ImageLoader::remove_image_format_loader(image_loader_libjpeg_turbo);
52-
image_loader_libjpeg_turbo.unref();
71+
default:
72+
break;
73+
}
5374
}

servers/register_server_types.cpp

+1-10
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
#include "display/native_menu.h"
6060
#include "display_server.h"
6161
#include "movie_writer/movie_writer.h"
62-
#include "movie_writer/movie_writer_mjpeg.h"
6362
#include "movie_writer/movie_writer_pngwav.h"
6463
#include "rendering/renderer_rd/framebuffer_cache_rd.h"
6564
#include "rendering/renderer_rd/storage_rd/render_data_rd.h"
@@ -135,7 +134,6 @@ static bool has_server_feature_callback(const String &p_feature) {
135134
return false;
136135
}
137136

138-
static MovieWriterMJPEG *writer_mjpeg = nullptr;
139137
static MovieWriterPNGWAV *writer_pngwav = nullptr;
140138

141139
void register_server_types() {
@@ -346,11 +344,6 @@ void register_server_types() {
346344
GDREGISTER_ABSTRACT_CLASS(XRTracker);
347345
#endif // XR_DISABLED
348346

349-
if (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
350-
writer_mjpeg = memnew(MovieWriterMJPEG);
351-
MovieWriter::add_writer(writer_mjpeg);
352-
}
353-
354347
if (GD_IS_CLASS_ENABLED(MovieWriterPNGWAV)) {
355348
writer_pngwav = memnew(MovieWriterPNGWAV);
356349
MovieWriter::add_writer(writer_pngwav);
@@ -364,12 +357,10 @@ void unregister_server_types() {
364357

365358
ServersDebugger::deinitialize();
366359
memdelete(shader_types);
367-
if (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
368-
memdelete(writer_mjpeg);
369-
}
370360
if (GD_IS_CLASS_ENABLED(MovieWriterPNGWAV)) {
371361
memdelete(writer_pngwav);
372362
}
363+
373364
OS::get_singleton()->benchmark_end_measure("Servers", "Unregister Extensions");
374365
}
375366

0 commit comments

Comments
 (0)