theora: Move to a module and split thirdparty lib

Same rationale as the previous commits.
This commit is contained in:
Rémi Verschelde 2016-10-13 19:40:40 +02:00
parent da09c6131b
commit cfcc8a20e8
88 changed files with 199 additions and 178 deletions

View File

@ -121,11 +121,10 @@ opts.Add('tools','Build Tools (Including Editor): (yes/no)','yes')
opts.Add('gdscript','Build GDSCript support: (yes/no)','yes') opts.Add('gdscript','Build GDSCript support: (yes/no)','yes')
opts.Add('libogg','Ogg library for ogg container support (system/builtin)','builtin') opts.Add('libogg','Ogg library for ogg container support (system/builtin)','builtin')
opts.Add('libvorbis','Ogg Vorbis library for vorbis support (system/builtin)','builtin') opts.Add('libvorbis','Ogg Vorbis library for vorbis support (system/builtin)','builtin')
opts.Add('libtheora','Theora library for theora module (system/builtin)','builtin')
opts.Add('opus','Opus and opusfile library for Opus format support: (system/builtin)','builtin') opts.Add('opus','Opus and opusfile library for Opus format support: (system/builtin)','builtin')
opts.Add('minizip','Build Minizip Archive Support: (yes/no)','yes') opts.Add('minizip','Build Minizip Archive Support: (yes/no)','yes')
opts.Add('squish','Squish BC Texture Compression in editor (yes/no)','yes') opts.Add('squish','Squish BC Texture Compression in editor (yes/no)','yes')
opts.Add('theora','Theora Video (yes/no)','yes')
opts.Add('theoralib','Theora Video (yes/no)','no')
opts.Add('freetype','Freetype support in editor','builtin') opts.Add('freetype','Freetype support in editor','builtin')
opts.Add('xml','XML Save/Load support (yes/no)','yes') opts.Add('xml','XML Save/Load support (yes/no)','yes')
opts.Add('libpng','libpng library for image loader support (system/builtin)','builtin') opts.Add('libpng','libpng library for image loader support (system/builtin)','builtin')
@ -331,13 +330,6 @@ if selected_platform in platform_list:
if (env_base['squish']=='yes'): if (env_base['squish']=='yes'):
env.Append(CPPFLAGS=['-DSQUISH_ENABLED']); env.Append(CPPFLAGS=['-DSQUISH_ENABLED']);
if (env['theora']=='yes'):
env['theoralib']='yes'
env.Append(CPPFLAGS=['-DTHEORA_ENABLED']);
if (env['theoralib']=='yes'):
env.Append(CPPFLAGS=['-DTHEORALIB_ENABLED']);
if (env['tools']=='yes'): if (env['tools']=='yes'):
env.Append(CPPFLAGS=['-DTOOLS_ENABLED']) env.Append(CPPFLAGS=['-DTOOLS_ENABLED'])
if (env['disable_3d']=='yes'): if (env['disable_3d']=='yes'):

2
drivers/SCsub vendored
View File

@ -24,8 +24,6 @@ SConscript("chibi/SCsub");
if (env["tools"]=="yes"): if (env["tools"]=="yes"):
SConscript("convex_decomp/SCsub"); SConscript("convex_decomp/SCsub");
if (env["theoralib"]=="yes"):
SConscript("theora/SCsub");
if (env['musepack']=='yes'): if (env['musepack']=='yes'):
SConscript("mpc/SCsub"); SConscript("mpc/SCsub");
if (env["squish"]=="yes" and env["tools"]=="yes"): if (env["squish"]=="yes" and env["tools"]=="yes"):

View File

