📄 tpresets.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 "Tpresets.h"#include "reg.h"#include "TpresetSettings.h"#include "TpresetSettingsVideo.h"#include "TpresetSettingsAudio.h"#include "IffdshowBase.h"#include "IffdshowDec.h"#include "IffdshowDecVideo.h"#include "IffdshowDecAudio.h"//========================================== Tpresets =========================================Tpresets::~Tpresets(){ done();}void Tpresets::listRegKeys(strings &l){ l.clear(); HKEY hKey; char_t rkey[MAX_PATH];tsprintf(rkey,FFDSHOW_REG_PARENT _l("\\%s"),reg_child); RegOpenKeyEx(HKEY_CURRENT_USER,rkey,0,KEY_READ,&hKey); for (int i=0,retCode=ERROR_SUCCESS;retCode==ERROR_SUCCESS;i++) { char_t keyName[256];DWORD keyNameSize=255; FILETIME ftLastWriteTime; retCode = RegEnumKeyEx(hKey, i, keyName, &keyNameSize, NULL, NULL, NULL, &ftLastWriteTime ); if (retCode==ERROR_SUCCESS) l.push_back(ffstring(keyName)); else break; } RegCloseKey(hKey);}void Tpresets::init(void){ Tpreset *def=newPreset(); def->loadDefault(); push_back(def); strings keys; listRegKeys(keys); for (strings::const_iterator i=keys.begin();i!=keys.end();i++) if (findPreset(i->c_str())==end()) { Tpreset *preset=newPreset(i->c_str()); preset->loadReg(); push_back(preset); } if (keys.size()==0) (*begin())->saveReg();}void Tpresets::done(void){ for (iterator i=begin();i!=end();i++) delete *i; clear(); }Tpresets::iterator Tpresets::findPreset(const char_t *presetName){ for (iterator i=begin();i!=end();i++) if (_stricoll(presetName,(*i)->presetName)==0) return i; return end(); }void Tpresets::storePreset(Tpreset *preset){ iterator i=findPreset(preset->presetName); if (i!=end()) *i=preset; else push_back(preset);}Tpreset* Tpresets::getPreset(const char_t *presetName,bool create){ iterator i=findPreset(presetName); if (i!=end()) return *i; else if (create) { Tpreset *newpreset=newPreset(presetName); newpreset->loadReg(); storePreset(newpreset); return newpreset; } else return NULL;}void Tpresets::savePreset(Tpreset *preset,const char_t *presetName){ if (presetName) strcpy(preset->presetName,presetName); preset->saveReg(); storePreset(preset);}bool Tpresets::savePresetFile(Tpreset *preset,const char_t *flnm){ bool res=preset->saveFile(flnm); if (res) storePreset(preset); return res; }bool Tpresets::removePreset(const char_t *presetName){ iterator i=findPreset(presetName); if (i!=begin() && i!=end()) { delete *i; erase(i); return true; } else return false;}void Tpresets::nextUniqueName(Tpreset *preset){ nextUniqueName(preset->presetName);}void Tpresets::nextUniqueName(char_t *presetName){ iterator i=findPreset(presetName); if (i==end()) return; for (int ii=1;;ii++) { char_t pomS[260]; tsprintf(pomS,_l("%s %i"),presetName,ii); if (findPreset(pomS)==end()) { strcpy(presetName,pomS); return; } }}void Tpresets::saveRegAll(void){ for (iterator ii=begin();ii!=end();ii++) if (!(*ii)->autoLoadedFromFile) (*ii)->saveReg(); strings keys; listRegKeys(keys); for (strings::const_iterator i=keys.begin();i!=keys.end();i++) if (i->c_str()[0]!='\0' && findPreset(i->c_str())==end()) { char_t presetRegStr[256]; tsprintf(presetRegStr,FFDSHOW_REG_PARENT _l("\\%s\\%s"),reg_child,i->c_str()); RegDeleteKey(HKEY_CURRENT_USER,presetRegStr); }}Tpreset* Tpresets::getAutoPreset(IffdshowBase *deci,bool filefirst){ TautoPresetProps aprops(deci); return getAutoPreset0(aprops,filefirst);}Tpreset* Tpresets::getAutoPreset0(TautoPresetProps &aprops,bool filefirst){ if (filefirst) { const char_t *AVIname=aprops.getSourceFullFlnm(); char_t drive[MAX_PATH],path[MAX_PATH],name[MAX_PATH]; _splitpath(AVIname,drive,path,name,NULL); char_t presetFlnm[1024]; _makepath(presetFlnm,drive,path,name,presetext); if (fileexists(presetFlnm)) { Tpreset *preset=newPreset(AVIname); preset->loadFile(presetFlnm); Tpreset::normalizePresetName(preset->presetName,AVIname); preset->autoLoadedFromFile=true; iterator i=findPreset(preset->presetName); if (i!=end() && (*i)->autoLoadedFromFile) removePreset(preset->presetName); nextUniqueName(preset); push_back(preset); return preset; } } for (iterator i=begin();i!=end();i++) if ((*i)->isAutoPreset(aprops)) return *i; return NULL; }//======================================= TpresetsVideo =======================================Tpreset* TpresetsVideo::getAutoPreset(IffdshowBase *deci,bool filefirst){ TvideoAutoPresetProps aprops(deci); return getAutoPreset0(aprops,filefirst);}Tpreset* TpresetsVideo::getAutoPreset0(TautoPresetProps &aprops,bool filefirst){ if (Tpreset *preset=Tpresets::getAutoPreset0(aprops,filefirst)) return preset; else { unsigned int dx,dy; ((TvideoAutoPresetProps&)aprops).getSourceResolution(&dx,&dy); for (iterator i=begin();i!=end();i++) { TpresetVideo *presetV=(TpresetVideo*)*i; if (presetV->autoloadSize && presetV->autoloadSizeMatch(dx,dy)) return presetV; } } return NULL;}Tpreset* TpresetsVideo::newPreset(const char_t *presetName){ return new TpresetVideo(reg_child,presetName?presetName:FFPRESET_DEFAULT);}//======================================= TpresetsVideo =======================================Tpreset* TpresetsVideoPlayer::newPreset(const char_t *presetName){ return new TpresetVideoPlayer(reg_child,presetName?presetName:FFPRESET_DEFAULT);}//======================================= TpresetsAudio =======================================Tpreset* TpresetsAudio::newPreset(const char_t *presetName){ return new TpresetAudio(presetName?presetName:FFPRESET_DEFAULT,reg_child);}Tpreset* TpresetsAudio::getAutoPreset(IffdshowBase *deci,bool filefirst){ TaudioAutoPresetProps aprops(deci); return getAutoPreset0(aprops,filefirst);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -