📄 tpresetsettingsvideo.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 "TpresetSettingsVideo.h"#include "TavisynthSettings.h"#include "TblurSettings.h"#include "TcropSettings.h"#include "TdctSettings.h"#include "TdeinterlaceSettings.h"#include "TdscalerFilterSettings.h"#include "TexpandSettings.h"#include "TlevelsSettings.h"#include "TnoiseSettings.h"#include "ToffsetSettings.h"#include "TperspectiveSettings.h"#include "TpictPropSettings.h"#include "TpostprocSettings.h"#include "TresizeAspectSettings.h"#include "TsharpenSettings.h"#include "TsubtitlesSettings.h"#include "TwarpsharpSettings.h"#include "TlogoawaySettings.h"#include "TbitmapSettings.h"#include "TvisSettings.h"#include "TgradFunSettings.h"#include "TgrabSettings.h"#include "ThwOverlaySettings.h"#include "ToutputVideoSettings.h"#include "ffdshow_constants.h"#include "Tlibavcodec.h"#include "IffdshowBase.h"#include "IffdshowDec.h"#include "IffdshowDecVideo.h"#include "Teval.h"#include "Tconfig.h"//========================= TvideoAutoPresetProps =========================const char_t TvideoAutoPresetProps::aspectSAR=_l('S'),TvideoAutoPresetProps::aspectDAR=_l('D');TvideoAutoPresetProps::TvideoAutoPresetProps(IffdshowBase *Ideci): TautoPresetProps(Ideci), wasResolution(false), deciV(Ideci), SAR(-1),DAR(-1), fps(0){ fourcc[0]='\0';}void TvideoAutoPresetProps::getSourceResolution(unsigned int *dxPtr,unsigned int *dyPtr){ if (!wasResolution) { wasResolution=true; deciV->getAVIdimensions(&dx,&dy); } *dxPtr=dx;*dyPtr=dy; }const char_t* TvideoAutoPresetProps::getFOURCC(void){ if (fourcc[0]=='\0') { FOURCC fcc=deciV->getMovieFOURCC(); memcpy(fourcc,&fcc,4); fourcc[4]='\0'; } return fourcc; }const char_t* TvideoAutoPresetProps::getFOURCCitem(IffdshowDec *deciD,unsigned int index){ const char_t **list=deciD->getSupportedFOURCCs();; while (index-- && *(list++)); return *list;}const char_t* TvideoAutoPresetProps::getSAR(void){ if (SAR==-1) { unsigned int a1,a2; if (deciV->getInputSAR(&a1,&a2)==S_OK) SAR=double(a1)/a2; } return &aspectSAR;}const char_t* TvideoAutoPresetProps::getDAR(void){ if (DAR==-1) { unsigned int a1,a2; if (deciV->getInputDAR(&a1,&a2)==S_OK) DAR=double(a1)/a2; } return &aspectDAR; }bool TvideoAutoPresetProps::aspectMatch(const char_t *expr,const char_t *aspectStr){ const double &aspect=aspectStr==&aspectSAR?SAR:DAR; Teval::Tvariable vars[]={{_l("aspect"),&aspect},NULL}; const char_t *err; double res=Teval(expr,vars)(&err); return !err && !!res;}const char_t* TvideoAutoPresetProps::getFps(void){ if (fps==0) { unsigned int fps1000; if (deciV->getAVIfps(&fps1000)==S_OK) fps=fps1000/1000.0; } return _l("fps"); }bool TvideoAutoPresetProps::fpsMatch(const char_t *expr,const char_t *){ Teval::Tvariable vars[]={{_l("fps"),&fps},NULL}; const char_t *err; double res=Teval(expr,vars)(&err); return !err && !!res;}//============================== TpresetVideo =============================TpresetVideo::TpresetVideo(const char_t *Ireg_child,const char_t *IpresetName): Tpreset(Ireg_child,IpresetName,-1){ static const TintOptionT<TpresetVideo> iopts[]= { IDFF_presetAutoloadSize ,&TpresetVideo::autoloadSize ,0,0,_l(""),0, _l("autoloadSize"),0, IDFF_presetAutoloadSizeXmin,&TpresetVideo::autoloadSizeXmin ,16,16384,_l(""),0, _l("autoloadSizeXmin"),16, IDFF_presetAutoloadSizeXmax,&TpresetVideo::autoloadSizeXmax ,16,16384,_l(""),0, _l("autoloadSizeXmax"),2048, IDFF_presetAutoloadSizeCond,&TpresetVideo::autoloadSizeCond ,0,1,_l(""),0, _l("autoloadSizeCond"),1, IDFF_presetAutoloadSizeYmin,&TpresetVideo::autoloadSizeYmin ,16,16384,_l(""),0, _l("autoloadSizeYmin"),16, IDFF_presetAutoloadSizeYmax,&TpresetVideo::autoloadSizeYmax ,16,16384,_l(""),0, _l("autoloadSizeYmax"),2048, IDFF_idct ,&TpresetVideo::idct ,0,6,_l(""),1, _l("idct"),0, IDFF_videoDelay ,&TpresetVideo::videoDelay ,1,1,_l(""),1, _l("videoDelay"),0, IDFF_isVideoDelayEnd ,&TpresetVideo::isVideoDelayEnd ,0,0,_l(""),1, _l("isVideoDelayEnd"),0, IDFF_videoDelayEnd ,&TpresetVideo::videoDelayEnd ,1,1,_l(""),1, _l("videoDelayEnd"),0, IDFF_workaroundBugs ,&TpresetVideo::workaroundBugs ,1,1,_l(""),1, _l("workaroundBugs2"),FF_BUG_AUTODETECT, IDFF_errorConcealment ,&TpresetVideo::errorConcealment ,0,3,_l(""),1, _l("errorConcealment"),FF_EC_GUESS_MVS|FF_EC_DEBLOCK, IDFF_errorResilience ,&TpresetVideo::errorResilience ,0,4,_l(""),1, _l("errorResilience"),FF_ER_CAREFUL, IDFF_numLAVCdecThreads ,&TpresetVideo::lavcDecThreads ,1,8,_l(""),1, _l("threadsnum"),1, IDFF_grayscale ,&TpresetVideo::grayscale ,0,0,_l(""),1, _l("grayscale"),0, IDFF_multiThreadDec ,&TpresetVideo::multiThread ,0,0,_l(""),1, _l("multiThread"),TintOption::DEF_DYN, IDFF_isDyInterlaced ,&TpresetVideo::isDyInterlaced ,0,0,_l(""),0, _l("isDyInterlaced"),0, IDFF_dyInterlaced ,&TpresetVideo::dyInterlaced ,0,4096,_l(""),0, _l("dyInterlaced"),288, 0 }; addOptions(iopts); static const TcreateParamList1 listIDCT(Tlibavcodec::idctNames);setParamList(IDFF_idct,&listIDCT); static const TcreateParamList1 listErrorConcealment(Tlibavcodec::errorConcealments);setParamList(IDFF_errorConcealment,&listErrorConcealment); static const TcreateParamList1 listErrorResilience(Tlibavcodec::errorResiliences);setParamList(IDFF_errorResilience,&listErrorResilience); static const char_t *aspectHelp=_l("Enter logical expression with 'aspect' variable and comparison and arithmetic operators,\nfor example \"16/9<aspect AND aspect<2.35\" or \"aspect=1\"."); static const char_t *fpsHelp=_l("Enter logical expression with 'fps' variable and comparison and arithmetic operators,\nfor example \"fps>30\"."); static const TautoPresetItemDef autoPresetItems[]= { { _l("on FOURCC match"),NULL, _l("autoloadFOURCC"),0, _l("autoloadFOURCCs"),_l(""), &TautoPresetProps::stricoll, (TautoPresetItemDef::TgetValFc)&TvideoAutoPresetProps::getFOURCC, &TvideoAutoPresetProps::getFOURCCitem, }, { _l("on pixel aspect ratio match"),NULL, _l("autoloadSAR"),0, _l("autoloadSARs"),_l(""), (TautoPresetItemDef::TcompareFc)&TvideoAutoPresetProps::aspectMatch, (TautoPresetItemDef::TgetValFc)&TvideoAutoPresetProps::getSAR, NULL,aspectHelp }, { _l("on picture aspect ratio match"),NULL, _l("autoloadDAR"),0, _l("autoloadDARs"),_l(""), (TautoPresetItemDef::TcompareFc)&TvideoAutoPresetProps::aspectMatch, (TautoPresetItemDef::TgetValFc)&TvideoAutoPresetProps::getDAR, NULL,aspectHelp }, { _l("on frame rate match"),NULL, _l("autoloadFrameRate"),0, _l("autoloadFrameRatess"),_l(""), (TautoPresetItemDef::TcompareFc)&TvideoAutoPresetProps::fpsMatch, (TautoPresetItemDef::TgetValFc)&TvideoAutoPresetProps::getFps, NULL,fpsHelp }, 0 }; addAutoPresetItems(autoPresetItems); new TcropSettings(options,filters); new TdeinterlaceSettings(options,filters); new TlogoawaySettings(options,filters); postproc=new TpostprocSettings(options,filters); new TpictPropSettings(options,filters); new TgradFunSettings(options,filters); levels=new TlevelsSettings(options,filters); new ToffsetSettings(options,filters); new TblurSettings(options,filters); new TsharpenSettings(options,filters); new TwarpsharpSettings(options,filters); new TDScalerFilterSettings(options,filters); new TnoiseSettings(options,filters); new TresizeAspectSettings(options,filters); new TperspectiveSettings(options,filters); subtitles=new TsubtitlesSettings(options,filters); new TavisynthSettings(options,filters); vis=new TvisSettings(options,filters); new TdctSettings(options,filters); new TbitmapSettings(options,filters); grab=new TgrabSettings(options,filters); output=new ToutputVideoSettings(options,filters);}void TpresetVideo::reg_op(TregOp &t){ t._REG_OP_N(0,_l("needOutcspsFix"),needOutcspsFix,1); t._REG_OP_N(0,_l("needGlobalFix"),needGlobalFix,1); Tpreset::reg_op(t);}int TpresetVideo::getDefault(int id){ if (id==IDFF_multiThreadDec) return Tconfig::getCPUcount()>1?1:0; else return Tpreset::getDefault(id); }void TpresetVideo::loadReg(void){ Tpreset::loadReg(); //if (idct==6) idct=0; if (needOutcspsFix) { needOutcspsFix=0; char_t rkey[MAX_PATH];tsprintf(rkey,FFDSHOW_REG_PARENT _l("\\%s"),reg_child); TregOpRegRead t(HKEY_LOCAL_MACHINE,rkey); output->reg_op_outcsps(t); } if (needGlobalFix) { needGlobalFix=0; char_t rkey[MAX_PATH];tsprintf(rkey,FFDSHOW_REG_PARENT _l("\\%s"),reg_child); TregOpRegRead t(HKEY_CURRENT_USER,rkey); vis->reg_op2(t); grab->reg_op2(t); }}bool TpresetVideo::autoloadSizeMatch(int AVIdx,int AVIdy){ bool Xok=(autoloadSizeXmin<=AVIdx && AVIdx<=autoloadSizeXmax); bool Yok=(autoloadSizeYmin<=AVIdy && AVIdy<=autoloadSizeYmax); return (autoloadSizeCond==0)?(Xok && Yok):(Xok || Yok);}//=========================== TpresetVideoPlayer ==========================TpresetVideoPlayer::TpresetVideoPlayer(const char_t *Ireg_child, const char_t *IpresetName):TpresetVideo(Ireg_child,IpresetName){ new ThwOverlaySettings(options,filters);}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -