tpostprocsettings.cpp.svn-base
来自「ffshow源码」· SVN-BASE 代码 · 共 187 行
SVN-BASE
187 行
/* * 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 "TpostprocSettings.h"#include "postproc/postprocFilters.h"#include "TimgFilterPostproc.h"#include "CpostProc.h"#include "TffdshowPageDec.h"const int TpostprocSettings::deblockStrengthDef=256;const TfilterIDFF TpostprocSettings::idffs={ /*name*/ _l("Postprocessing"), /*id*/ IDFF_filterPostproc, /*is*/ IDFF_isPostproc, /*order*/ IDFF_orderPostproc, /*show*/ IDFF_showPostproc, /*full*/ IDFF_fullPostproc, /*half*/ IDFF_halfPostproc, /*dlgId*/ IDD_POSTPROC,};const char_t* TpostprocSettings::h264modes[]={ _l("off"), _l("always"), _l("when decoding H.264 video"), _l("when decoding H.264 video and decoder deblocking is off"), NULL};TpostprocSettings::TpostprocSettings(TintStrColl *Icoll,TfilterIDFFs *filters):TfilterSettingsVideo(sizeof(*this),Icoll,filters,&idffs){ //levelFixChrom=0; static const TintOptionT<TpostprocSettings> iopts[]= { IDFF_isPostproc ,&TpostprocSettings::is ,0,0,_l(""),1, _l("isPostproc"),0, IDFF_showPostproc ,&TpostprocSettings::show ,0,0,_l(""),1, _l("showPostproc"),1, IDFF_orderPostproc ,&TpostprocSettings::order ,1,1,_l(""),1, _l("orderPostproc"),0, IDFF_fullPostproc ,&TpostprocSettings::full ,0,0,_l(""),1, _l("fullPostproc"),0, IDFF_halfPostproc ,&TpostprocSettings::half ,0,0,_l(""),1, _l("halfPostproc"),0, IDFF_postprocMethod ,&TpostprocSettings::method ,0,5,_l(""),1, _l("postprocMethod"),0, IDFF_postprocMethodNicFirst,&TpostprocSettings::nicFirst ,0,0,_l(""),1, _l("postprocMethodNicFirst"),0, IDFF_ppqual ,&TpostprocSettings::qual ,0,6,_l(""),1, _l("ppqual"),6, IDFF_autoq ,&TpostprocSettings::autoq ,0,0,_l(""),1, _l("autoq"),0, IDFF_ppIsCustom ,&TpostprocSettings::isCustom ,0,0,_l(""),1, _l("ppIsCustom"),0, IDFF_ppcustom ,&TpostprocSettings::custom ,1,1,_l(""),1, _l("ppcustom"),0, IDFF_deblockMplayerAccurate,&TpostprocSettings::deblockMplayerAccurate,0,0,_l(""),1, _l("deblockMplayerAccurate"),0, IDFF_deblockStrength ,&TpostprocSettings::deblockStrength ,0,512,_l(""),1, _l("deblockStrength"),deblockStrengthDef, IDFF_levelFixLum ,&TpostprocSettings::levelFixLum ,0,0,_l(""),1, _l("levelFixLum"),0,/* IDFF_levelFixChrom ,&TpostprocSettings::levelFixChrom ,0,0,_l(""),1, _l("levelFixChrom"),0,*/ IDFF_fullYrange ,&TpostprocSettings::fullYrange ,0,0,_l(""),1, _l("fullYrange"),0, IDFF_postprocNicXthresh ,&TpostprocSettings::nicXthresh ,0,255,_l(""),1, _l("postprocNicXthresh"),20, IDFF_postprocNicYthresh ,&TpostprocSettings::nicYthresh ,0,255,_l(""),1, _l("postprocNicYthresh"),40, IDFF_postprocSPPmode ,&TpostprocSettings::sppMode ,0,1,_l(""),1, _l("postprocSPPmode"),0, IDFF_postprocH264mode ,&TpostprocSettings::h264mode ,0,3,_l(""),1, _l("postprocH264mode"),3, 0 }; addOptions(iopts); static const TcreateParamList1 listH264modes(TpostprocSettings::h264modes);setParamList(IDFF_postprocH264mode,&listH264modes);}void TpostprocSettings::createFilters(size_t filtersorder,Tfilters *filters,TfilterQueue &queue) const{ idffOnChange(idffs,filters,queue.temporary); if (is && show) { if (!queue.temporary) { setOnChange(IDFF_postprocMethod,filters,&Tfilters::onQueueChange); setOnChange(IDFF_postprocMethodNicFirst,filters,&Tfilters::onQueueChange); setOnChange(IDFF_postprocH264mode,filters,&Tfilters::onQueueChange); } if (h264mode!=1) switch (method) { case 0: queueFilter<TimgFilterPostprocMplayer>(filtersorder,filters,queue); break; case 1: queueFilter<TimgFilterPostprocNic>(filtersorder,filters,queue); break; case 2: if (nicFirst) { queueFilter<TimgFilterPostprocNic>(filtersorder,filters,queue); queueFilter<TimgFilterPostprocMplayer>(filtersorder,filters,queue); } else { queueFilter<TimgFilterPostprocMplayer>(filtersorder,filters,queue); queueFilter<TimgFilterPostprocNic>(filtersorder,filters,queue); } break; case 4: queueFilter<TimgFilterPostprocSpp>(filtersorder,filters,queue); break; case 5: queueFilter<TimgFilterPostprocFspp>(filtersorder,filters,queue); break; } if (h264mode!=0) queueFilter<TimgFilterPostprocH264>(filtersorder,filters,queue); } }void TpostprocSettings::createPages(TffdshowPageDec *parent) const{ parent->addFilterPage<TpostProcPage>(&idffs);}const int* TpostprocSettings::getResets(unsigned int pageId){ static const int idResets[]={ IDFF_postprocMethod,IDFF_postprocMethodNicFirst, IDFF_ppIsCustom,IDFF_ppcustom, IDFF_ppqual,IDFF_autoq, IDFF_deblockMplayerAccurate, IDFF_deblockStrength, IDFF_levelFixLum,/*IDFF_levelFixChrom,*/IDFF_fullYrange, IDFF_postprocNicXthresh,IDFF_postprocNicYthresh, IDFF_postprocSPPmode,IDFF_postprocH264mode, 0}; return idResets;}bool TpostprocSettings::getTip(unsigned int pageId,char_t *tipS,size_t len){ if (isCustom) { tsprintf(tipS,_l("custom: %s%s%s%s%s%s"),custom&LUM_V_DEBLOCK?_l("luma deblock (V),"):_l(""),custom&LUM_H_DEBLOCK?_l("luma deblock (H),"):_l(""),custom&CHROM_V_DEBLOCK?_l("chroma deblock (V),"):_l(""),custom&CHROM_H_DEBLOCK?_l("chroma deblock (H),"):_l(""),custom&LUM_DERING?_l("luma dering,"):_l(""),custom&CHROM_DERING?_l("chroma dering,"):_l("")); char_t *c=strrchr(tipS,',');if (c) *c='\n'; else strcat(tipS,_l("\n")); } else { strcpy(tipS,_l("presets: ")); strcatf(tipS,_l("strength %i"),qual); if (autoq) strcat(tipS,_l(" automatic")); strcat(tipS,_l("\n")); } //if (levelFixChrom || levelFixLum) strcat(tipS,_l("level fix\n")); strcatf(tipS,_l("processing strength: %i\n"),deblockStrength); switch (method) { case 0:strcat(tipS,_l("mplayer"));break; case 1:strcat(tipS,_l("Nic's"));break; case 2:strcat(tipS,nicFirst?_l("Nic's + mplayer"):_l("mplayer + Nic's"));break; case 4:strcat(tipS,_l("SPP"));break; case 5:strcat(tipS,_l("fast SPP"));break; } return true;}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?