Skip to content

Move MovieWriterMJPEG class to jpg module it depends on #106013

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions doc/classes/MovieWriter.xml
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
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.
[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.
[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.
[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).
</description>
<tutorials>
</tutorials>
Expand Down
1 change: 0 additions & 1 deletion main/main.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,6 @@
#include "servers/camera_server.h"
#include "servers/display_server.h"
#include "servers/movie_writer/movie_writer.h"
#include "servers/movie_writer/movie_writer_mjpeg.h"
#include "servers/register_server_types.h"
#include "servers/rendering/rendering_server_default.h"
#include "servers/text/text_server_dummy.h"
Expand Down
41 changes: 31 additions & 10 deletions modules/jpg/register_types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,23 +31,44 @@
#include "register_types.h"

#include "image_loader_libjpeg_turbo.h"
#include "movie_writer_mjpeg.h"

static Ref<ImageLoaderLibJPEGTurbo> image_loader_libjpeg_turbo;
static MovieWriterMJPEG *writer_mjpeg = nullptr;

void initialize_jpg_module(ModuleInitializationLevel p_level) {
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
return;
}
switch (p_level) {
case MODULE_INITIALIZATION_LEVEL_SERVERS: {
if (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
writer_mjpeg = memnew(MovieWriterMJPEG);
MovieWriter::add_writer(writer_mjpeg);
}
} break;

case MODULE_INITIALIZATION_LEVEL_SCENE: {
image_loader_libjpeg_turbo.instantiate();
ImageLoader::add_image_format_loader(image_loader_libjpeg_turbo);
} break;

image_loader_libjpeg_turbo.instantiate();
ImageLoader::add_image_format_loader(image_loader_libjpeg_turbo);
default:
break;
}
}

void uninitialize_jpg_module(ModuleInitializationLevel p_level) {
if (p_level != MODULE_INITIALIZATION_LEVEL_SCENE) {
return;
}
switch (p_level) {
case MODULE_INITIALIZATION_LEVEL_SCENE: {
ImageLoader::remove_image_format_loader(image_loader_libjpeg_turbo);
image_loader_libjpeg_turbo.unref();
} break;

case MODULE_INITIALIZATION_LEVEL_SERVERS: {
if (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
memdelete(writer_mjpeg);
}
} break;

ImageLoader::remove_image_format_loader(image_loader_libjpeg_turbo);
image_loader_libjpeg_turbo.unref();
default:
break;
}
}
11 changes: 1 addition & 10 deletions servers/register_server_types.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,6 @@
#include "display/native_menu.h"
#include "display_server.h"
#include "movie_writer/movie_writer.h"
#include "movie_writer/movie_writer_mjpeg.h"
#include "movie_writer/movie_writer_pngwav.h"
#include "rendering/renderer_rd/framebuffer_cache_rd.h"
#include "rendering/renderer_rd/storage_rd/render_data_rd.h"
Expand Down Expand Up @@ -135,7 +134,6 @@ static bool has_server_feature_callback(const String &p_feature) {
return false;
}

static MovieWriterMJPEG *writer_mjpeg = nullptr;
static MovieWriterPNGWAV *writer_pngwav = nullptr;

void register_server_types() {
Expand Down Expand Up @@ -346,11 +344,6 @@ void register_server_types() {
GDREGISTER_ABSTRACT_CLASS(XRTracker);
#endif // XR_DISABLED

if (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
writer_mjpeg = memnew(MovieWriterMJPEG);
MovieWriter::add_writer(writer_mjpeg);
}

if (GD_IS_CLASS_ENABLED(MovieWriterPNGWAV)) {
writer_pngwav = memnew(MovieWriterPNGWAV);
MovieWriter::add_writer(writer_pngwav);
Expand All @@ -364,12 +357,10 @@ void unregister_server_types() {

ServersDebugger::deinitialize();
memdelete(shader_types);
if (GD_IS_CLASS_ENABLED(MovieWriterMJPEG)) {
memdelete(writer_mjpeg);
}
if (GD_IS_CLASS_ENABLED(MovieWriterPNGWAV)) {
memdelete(writer_pngwav);
}

OS::get_singleton()->benchmark_end_measure("Servers", "Unregister Extensions");
}

Expand Down