context.c
上传用户:wstnjxml
上传日期:2014-04-03
资源大小:7248k
文件大小:6k
源码类别:

Windows CE

开发平台:

C/C++

  1. /*****************************************************************************
  2.  *
  3.  * This program is free software ; you can redistribute it and/or modify
  4.  * it under the terms of the GNU General Public License as published by
  5.  * the Free Software Foundation; either version 2 of the License, or
  6.  * (at your option) any later version.
  7.  *
  8.  * This program is distributed in the hope that it will be useful,
  9.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11.  * GNU General Public License for more details.
  12.  *
  13.  * You should have received a copy of the GNU General Public License
  14.  * along with this program; if not, write to the Free Software
  15.  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
  16.  *
  17.  * $Id: context.c 593 2006-01-17 22:25:08Z picard $
  18.  *
  19.  * The Core Pocket Media Player
  20.  * Copyright (c) 2004-2005 Gabor Kovacs
  21.  *
  22.  ****************************************************************************/
  23. #include "common.h"
  24. #include "playlist/m3u.h"
  25. #include "playlist/pls.h"
  26. #include "playlist/asx.h"
  27. #include "softidct/softidct.h"
  28. #include "dyncode/dyncode.h"
  29. #define LOWMEMORY_LIMIT 768*1024
  30. void OverlayDirect_Init();
  31. void OverlayDirect_Done();
  32. void OverlayS1D13806_Init();
  33. void OverlayS1D13806_Done();
  34. void OverlayRAW_Init();
  35. void OverlayRAW_Done();
  36. void OverlayGAPI_Init();
  37. void OverlayGAPI_Done();
  38. void OverlayHIRES_Init();
  39. void OverlayHIRES_Done();
  40. void OverlayDDraw_Init();
  41. void OverlayDDraw_Done();
  42. void OverlayFlyTV_Init();
  43. void OverlayFlyTV_Done();
  44. void OverlayGDI_Init();
  45. void OverlayGDI_Done();
  46. void OverlayXScale_Init();
  47. void OverlayXScale_Done();
  48. void OverlayConsole_Init();
  49. void OverlayConsole_Done();
  50. void OverlaySymbian_Init();
  51. void OverlaySymbian_Done();
  52. #ifdef TARGET_PALMOS
  53. #include "../camera/adpcm.h"
  54. #include "../camera/law.h"
  55. #include "../splitter/avi.h"
  56. #include "../splitter/asf.h"
  57. #include "../splitter/wav.h"
  58. #include "../splitter/mov.h"
  59. #include "../splitter/mpg.h"
  60. #include "../splitter/nsv.h"
  61. #include "../interface/win.h"
  62. #include "../interface/about.h"
  63. #include "../interface/benchresult.h"
  64. #include "../interface/mediainfo.h"
  65. #include "../interface/settings.h"
  66. #endif
  67. //#define PREALLOC 12*16
  68. extern void SetContext(context* Context);
  69. int DefaultLang();
  70. #ifdef PREALLOC
  71. static void* q[PREALLOC] = {NULL};
  72. #endif
  73. bool_t Context_Init(const tchar_t* Name,const tchar_t* Version,int Id,const tchar_t* CmdLine,void* Application)
  74. {
  75. context* p = malloc(sizeof(context));
  76. if (!p) return 0;
  77. #ifdef PREALLOC
  78. { int i; for (i=0;i<PREALLOC;++i) q[i] = malloc(65536); }
  79. #endif
  80. memset(p,0,sizeof(context));
  81. p->Version = CONTEXT_VERSION;
  82. p->ProgramId = Id;
  83. p->ProgramName = Name;
  84. p->ProgramVersion = Version;
  85. p->CmdLine = CmdLine;
  86. p->Lang = DefaultLang();
  87. p->StartUpMemory = AvailMemory();
  88. p->LowMemory = p->StartUpMemory < LOWMEMORY_LIMIT;
  89. p->Application = Application;
  90. SetContext(p);
  91. Mem_Init();
  92. DynCode_Init();
  93. String_Init();
  94. PCM_Init();
  95. Blit_Init();
  96. Node_Init();
  97. Platform_Init();
  98. Stream_Init();
  99. Advanced_Init();
  100. Flow_Init();
  101. Codec_Init();
  102. Audio_Init();
  103. Video_Init();
  104. Format_Init();
  105. Playlist_Init();
  106. FormatBase_Init();
  107. NullOutput_Init();
  108. RawAudio_Init();
  109. RawImage_Init();
  110. Timer_Init();
  111. IDCT_Init();
  112. Overlay_Init();
  113. M3U_Init();
  114. PLS_Init();
  115. ASX_Init();
  116. WaveOut_Init();
  117. SoftIDCT_Init();
  118. #if defined(TARGET_PALMOS)
  119. OverlayHIRES_Init();
  120. //Win_Init();
  121. //About_Init();
  122. //BenchResult_Init();
  123. //MediaInfo_Init();
  124. //Settings_Init();
  125. ASF_Init();
  126. AVI_Init();
  127. WAV_Init();
  128. MP4_Init();
  129. MPG_Init();
  130. NSV_Init();
  131. Law_Init();
  132. ADPCM_Init();
  133. #elif defined(TARGET_WIN32) || defined(TARGET_WINCE)
  134. #if defined(TARGET_WINCE)
  135. if (QueryPlatform(PLATFORM_TYPENO) != TYPE_SMARTPHONE)
  136. {
  137. OverlayRAW_Init();
  138. OverlayGAPI_Init();
  139. }
  140. else
  141. {
  142. OverlayGAPI_Init(); // prefer GAPI with smartphones (Sagem MyS-7 crashes with Raw FrameBuffer?)
  143. OverlayRAW_Init();
  144. }
  145. OverlayDirect_Init();
  146. OverlayS1D13806_Init();
  147. #else
  148. OverlayConsole_Init();
  149. #endif
  150. OverlayXScale_Init();
  151. OverlayDDraw_Init(); // after GAPI and RAW and XScale
  152. OverlayFlyTV_Init();
  153. OverlayGDI_Init();
  154. #elif defined(TARGET_SYMBIAN)
  155. OverlaySymbian_Init();
  156. #endif
  157. #ifdef NO_PLUGINS
  158. Static_Init();
  159. #else
  160. Plugins_Init();
  161. #endif
  162. Association_Init(); // after all formats are registered
  163. Color_Init(); 
  164. Equalizer_Init();
  165. Player_Init(); // after all output drivers are registered
  166. return 1;
  167. }
  168. void Context_Done()
  169. {
  170. context* p = Context();
  171. if (!p) return;
  172. Player_Done();
  173. Color_Done();
  174. Equalizer_Done();
  175. #ifdef NO_PLUGINS
  176. Static_Done();
  177. #else
  178. Plugins_Done();
  179. #endif
  180. #ifdef TARGET_PALMOS
  181. //About_Done();
  182. //BenchResult_Done();
  183. //MediaInfo_Done();
  184. //Settings_Done();
  185. //Win_Done();
  186. Law_Done();
  187. ADPCM_Done();
  188. NSV_Done();
  189. MPG_Done();
  190. MP4_Done();
  191. ASF_Done();
  192. AVI_Done();
  193. WAV_Done();
  194. OverlayHIRES_Done();
  195. #elif defined(TARGET_WIN32) || defined(TARGET_WINCE)
  196. OverlayDDraw_Done();
  197. OverlayFlyTV_Done();
  198. OverlayGDI_Done();
  199. OverlayXScale_Done();
  200. #if defined(TARGET_WINCE)
  201. OverlayRAW_Done();
  202. OverlayGAPI_Done();
  203. OverlayDirect_Done();
  204. OverlayS1D13806_Done();
  205. #else
  206. OverlayConsole_Done();
  207. #endif
  208. #elif defined(TARGET_SYMBIAN)
  209. OverlaySymbian_Done();
  210. #endif
  211. SoftIDCT_Done();
  212. WaveOut_Done();
  213. M3U_Done();
  214. PLS_Done();
  215. ASX_Done();
  216. Overlay_Done();
  217. IDCT_Done();
  218. Timer_Done();
  219. NullOutput_Done();
  220. RawAudio_Done();
  221. RawImage_Done();
  222. FormatBase_Done();
  223. Format_Done();
  224. Association_Done();
  225. Video_Done();
  226. Audio_Done();
  227. Codec_Done();
  228. Flow_Done();
  229. Playlist_Done();
  230. Advanced_Done();
  231. Stream_Done();
  232. Platform_Done();
  233. Node_Done();
  234. Blit_Done();
  235. PCM_Done();
  236. String_Done();
  237. DynCode_Done();
  238. Mem_Done();
  239. Log_Done();
  240. #ifdef PREALLOC
  241. { int i; for (i=0;i<PREALLOC;++i) free(q[i]); }
  242. #endif
  243. free(p);
  244. }
  245. void Context_Wnd(void* Wnd)
  246. {
  247. context* p = Context();
  248. if (p)
  249. {
  250. #ifdef REGISTRY_GLOBAL
  251. if (Wnd)
  252. NodeRegLoadGlobal();
  253. else
  254. NodeRegSaveGlobal();
  255. #endif
  256. p->Wnd = Wnd; // only set after globals are loaded
  257. NodeSettingsChanged();
  258. }
  259. }