⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tglobalsettings.cpp.svn-base

📁 ffshow源码
💻 SVN-BASE
📖 第 1 页 / 共 4 页
字号:
/* * 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 + -