tdctsettings.cpp

来自「ffshow源码」· C++ 代码 · 共 140 行

CPP
140
字号
/*
 * 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 "TdctSettings.h"
#include "TimgFilterDCT.h"
#include "Cdct.h"
#include "TffdshowPageDec.h"

const TfilterIDFF TdctSettings::idffs=
{
 /*name*/      _l("DCT"),
 /*id*/        IDFF_filterDCT,
 /*is*/        IDFF_isDCT,
 /*order*/     IDFF_orderDCT,
 /*show*/      IDFF_showDCT,
 /*full*/      IDFF_fullDCT,
 /*half*/      IDFF_halfDCT,
 /*dlgId*/     IDD_DCT,
};

TdctSettings::TdctSettings(TintStrColl *Icoll,TfilterIDFFs *filters):TfilterSettingsVideo(sizeof(*this),Icoll,filters,&idffs)
{
 static const TintOptionT<TdctSettings> iopts[]=
  {
   IDFF_isDCT    ,&TdctSettings::is    ,0,0,_l(""),1, 
     _l("isDCT"),0,
   IDFF_showDCT  ,&TdctSettings::show  ,0,0,_l(""),1,
     _l("showDCT"),1,
   IDFF_orderDCT ,&TdctSettings::order ,1,1,_l(""),1,
     _l("orderDCT"),0,
   IDFF_fullDCT  ,&TdctSettings::full  ,0,0,_l(""),1,
     _l("fullDCT"),0,
   IDFF_halfDCT  ,&TdctSettings::half  ,0,0,_l(""),1,
     _l("halfDCT"),0,
   IDFF_dctMode  ,&TdctSettings::mode  ,0,2,_l(""),1,
     _l("dctMode"),0,  
   IDFF_dct0     ,&TdctSettings::fac0  ,0,3000,_l(""),1,
     _l("dct0"),1000,
   IDFF_dct1     ,&TdctSettings::fac1  ,0,3000,_l(""),1,
     _l("dct1"),1000,
   IDFF_dct2     ,&TdctSettings::fac2  ,0,3000,_l(""),1,
     _l("dct2"),1000,
   IDFF_dct3     ,&TdctSettings::fac3  ,0,3000,_l(""),1,
     _l("dct3"),1000,
   IDFF_dct4     ,&TdctSettings::fac4  ,0,3000,_l(""),1,
     _l("dct4"),1000,
   IDFF_dct5     ,&TdctSettings::fac5  ,0,3000,_l(""),1,
     _l("dct5"),1000,
   IDFF_dct6     ,&TdctSettings::fac6  ,0,3000,_l(""),1,
     _l("dct6"),500,
   IDFF_dct7     ,&TdctSettings::fac7  ,0,3000,_l(""),1,
     _l("dct7"),0,
   IDFF_dctQuant ,&TdctSettings::quant ,1,31,_l(""),1,
     _l("dctQuant"),5,  
   IDFF_dctMatrix0 ,&TdctSettings::matrix0 ,1,1,_l(""),1,
     _l("dctMatrix0") ,0x13121110,
   IDFF_dctMatrix1 ,&TdctSettings::matrix4 ,1,1,_l(""),1,
     _l("dctMatrix1") ,0x17161514,
   IDFF_dctMatrix2 ,&TdctSettings::matrix8 ,1,1,_l(""),1,
     _l("dctMatrix2") ,0x14131211,
   IDFF_dctMatrix3 ,&TdctSettings::matrix12,1,1,_l(""),1,
     _l("dctMatrix3") ,0x18171615,
   IDFF_dctMatrix4 ,&TdctSettings::matrix16,1,1,_l(""),1,
     _l("dctMatrix4") ,0x15141312,
   IDFF_dctMatrix5 ,&TdctSettings::matrix20,1,1,_l(""),1,
     _l("dctMatrix5") ,0x19181716,
   IDFF_dctMatrix6 ,&TdctSettings::matrix24,1,1,_l(""),1,
     _l("dctMatrix6") ,0x16151413,
   IDFF_dctMatrix7 ,&TdctSettings::matrix28,1,1,_l(""),1,
     _l("dctMatrix7") ,0x1b1a1817,
   IDFF_dctMatrix8 ,&TdctSettings::matrix32,1,1,_l(""),1,
     _l("dctMatrix8") ,0x17161514,
   IDFF_dctMatrix9 ,&TdctSettings::matrix36,1,1,_l(""),1,
     _l("dctMatrix9") ,0x1c1b1a19,
   IDFF_dctMatrix10,&TdctSettings::matrix40,1,1,_l(""),1,
     _l("dctMatrix10"),0x18171615,
   IDFF_dctMatrix11,&TdctSettings::matrix44,1,1,_l(""),1,
     _l("dctMatrix11"),0x1e1c1b1a,
   IDFF_dctMatrix12,&TdctSettings::matrix48,1,1,_l(""),1,
     _l("dctMatrix12"),0x1a181716,
   IDFF_dctMatrix13,&TdctSettings::matrix52,1,1,_l(""),1,
     _l("dctMatrix13"),0x1f1e1c1b,
   IDFF_dctMatrix14,&TdctSettings::matrix56,1,1,_l(""),1,
     _l("dctMatrix14"),0x1b191817,
   IDFF_dctMatrix15,&TdctSettings::matrix60,1,1,_l(""),1,
     _l("dctMatrix15"),0x211f1e1c,
   0
  }; 
 addOptions(iopts);
}

void TdctSettings::createFilters(size_t filtersorder,Tfilters *filters,TfilterQueue &queue) const
{
 idffOnChange(idffs,filters,queue.temporary);
 if (is && show)
  queueFilter<TimgFilterDCT>(filtersorder,filters,queue); 
}
void TdctSettings::createPages(TffdshowPageDec *parent) const
{
 parent->addFilterPage<TdctPage>(&idffs);
}

const int* TdctSettings::getResets(unsigned int pageId)
{
 static const int idResets[]={IDFF_dctMode,IDFF_dct0,IDFF_dct1,IDFF_dct2,IDFF_dct3,IDFF_dct4,IDFF_dct5,IDFF_dct6,IDFF_dct7,IDFF_dctQuant,IDFF_dctMatrix0,IDFF_dctMatrix1,IDFF_dctMatrix2,IDFF_dctMatrix3,IDFF_dctMatrix4,IDFF_dctMatrix5,IDFF_dctMatrix6,IDFF_dctMatrix7,IDFF_dctMatrix8,IDFF_dctMatrix9,IDFF_dctMatrix10,IDFF_dctMatrix11,IDFF_dctMatrix12,IDFF_dctMatrix13,IDFF_dctMatrix14,IDFF_dctMatrix15,0};
 return idResets;
}

bool TdctSettings::getTip(unsigned int pageId,char_t *tipS,size_t len)
{
 switch (mode)
  {
   case 0:
    tsnprintf(tipS,len,_l("coefficients: %g %g %g %g %g %g %g %g"),fac0/1000.0f,fac1/1000.0f,fac2/1000.0f,fac3/1000.0f,fac4/1000.0f,fac5/1000.0f,fac6/1000.0f,fac7/1000.0f);
    break;
   case 1:
   case 2:
    tsnprintf(tipS,len,_l("%s quantization by quantizer %i"),mode==1?_l("H.263"):_l("MPEG"),quant);
    break;
  } 
 tipS[len-1]='\0';
 return true;
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?