📄 tresizeaspectsettings.cpp
字号:
/*
* 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 + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -