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 + -
显示快捷键?