⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 tresizeaspectsettings.cpp

📁 ffshow源码
💻 CPP
📖 第 1 页 / 共 2 页
字号:
/*
 * 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 + -