Mercurial > mplayer.hg
diff mpcommon.c @ 32383:f6e78eef2e1b
Avoid duplicating common init code between MPlayer and mencoder.
author | reimar |
---|---|
date | Sat, 09 Oct 2010 15:04:50 +0000 |
parents | ef21cbba62ee |
children | 21cd61f89753 |
line wrap: on
line diff
--- a/mpcommon.c Sat Oct 09 14:17:06 2010 +0000 +++ b/mpcommon.c Sat Oct 09 15:04:50 2010 +0000 @@ -20,7 +20,11 @@ #include "stream/stream.h" #include "libmpdemux/demuxer.h" #include "libmpdemux/stheader.h" +#include "codec-cfg.h" +#include "osdep/timer.h" +#include "path.h" #include "mplayer.h" +#include "libvo/font_load.h" #include "libvo/sub.h" #include "libvo/video_out.h" #include "cpudetect.h" @@ -349,3 +353,114 @@ {NULL, NULL, 0, 0, 0, 0, NULL} }; +/** + * Initialization code to be run at the very start, most not depend + * on option values. + */ +void common_preinit(void) +{ + InitTimer(); + srand(GetTimerMS()); + + mp_msg_init(); +} + +/** + * Initialization code to be run after command-line parsing. + */ +int common_init(void) +{ +#if (defined(__MINGW32__) || defined(__CYGWIN__)) && defined(CONFIG_WIN32DLL) + set_path_env(); +#endif +#if defined(__MINGW32__) || defined(__CYGWIN__) +#ifdef CONFIG_GUI + void *runningmplayer = FindWindow("MPlayer GUI for Windows", "MPlayer for Windows"); + if(runningmplayer && filename && use_gui){ + COPYDATASTRUCT csData; + char file[MAX_PATH]; + char *filepart = filename; + if(GetFullPathName(filename, MAX_PATH, file, &filepart)){ + csData.dwData = 0; + csData.cbData = strlen(file)*2; + csData.lpData = file; + SendMessage(runningmplayer, WM_COPYDATA, (WPARAM)runningmplayer, (LPARAM)&csData); + } + } +#endif + + { + HMODULE kernel32 = GetModuleHandle("Kernel32.dll"); + BOOL WINAPI (*setDEP)(DWORD) = NULL; + BOOL WINAPI (*setDllDir)(LPCTSTR) = NULL; + if (kernel32) { + setDEP = GetProcAddress(kernel32, "SetProcessDEPPolicy"); + setDllDir = GetProcAddress(kernel32, "SetDllDirectoryA"); + } + if (setDEP) setDEP(3); + if (setDllDir) setDllDir(""); + } + // stop Windows from showing all kinds of annoying error dialogs + SetErrorMode(0x8003); + // request 1ms timer resolution + timeBeginPeriod(1); +#endif + +#ifdef CONFIG_PRIORITY + set_priority(); +#endif + + if (codec_path) + set_codec_path(codec_path); + +/* Check codecs.conf. */ +if(!codecs_file || !parse_codec_cfg(codecs_file)){ + char *mem_ptr; + if(!parse_codec_cfg(mem_ptr=get_path("codecs.conf"))){ + if(!parse_codec_cfg(MPLAYER_CONFDIR "/codecs.conf")){ + if(!parse_codec_cfg(NULL)){ + return 0; + } + mp_msg(MSGT_CPLAYER,MSGL_V,MSGTR_BuiltinCodecsConf); + } + } + free( mem_ptr ); // release the buffer created by get_path() +} + +// check font +#ifdef CONFIG_FREETYPE + init_freetype(); +#endif +#ifdef CONFIG_FONTCONFIG + if(font_fontconfig <= 0) + { +#endif +#ifdef CONFIG_BITMAP_FONT + if(font_name){ + vo_font=read_font_desc(font_name,font_factor,verbose>1); + if(!vo_font) mp_msg(MSGT_CPLAYER,MSGL_ERR,MSGTR_CantLoadFont, + filename_recode(font_name)); + } else { + char *mem_ptr; + // try default: + vo_font=read_font_desc( mem_ptr=get_path("font/font.desc"),font_factor,verbose>1); + free(mem_ptr); // release the buffer created by get_path() + if(!vo_font) + vo_font=read_font_desc(MPLAYER_DATADIR "/font/font.desc",font_factor,verbose>1); + } + if (sub_font_name) + sub_font = read_font_desc(sub_font_name, font_factor, verbose>1); + else + sub_font = vo_font; +#endif +#ifdef CONFIG_FONTCONFIG + } +#endif + + vo_init_osd(); + +#ifdef CONFIG_ASS + ass_library = ass_init(); +#endif + return 1; +}