📄 options.cpp
字号:
// Options.cpp : implementation file//#include "stdafx.h"#include "Osmo4.h"#include "MainFrm.h"#include <gpac/modules/codec.h>#include <gpac/modules/raster2d.h>#include <gpac/modules/font.h>#include <gpac/modules/audio_out.h>#include <gpac/modules/video_out.h>#include <gpac/iso639.h>#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE[] = __FILE__;#endif/////////////////////////////////////////////////////////////////////////////// COptions dialogCOptions::COptions(CWnd* pParent /*=NULL*/) : CDialog(COptions::IDD, pParent){ //{{AFX_DATA_INIT(COptions) //}}AFX_DATA_INIT}void COptions::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptions) DDX_Control(pDX, IDC_SELECT, m_Selector); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(COptions, CDialog) //{{AFX_MSG_MAP(COptions) ON_BN_CLICKED(IDC_SAVEOPT, OnSaveopt) ON_WM_CLOSE() ON_WM_DESTROY() ON_CBN_SELCHANGE(IDC_SELECT, OnSelchangeSelect) //}}AFX_MSG_MAPEND_MESSAGE_MAP()BOOL COptions::OnInitDialog() { CDialog::OnInitDialog(); m_general.Create(IDD_OPT_GEN, this); m_systems.Create(IDD_OPT_SYSTEMS, this); m_render.Create(IDD_OPT_RENDER, this); m_render2d.Create(IDD_OPT_RENDER2D, this); m_render3d.Create(IDD_OPT_RENDER3D, this); m_decoder.Create(IDD_OPT_DECODER, this); m_audio.Create(IDD_OPT_AUDIO, this); m_video.Create(IDD_OPT_VIDEO, this); m_http.Create(IDD_OPT_HTTP, this); m_font.Create(IDD_OPT_FONT, this); m_stream.Create(IDD_OPT_STREAM, this); m_cache.Create(IDD_OPT_MCACHE, this); m_files.Create(IDD_OPT_FILETYPES, this); m_logs.Create(IDD_OPT_LOGS, this); m_Selector.AddString("General"); m_Selector.AddString("MPEG-4 Systems"); m_Selector.AddString("Media Decoders"); m_Selector.AddString("Rendering"); m_Selector.AddString("Renderer 2D"); m_Selector.AddString("Renderer 3D"); m_Selector.AddString("Video Output"); m_Selector.AddString("Audio Output"); m_Selector.AddString("Text Engine"); m_Selector.AddString("File Download"); m_Selector.AddString("Real-Time Streaming"); m_Selector.AddString("Streaming Cache"); m_Selector.AddString("File Types"); m_Selector.AddString("Log System"); HideAll(); const char *sOpt = gf_cfg_get_key(GetApp()->m_user.config, "General", "ConfigPanel"); u32 sel = sOpt ? atoi(sOpt) : 0; if (sel>13) sel=13; m_Selector.SetCurSel(sel); m_general.ShowWindow(SW_SHOW); OnSelchangeSelect(); return TRUE; }/////////////////////////////////////////////////////////////////////////////// COptions message handlersvoid COptions::HideAll(){ m_general.ShowWindow(SW_HIDE); m_systems.ShowWindow(SW_HIDE); m_render.ShowWindow(SW_HIDE); m_render2d.ShowWindow(SW_HIDE); m_render3d.ShowWindow(SW_HIDE); m_audio.ShowWindow(SW_HIDE); m_video.ShowWindow(SW_HIDE); m_http.ShowWindow(SW_HIDE); m_font.ShowWindow(SW_HIDE); m_stream.ShowWindow(SW_HIDE); m_decoder.ShowWindow(SW_HIDE); m_cache.ShowWindow(SW_HIDE); m_files.ShowWindow(SW_HIDE); m_files.ShowWindow(SW_HIDE); m_logs.ShowWindow(SW_HIDE);}void COptions::OnSelchangeSelect() { HideAll(); switch (m_Selector.GetCurSel()) { case 0: m_general.ShowWindow(SW_SHOW); break; case 1: m_systems.ShowWindow(SW_SHOW); break; case 2: m_decoder.ShowWindow(SW_SHOW); break; case 3: m_render.ShowWindow(SW_SHOW); break; case 4: m_render2d.ShowWindow(SW_SHOW); break; case 5: m_render3d.ShowWindow(SW_SHOW); break; case 6: m_video.ShowWindow(SW_SHOW); break; case 7: m_audio.ShowWindow(SW_SHOW); break; case 8: m_font.ShowWindow(SW_SHOW); break; case 9: m_http.ShowWindow(SW_SHOW); break; case 10: m_stream.ShowWindow(SW_SHOW); break; case 11: m_cache.ShowWindow(SW_SHOW); break; case 12: m_files.ShowWindow(SW_SHOW); break; case 13: m_logs.ShowWindow(SW_SHOW); break; }}void COptions::OnSaveopt() { Bool need_reload; m_general.SaveOptions(); m_systems.SaveOptions(); m_decoder.SaveOptions(); need_reload = m_render.SaveOptions(); m_render2d.SaveOptions(); m_render3d.SaveOptions(); m_audio.SaveOptions(); m_video.SaveOptions(); m_http.SaveOptions(); m_font.SaveOptions(); m_stream.SaveOptions(); m_cache.SaveOptions(); m_logs.SaveOptions(); WinGPAC *gpac = GetApp(); if (!need_reload) { gf_term_set_option(gpac->m_term, GF_OPT_RELOAD_CONFIG, 1); } else { gpac->ReloadTerminal(); } m_render2d.SetYUV();}void COptions::OnClose() { char str[20]; sprintf(str, "%d", m_Selector.GetCurSel()); gf_cfg_set_key(GetApp()->m_user.config, "General", "ConfigPanel", str); DestroyWindow();}void COptions::OnDestroy() { CDialog::OnDestroy(); delete this; ((CMainFrame *)GetApp()->m_pMainWnd)->m_pOpt = NULL;}COptGen::COptGen(CWnd* pParent /*=NULL*/) : CDialog(COptGen::IDD, pParent){ //{{AFX_DATA_INIT(COptGen) //}}AFX_DATA_INIT}void COptGen::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptGen) DDX_Control(pDX, IDC_LOOKFORSUB, m_LookForSubs); DDX_Control(pDX, IDC_DUMP_XMT, m_ViewXMT); DDX_Control(pDX, IDC_NO_CONSOLE, m_NoConsole); DDX_Control(pDX, IDC_LOOP, m_Loop); DDX_Control(pDX, IDC_SINGLE_INSTANCE, m_SingleInstance); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(COptGen, CDialog) //{{AFX_MSG_MAP(COptGen) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// COptGen message handlersBOOL COptGen::OnInitDialog() { CDialog::OnInitDialog(); WinGPAC *gpac = GetApp(); const char *sOpt; sOpt = gf_cfg_get_key(gpac->m_user.config, "General", "Loop"); m_Loop.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "General", "LookForSubtitles"); m_LookForSubs.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "General", "ConsoleOff"); m_NoConsole.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "General", "ViewXMT"); m_ViewXMT.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); sOpt = gf_cfg_get_key(gpac->m_user.config, "General", "SingleInstance"); m_SingleInstance.SetCheck((sOpt && !stricmp(sOpt, "yes")) ? 1 : 0); return TRUE; }void COptGen::SaveOptions(){ WinGPAC *gpac = GetApp(); gpac->m_Loop = m_Loop.GetCheck(); gf_cfg_set_key(gpac->m_user.config, "General", "Loop", gpac->m_Loop ? "yes" : "no"); gpac->m_LookForSubtitles = m_LookForSubs.GetCheck(); gf_cfg_set_key(gpac->m_user.config, "General", "LookForSubtitles", gpac->m_LookForSubtitles ? "yes" : "no"); gpac->m_NoConsole = m_NoConsole.GetCheck(); gf_cfg_set_key(gpac->m_user.config, "General", "ConsoleOff", gpac->m_NoConsole ? "yes" : "no"); gpac->m_ViewXMTA = m_ViewXMT.GetCheck(); gf_cfg_set_key(gpac->m_user.config, "General", "ViewXMT", gpac->m_ViewXMTA ? "yes" : "no"); gpac->m_SingleInstance = m_SingleInstance.GetCheck(); gf_cfg_set_key(gpac->m_user.config, "General", "SingleInstance", gpac->m_SingleInstance ? "yes" : "no");}COptSystems::COptSystems(CWnd* pParent /*=NULL*/) : CDialog(COptSystems::IDD, pParent){ //{{AFX_DATA_INIT(COptSystems) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT}void COptSystems::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptSystems) DDX_Control(pDX, IDC_FORCE_DURATION, m_ForceDuration); DDX_Control(pDX, IDC_DEC_THREAD, m_Threading); DDX_Control(pDX, IDC_BIFSDROP, m_BifsAlwaysDrawn); DDX_Control(pDX, IDC_LANG, m_Lang); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(COptSystems, CDialog) //{{AFX_MSG_MAP(COptSystems) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// COptSystems message handlersBOOL COptSystems::OnInitDialog() { CDialog::OnInitDialog(); WinGPAC *gpac = GetApp(); const char *sOpt; sOpt = gf_cfg_get_key(gpac->m_user.config, "Systems", "Language3CC"); if (!sOpt) sOpt = "eng"; s32 select = 0; while (m_Lang.GetCount()) m_Lang.DeleteString(0); s32 i = 0; while (GF_ISO639_Lang[i]) { /*only use common languages (having both 2- and 3-char code names)*/ if (GF_ISO639_Lang[i+2][0]) { m_Lang.AddString(GF_ISO639_Lang[i]); if (sOpt && !stricmp(sOpt, GF_ISO639_Lang[i+1])) select = m_Lang.GetCount() - 1; } i += 3; } m_Lang.SetCurSel(select); /*system config*/ sOpt = gf_cfg_get_key(gpac->m_user.config, "Systems", "ThreadingPolicy"); select = 0; while (m_Threading.GetCount()) m_Threading.DeleteString(0); m_Threading.AddString("Single Thread"); m_Threading.AddString("Mutli Thread"); if (sOpt && !stricmp(sOpt, "Multi")) select = 1; m_Threading.AddString("Free"); if (sOpt && !stricmp(sOpt, "Free")) select = 2; m_Threading.SetCurSel(select); sOpt = gf_cfg_get_key(gpac->m_user.config, "Systems", "ForceSingleClock"); if (sOpt && !stricmp(sOpt, "yes")) { m_ForceDuration.SetCheck(1); } else { m_ForceDuration.SetCheck(0); } sOpt = gf_cfg_get_key(gpac->m_user.config, "Systems", "AlwaysDrawBIFS"); if (sOpt && !stricmp(sOpt, "yes")) { m_BifsAlwaysDrawn.SetCheck(1); } else { m_BifsAlwaysDrawn.SetCheck(0); } return TRUE; }void COptSystems::SaveOptions(){ WinGPAC *gpac = GetApp(); s32 sel = m_Lang.GetCurSel(); u32 i=0; while (GF_ISO639_Lang[i]) { /*only use common languages (having both 2- and 3-char code names)*/ if (GF_ISO639_Lang[i+2][0]) { if (!sel) break; sel--; } i+=3; } gf_cfg_set_key(gpac->m_user.config, "Systems", "LanguageName", GF_ISO639_Lang[i]); gf_cfg_set_key(gpac->m_user.config, "Systems", "Language3CC", GF_ISO639_Lang[i+1]); gf_cfg_set_key(gpac->m_user.config, "Systems", "Language2CC", GF_ISO639_Lang[i+2]); sel = m_Threading.GetCurSel(); gf_cfg_set_key(gpac->m_user.config, "Systems", "ThreadingPolicy", (sel==0) ? "Single" : ( (sel==1) ? "Multi" : "Free")); gf_cfg_set_key(gpac->m_user.config, "Systems", "ForceSingleClock", m_ForceDuration.GetCheck() ? "yes" : "no"); gf_cfg_set_key(gpac->m_user.config, "Systems", "AlwaysDrawBIFS", m_BifsAlwaysDrawn.GetCheck() ? "yes" : "no");}OptDecoder::OptDecoder(CWnd* pParent /*=NULL*/) : CDialog(OptDecoder::IDD, pParent){ //{{AFX_DATA_INIT(OptDecoder) // NOTE: the ClassWizard will add member initialization here //}}AFX_DATA_INIT}void OptDecoder::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(OptDecoder) DDX_Control(pDX, IDC_VIDEC_LIST, m_Video); DDX_Control(pDX, IDC_AUDEC_LIST, m_Audio); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(OptDecoder, CDialog) //{{AFX_MSG_MAP(OptDecoder) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// OptDecoder message handlersBOOL OptDecoder::OnInitDialog() { const char *sOpt; CDialog::OnInitDialog(); WinGPAC *gpac = GetApp(); /*audio dec enum*/ while (m_Audio.GetCount()) m_Audio.DeleteString(0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Systems", "DefAudioDec"); u32 count = gf_modules_get_count(gpac->m_user.modules); GF_BaseDecoder *ifce; s32 select = 0; s32 to_sel = 0; for (u32 i=0; i<count; i++) { ifce = (GF_BaseDecoder *) gf_modules_load_interface(gpac->m_user.modules, i, GF_MEDIA_DECODER_INTERFACE); if (!ifce) continue; if (ifce->CanHandleStream(ifce, GF_STREAM_AUDIO, 0, NULL, 0, 0)) { if (sOpt && !stricmp(ifce->module_name, sOpt)) select = to_sel; m_Audio.AddString(ifce->module_name); to_sel++; } gf_modules_close_interface((GF_BaseInterface *)ifce); } m_Audio.SetCurSel(select); /*video dec enum*/ while (m_Video.GetCount()) m_Video.DeleteString(0); sOpt = gf_cfg_get_key(gpac->m_user.config, "Systems", "DefVideoDec"); count = gf_modules_get_count(gpac->m_user.modules); select = 0; to_sel = 0; for (i=0; i<count; i++) { ifce = (GF_BaseDecoder *) gf_modules_load_interface(gpac->m_user.modules, i, GF_MEDIA_DECODER_INTERFACE); if (!ifce) continue; if (ifce->CanHandleStream(ifce, GF_STREAM_VISUAL, 0, NULL, 0, 0)) { if (sOpt && !stricmp(ifce->module_name, sOpt)) select = to_sel; m_Video.AddString(ifce->module_name); to_sel++; } gf_modules_close_interface((GF_BaseInterface *)ifce); } m_Video.SetCurSel(select); return TRUE; }void OptDecoder::SaveOptions(){ WinGPAC *gpac = GetApp(); char str[100]; m_Audio.GetWindowText(str, 100); gf_cfg_set_key(gpac->m_user.config, "Systems", "DefAudioDec", str); m_Video.GetWindowText(str, 100); gf_cfg_set_key(gpac->m_user.config, "Systems", "DefVideoDec", str);}COptRender::COptRender(CWnd* pParent /*=NULL*/) : CDialog(COptRender::IDD, pParent){ //{{AFX_DATA_INIT(COptRender) //}}AFX_DATA_INIT}void COptRender::DoDataExchange(CDataExchange* pDX){ CDialog::DoDataExchange(pDX); //{{AFX_DATA_MAP(COptRender) DDX_Control(pDX, IDC_DRAW_BOUNDS, m_DrawBounds); DDX_Control(pDX, IDC_GD_LIST, m_Graphics); DDX_Control(pDX, IDC_USE_RENDER3D, m_Use3DRender); DDX_Control(pDX, IDC_AA_LIST, m_AntiAlias); DDX_Control(pDX, IDC_FORCE_SIZE, m_ForceSize); DDX_Control(pDX, IDC_FAST_RENDER, m_FastRender); DDX_Control(pDX, IDC_BIFS_RATE, m_BIFSRate); //}}AFX_DATA_MAP}BEGIN_MESSAGE_MAP(COptRender, CDialog) //{{AFX_MSG_MAP(COptRender) //}}AFX_MSG_MAPEND_MESSAGE_MAP()/////////////////////////////////////////////////////////////////////////////// COptRender message handlers#define NUM_RATES 11static char *BIFSRates[11] = { "5.0", "7.5", "10.0", "12.5", "15.0", "24.0", "25.0", "30.0", "50.0", "60.0", "100.0",};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -