diff --git a/SConstruct b/SConstruct index 15db0c48b0..46edf06a42 100644 --- a/SConstruct +++ b/SConstruct @@ -84,6 +84,9 @@ env_base.__class__.disable_module = methods.disable_module env_base.__class__.add_source_files = methods.add_source_files +env_base["x86_opt_gcc"]=False +env_base["x86_opt_vc"]=False + customs = ['custom.py'] profile = ARGUMENTS.get("profile", False) @@ -304,6 +307,7 @@ if selected_platform in platform_list: if (env['opus']=='yes'): env.Append(CPPFLAGS=['-DOPUS_ENABLED']); + if (env['theora']=='yes'): env['theoralib']='yes' env.Append(CPPFLAGS=['-DTHEORA_ENABLED']); diff --git a/drivers/ogg/SCsub b/drivers/ogg/SCsub index c85d4404f3..3ee1bb6408 100644 --- a/drivers/ogg/SCsub +++ b/drivers/ogg/SCsub @@ -6,5 +6,4 @@ ogg_sources = [ "ogg/framing.c", ] -if env['theora'] != "yes" or env['use_theoraplayer_binary'] != "yes": - env.drivers_sources+=ogg_sources +env.drivers_sources+=ogg_sources diff --git a/drivers/register_driver_types.cpp b/drivers/register_driver_types.cpp index ea19481c2b..11c4e7dd29 100644 --- a/drivers/register_driver_types.cpp +++ b/drivers/register_driver_types.cpp @@ -104,10 +104,6 @@ static ResourceFormatLoaderAudioStreamSpeex *speex_stream_loader=NULL; static ResourceFormatLoaderVideoStreamTheora* theora_stream_loader = NULL; #endif -#ifdef THEORAPLAYER_ENABLED -static ResourceFormatLoaderVideoStreamTheoraplayer* theoraplayer_stream_loader = NULL; -#endif - #ifdef MUSEPACK_ENABLED static ResourceFormatLoaderAudioStreamMPC * mpc_stream_loader=NULL; #endif @@ -229,12 +225,6 @@ void register_driver_types() { ObjectTypeDB::register_type(); #endif -#ifdef THEORAPLAYER_ENABLED - theoraplayer_stream_loader = memnew( ResourceFormatLoaderVideoStreamTheoraplayer ); - ResourceLoader::add_resource_format_loader(theoraplayer_stream_loader); - ObjectTypeDB::register_type(); -#endif - #ifdef TOOLS_ENABLED #ifdef SQUISH_ENABLED @@ -273,9 +263,6 @@ void unregister_driver_types() { memdelete (theora_stream_loader); #endif -#ifdef THEORAPLAYER_ENABLED - memdelete (theoraplayer_stream_loader); -#endif #ifdef MUSEPACK_ENABLED diff --git a/drivers/theora/SCsub b/drivers/theora/SCsub index b6b4af2562..fa85b49804 100644 --- a/drivers/theora/SCsub +++ b/drivers/theora/SCsub @@ -31,4 +31,37 @@ sources = [ "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.Append(CCFLAGS=["-DOC_X86_ASM"]) + env.drivers_sources += sources_x86 + +if (env["x86_opt_vc"]): + env.Append(CCFLAGS=["-DOC_X86_ASM"]) + env.drivers_sources += sources_x86_vc + + + + diff --git a/drivers/theora/encint.h b/drivers/theora/encint.h index 97897d5a04..82338256dc 100644 --- a/drivers/theora/encint.h +++ b/drivers/theora/encint.h @@ -14,6 +14,7 @@ last mod: $Id: encint.h 16503 2009-08-22 18:14:02Z giles $ ********************************************************************/ + #if !defined(_encint_H) # define _encint_H (1) # if defined(HAVE_CONFIG_H) diff --git a/drivers/theora/video_stream_theora.cpp b/drivers/theora/video_stream_theora.cpp index ed2565177a..f301bd7515 100644 --- a/drivers/theora/video_stream_theora.cpp +++ b/drivers/theora/video_stream_theora.cpp @@ -441,8 +441,10 @@ void VideoStreamPlaybackTheora::update(float p_delta) { //print_line("play "+rtos(p_delta)); time+=p_delta; - if (videobuf_time>get_time()) + if (videobuf_time>get_time()) { + return; //no new frames need to be produced + } bool frame_done=false; bool audio_done=false; @@ -541,7 +543,7 @@ void VideoStreamPlaybackTheora::update(float p_delta) { if(ogg_stream_packetout(&to,&op)>0){ - if(pp_inc){ + if(false && pp_inc){ pp_level+=pp_inc; th_decode_ctl(td,TH_DECCTL_SET_PPLEVEL,&pp_level, sizeof(pp_level)); @@ -569,16 +571,20 @@ void VideoStreamPlaybackTheora::update(float p_delta) { keyframing. Soon enough libtheora will be able to deal with non-keyframe seeks. */ - if(videobuf_time>=get_time()) + if(videobuf_time>=get_time()) { frame_done=true; - else{ + print_line("frame!"); + } else{ /*If we are too slow, reduce the pp level.*/ pp_inc=pp_level>0?-1:0; + print_line("skip!"); } } - } else + } else { + print_line("no packet.."); break; + } } if (file && /*!videobuf_ready && */ file->eof_reached()) { diff --git a/drivers/vorbis/SCsub b/drivers/vorbis/SCsub index 4a16e80dfc..87805cc2d8 100644 --- a/drivers/vorbis/SCsub +++ b/drivers/vorbis/SCsub @@ -33,6 +33,4 @@ sources_lib = [ ] env.drivers_sources += sources - -if env['theora'] != "yes" or env['use_theoraplayer_binary'] != "yes": - env.drivers_sources += sources_lib +env.drivers_sources += sources_lib diff --git a/platform/android/detect.py b/platform/android/detect.py index 9db5d02b48..fe83798c56 100644 --- a/platform/android/detect.py +++ b/platform/android/detect.py @@ -98,6 +98,7 @@ def configure(env): if env['android_arch']=='x86': env['NDK_TARGET']=env['NDK_TARGET_X86'] + env["x86_opt_gcc"]=True if env['PLATFORM'] == 'win32': import methods diff --git a/platform/osx/detect.py b/platform/osx/detect.py index 22cee0527e..f7cf5111f5 100644 --- a/platform/osx/detect.py +++ b/platform/osx/detect.py @@ -116,4 +116,4 @@ def configure(env): env.Append( BUILDERS = { 'GLSL120GLES' : env.Builder(action = methods.build_gles2_headers, suffix = 'glsl.h',src_suffix = '.glsl') } ) #env.Append( BUILDERS = { 'HLSL9' : env.Builder(action = methods.build_hlsl_dx9_headers, suffix = 'hlsl.h',src_suffix = '.hlsl') } ) - + env["x86_opt_gcc"]=True diff --git a/platform/windows/detect.py b/platform/windows/detect.py index fcde14030f..4ec4b054db 100644 --- a/platform/windows/detect.py +++ b/platform/windows/detect.py @@ -263,6 +263,7 @@ def configure(env): env.Append(CCFLAGS=["/I"+DIRECTX_PATH+"/Include"]) env.Append(LIBPATH=[DIRECTX_PATH+"/Lib/x86"]) env['ENV'] = os.environ; + env["x86_opt_vc"]=True else: # Workaround for MinGW. See: @@ -361,6 +362,7 @@ def configure(env): env['AR'] = mingw_prefix+"ar" env['RANLIB'] = mingw_prefix+"ranlib" env['LD'] = mingw_prefix+"g++" + env["x86_opt_gcc"]=True #env['CC'] = "winegcc" #env['CXX'] = "wineg++" diff --git a/platform/x11/detect.py b/platform/x11/detect.py index 9a52a7c92b..a37005738a 100644 --- a/platform/x11/detect.py +++ b/platform/x11/detect.py @@ -180,3 +180,5 @@ def configure(env): env.Append(CPPFLAGS=['-DNEW_WM_API']) env.ParseConfig('pkg-config xinerama --cflags --libs') + env["x86_opt_gcc"]=True + diff --git a/scene/gui/video_player.cpp b/scene/gui/video_player.cpp index 9b9c797ed9..d99da5e906 100644 --- a/scene/gui/video_player.cpp +++ b/scene/gui/video_player.cpp @@ -27,7 +27,7 @@ /* SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ /*************************************************************************/ #include "video_player.h" - +#include "os/os.h" int VideoPlayer::InternalStream::get_channel_count() const { @@ -130,7 +130,7 @@ void VideoPlayer::_notification(int p_notification) { if (!playback->is_playing()) return; - double audio_time = AudioServer::get_singleton()->get_mix_time(); + double audio_time = OS::get_singleton()->get_ticks_usec()/1000000.0; //AudioServer::get_singleton()->get_mix_time(); double delta = last_audio_time==0?0:audio_time-last_audio_time; last_audio_time=audio_time;