tresizeaspectsettings.cpp.svn-base
来自「ffshow源码」· SVN-BASE 代码 · 共 548 行 · 第 1/2 页
SVN-BASE
548 行
/* * 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 "TresizeAspectSettings.h"#include "TimgFilterResize.h"#include "CresizeAspect.h"#include "CresizeBorders.h"#include "CresizeSettings.h"#include "TffdshowPageDec.h"#include "postproc/swscale.h"const TresizeAspectSettings::TmethodProps TresizeAspectSettings::methodsProps[]={ METHOD_SWS_FAST_BILINEAR,_l("Fast bilinear"),LIB_SWSCALER,SWS_FAST_BILINEAR, METHOD_SWS_BILINEAR ,_l("Bilinear"), LIB_SWSCALER,SWS_BILINEAR, METHOD_SWS_BICUBIC ,_l("Bicubic"), LIB_SWSCALER,SWS_BICUBIC, METHOD_SWS_X ,_l("Experimental"), LIB_SWSCALER,SWS_X, METHOD_SWS_POINT ,_l("Point"), LIB_SWSCALER,SWS_POINT, METHOD_SWS_AREA ,_l("Area"), LIB_SWSCALER,SWS_AREA, METHOD_SWS_BICUBLIN ,_l("Bicublin"), LIB_SWSCALER,0,//SWS_BICUBLIN, METHOD_SWS_GAUSS ,_l("Gauss"), LIB_SWSCALER,SWS_GAUSS, METHOD_SWS_SINC ,_l("Sinc"), LIB_SWSCALER,SWS_SINC, METHOD_SWS_LANCZOS ,_l("Lanczos"), LIB_SWSCALER,SWS_LANCZOS, METHOD_SWS_SPLINE ,_l("Spline"), LIB_SWSCALER,SWS_SPLINE, METHOD_NONE ,_l("None"), LIB_NONE,0, METHOD_SIMPLE ,_l("Simple resize"),LIB_SIMPLE,0, METHOD_WARPED ,_l("Warped resize"),LIB_SIMPLE,1, METHOD_SUPER2XSAI ,_l("Super2xSaI") ,LIB_SAI,0, METHOD_2XSAI ,_l("2xSaI") ,LIB_SAI,1, METHOD_HQ2X ,_l("hq2x") ,LIB_SAI,2, NULL};const int TresizeAspectSettings::methodsOrder[]={ METHOD_SWS_FAST_BILINEAR, METHOD_SWS_BILINEAR, METHOD_SWS_BICUBIC, // METHOD_SWS_X, METHOD_SWS_POINT, METHOD_SWS_AREA, //METHOD_SWS_BICUBLIN, METHOD_SWS_GAUSS, METHOD_SWS_SINC, METHOD_SWS_LANCZOS, METHOD_SWS_SPLINE, METHOD_SIMPLE, METHOD_WARPED, METHOD_SUPER2XSAI, METHOD_2XSAI, METHOD_HQ2X, METHOD_NONE, -1};const TfilterIDFF TresizeAspectSettings::idffs={ /*name*/ _l("Resize & aspect"), /*id*/ IDFF_filterResize, /*is*/ IDFF_isResize, /*order*/ IDFF_orderResize, /*show*/ IDFF_showResize, /*full*/ IDFF_fullResize, /*half*/ 0, /*dlgId*/ IDD_RESIZEASPECT,};TresizeAspectSettings::TresizeAspectSettings(TintStrColl *Icoll,TfilterIDFFs *filters):TfilterSettingsVideo(sizeof(*this),Icoll,filters,&idffs){ half=0; static const TintOptionT<TresizeAspectSettings> iopts[]= { IDFF_isResize ,&TresizeAspectSettings::is ,0,0,_l(""),1, _l("isResize"),0, IDFF_showResize ,&TresizeAspectSettings::show ,0,0,_l(""),1, _l("showResize"),1, IDFF_orderResize ,&TresizeAspectSettings::order ,1,1,_l(""),1, _l("orderResize"),0, IDFF_fullResize ,&TresizeAspectSettings::full ,0,0,_l(""),1, _l("fullResize"),0, IDFF_resizeMode ,&TresizeAspectSettings::mode ,0,3,_l(""),1, _l("resizeMode"),0, IDFF_resizeDx ,(TintVal)&TresizeAspectSettings::dx ,16,16384,_l(""),1, _l("resizeDx"),640, IDFF_resizeDy ,(TintVal)&TresizeAspectSettings::dy ,16,16384,_l(""),1, _l("resizeDy"),480, IDFF_resizeMultOf ,&TresizeAspectSettings::multOf ,1,128,_l(""),1, _l("resizeMulfOf"),16, IDFF_resizeA1 ,&TresizeAspectSettings::a1 ,1,10000,_l(""),1, _l("resizeA1"),4, IDFF_resizeA2 ,&TresizeAspectSettings::a2 ,1,10000,_l(""),1, _l("resizeA2"),3, IDFF_resizeMult1000 ,&TresizeAspectSettings::mult1000 ,1,1000*1000,_l(""),1, _l("resizeMult1000"),2000, IDFF_resizeIf ,&TresizeAspectSettings::_if ,0,2,_l(""),1, _l("resizeIf"),0, IDFF_resizeIfXcond ,&TresizeAspectSettings::xcond ,-1,1,_l(""),1, _l("resizeIfXcond"),1, IDFF_resizeIfXval ,(TintVal)&TresizeAspectSettings::xval ,0,16384,_l(""),1, _l("resizeIfXval"),640, IDFF_resizeIfYcond ,&TresizeAspectSettings::ycond ,-1,1,_l(""),1, _l("resizeIfYcond"),1, IDFF_resizeIfYval ,(TintVal)&TresizeAspectSettings::yval ,0,16384,_l(""),1, _l("resizeIfYval"),480, IDFF_resizeIfXYcond ,&TresizeAspectSettings::xycond ,0,1,_l(""),1, _l("resizeIfXYcond"),1, IDFF_resizeIfPixCond ,&TresizeAspectSettings::pixcond ,-1,1,_l(""),1, _l("resizeIfPixCond"),1, IDFF_resizeIfPixVal ,(TintVal)&TresizeAspectSettings::pixval,0,16384*16384,_l(""),1, _l("resizeIfPixVal"),640*480, IDFF_bordersInside ,&TresizeAspectSettings::bordersInside ,0,0,_l(""),1, _l("bordersInside"),1, IDFF_bordersUnits ,&TresizeAspectSettings::bordersUnits ,0,1,_l(""),1, _l("bordersUnits"),0, IDFF_bordersLocked ,&TresizeAspectSettings::bordersLocked ,0,0,_l(""),1, _l("bordersLocked"),1, IDFF_bordersPercentX ,&TresizeAspectSettings::bordersPercentX,0,100,_l(""),1, _l("bordersX"),0, IDFF_bordersPercentY ,&TresizeAspectSettings::bordersPercentY,0,100,_l(""),1, _l("bordersY"),0, IDFF_bordersPixelsX ,&TresizeAspectSettings::bordersPixelsX ,0,300,_l(""),1, _l("bordersPixelsX"),0, IDFF_bordersPixelsY ,&TresizeAspectSettings::bordersPixelsY ,0,300,_l(""),1, _l("bordersPixelsY"),0, IDFF_isAspect ,&TresizeAspectSettings::isAspect ,0,0,_l(""),1, _l("resizeAscpect"),1, IDFF_aspectRatio ,&TresizeAspectSettings::aspectRatio ,0,0,_l(""),1, _l("aspectRatio"),int(1.33*65536), IDFF_resizeMethodLuma ,&TresizeAspectSettings::methodLuma ,0,numMethods-1,_l(""),1, _l("resizeMethod"),methodDef, IDFF_resizeMethodChroma ,&TresizeAspectSettings::methodChroma ,0,numMethods-1,_l(""),1, _l("resizeMethodChroma"),-1, IDFF_resizeMethodsLocked ,&TresizeAspectSettings::methodsLocked ,0,0,_l(""),1, _l("resizeMethodsLocked"),1, IDFF_resizeBicubicLumaParam ,&TresizeAspectSettings::bicubicLumaParam ,0,400,_l(""),1, _l("resizeBicubicParam"),0, IDFF_resizeBicubicChromaParam ,&TresizeAspectSettings::bicubicChromaParam ,0,400,_l(""),1, _l("resizeBicubicChromaParam"),-1, IDFF_resizeGaussLumaParam ,&TresizeAspectSettings::gaussLumaParam ,0,100,_l(""),1, _l("resizeGaussParam"),0, IDFF_resizeGaussChromaParam ,&TresizeAspectSettings::gaussChromaParam ,0,100,_l(""),1, _l("resizeGaussChromaParam"),-1, IDFF_resizeLanczosLumaParam ,&TresizeAspectSettings::lanczosLumaParam ,0,10,_l(""),1, _l("resizeLanczosParam"),0, IDFF_resizeLanczosChromaParam ,&TresizeAspectSettings::lanczosChromaParam ,0,10,_l(""),1, _l("resizeLanczosChromaParam"),-1, IDFF_resizeSimpleWarpXparam,&TresizeAspectSettings::simpleWarpXparam,800,1300,_l(""),1, _l("resizeSimpleWarpXparam"),int(1.15*1000), IDFF_resizeSimpleWarpYparam,&TresizeAspectSettings::simpleWarpYparam,800,1300,_l(""),1, _l("resizeSimpleWarpYparam"),int(0.95*1000), IDFF_resizeGblurLum ,&TresizeAspectSettings::GblurLum ,0,200,_l(""),1, _l("resizeGblurLum"),0, IDFF_resizeGblurChrom ,&TresizeAspectSettings::GblurChrom ,0,200,_l(""),1, _l("resizeGblurChrom"),0, IDFF_resizeSharpenLum ,&TresizeAspectSettings::sharpenLum ,0,200,_l(""),1, _l("resizeSharpenLum"),0, IDFF_resizeSharpenChrom ,&TresizeAspectSettings::sharpenChrom ,0,200,_l(""),1, _l("resizeSharpenChrom"),0, IDFF_resizeInterlaced ,&TresizeAspectSettings::interlaced ,0,2,_l(""),1, _l("resizeInterlaced"),0, 0 }; addOptions(iopts); static const TcreateParamList2<TmethodProps> listMethod(TresizeAspectSettings::methodsProps,&TmethodProps::name);setParamList(IDFF_resizeMethodLuma,&listMethod);setParamList(IDFF_resizeMethodChroma,&listMethod);}void TresizeAspectSettings::createFilters(size_t filtersorder,Tfilters *filters,TfilterQueue &queue) const{ idffOnChange(idffs,filters,queue.temporary); if (show) queueFilter<TimgFilterResize>(filtersorder,filters,queue); }void TresizeAspectSettings::createPages(TffdshowPageDec *parent) const{ if ((parent->deci->getParam2(IDFF_filterMode)&IDFF_FILTERMODE_VFW)==0) { parent->addFilterPage<TresizeAspectPage>(&idffs); parent->addFilterPage<TresizeBordersPage>(&idffs); parent->addFilterPage<TresizeSettingsPage>(&idffs); } }const int* TresizeAspectSettings::getResets(unsigned int pageId){ if (pageId==0) // TODO: unify { static const int idResets[]={ IDFF_resizeMode,IDFF_resizeDx,IDFF_resizeDy,IDFF_resizeA1,IDFF_resizeA2,IDFF_resizeMult1000,IDFF_resizeIf,IDFF_resizeIfXcond,IDFF_resizeIfXval,IDFF_resizeIfYcond,IDFF_resizeIfYval,IDFF_resizeIfXYcond,IDFF_resizeIfPixCond,IDFF_resizeIfPixVal, IDFF_isAspect,IDFF_aspectRatio, IDFF_bordersInside,IDFF_bordersLocked,IDFF_bordersUnits, IDFF_bordersX,IDFF_bordersY, IDFF_bordersPixelsX,IDFF_bordersPixelsY, IDFF_resizeMethodLuma,IDFF_resizeMethodChroma,IDFF_resizeMethodsLocked, IDFF_resizeGblurLum,IDFF_resizeGblurChrom, IDFF_resizeSharpenLum,IDFF_resizeSharpenChrom, IDFF_resizeBicubicLumaParam,IDFF_resizeBicubicChromaParam, IDFF_resizeGaussLumaParam,IDFF_resizeGaussChromaParam, IDFF_resizeLanczosLumaParam,IDFF_resizeLanczosChromaParam, IDFF_resizeSimpleWarpXparam,IDFF_resizeSimpleWarpYparam, IDFF_resizeInterlaced, 0}; return idResets; } else if (pageId==2) { static const int idResets[]={ IDFF_bordersInside,IDFF_bordersLocked,IDFF_bordersUnits, IDFF_bordersX,IDFF_bordersY, IDFF_bordersPixelsX,IDFF_bordersPixelsY, 0}; return idResets; } else if (pageId==3) { static const int idResets[]={ IDFF_resizeMethodLuma,IDFF_resizeMethodChroma,IDFF_resizeMethodsLocked, IDFF_resizeGblurLum,IDFF_resizeGblurChrom, IDFF_resizeSharpenLum,IDFF_resizeSharpenChrom, IDFF_resizeBicubicLumaParam,IDFF_resizeBicubicChromaParam, IDFF_resizeGaussLumaParam,IDFF_resizeGaussChromaParam, IDFF_resizeLanczosLumaParam,IDFF_resizeLanczosChromaParam, IDFF_resizeSimpleWarpXparam,IDFF_resizeSimpleWarpYparam, IDFF_resizeInterlaced, 0}; return idResets; } else return NULL; }bool TresizeAspectSettings::reset(unsigned int pageId){ bool res=TfilterSettingsVideo::reset(pageId); if (res && pageId==3) { methodChroma=methodLuma; bicubicChromaParam=bicubicLumaParam; gaussChromaParam=gaussLumaParam; lanczosChromaParam=lanczosLumaParam; } return res; }const char_t* TresizeAspectSettings::printSwsParams(char_t *algParam,int method,int bicubicParam,int gaussParam,int lanczosParam){ switch (method) { case METHOD_SWS_BICUBIC: tsprintf(algParam,_l(", parameter: %-5.2f"),-0.01f*bicubicParam); break; case METHOD_SWS_GAUSS: tsprintf(algParam,_l(", parameter: %-5.2f"),0.1f*gaussParam);
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?