toutputvideosettings.cpp.svn-base

来自「ffshow源码」· SVN-BASE 代码 · 共 156 行

SVN-BASE
156
字号
/* * Copyright (c) 2002-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 "ToutputVideoSettings.h"const TfilterIDFF ToutputVideoSettings::idffs={ /*name*/      _l("Output"), /*id*/        IDFF_filterOutputVideo, /*is*/        0, /*order*/     0, /*show*/      0, /*full*/      0, /*half*/      0, /*dlgId*/     0,};const char_t* ToutputVideoSettings::dvNorms[]={ _l("PAL"), _l("NTSF"), _l("closest"), NULL};ToutputVideoSettings::ToutputVideoSettings(TintStrColl *Icoll,TfilterIDFFs *filters):TfilterSettingsVideo(sizeof(*this),Icoll,filters,&idffs,false){ half=0;full=1; static const TintOptionT<ToutputVideoSettings> iopts[]=  {   IDFF_flip               ,&ToutputVideoSettings::flip               ,0,0,_l(""),1,     _l("flip"),0,        IDFF_hwOverlay          ,&ToutputVideoSettings::hwOverlay          ,0,2,_l(""),1,     _l("hwOverlay"),2,   IDFF_hwOverlayAspect    ,&ToutputVideoSettings::hwOverlayAspect    ,1,1,_l(""),1,     _l("hwOverlayAspect"),0,   IDFF_hwDeinterlace      ,&ToutputVideoSettings::hwDeinterlace      ,0,0,_l(""),1,     _l("hwDeinterlace"),0,      IDFF_outI420            ,&ToutputVideoSettings::i420               ,0,0,_l(""),0,     _l("outI420"),0,    IDFF_outYV12            ,&ToutputVideoSettings::yv12               ,0,0,_l(""),0,     _l("outYV12"),1,   IDFF_outYUY2            ,&ToutputVideoSettings::yuy2               ,0,0,_l(""),0,     _l("outYUY2"),1,   IDFF_outYVYU            ,&ToutputVideoSettings::yvyu               ,0,0,_l(""),0,     _l("outYVYU"),1,   IDFF_outUYVY            ,&ToutputVideoSettings::uyvy               ,0,0,_l(""),0,     _l("outUYVY"),1,   IDFF_outNV12            ,&ToutputVideoSettings::nv12               ,0,0,_l(""),0,     _l("outNV12"),0,   IDFF_outRGB32           ,&ToutputVideoSettings::rgb32              ,0,0,_l(""),0,     _l("outRGB32"),1,   IDFF_outRGB24           ,&ToutputVideoSettings::rgb24              ,0,0,_l(""),0,     _l("outRGB24"),1,   IDFF_outRGB555          ,&ToutputVideoSettings::rgb555             ,0,0,_l(""),0,     _l("outRGB555"),1,   IDFF_outRGB565          ,&ToutputVideoSettings::rgb565             ,0,0,_l(""),0,     _l("outRGB565"),1,   IDFF_outClosest         ,&ToutputVideoSettings::closest            ,0,0,_l(""),1,     _l("outClosest"),1,   IDFF_outDV              ,&ToutputVideoSettings::dv                 ,0,0,_l(""),0,     _l("outDV"),0,   IDFF_outDVnorm          ,&ToutputVideoSettings::dvNorm             ,0,2,_l(""),0,     _l("outDVnorm"),2,   IDFF_allowOutChange     ,&ToutputVideoSettings::allowOutChange3    ,0,2,_l(""),1,     _l("allowOutChange"),2,   IDFF_outChangeCompatOnly,&ToutputVideoSettings::outChangeCompatOnly,0,0,_l(""),1,     _l("outChangeCompatOnly"),1,   IDFF_avisynthYV12_RGB   ,&ToutputVideoSettings::avisynthYV12_RGB   ,0,0,_l(""),1,     _l("avisynthYV12_RGB"),0,   0  }; addOptions(iopts); static const TcreateParamList1 listDVnorm(dvNorms);setParamList(IDFF_outDVnorm,&listDVnorm);}void ToutputVideoSettings::reg_op_outcsps(TregOp &t){ t._REG_OP_N(IDFF_outI420  ,_l("outI420")  ,i420  ,0);  t._REG_OP_N(IDFF_outYV12  ,_l("outYV12")  ,yv12  ,1); t._REG_OP_N(IDFF_outYUY2  ,_l("outYUY2")  ,yuy2  ,1); t._REG_OP_N(IDFF_outYVYU  ,_l("outYVYU")  ,yvyu  ,1); t._REG_OP_N(IDFF_outUYVY  ,_l("outUYVY")  ,uyvy  ,1); t._REG_OP_N(IDFF_outNV12  ,_l("outNV12")  ,nv12  ,0); t._REG_OP_N(IDFF_outRGB32 ,_l("outRGB32") ,rgb32 ,1); t._REG_OP_N(IDFF_outRGB24 ,_l("outRGB24") ,rgb24 ,1); t._REG_OP_N(IDFF_outRGB555,_l("outRGB555"),rgb555,1); t._REG_OP_N(IDFF_outRGB565,_l("outRGB565"),rgb565,1); t._REG_OP_N(IDFF_outClosest,_l("outClosest"),closest,1); t._REG_OP_N(IDFF_hwOverlay,_l("hwOverlay"),hwOverlay,0); t._REG_OP_N(IDFF_hwOverlayAspect,_l("hwOverlayAspect"),hwOverlayAspect,0);}const int* ToutputVideoSettings::getResets(unsigned int pageId){ static const int idResets[]={IDFF_flip,IDFF_outI420,IDFF_outYV12,IDFF_outYUY2,IDFF_outYVYU,IDFF_outUYVY,IDFF_outNV12,IDFF_outRGB32,IDFF_outRGB24,IDFF_outRGB555,IDFF_outDV,IDFF_outRGB565,IDFF_outClosest,IDFF_hwOverlay,IDFF_hwDeinterlace,IDFF_avisynthYV12_RGB,IDFF_allowOutChange,IDFF_outChangeCompatOnly,0}; return idResets;}void ToutputVideoSettings::getOutputColorspaces(ints &ocsps){ ocsps.clear(); if (i420  && !(hwOverlay && hwDeinterlace)) ocsps.push_back(FF_CSP_420P|FF_CSP_FLAGS_YUV_ORDER); if (yv12  && !(hwOverlay && hwDeinterlace)) ocsps.push_back(FF_CSP_420P); if (yuy2  ) ocsps.push_back(FF_CSP_YUY2); if (yvyu  ) ocsps.push_back(FF_CSP_YVYU); if (uyvy  ) ocsps.push_back(FF_CSP_UYVY); if (nv12  ) ocsps.push_back(FF_CSP_NV12); if (rgb32 ) ocsps.push_back(FF_CSP_RGB32); if (rgb24 ) ocsps.push_back(FF_CSP_RGB24); if (rgb555) ocsps.push_back(FF_CSP_RGB15); if (rgb565) ocsps.push_back(FF_CSP_RGB16);}void ToutputVideoSettings::getOutputColorspaces(TcspInfos &ocsps){ ints ocspsi; getOutputColorspaces(ocspsi); ocsps.clear(); for (ints::const_iterator o=ocspsi.begin();o!=ocspsi.end();o++)  ocsps.push_back(csp_getInfo(*o));}void ToutputVideoSettings::getDVsize(unsigned int *dx,unsigned int *dy) const{ switch (dvNorm)  {   case 0:pal:*dx=720;*dy=576;break;   case 1:ntsc:*dx=720;*dy=480;break;   case 2:    {     int dif1=sqr(*dx-720)+sqr(*dy-576);     int dif2=sqr(*dx-720)+sqr(*dy-480);     if (dif2<dif1) goto ntsc; else goto pal;    }  }}

⌨️ 快捷键说明

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