Add Ogg Theora support to MovieWriter

Movie Maker mode can now record files in `.ogv` format, which can be
directly viewed in Godot's VideoStreamPlayer node along with most
video players. This is a lossy format with inter-frame compression,
unlike AVI + MJPEG which only performs intra-frame compression.

Co-authored-by: Hugo Locurcio <hugo.locurcio@hugo.pro>
Co-authored-by: Leo de Penning <leo.depenning@illuminoo.com>
This commit is contained in:
Bernat Arlandis
2025-06-07 00:40:41 +02:00
parent 26df04377e
commit a16b04fe07
13 changed files with 774 additions and 53 deletions

View File

@@ -13,61 +13,68 @@ thirdparty_obj = []
if env["builtin_libtheora"]:
thirdparty_dir = "#thirdparty/libtheora/"
thirdparty_sources = [
# "analyze.c",
# "apiwrapper.c",
"bitpack.c",
# "collect.c",
# "decapiwrapper.c",
"decinfo.c",
"decode.c",
"dequant.c",
# "encapiwrapper.c",
# "encfrag.c",
# "encinfo.c",
# "encode.c",
# "encoder_disabled.c",
# "enquant.c",
# "fdct.c",
"fragment.c",
"huffdec.c",
# "huffenc.c",
"idct.c",
"info.c",
"internal.c",
# "mathops.c",
# "mcenc.c",
"quant.c",
# "rate.c",
"state.c",
# "tokenize.c",
]
if env.editor_build:
thirdparty_sources += [
"analyze.c",
"encfrag.c",
"encinfo.c",
"encode.c",
"enquant.c",
"fdct.c",
"huffenc.c",
"mathops.c",
"mcenc.c",
"rate.c",
"tokenize.c",
]
thirdparty_sources_x86 = [
# "x86/mmxencfrag.c",
# "x86/mmxfdct.c",
"x86/mmxfrag.c",
"x86/mmxidct.c",
"x86/mmxstate.c",
# "x86/sse2encfrag.c",
# "x86/sse2fdct.c",
"x86/sse2idct.c",
"x86/x86cpu.c",
# "x86/x86enc.c",
# "x86/x86enquant.c"
"x86/x86state.c",
]
if env.editor_build:
thirdparty_sources_x86 += [
"x86/mmxencfrag.c",
"x86/mmxfdct.c",
"x86/sse2encfrag.c",
"x86/sse2fdct.c",
"x86/x86enc.c",
"x86/x86enquant.c",
]
thirdparty_sources_x86_vc = [
# "x86_vc/mmxencfrag.c",
# "x86_vc/mmxfdct.c",
"x86_vc/mmxfrag.c",
"x86_vc/mmxidct.c",
"x86_vc/mmxstate.c",
"x86_vc/x86cpu.c",
# "x86_vc/x86enc.c",
"x86_vc/x86state.c",
]
if env.editor_build:
thirdparty_sources_x86_vc += [
"x86_vc/mmxencfrag.c",
"x86_vc/mmxfdct.c",
"x86_vc/x86enc.c",
]
if env["x86_libtheora_opt_gcc"]:
thirdparty_sources += thirdparty_sources_x86
@@ -98,6 +105,10 @@ if env["builtin_libtheora"]:
module_obj = []
env_theora.add_source_files(module_obj, "*.cpp")
if env.editor_build:
env_theora.add_source_files(module_obj, "editor/*.cpp")
env.modules_sources += module_obj
# Needed to force rebuilding the module files when the thirdparty library is updated.