@ -28,6 +28,7 @@
/*************************************************************************/ /*************************************************************************/
#include "register_driver_types.h" #include "register_driver_types.h"
#include "core/math/geometry.h"
#include "png/image_loader_png.h" #include "png/image_loader_png.h"
#include "png/resource_saver_png.h" #include "png/resource_saver_png.h"
#include "chibi/event_stream_chibi.h" #include "chibi/event_stream_chibi.h"
@ -45,11 +46,6 @@
#include "platform/windows/export/export.h" #include "platform/windows/export/export.h"
#endif #endif
#ifdef THEORA_ENABLED
#include "theora/video_stream_theora.h"
#endif
#include "drivers/nrex/regex.h" #include "drivers/nrex/regex.h"
#ifdef MUSEPACK_ENABLED #ifdef MUSEPACK_ENABLED
@ -59,10 +55,6 @@
static ImageLoaderPNG *image_loader_png=NULL; static ImageLoaderPNG *image_loader_png=NULL;
static ResourceSaverPNG *resource_saver_png=NULL; static ResourceSaverPNG *resource_saver_png=NULL;
#ifdef THEORA_ENABLED
static ResourceFormatLoaderVideoStreamTheora* theora_stream_loader = NULL;
#endif
#ifdef MUSEPACK_ENABLED #ifdef MUSEPACK_ENABLED
static ResourceFormatLoaderAudioStreamMPC * mpc_stream_loader=NULL; static ResourceFormatLoaderAudioStreamMPC * mpc_stream_loader=NULL;
#endif #endif
@ -103,13 +95,6 @@ void register_driver_types() {
#endif #endif
#ifdef THEORA_ENABLED
theora_stream_loader = memnew( ResourceFormatLoaderVideoStreamTheora );
ResourceLoader::add_resource_format_loader(theora_stream_loader);
ObjectTypeDB::register_type<VideoStreamTheora>();
#endif
#ifdef TOOLS_ENABLED #ifdef TOOLS_ENABLED
#ifdef SQUISH_ENABLED #ifdef SQUISH_ENABLED
@ -123,11 +108,6 @@ void register_driver_types() {
void unregister_driver_types() { void unregister_driver_types() {
#ifdef THEORA_ENABLED
memdelete (theora_stream_loader);
#endif
#ifdef MUSEPACK_ENABLED #ifdef MUSEPACK_ENABLED
memdelete (mpc_stream_loader); memdelete (mpc_stream_loader);

View File

@ -1,65 +0,0 @@
Import('env')
sources = [
#"theora/analyze.c",
#"theora/apiwrapper.c",
"theora/bitpack.c",
"theora/cpu.c",
#"theora/decapiwrapper.c",
"theora/decinfo.c",
"theora/decode.c",
"theora/dequant.c",
#"theora/encapiwrapper.c",
#"theora/encfrag.c",
#"theora/encinfo.c",
#"theora/encode.c",
#"theora/encoder_disabled.c",
#"theora/enquant.c",
#"theora/fdct.c",
"theora/fragment.c",
"theora/huffdec.c",
#"theora/huffenc.c",
"theora/idct.c",
"theora/info.c",
"theora/internal.c",
#"theora/mathops.c",
#"theora/mcenc.c",
"theora/quant.c",
#"theora/rate.c",
"theora/state.c",
#"theora/tokenize.c",
"theora/video_stream_theora.cpp",
]
sources_x86 = [
#"theora/x86/mmxencfrag.c",
#"theora/x86/mmxfdct.c",
"theora/x86/mmxfrag.c",
"theora/x86/mmxidct.c",
"theora/x86/mmxstate.c",
#"theora/x86/sse2fdct.c",
#"theora/x86/x86enc.c",
"theora/x86/x86state.c",
]
sources_x86_vc = [
#"theora/x86_vc/mmxencfrag.c",
#"theora/x86_vc/mmxfdct.c",
"theora/x86_vc/mmxfrag.c",
"theora/x86_vc/mmxidct.c",
"theora/x86_vc/mmxstate.c",
#"theora/x86_vc/x86enc.c",
"theora/x86_vc/x86state.c",
]
env.drivers_sources += sources
if (env["x86_opt_gcc"]):
env.drivers_sources += sources_x86
if (env["x86_opt_vc"]):
env.drivers_sources += sources_x86_vc
if (env["x86_opt_gcc"] or env["x86_opt_vc"]):
Import('env_drivers')
env_drivers.Append(CCFLAGS=["-DOC_X86_ASM"])

View File

@ -1,55 +0,0 @@
# export list for libtheora
_theora_version_string
_theora_version_number
_theora_encode_init
_theora_encode_YUVin
_theora_encode_packetout
_theora_encode_header
_theora_encode_comment
_theora_encode_tables
_theora_decode_header
_theora_decode_init
_theora_decode_packetin
_theora_decode_YUVout
_theora_control
_theora_packet_isheader
_theora_packet_iskeyframe
_theora_granule_shift
_theora_granule_frame
_theora_granule_time
_theora_info_init
_theora_info_clear
_theora_clear
_theora_comment_init
_theora_comment_add
_theora_comment_add_tag
_theora_comment_query
_theora_comment_query_count
_theora_comment_clear
_th_version_string
_th_version_number
_th_decode_headerin
_th_decode_alloc
_th_setup_free
_th_decode_ctl
_th_decode_packetin
_th_decode_ycbcr_out
_th_decode_free
_th_packet_isheader
_th_packet_iskeyframe
_th_granule_frame
_th_granule_time
_th_info_init
_th_info_clear
_th_comment_init
_th_comment_add
_th_comment_add_tag
_th_comment_query
_th_comment_query_count
_th_comment_clear
_th_encode_alloc
_th_encode_ctl
_th_encode_flushheader
_th_encode_packetout
_th_encode_ycbcr_in
_th_encode_free

81
modules/theora/SCsub Normal file
View File

@ -0,0 +1,81 @@
Import('env')
Import('env_modules')
env_theora = env_modules.Clone()
# Thirdparty source files
if (env["libtheora"] != "system"): # builtin
thirdparty_dir = "#thirdparty/libtheora/"
thirdparty_sources = [
"analyze.c",
"apiwrapper.c",
"bitpack.c",
"cpu.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",
]
thirdparty_sources_x86 = [
"x86/mmxencfrag.c",
"x86/mmxfdct.c",
"x86/mmxfrag.c",
"x86/mmxidct.c",
"x86/mmxstate.c",
"x86/sse2fdct.c",
"x86/x86enc.c",
"x86/x86state.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/x86enc.c",
"x86_vc/x86state.c",
]
if (env["x86_opt_gcc"]):
thirdparty_sources += thirdparty_sources_x86
if (env["x86_opt_vc"]):
thirdparty_sources += thirdparty_sources_x86_vc
if (env["x86_opt_gcc"] or env["x86_opt_vc"]):
env_theora.Append(CCFLAGS = ["-DOC_X86_ASM"])
thirdparty_sources = [thirdparty_dir + file for file in thirdparty_sources]
env_theora.add_source_files(env.modules_sources, thirdparty_sources)
env_theora.Append(CPPPATH = [thirdparty_dir])
# also requires libogg and libvorbis
if (env["libogg"] != "system"): # builtin
env_theora.Append(CPPPATH = ["#thirdparty/libogg"])
if (env["libvorbis"] != "system"): # builtin
env_theora.Append(CPPPATH = ["#thirdparty/libvorbis"])
# Godot source files
env_theora.add_source_files(env.modules_sources, "*.cpp")

6
modules/theora/config.py Normal file
View File

@ -0,0 +1,6 @@
def can_build(platform):
return True
def configure(env):
pass

View File

@ -0,0 +1,45 @@
/*************************************************************************/
/* register_types.cpp */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
#include "register_types.h"
#include "video_stream_theora.h"
static ResourceFormatLoaderVideoStreamTheora* theora_stream_loader = NULL;
void register_theora_types() {
theora_stream_loader = memnew( ResourceFormatLoaderVideoStreamTheora );
ResourceLoader::add_resource_format_loader(theora_stream_loader);
ObjectTypeDB::register_type<VideoStreamTheora>();
}
void unregister_theora_types() {
memdelete( theora_stream_loader );
}

View File

@ -0,0 +1,30 @@
/*************************************************************************/
/* register_types.h */
/*************************************************************************/
/* This file is part of: */
/* GODOT ENGINE */
/* http://www.godotengine.org */
/*************************************************************************/
/* Copyright (c) 2007-2016 Juan Linietsky, Ariel Manzur. */
/* */
/* Permission is hereby granted, free of charge, to any person obtaining */
/* a copy of this software and associated documentation files (the */
/* "Software"), to deal in the Software without restriction, including */
/* without limitation the rights to use, copy, modify, merge, publish, */
/* distribute, sublicense, and/or sell copies of the Software, and to */
/* permit persons to whom the Software is furnished to do so, subject to */
/* the following conditions: */
/* */
/* The above copyright notice and this permission notice shall be */
/* included in all copies or substantial portions of the Software. */
/* */
/* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, */
/* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF */
/* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.*/
/* IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY */
/* CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, */
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/
void register_theora_types();
void unregister_theora_types();

View File

@ -26,13 +26,11 @@
/* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */ /* TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE */
/* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */
/*************************************************************************/ /*************************************************************************/
#ifdef THEORA_ENABLED
#include "video_stream_theora.h" #include "video_stream_theora.h"
#include "globals.h"
#include "os/os.h" #include "os/os.h"
#include "yuv2rgb.h" #include "yuv2rgb.h"
#include "globals.h"
int VideoStreamPlaybackTheora:: buffer_data() { int VideoStreamPlaybackTheora:: buffer_data() {
@ -940,6 +938,3 @@ String ResourceFormatLoaderVideoStreamTheora::get_resource_type(const String &p_
return "VideoStreamTheora"; return "VideoStreamTheora";
return ""; return "";
} }
#endif

View File

@ -29,16 +29,15 @@
#ifndef VIDEO_STREAM_THEORA_H #ifndef VIDEO_STREAM_THEORA_H
#define VIDEO_STREAM_THEORA_H #define VIDEO_STREAM_THEORA_H
#ifdef THEORA_ENABLED
#include "theora/theoradec.h"
#include "vorbis/codec.h"
#include "os/file_access.h"
#include "ring_buffer.h"
#include "io/resource_loader.h" #include "io/resource_loader.h"
#include "scene/resources/video_stream.h" #include "os/file_access.h"
#include "os/thread.h" #include "os/thread.h"
#include "os/semaphore.h" #include "os/semaphore.h"
#include "ring_buffer.h"
#include "scene/resources/video_stream.h"
#include <theora/theoradec.h>
#include <vorbis/codec.h>
//#define THEORA_USE_THREAD_STREAMING //#define THEORA_USE_THREAD_STREAMING
@ -197,8 +196,4 @@ public:
}; };
#endif
#endif #endif

View File

@ -33,8 +33,7 @@ def get_flags():
return [ return [
('tools', 'no'), ('tools', 'no'),
('theora', 'no'), ('module_theora_enabled', 'no'),
] ]
def configure(env): def configure(env):

View File

@ -26,10 +26,10 @@ def get_flags():
return [ return [
('tools', 'no'), ('tools', 'no'),
('theora', 'no'),
('musepack', 'no'), ('musepack', 'no'),
('squish', 'no'), ('squish', 'no'),
('etc1', 'no'), ('etc1', 'no'),
('module_theora_enabled', 'no'),
] ]

View File

@ -73,7 +73,6 @@ def get_flags():
("openssl", "system"), ("openssl", "system"),
('freetype','yes'), # use system freetype ('freetype','yes'), # use system freetype
('libpng', 'system'), ('libpng', 'system'),
#("theora","no"),
] ]
@ -155,16 +154,24 @@ def configure(env):
if (env["enet"] == "system"): if (env["enet"] == "system"):
env.ParseConfig('pkg-config libenet --cflags --libs') env.ParseConfig('pkg-config libenet --cflags --libs')
if (env["libogg"] == "system"): # Sound and video libraries
env.ParseConfig('pkg-config ogg --cflags --libs') # Keep the order as it triggers chained dependencies (ogg needed by others, etc.)
if (env["libtheora"] == "system"):
env["libogg"] = "system" # Needed to link against system libtheora
env["libvorbis"] = "system" # Needed to link against system libtheora
env.ParseConfig('pkg-config theora theoradec --cflags --libs')
if (env["libvorbis"] == "system"): if (env["libvorbis"] == "system"):
env["libogg"] = "system" # Needed to link against system libvorbis env["libogg"] = "system" # Needed to link against system libvorbis
env.ParseConfig('pkg-config vorbis vorbisfile ogg --cflags --libs') env.ParseConfig('pkg-config vorbis vorbisfile --cflags --libs')
if (env["opus"] == "system"): if (env["opus"] == "system"):
env["libogg"] = "system" # Needed to link against system opus env["libogg"] = "system" # Needed to link against system opus
env.ParseConfig('pkg-config opus opusfile ogg --cflags --libs') env.ParseConfig('pkg-config opus opusfile --cflags --libs')
if (env["libogg"] == "system"):
env.ParseConfig('pkg-config ogg --cflags --libs')
env.Append(CPPFLAGS=['-DOPENGL_ENABLED']) env.Append(CPPFLAGS=['-DOPENGL_ENABLED'])

13
thirdparty/README.md vendored
View File

@ -132,3 +132,16 @@ Files extracted from upstream source:
Files extracted from upstream source: Files extracted from upstream source:
- all of them: rg_etc1.{cpp,h} - all of them: rg_etc1.{cpp,h}
## theora
- Upstream: https://www.theora.org
- Version: 1.1.1
- License: BSD-3-Clause
Files extracted from upstream source:
- all .c, .h in lib/
- all .h files in include/theora/ as theora/
- COPYING and LICENSE