📄 tglobalsettings.cpp.svn-base
字号:
/* * Copyright (c) 2002-2006 Milan Cutka * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA */#include "stdafx.h"#include "Tconfig.h"#include "TglobalSettings.h"#include "reg.h"#include "ffdshow_mediaguids.h"#include "ffcodecs.h"#include "ffdshow_constants.h"#include "TsampleFormat.h"#include "ffImgfmt.h"#include "TpresetSettings.h"#include "ffdebug.h"#include "Tstream.h"//===================================== TglobalSettingsBase ======================================TglobalSettingsBase::TglobalSettingsBase(const Tconfig *Iconfig,int Imode,const char_t *Ireg_child,TintStrColl *Icoll):filtermode(Imode),config(Iconfig),reg_child(Ireg_child),Toptions(Icoll){ static const TintOptionT<TglobalSettingsBase> iopts[]= { IDFF_filterMode ,&TglobalSettingsBase::filtermode ,1,1,_l(""),0, NULL,0, IDFF_trayIcon ,&TglobalSettingsBase::trayIcon ,0,0,_l(""),0, _l("trayIcon"),TintOption::DEF_DYN, IDFF_trayIconExt ,&TglobalSettingsBase::trayIconExt ,0,0,_l(""),0, _l("trayIconExt"),0, IDFF_outputdebug ,&TglobalSettingsBase::outputdebug ,0,0,_l(""),0, _l("outputdebug"),1, IDFF_outputdebugfile ,&TglobalSettingsBase::outputdebugfile ,0,0,_l(""),0, _l("outputdebugfile"),0, IDFF_errorbox ,&TglobalSettingsBase::errorbox ,0,0,_l(""),0, _l("errorbox"),0, IDFF_multipleInstances,&TglobalSettingsBase::multipleInstances,0,4,_l(""),0, _l("multipleInstances"),TintOption::DEF_DYN, IDFF_isBlacklist ,&TglobalSettingsBase::isBlacklist ,0,0,_l(""),0, _l("isBlacklist"),0, IDFF_addToROT ,&TglobalSettingsBase::addToROT ,0,0,_l(""),0, _l("addToROT"),0, IDFF_allowedCpuFlags ,&TglobalSettingsBase::allowedCPUflags ,1,1,_l(""),0, NULL,0, 0 }; addOptions(iopts); static const TstrOption sopts[]= { IDFF_debugfile ,(TstrVal)&TglobalSettingsBase::debugfile ,MAX_PATH,_l(""),0, _l("debugfile"),_l("\\ffdebug.log"), IDFF_dscalerPath,(TstrVal)&TglobalSettingsBase::dscalerPth,MAX_PATH,_l(""),0, NULL,NULL, IDFF_blacklist ,(TstrVal)&TglobalSettingsBase::blacklist ,128,_l(""),0, _l("blacklist"),_l("explorer.exe"), 0 }; addOptions(sopts); static const TcreateParamList3<TmultipleInstances> listMultipleInstances(::multipleInstances,&TmultipleInstances::id,&TmultipleInstances::name);setParamList(IDFF_multipleInstances,&listMultipleInstances);}void TglobalSettingsBase::load(void){ char_t rkey[MAX_PATH];tsprintf(rkey,FFDSHOW_REG_PARENT _l("\\%s"),reg_child); TregOpRegRead tHKCU(HKEY_CURRENT_USER,rkey); reg_op(tHKCU); TregOpRegRead tHKLM(HKEY_LOCAL_MACHINE,rkey); reg_op_codec(tHKCU,&tHKLM); TregOpRegRead tDScaler(HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\\") FFDSHOW); tDScaler._REG_OP_S(IDFF_dscalerPath,_l("dscalerPth"),dscalerPth,MAX_PATH,_l("")); TregOpRegRead tCPU(HKEY_CURRENT_USER,FFDSHOW_REG_PARENT _l("\\") FFDSHOW); tCPU._REG_OP_N(IDFF_allowedCpuFlags,_l("allowedCPUflags"),allowedCPUflags,255); firstBlacklist=true;}void TglobalSettingsBase::save(void){ char_t rkey[MAX_PATH];tsprintf(rkey,FFDSHOW_REG_PARENT _l("\\%s"),reg_child); TregOpRegWrite tHKCU(HKEY_CURRENT_USER,rkey); reg_op(tHKCU); reg_op_codec(tHKCU,NULL); TregOpRegWrite tDScaler(HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\\") FFDSHOW); tDScaler._REG_OP_S(IDFF_dscalerPath,_l("dscalerPth"),dscalerPth,MAX_PATH,_l("")); TregOpRegWrite tCPU(HKEY_CURRENT_USER,FFDSHOW_REG_PARENT _l("\\") FFDSHOW); tCPU._REG_OP_N(IDFF_allowedCpuFlags,_l("allowedCPUflags"),allowedCPUflags,255);}bool TglobalSettingsBase::exportReg(bool all,const char_t *regflnm,bool unicode){ if (fileexists(regflnm) && DeleteFile(regflnm)==0) return false; TstreamFile f(regflnm,false,true,unicode?Tstream::ENC_LE16:Tstream::ENC_ASCII);if (!f) return false; if (unicode) f.printf(L"Windows Registry Editor Version 5.00\n\n"); else f.printf("REGEDIT4\n\n"); regExport(f,HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\\") FFDSHOW,unicode); if (all || strcmp(reg_child,FFDSHOWDECVIDEO)==0) regExport(f,HKEY_CURRENT_USER ,FFDSHOW_REG_PARENT _l("\\") FFDSHOWDECVIDEO,unicode); if (all || strcmp(reg_child,FFDSHOWDECAUDIO)==0) { regExport(f,HKEY_CURRENT_USER ,FFDSHOW_REG_PARENT _l("\\") FFDSHOWDECAUDIO,unicode); regExport(f,HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\\") FFDSHOWDECAUDIO,unicode); } if (all || strcmp(reg_child,FFDSHOWENC)==0) { regExport(f,HKEY_CURRENT_USER ,FFDSHOW_REG_PARENT _l("\\") FFDSHOWENC,unicode); regExport(f,HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\\") FFDSHOWENC,unicode); } if (all || strcmp(reg_child,FFDSHOWDECVIDEOVFW)==0) { regExport(f,HKEY_CURRENT_USER ,FFDSHOW_REG_PARENT _l("\\") FFDSHOWDECVIDEOVFW,unicode); regExport(f,HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\\") FFDSHOWDECVIDEOVFW,unicode); } return true;}void TglobalSettingsBase::_reg_op_codec(short id,TregOp &tHKCU,TregOp *tHKLM,const char_t *name,int &val,int def){ if (!tHKCU._REG_OP_N(id,name,val,def) && tHKLM) tHKLM->_REG_OP_N(id,name,val,def);} bool TglobalSettingsBase::inBlacklist(const char_t *exe){ if (firstBlacklist) { firstBlacklist=false; strtok(blacklist,_l(";"),blacklistList); } for (strings::const_iterator b=blacklistList.begin();b!=blacklistList.end();b++) if (DwStrcasecmp(*b,exe)==0) return true; return false;} //===================================== TglobalSettingsDec ======================================TglobalSettingsDec::TglobalSettingsDec(const Tconfig *Iconfig,int Imode,const char_t *Ireg_child,TintStrColl *Icoll,TOSDsettings *Iosd):TglobalSettingsBase(Iconfig,Imode,Ireg_child,Icoll),osd(Iosd){ static const TintOptionT<TglobalSettingsDec> iopts[]= { IDFF_autoPreset ,&TglobalSettingsDec::autoPreset ,0,0,_l(""),0, _l("autoPresets"),0, IDFF_autoPresetFileFirst,&TglobalSettingsDec::autoPresetFileFirst,0,0,_l(""),0, _l("autoPresetFileFirst"),0, IDFF_streamsOptionsMenu ,&TglobalSettingsDec::streamsMenu ,0,0,_l(""),0, _l("streamsOptionsMenu"),0, 0 }; addOptions(iopts); static const TstrOption sopts[]= { IDFF_defaultPreset,(TstrVal)&TglobalSettingsDec::defaultPreset,260,_l(""),0, _l("activePreset"),FFPRESET_DEFAULT, 0 }; addOptions(sopts); }void TglobalSettingsDec::reg_op(TregOp &t){ TglobalSettingsBase::reg_op(t); osd->reg_op(t);}void TglobalSettingsDec::load(void){ TglobalSettingsBase::load(); osd->loadPresets(reg_child); }void TglobalSettingsDec::save(void){ TglobalSettingsBase::save(); osd->savePresets(reg_child);}void TglobalSettingsDec::fixMissing(int &codecId,int movie1,int movie2,int movie3){ fixMissing(codecId,movie1,movie2); fixMissing(codecId,movie2,movie3); fixMissing(codecId,movie1,movie3); }void TglobalSettingsDec::fixMissing(int &codecId,int movie1,int movie2){ if (!config->isDecoder[movie1] && !config->isDecoder[movie2]) codecId=IDFF_MOVIE_NONE; else if (codecId==movie1 && !config->isDecoder[movie1]) codecId=movie2; else if (codecId==movie2 && !config->isDecoder[movie2]) codecId=movie1;}void TglobalSettingsDec::fixMissing(int &codecId,int movie){ if (!config->isDecoder[movie]) codecId=0;}int TglobalSettingsDec::getDefault(int id){ switch (id) { case IDFF_trayIcon:return 1; default:return TglobalSettingsBase::getDefault(id); }}static bool compStrPtrs(const char_t *s1,const char_t *s2){ return stricmp(s1,s2)<0;}void TglobalSettingsDec::cleanupCodecsList(std::vector<CodecID> &ids,Tstrptrs &codecs){ std::sort(ids.begin(),ids.end()); std::vector<CodecID>::iterator idsend=std::unique(ids.begin(),ids.end()); codecs.clear(); for (std::vector<CodecID>::const_iterator id=ids.begin();id!=idsend;id++) codecs.push_back(getCodecName(*id)); std::sort(codecs.begin(),codecs.end()); Tstrptrs::iterator codecsend=std::unique(codecs.begin(),codecs.end()); codecs.erase(codecsend,codecs.end()); std::sort(codecs.begin(),codecs.end(),compStrPtrs);}//=================================== TglobalSettingsDecVideo ===================================TglobalSettingsDecVideo::TglobalSettingsDecVideo(const Tconfig *Iconfig,int Imode,TintStrColl *Icoll):TglobalSettingsDec(Iconfig,Imode,Imode&IDFF_FILTERMODE_VFW?FFDSHOWDECVIDEOVFW:FFDSHOWDECVIDEO,Icoll,&osd),sub(Icoll),osd(Icoll){ static const TintOptionT<TglobalSettingsDecVideo> iopts[]= { IDFF_buildHistogram ,&TglobalSettingsDecVideo::buildHistogram ,0,0,_l(""),0, _l("buildHistogram"),0, IDFF_xvid ,&TglobalSettingsDecVideo::xvid ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_div3 ,&TglobalSettingsDecVideo::div3 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_divx ,&TglobalSettingsDecVideo::divx ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_dx50 ,&TglobalSettingsDecVideo::dx50 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_fvfw ,&TglobalSettingsDecVideo::fvfw ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_mp43 ,&TglobalSettingsDecVideo::mp43 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_mp42 ,&TglobalSettingsDecVideo::mp42 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_mp41 ,&TglobalSettingsDecVideo::mp41 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_h263 ,&TglobalSettingsDecVideo::h263 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_h264 ,&TglobalSettingsDecVideo::h264 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_h261 ,&TglobalSettingsDecVideo::h261 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_wmv1 ,&TglobalSettingsDecVideo::wmv1 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_wmv2 ,&TglobalSettingsDecVideo::wmv2 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_wmv3 ,&TglobalSettingsDecVideo::wmv3 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_mjpg ,&TglobalSettingsDecVideo::mjpg ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_dvsd ,&TglobalSettingsDecVideo::dvsd ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_hfyu ,&TglobalSettingsDecVideo::hfyu ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_cyuv ,&TglobalSettingsDecVideo::cyuv ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_asv1 ,&TglobalSettingsDecVideo::asv1 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_vcr1 ,&TglobalSettingsDecVideo::vcr1 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_mpg1 ,&TglobalSettingsDecVideo::mpg1 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_mpg2 ,&TglobalSettingsDecVideo::mpg2 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_mpegAVI ,&TglobalSettingsDecVideo::mpegAVI ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_theo ,&TglobalSettingsDecVideo::theo ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_3ivx ,&TglobalSettingsDecVideo::_3iv ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_svq1 ,&TglobalSettingsDecVideo::svq1 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_svq3 ,&TglobalSettingsDecVideo::svq3 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_cram ,&TglobalSettingsDecVideo::cram ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_iv32 ,&TglobalSettingsDecVideo::iv32 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_cvid ,&TglobalSettingsDecVideo::cvid ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_rv10 ,&TglobalSettingsDecVideo::rv10 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0, IDFF_ffv1 ,&TglobalSettingsDecVideo::ffv1 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -