tdeinterlacesettings.cpp.svn-base
来自「ffshow源码」· SVN-BASE 代码 · 共 185 行
SVN-BASE
185 行
/* * Copyright (c) 2003-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 "TdeinterlaceSettings.h"#include "postproc/postprocFilters.h"#include "CdeinterlaceTomsMoComp.h"#include "CdeinterlaceFramedoubler.h"#include "CdeinterlaceKernel.h"#include "CdeinterlaceDGBob.h"#include "TimgFilterDeinterlace.h"#include "TimgFilterDScalerDeinterlace.h"#include "TimgFilterTomsMoComp.h"#include "TimgFilterKernelDeint.h"#include "TimgFilterDGbob.h"#include "Cdeinterlace.h"#include "TffdshowPageDec.h"const TdeinterlaceSettings::TmethodProps TdeinterlaceSettings::methodProps[]={ 12,_l("Bypass") ,BYPASS ,NULL, 0,_l("Linear interpolation"),LINEAR_IPOL_DEINT_FILTER ,NULL, 1,_l("Linear blending") ,LINEAR_BLEND_DEINT_FILTER,NULL, 2,_l("Cubic interpolation") ,CUBIC_IPOL_DEINT_FILTER ,NULL, 3,_l("Cubic blending") ,CUBIC_BLEND_DEINT_FILTER ,NULL, 4,_l("Median") ,MEDIAN_DEINT_FILTER ,NULL, 5,_l("TomsMoComp") ,TOMSMOCOMP_DEINT_FILTER ,TdeinterlacePageTomsMoComp::create, 6,_l("DGBob") ,DGBOB_DEINT_FILTER ,TdeinterlacePageDGbob::create, 7,_l("Framerate doubler") ,FRAMERATEDOUBLER ,TdeinterlacePageFramedoubler::create, 8,_l("ffmpeg deinterlacer") ,FFMPEG_DEINT_FILTER ,NULL, 9,_l("DScaler plugin") ,DSCALER ,NULL, 10,_l("5-tap lowpass") ,LOWPASS5_DEINT_FILTER ,NULL, 11,_l("Kernel deinterlacer") ,KERNELDEINT ,TdeinterlacePageKernel::create, 13,_l("Kernel bob") ,KERNELBOB ,TdeinterlacePageKernel::create, 0,NULL ,0 ,NULL};const char_t* TdeinterlaceSettings::dgbobModes[]={ _l("equal number of frames, equal framerate"), _l("double number of frames, double framerate"), _l("double number of frames, equal framerate"), NULL};const TdeinterlaceSettings::TframerateDoublerSEs TdeinterlaceSettings::frameRateDoublerSEs[]={ _l("No motion estimation - blend images"),0, _l("Current location only"),1, _l("1 pixel motion, left & right"),3, _l("3x3 square"),9, NULL,0};const TfilterIDFF TdeinterlaceSettings::idffs={ /*name*/ _l("Deinterlacing"), /*id*/ IDFF_filterDeinterlace, /*is*/ IDFF_isDeinterlace, /*order*/ IDFF_orderDeinterlace, /*show*/ IDFF_showDeinterlace, /*full*/ IDFF_fullDeinterlace, /*half*/ 0, /*dlgId*/ IDD_DEINTERLACE,};TdeinterlaceSettings::TdeinterlaceSettings(TintStrColl *Icoll,TfilterIDFFs *filters):TfilterSettingsVideo(sizeof(*this),Icoll,filters,&idffs){ memset(dscalerFlnm,0,sizeof(dscalerFlnm)); memset(dscalerCfg,0,sizeof(dscalerCfg)); half=0; static const TintOptionT<TdeinterlaceSettings> iopts[]= { IDFF_isDeinterlace ,&TdeinterlaceSettings::is ,0,0,_l(""),1, _l("isDeinterlace"),0, IDFF_showDeinterlace ,&TdeinterlaceSettings::show ,0,0,_l(""),1, _l("showDeinterlace"),1, IDFF_orderDeinterlace ,&TdeinterlaceSettings::order ,1,1,_l(""),1, _l("orderDeinterlace"),0, IDFF_fullDeinterlace ,&TdeinterlaceSettings::full ,0,0,_l(""),1, _l("fullDeinterlace"),0, IDFF_swapFields ,&TdeinterlaceSettings::swapfields ,0,0,_l(""),1, _l("swapFields"),0, IDFF_deinterlaceMethod ,&TdeinterlaceSettings::cfgId ,0,13,_l(""),1, _l("deinterlaceMethod"),cfgIdDef, IDFF_tomocompSE ,&TdeinterlaceSettings::tomsmocompSE ,0,30,_l(""),1, _l("tomocompSE"),3, IDFF_tomocompVF ,&TdeinterlaceSettings::tomsmocompVF ,0,0,_l(""),1, _l("tomocompVF"),0, IDFF_frameRateDoublerThreshold,&TdeinterlaceSettings::frameRateDoublerThreshold,0,255,_l(""),1, _l("frameRateDoublerThreshold"),255, IDFF_frameRateDoublerSE ,&TdeinterlaceSettings::frameRateDoublerSE ,0,10,_l(""),1, _l("frameRateDoublerSE"),3, IDFF_kernelDeintThreshold ,&TdeinterlaceSettings::kernelThreshold ,0,255,_l(""),1, _l("kernelDeintThreshold"),10, IDFF_kernelDeintSharp ,&TdeinterlaceSettings::kernelSharp ,0,0,_l(""),1, _l("kernelDeintSharp"),0, IDFF_kernelDeintTwoway ,&TdeinterlaceSettings::kernelTwoway ,0,0,_l(""),1, _l("kernelDeintTwoway"),0, IDFF_kernelDeintMap ,&TdeinterlaceSettings::kernelMap ,0,0,_l(""),1, _l("kernelDeintMap"),0, IDFF_kernelDeintLinked ,&TdeinterlaceSettings::kernelLinked ,0,0,_l(""),1, _l("kernelDeintLinked"),0, IDFF_dgbobMode ,&TdeinterlaceSettings::dgbobMode ,0,2,_l(""),1, _l("dgbobMode"),1, IDFF_dgbobThreshold ,&TdeinterlaceSettings::dgbobThreshold ,0,60,_l(""),1, _l("dgbobThreshold"),12, IDFF_dgbobAP ,&TdeinterlaceSettings::dgbobAP ,0,0,_l(""),1, _l("dgbobAP"),0, 0 }; addOptions(iopts); static const TstrOption sopts[]= { IDFF_dscalerDIflnm,(TstrVal)&TdeinterlaceSettings::dscalerFlnm,MAX_PATH,_l(""),1, _l("dscalerDIflnm"),_l(""), IDFF_dscalerDIcfg ,(TstrVal)&TdeinterlaceSettings::dscalerCfg ,512 ,_l(""),1, _l("dscalerDIcfg"),_l(""), 0 }; addOptions(sopts); static const TcreateParamList2<TmethodProps> listMethod(methodProps,&TmethodProps::name);setParamList(IDFF_deinterlaceMethod,&listMethod); static const TcreateParamList2<TframerateDoublerSEs> listSE(frameRateDoublerSEs,&TframerateDoublerSEs::name);setParamList(IDFF_frameRateDoublerSE,&listSE); static const TcreateParamList1 listDGbobMode(dgbobModes);setParamList(IDFF_dgbobMode,&listDGbobMode); }void TdeinterlaceSettings::createFilters(size_t filtersorder,Tfilters *filters,TfilterQueue &queue) const{ idffOnChange(idffs,filters,queue.temporary); if (is && show) { if (!queue.temporary) setOnChange(IDFF_deinterlaceMethod,filters,&Tfilters::onQueueChange); queueFilter<TimgFilterDeinterlace>(filtersorder,filters,queue); switch (getMethod(cfgId).id) { case BYPASS:break; case TOMSMOCOMP_DEINT_FILTER:queueFilter<TimgFilterTomsMoComp>(filtersorder,filters,queue); return; case DGBOB_DEINT_FILTER:queueFilter<TimgFilterDGbob>(filtersorder,filters,queue); return; case FRAMERATEDOUBLER:queueFilter<TimgFilterFramerateDoubler>(filtersorder,filters,queue); return; case DSCALER:queueFilter<TimgFilterDScalerDI>(filtersorder,filters,queue); return; case KERNELDEINT:queueFilter<TimgFilterKernelDeint2>(filtersorder,filters,queue); return; case KERNELBOB:queueFilter<TimgFilterKernelBob>(filtersorder,filters,queue); return; default:queueFilter<TimgFilterMplayerDeinterlace>(filtersorder,filters,queue); return; //mplayer deinterlacers } } }void TdeinterlaceSettings::createPages(TffdshowPageDec *parent) const{ parent->addFilterPage<TdeinterlacePage>(&idffs);}const TdeinterlaceSettings::TmethodProps& TdeinterlaceSettings::getMethod(int cfgId){ for (const TmethodProps *m=methodProps;m->name;m++) if (m->cfgId==cfgId) return *m; return methodProps[0];}bool TdeinterlaceSettings::getTip(unsigned int pageId,char_t *tipS,size_t len){ if (getMethod(cfgId).id!=DSCALER) { tsnprintf(tipS,len,_l("Method: %s"),getMethod(cfgId).name); tipS[len-1]='\0'; return true; } else return false;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?