TglobalSettings.cpp
Upload User: guiyibm
Upload Date: 2009-03-19
Package Size: 11519k
Code Size: 47k
Category:

Streaming_Mpeg4

Development Platform:

Others

  1. /*
  2.  * Copyright (c) 2002-2006 Milan Cutka
  3.  *
  4.  * This program is free software; you can redistribute it and/or modify
  5.  * it under the terms of the GNU General Public License as published by
  6.  * the Free Software Foundation; either version 2 of the License, or
  7.  * (at your option) any later version.
  8.  *
  9.  * This program is distributed in the hope that it will be useful,
  10.  * but WITHOUT ANY WARRANTY; without even the implied warranty of
  11.  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
  12.  * GNU General Public License for more details.
  13.  *
  14.  * You should have received a copy of the GNU General Public License
  15.  * along with this program; if not, write to the Free Software
  16.  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
  17.  */
  18. #include "stdafx.h"
  19. #include "Tconfig.h"
  20. #include "TglobalSettings.h"
  21. #include "reg.h"
  22. #include "ffdshow_mediaguids.h"
  23. #include "ffcodecs.h"
  24. #include "ffdshow_constants.h"
  25. #include "TsampleFormat.h"
  26. #include "ffImgfmt.h"
  27. #include "TpresetSettings.h"
  28. #include "ffdebug.h"
  29. #include "Tstream.h"
  30. //===================================== TglobalSettingsBase ======================================
  31. TglobalSettingsBase::TglobalSettingsBase(const Tconfig *Iconfig,int Imode,const char_t *Ireg_child,TintStrColl *Icoll):filtermode(Imode),config(Iconfig),reg_child(Ireg_child),Toptions(Icoll)
  32. {
  33.  static const TintOptionT<TglobalSettingsBase> iopts[]=
  34.   {
  35.    IDFF_filterMode       ,&TglobalSettingsBase::filtermode       ,1,1,_l(""),0,
  36.      NULL,0, 
  37.    IDFF_trayIcon         ,&TglobalSettingsBase::trayIcon         ,0,0,_l(""),0,
  38.      _l("trayIcon"),TintOption::DEF_DYN,
  39.    IDFF_trayIconExt      ,&TglobalSettingsBase::trayIconExt      ,0,0,_l(""),0,
  40.      _l("trayIconExt"),0,
  41.    IDFF_outputdebug      ,&TglobalSettingsBase::outputdebug      ,0,0,_l(""),0,
  42.      _l("outputdebug"),1,
  43.    IDFF_outputdebugfile  ,&TglobalSettingsBase::outputdebugfile  ,0,0,_l(""),0,
  44.      _l("outputdebugfile"),0,
  45.    IDFF_errorbox         ,&TglobalSettingsBase::errorbox         ,0,0,_l(""),0,
  46.      _l("errorbox"),0,
  47.    IDFF_multipleInstances,&TglobalSettingsBase::multipleInstances,0,4,_l(""),0,
  48.      _l("multipleInstances"),TintOption::DEF_DYN,
  49.    IDFF_isBlacklist      ,&TglobalSettingsBase::isBlacklist      ,0,0,_l(""),0,
  50.      _l("isBlacklist"),0,   
  51.    IDFF_addToROT         ,&TglobalSettingsBase::addToROT         ,0,0,_l(""),0,
  52.      _l("addToROT"),0,
  53.    IDFF_allowedCpuFlags  ,&TglobalSettingsBase::allowedCPUflags  ,1,1,_l(""),0,
  54.      NULL,0,
  55.    0
  56.   };
  57.  addOptions(iopts); 
  58.  static const TstrOption sopts[]=
  59.   {
  60.    IDFF_debugfile  ,(TstrVal)&TglobalSettingsBase::debugfile ,MAX_PATH,_l(""),0,
  61.      _l("debugfile"),_l("\ffdebug.log"),
  62.    IDFF_dscalerPath,(TstrVal)&TglobalSettingsBase::dscalerPth,MAX_PATH,_l(""),0,
  63.      NULL,NULL,
  64.    IDFF_blacklist  ,(TstrVal)&TglobalSettingsBase::blacklist ,128,_l(""),0,
  65.      _l("blacklist"),_l("explorer.exe"),  
  66.    0
  67.   };
  68.  addOptions(sopts); 
  69.  static const TcreateParamList3<TmultipleInstances> listMultipleInstances(::multipleInstances,&TmultipleInstances::id,&TmultipleInstances::name);setParamList(IDFF_multipleInstances,&listMultipleInstances);
  70. }
  71. void TglobalSettingsBase::load(void)
  72. {
  73.  char_t rkey[MAX_PATH];tsprintf(rkey,FFDSHOW_REG_PARENT _l("\%s"),reg_child);
  74.  TregOpRegRead tHKCU(HKEY_CURRENT_USER,rkey);
  75.  reg_op(tHKCU);
  76.  TregOpRegRead tHKLM(HKEY_LOCAL_MACHINE,rkey);
  77.  reg_op_codec(tHKCU,&tHKLM);
  78.  TregOpRegRead tDScaler(HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\") FFDSHOW);
  79.  tDScaler._REG_OP_S(IDFF_dscalerPath,_l("dscalerPth"),dscalerPth,MAX_PATH,_l(""));
  80.  TregOpRegRead tCPU(HKEY_CURRENT_USER,FFDSHOW_REG_PARENT _l("\") FFDSHOW);
  81.  tCPU._REG_OP_N(IDFF_allowedCpuFlags,_l("allowedCPUflags"),allowedCPUflags,255); 
  82.  firstBlacklist=true;
  83. }
  84. void TglobalSettingsBase::save(void)
  85. {
  86.  char_t rkey[MAX_PATH];tsprintf(rkey,FFDSHOW_REG_PARENT _l("\%s"),reg_child);
  87.  TregOpRegWrite tHKCU(HKEY_CURRENT_USER,rkey);
  88.  reg_op(tHKCU);
  89.  reg_op_codec(tHKCU,NULL);
  90.  TregOpRegWrite tDScaler(HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\") FFDSHOW);
  91.  tDScaler._REG_OP_S(IDFF_dscalerPath,_l("dscalerPth"),dscalerPth,MAX_PATH,_l(""));
  92.  TregOpRegWrite tCPU(HKEY_CURRENT_USER,FFDSHOW_REG_PARENT _l("\") FFDSHOW);
  93.  tCPU._REG_OP_N(IDFF_allowedCpuFlags,_l("allowedCPUflags"),allowedCPUflags,255);
  94. }
  95. bool TglobalSettingsBase::exportReg(bool all,const char_t *regflnm,bool unicode)
  96. {
  97.  if (fileexists(regflnm) && DeleteFile(regflnm)==0)
  98.   return false;
  99.  TstreamFile f(regflnm,false,true,unicode?Tstream::ENC_LE16:Tstream::ENC_ASCII);if (!f) return false;
  100.  if (unicode)
  101.   f.printf(L"Windows Registry Editor Version 5.00nn");
  102.  else
  103.   f.printf("REGEDIT4nn");
  104.  regExport(f,HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\") FFDSHOW,unicode);
  105.  if (all || strcmp(reg_child,FFDSHOWDECVIDEO)==0)
  106.   regExport(f,HKEY_CURRENT_USER ,FFDSHOW_REG_PARENT _l("\") FFDSHOWDECVIDEO,unicode);
  107.  if (all || strcmp(reg_child,FFDSHOWDECAUDIO)==0)
  108.   {
  109.    regExport(f,HKEY_CURRENT_USER ,FFDSHOW_REG_PARENT _l("\") FFDSHOWDECAUDIO,unicode);
  110.    regExport(f,HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\") FFDSHOWDECAUDIO,unicode);
  111.   }
  112.  if (all || strcmp(reg_child,FFDSHOWENC)==0)
  113.   {
  114.    regExport(f,HKEY_CURRENT_USER ,FFDSHOW_REG_PARENT _l("\") FFDSHOWENC,unicode);
  115.    regExport(f,HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\") FFDSHOWENC,unicode);
  116.   }
  117.  if (all || strcmp(reg_child,FFDSHOWDECVIDEOVFW)==0)
  118.   {
  119.    regExport(f,HKEY_CURRENT_USER ,FFDSHOW_REG_PARENT _l("\") FFDSHOWDECVIDEOVFW,unicode);
  120.    regExport(f,HKEY_LOCAL_MACHINE,FFDSHOW_REG_PARENT _l("\") FFDSHOWDECVIDEOVFW,unicode);
  121.   }
  122.  return true;
  123. }
  124. void TglobalSettingsBase::_reg_op_codec(short id,TregOp &tHKCU,TregOp *tHKLM,const char_t *name,int &val,int def)
  125. {
  126.  if (!tHKCU._REG_OP_N(id,name,val,def) && tHKLM)
  127.   tHKLM->_REG_OP_N(id,name,val,def);
  128. }
  129.  
  130. bool TglobalSettingsBase::inBlacklist(const char_t *exe)
  131. {
  132.  if (firstBlacklist)
  133.   {
  134.    firstBlacklist=false;
  135.    strtok(blacklist,_l(";"),blacklistList);
  136.   }
  137.  for (strings::const_iterator b=blacklistList.begin();b!=blacklistList.end();b++)
  138.   if (DwStrcasecmp(*b,exe)==0)
  139.    return true;
  140.  return false;
  141. //===================================== TglobalSettingsDec ======================================
  142. TglobalSettingsDec::TglobalSettingsDec(const Tconfig *Iconfig,int Imode,const char_t *Ireg_child,TintStrColl *Icoll,TOSDsettings *Iosd):TglobalSettingsBase(Iconfig,Imode,Ireg_child,Icoll),osd(Iosd)
  143. {
  144.  static const TintOptionT<TglobalSettingsDec> iopts[]=
  145.   {
  146.    IDFF_autoPreset         ,&TglobalSettingsDec::autoPreset         ,0,0,_l(""),0,
  147.      _l("autoPresets"),0,
  148.    IDFF_autoPresetFileFirst,&TglobalSettingsDec::autoPresetFileFirst,0,0,_l(""),0,
  149.      _l("autoPresetFileFirst"),0,
  150.    IDFF_streamsOptionsMenu ,&TglobalSettingsDec::streamsMenu        ,0,0,_l(""),0,
  151.      _l("streamsOptionsMenu"),0,
  152.    0
  153.   };
  154.  addOptions(iopts); 
  155.  static const TstrOption sopts[]=
  156.   {
  157.    IDFF_defaultPreset,(TstrVal)&TglobalSettingsDec::defaultPreset,260,_l(""),0,
  158.      _l("activePreset"),FFPRESET_DEFAULT,
  159.    0
  160.   };
  161.  addOptions(sopts); 
  162. }
  163. void TglobalSettingsDec::reg_op(TregOp &t)
  164. {
  165.  TglobalSettingsBase::reg_op(t);
  166.  osd->reg_op(t);
  167. }
  168. void TglobalSettingsDec::load(void)
  169. {
  170.  TglobalSettingsBase::load();
  171.  osd->loadPresets(reg_child); 
  172. }
  173. void TglobalSettingsDec::save(void)
  174. {
  175.  TglobalSettingsBase::save();
  176.  osd->savePresets(reg_child);
  177. }
  178. void TglobalSettingsDec::fixMissing(int &codecId,int movie1,int movie2,int movie3)
  179. {
  180.  fixMissing(codecId,movie1,movie2);
  181.  fixMissing(codecId,movie2,movie3);   
  182.  fixMissing(codecId,movie1,movie3);   
  183. }
  184. void TglobalSettingsDec::fixMissing(int &codecId,int movie1,int movie2)
  185. {
  186.  if (!config->isDecoder[movie1] && !config->isDecoder[movie2]) codecId=IDFF_MOVIE_NONE;
  187.  else if (codecId==movie1 && !config->isDecoder[movie1]) codecId=movie2;
  188.  else if (codecId==movie2 && !config->isDecoder[movie2]) codecId=movie1;
  189. }
  190. void TglobalSettingsDec::fixMissing(int &codecId,int movie)
  191. {
  192.  if (!config->isDecoder[movie]) codecId=0;
  193. }
  194. int TglobalSettingsDec::getDefault(int id)
  195. {
  196.  switch (id)
  197.   {
  198.    case IDFF_trayIcon:return 1;
  199.    default:return TglobalSettingsBase::getDefault(id);
  200.   }
  201. }
  202. static bool compStrPtrs(const char_t *s1,const char_t *s2)
  203. {
  204.  return stricmp(s1,s2)<0;
  205. }
  206. void TglobalSettingsDec::cleanupCodecsList(std::vector<CodecID> &ids,Tstrptrs &codecs)
  207. {
  208.  std::sort(ids.begin(),ids.end());
  209.  std::vector<CodecID>::iterator idsend=std::unique(ids.begin(),ids.end());
  210.  codecs.clear();
  211.  for (std::vector<CodecID>::const_iterator id=ids.begin();id!=idsend;id++)
  212.   codecs.push_back(getCodecName(*id));
  213.  std::sort(codecs.begin(),codecs.end());
  214.  Tstrptrs::iterator codecsend=std::unique(codecs.begin(),codecs.end());
  215.  codecs.erase(codecsend,codecs.end());
  216.  std::sort(codecs.begin(),codecs.end(),compStrPtrs);
  217. }
  218. //=================================== TglobalSettingsDecVideo ===================================
  219. TglobalSettingsDecVideo::TglobalSettingsDecVideo(const Tconfig *Iconfig,int Imode,TintStrColl *Icoll):TglobalSettingsDec(Iconfig,Imode,Imode&IDFF_FILTERMODE_VFW?FFDSHOWDECVIDEOVFW:FFDSHOWDECVIDEO,Icoll,&osd),sub(Icoll),osd(Icoll)
  220. {
  221.  static const TintOptionT<TglobalSettingsDecVideo> iopts[]=
  222.   {
  223.    IDFF_buildHistogram ,&TglobalSettingsDecVideo::buildHistogram ,0,0,_l(""),0,
  224.      _l("buildHistogram"),0,
  225.    IDFF_xvid           ,&TglobalSettingsDecVideo::xvid           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  226.    IDFF_div3           ,&TglobalSettingsDecVideo::div3           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  227.    IDFF_divx           ,&TglobalSettingsDecVideo::divx           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  228.    IDFF_dx50           ,&TglobalSettingsDecVideo::dx50           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  229.    IDFF_fvfw           ,&TglobalSettingsDecVideo::fvfw           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  230.    IDFF_mp43           ,&TglobalSettingsDecVideo::mp43           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  231.    IDFF_mp42           ,&TglobalSettingsDecVideo::mp42           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  232.    IDFF_mp41           ,&TglobalSettingsDecVideo::mp41           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  233.    IDFF_h263           ,&TglobalSettingsDecVideo::h263           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  234.    IDFF_h264           ,&TglobalSettingsDecVideo::h264           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  235.    IDFF_h261           ,&TglobalSettingsDecVideo::h261           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  236.    IDFF_wmv1           ,&TglobalSettingsDecVideo::wmv1           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  237.    IDFF_wmv2           ,&TglobalSettingsDecVideo::wmv2           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  238.    IDFF_wmv3           ,&TglobalSettingsDecVideo::wmv3           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  239.    IDFF_mjpg           ,&TglobalSettingsDecVideo::mjpg           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  240.    IDFF_dvsd           ,&TglobalSettingsDecVideo::dvsd           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  241.    IDFF_hfyu           ,&TglobalSettingsDecVideo::hfyu           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  242.    IDFF_cyuv           ,&TglobalSettingsDecVideo::cyuv           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  243.    IDFF_asv1           ,&TglobalSettingsDecVideo::asv1           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  244.    IDFF_vcr1           ,&TglobalSettingsDecVideo::vcr1           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  245.    IDFF_mpg1           ,&TglobalSettingsDecVideo::mpg1           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  246.    IDFF_mpg2           ,&TglobalSettingsDecVideo::mpg2           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  247.    IDFF_mpegAVI        ,&TglobalSettingsDecVideo::mpegAVI        ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  248.    IDFF_theo           ,&TglobalSettingsDecVideo::theo           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  249.    IDFF_3ivx           ,&TglobalSettingsDecVideo::_3iv           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  250.    IDFF_svq1           ,&TglobalSettingsDecVideo::svq1           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  251.    IDFF_svq3           ,&TglobalSettingsDecVideo::svq3           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  252.    IDFF_cram           ,&TglobalSettingsDecVideo::cram           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  253.    IDFF_iv32           ,&TglobalSettingsDecVideo::iv32           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  254.    IDFF_cvid           ,&TglobalSettingsDecVideo::cvid           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  255.    IDFF_rv10           ,&TglobalSettingsDecVideo::rv10           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  256.    IDFF_ffv1           ,&TglobalSettingsDecVideo::ffv1           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  257.    IDFF_vp3            ,&TglobalSettingsDecVideo::vp3            ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  258.    IDFF_rle            ,&TglobalSettingsDecVideo::rle            ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  259.    IDFF_mszh           ,&TglobalSettingsDecVideo::mszh           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  260.    IDFF_zlib           ,&TglobalSettingsDecVideo::zlib           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  261.    IDFF_flv1           ,&TglobalSettingsDecVideo::flv1           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  262.    IDFF_8bps           ,&TglobalSettingsDecVideo::_8bps          ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  263.    IDFF_png1           ,&TglobalSettingsDecVideo::png1           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  264.    IDFF_qtrle          ,&TglobalSettingsDecVideo::qtrle          ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  265.    IDFF_duck           ,&TglobalSettingsDecVideo::duck           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  266.    IDFF_tscc           ,&TglobalSettingsDecVideo::tscc           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  267.    IDFF_qpeg           ,&TglobalSettingsDecVideo::qpeg           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  268.    IDFF_loco           ,&TglobalSettingsDecVideo::loco           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  269.    IDFF_wnv1           ,&TglobalSettingsDecVideo::wnv1           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  270.    IDFF_cscd           ,&TglobalSettingsDecVideo::cscd           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  271.    IDFF_zmbv           ,&TglobalSettingsDecVideo::zmbv           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  272.    IDFF_ulti           ,&TglobalSettingsDecVideo::ulti           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  273.    IDFF_avisV          ,&TglobalSettingsDecVideo::avis           ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  274.    IDFF_rawv           ,&TglobalSettingsDecVideo::rawv           ,0,0,_l(""),0,
  275.      NULL,0,
  276.    IDFF_supDVDdec      ,&TglobalSettingsDecVideo::supdvddec      ,0,0,_l(""),0, 
  277.      _l("supDVDdec"),0,
  278.    IDFF_fastMpeg2      ,&TglobalSettingsDecVideo::fastMpeg2      ,0,0,_l(""),1,
  279.      _l("fastMpeg2"),0,
  280.    IDFF_fastH264       ,&TglobalSettingsDecVideo::fastH264       ,0,3,_l(""),1,
  281.      _l("fastH264"),0,
  282.    IDFF_libtheoraPostproc,&TglobalSettingsDecVideo::libtheoraPostproc ,0,0,_l(""),1,
  283.      _l("libtheoraPostproc"),0,
  284.    0
  285.   };
  286.  addOptions(iopts); 
  287. }
  288. void TglobalSettingsDecVideo::reg_op(TregOp &t)
  289. {
  290.  TglobalSettingsDec::reg_op(t);
  291.  sub.reg_op(t);
  292. }
  293. int TglobalSettingsDecVideo::getDefault(int id)
  294. {
  295.  switch (id)
  296.   {
  297.    case IDFF_multipleInstances:return filtermode&IDFF_FILTERMODE_VIDEORAW?0:2;
  298.    default:return TglobalSettingsDec::getDefault(id);
  299.   }
  300. }
  301. void TglobalSettingsDecVideo::reg_op_codec(TregOp &t,TregOp *t2)
  302. {
  303.  _reg_op_codec(IDFF_xvid,t,t2,_l("xvid"),xvid,0);
  304.  _reg_op_codec(IDFF_div3,t,t2,_l("div3"),div3,0);
  305.  _reg_op_codec(IDFF_divx,t,t2,_l("divx"),divx,0);
  306.  _reg_op_codec(IDFF_dx50,t,t2,_l("dx50"),dx50,0);
  307.  _reg_op_codec(IDFF_mp43,t,t2,_l("mp43"),mp43,0);
  308.  _reg_op_codec(IDFF_mp42,t,t2,_l("mp42"),mp42,0);
  309.  _reg_op_codec(IDFF_mp41,t,t2,_l("mp41"),mp41,0);
  310.  _reg_op_codec(IDFF_h261,t,t2,_l("h261"),h261,0);
  311.  _reg_op_codec(IDFF_h263,t,t2,_l("h263"),h263,0);
  312.  _reg_op_codec(IDFF_h264,t,t2,_l("h264"),h264,0);
  313.  _reg_op_codec(IDFF_wmv1,t,t2,_l("wmv1"),wmv1,0);
  314.  _reg_op_codec(IDFF_wmv2,t,t2,_l("wmv2"),wmv2,0);
  315.  _reg_op_codec(IDFF_wmv3,t,t2,_l("wmv3"),wmv3,0);
  316.  _reg_op_codec(IDFF_rawv,t,t2,filtermode&IDFF_FILTERMODE_VIDEORAW?_l("raw_rawv"):_l("rawv"),rawv,filtermode&IDFF_FILTERMODE_VIDEORAW?IDFF_MOVIE_RAW:0);
  317.  _reg_op_codec(IDFF_mpg1,t,t2,_l("mpg1"),mpg1,0);
  318.  _reg_op_codec(IDFF_mpg2,t,t2,_l("mpg2"),mpg2,0);
  319.  _reg_op_codec(IDFF_mpegAVI,t,t2,_l("mpegAVI"),mpegAVI,0);
  320.  _reg_op_codec(IDFF_mjpg,t,t2,_l("mjpg"),mjpg,0);
  321.  _reg_op_codec(IDFF_dvsd,t,t2,_l("dvsd"),dvsd,0);
  322.  _reg_op_codec(IDFF_hfyu,t,t2,_l("hfyu"),hfyu,0);
  323.  _reg_op_codec(IDFF_cyuv,t,t2,_l("cyuv"),cyuv,0);
  324.  _reg_op_codec(IDFF_theo,t,t2,_l("theo"),theo,IDFF_MOVIE_THEO);
  325.  _reg_op_codec(IDFF_fvfw,t,t2,_l("fvfw"),fvfw,IDFF_MOVIE_LAVC);
  326.  _reg_op_codec(IDFF_asv1,t,t2,_l("asv1"),asv1,0);
  327.  _reg_op_codec(IDFF_vcr1,t,t2,_l("vcr1"),vcr1,0);
  328.  _reg_op_codec(IDFF_3ivx,t,t2,_l("_3iv"),_3iv,0);
  329.  _reg_op_codec(IDFF_svq1,t,t2,_l("svq1"),svq1,0);
  330.  _reg_op_codec(IDFF_svq3,t,t2,_l("svq3"),svq3,0);
  331.  _reg_op_codec(IDFF_cram,t,t2,_l("cram"),cram,0);
  332.  _reg_op_codec(IDFF_iv32,t,t2,_l("iv32"),iv32,0);
  333.  _reg_op_codec(IDFF_cvid,t,t2,_l("cvid"),cvid,0);
  334.  _reg_op_codec(IDFF_rv10,t,t2,_l("rv10"),rv10,0);
  335.  _reg_op_codec(IDFF_ffv1,t,t2,_l("ffv1"),ffv1,IDFF_MOVIE_LAVC);
  336.  _reg_op_codec(IDFF_vp3 ,t,t2,_l("vp3") ,vp3 ,0);
  337.  _reg_op_codec(IDFF_rle ,t,t2,_l("rle") ,rle ,0);
  338.  _reg_op_codec(IDFF_avisV,t,t2,_l("avis"),avis,IDFF_MOVIE_AVIS);
  339.  _reg_op_codec(IDFF_mszh,t,t2,_l("mszh"),mszh,0);
  340.  _reg_op_codec(IDFF_zlib,t,t2,_l("zlib"),zlib,0);
  341.  _reg_op_codec(IDFF_flv1,t,t2,_l("flv1"),flv1,0);
  342.  _reg_op_codec(IDFF_8bps,t,t2,_l("8bps"),_8bps,0);
  343.  _reg_op_codec(IDFF_png1,t,t2,_l("png1"),png1,0);
  344.  _reg_op_codec(IDFF_qtrle,t,t2,_l("qtrle"),qtrle,0);
  345.  _reg_op_codec(IDFF_duck,t,t2,_l("duck"),duck,0);
  346.  _reg_op_codec(IDFF_tscc,t,t2,_l("tscc"),tscc,0);
  347.  _reg_op_codec(IDFF_qpeg,t,t2,_l("qpeg"),qpeg,0);
  348.  _reg_op_codec(IDFF_loco,t,t2,_l("loco"),loco,0);
  349.  _reg_op_codec(IDFF_wnv1,t,t2,_l("wnv1"),wnv1,0);
  350.  _reg_op_codec(IDFF_cscd,t,t2,_l("cscd"),cscd,0);
  351.  _reg_op_codec(IDFF_zmbv,t,t2,_l("zmbv"),zmbv,0);
  352.  _reg_op_codec(IDFF_ulti,t,t2,_l("ulti"),ulti,0);
  353.  _reg_op_codec(0,t,t2,_l("needCodecFix"),needCodecFix,1);
  354. }
  355. void TglobalSettingsDecVideo::fixNewCodecs(void)
  356. {
  357.  if (mpg1==2) mpg1=IDFF_MOVIE_LIBMPEG2;
  358.  if (mpg2==2) mpg2=IDFF_MOVIE_LIBMPEG2;
  359.  if (mpegAVI==2) mpegAVI=IDFF_MOVIE_LIBMPEG2;
  360.  if (theo==1) theo=IDFF_MOVIE_THEO;
  361.  if (rawv==1 && forceInCSP!=0) rawv=forceInCSP;
  362. }
  363. void TglobalSettingsDecVideo::load(void)
  364. {
  365.  TglobalSettingsDec::load();
  366.  if (needCodecFix)
  367.   {
  368.    fixNewCodecs();
  369.    needCodecFix=0;
  370.   } 
  371.  
  372.  fixMissing(xvid,IDFF_MOVIE_LAVC,IDFF_MOVIE_XVID4);
  373.  fixMissing(div3,IDFF_MOVIE_LAVC);
  374.  fixMissing(divx,IDFF_MOVIE_LAVC,IDFF_MOVIE_XVID4);
  375.  fixMissing(dx50,IDFF_MOVIE_LAVC,IDFF_MOVIE_XVID4);
  376.  fixMissing(fvfw,IDFF_MOVIE_LAVC,IDFF_MOVIE_XVID4);
  377.  fixMissing(_3iv,IDFF_MOVIE_LAVC,IDFF_MOVIE_XVID4);
  378.  fixMissing(mp43,IDFF_MOVIE_LAVC);
  379.  fixMissing(mp42,IDFF_MOVIE_LAVC);
  380.  fixMissing(mp41,IDFF_MOVIE_LAVC);
  381.  fixMissing(h261,IDFF_MOVIE_LAVC);
  382.  fixMissing(h263,IDFF_MOVIE_LAVC);
  383.  fixMissing(h264,IDFF_MOVIE_LAVC);
  384.  fixMissing(wmv1,IDFF_MOVIE_LAVC);
  385.  fixMissing(wmv2,IDFF_MOVIE_LAVC);
  386.  fixMissing(wmv3,IDFF_MOVIE_WMV9);
  387.  fixMissing(mjpg,IDFF_MOVIE_LAVC);
  388.  fixMissing(dvsd,IDFF_MOVIE_LAVC);
  389.  fixMissing(hfyu,IDFF_MOVIE_LAVC);
  390.  fixMissing(cyuv,IDFF_MOVIE_LAVC);
  391.  fixMissing(asv1,IDFF_MOVIE_LAVC);
  392.  fixMissing(vcr1,IDFF_MOVIE_LAVC);
  393.  fixMissing(svq1,IDFF_MOVIE_LAVC);
  394.  fixMissing(svq3,IDFF_MOVIE_LAVC);
  395.  fixMissing(mpg1,IDFF_MOVIE_LAVC,IDFF_MOVIE_LIBMPEG2);
  396.  fixMissing(mpg2,IDFF_MOVIE_LAVC,IDFF_MOVIE_LIBMPEG2);
  397.  fixMissing(mpegAVI,IDFF_MOVIE_LAVC,IDFF_MOVIE_LIBMPEG2);
  398.  fixMissing(theo,IDFF_MOVIE_LAVC,IDFF_MOVIE_THEO);
  399.  fixMissing(cram,IDFF_MOVIE_LAVC);
  400.  fixMissing(iv32,IDFF_MOVIE_LAVC);
  401.  fixMissing(cvid,IDFF_MOVIE_LAVC);
  402.  fixMissing(rv10,IDFF_MOVIE_LAVC);
  403.  fixMissing(ffv1,IDFF_MOVIE_LAVC);
  404.  fixMissing(vp3 ,IDFF_MOVIE_LAVC);
  405.  fixMissing(rle ,IDFF_MOVIE_LAVC);
  406.  fixMissing(mszh,IDFF_MOVIE_LAVC);
  407.  fixMissing(zlib,IDFF_MOVIE_LAVC);
  408.  fixMissing(flv1,IDFF_MOVIE_LAVC);
  409.  fixMissing(_8bps,IDFF_MOVIE_LAVC);
  410.  fixMissing(png1,IDFF_MOVIE_LAVC);
  411.  fixMissing(qtrle,IDFF_MOVIE_LAVC);
  412.  fixMissing(duck,IDFF_MOVIE_LAVC);
  413.  fixMissing(tscc,IDFF_MOVIE_LAVC);
  414.  fixMissing(qpeg,IDFF_MOVIE_LAVC);
  415.  fixMissing(loco,IDFF_MOVIE_LAVC);
  416.  fixMissing(wnv1,IDFF_MOVIE_LAVC);
  417.  fixMissing(cscd,IDFF_MOVIE_LAVC);
  418.  fixMissing(zmbv,IDFF_MOVIE_LAVC);
  419.  fixMissing(ulti,IDFF_MOVIE_LAVC);
  420.  fixMissing(avis,IDFF_MOVIE_AVIS);
  421. }
  422. #define FF_FOURCC1_CODEC(fourCC1,decoder,codec)  
  423.  case FOURCC_##fourCC1:                          
  424.   codecId=(decoder)?codec:CODEC_ID_NONE;         
  425.   break;
  426. #define FF_FOURCC_CODEC(fourCC1,decoder,codecs)  
  427.  case FOURCC_##fourCC1:                          
  428.   codecId=codecs[decoder];                       
  429.   break;
  430.   
  431. #define VIDEO_FOURCCS  
  432.  FF_FOURCC_OP (FFDS,fvfw & rawmask,c_mpeg4) 
  433.  FF_FOURCC_OP (FVFW,fvfw & rawmask,c_mpeg4) 
  434.  FF_FOURCC_OP (XVID,xvid & rawmask,c_mpeg4) 
  435.  FF_FOURCC_OP (DIVX,divx & rawmask,c_mpeg4) 
  436.  FF_FOURCC_OP (DX50,dx50 & rawmask,c_mpeg4) 
  437.  FF_FOURCC_OP (MP4V,divx & rawmask,c_mpeg4) 
  438.  FF_FOURCC_OP (3IVX,_3iv & rawmask,c_mpeg4) 
  439.  FF_FOURCC_OP (WV1F,_3iv & rawmask,c_mpeg4) 
  440.  FF_FOURCC_OP (FMP4,_3iv & rawmask,c_mpeg4) 
  441.  FF_FOURCC_OP (SMP4,_3iv & rawmask,c_mpeg4) 
  442.  FF_FOURCC1_OP(DIV3,div3 & rawmask,CODEC_ID_MSMPEG4V3) 
  443.  FF_FOURCC1_OP(DVX3,div3 & rawmask,CODEC_ID_MSMPEG4V3) 
  444.  FF_FOURCC1_OP(MP43,mp43 & rawmask,CODEC_ID_MSMPEG4V3) 
  445.  FF_FOURCC1_OP(MP42,mp42 & rawmask,CODEC_ID_MSMPEG4V2) 
  446.  FF_FOURCC1_OP(MP41,mp41 & rawmask,CODEC_ID_MSMPEG4V1) 
  447.  FF_FOURCC1_OP(WMV1,wmv1 & rawmask,CODEC_ID_WMV1) 
  448.  FF_FOURCC1_OP(WMV2,wmv2 & rawmask,CODEC_ID_WMV2) 
  449.  FF_FOURCC1_OP(WMV3,wmv3 & rawmask,CODEC_ID_WMV9_LIB) 
  450.  FF_FOURCC1_OP(WMVA,wmv3 & rawmask,CODEC_ID_WMV9_LIB) 
  451.  FF_FOURCC1_OP(MSS2,wmv3 & rawmask,CODEC_ID_WMV9_LIB) 
  452.  FF_FOURCC_OP (MPG1,mpg1    & rawmask,c_mpeg1) 
  453.  FF_FOURCC_OP (MPG2,mpg2    & rawmask,c_mpeg2) 
  454.  FF_FOURCC_OP (MPEG,mpegAVI & rawmask,c_mpeg1) 
  455.  FF_FOURCC1_OP(H263,h263 & rawmask,CODEC_ID_H263) 
  456.  FF_FOURCC1_OP(S263,h263 & rawmask,CODEC_ID_H263) 
  457.  FF_FOURCC1_OP(H264,h264 & rawmask,CODEC_ID_H264) 
  458.  FF_FOURCC1_OP(X264,h264 & rawmask,CODEC_ID_H264) 
  459.  FF_FOURCC1_OP(VSSH,h264 & rawmask,CODEC_ID_H264) 
  460.  FF_FOURCC1_OP(DAVC,h264 & rawmask,CODEC_ID_H264) 
  461.  FF_FOURCC1_OP(AVC1,h264 & rawmask,CODEC_ID_H264) 
  462.  /*FF_FOURCC1_OP(SVM2,h264 & rawmask,CODEC_ID_H264)*/ 
  463.  FF_FOURCC1_OP(MJPG,mjpg & rawmask,CODEC_ID_MJPEG) 
  464.  FF_FOURCC1_OP(LJPG,mjpg & rawmask,CODEC_ID_MJPEG) 
  465.  FF_FOURCC1_OP(MJLS,mjpg & rawmask,CODEC_ID_MJPEG) 
  466.  FF_FOURCC1_OP(JPEG,(mjpg || svq1 || svq3) & rawmask,CODEC_ID_MJPEG) 
  467.  FF_FOURCC1_OP(DVSD,dvsd & rawmask,CODEC_ID_DVVIDEO) 
  468.  FF_FOURCC1_OP(DV25,dvsd & rawmask,CODEC_ID_DVVIDEO) 
  469.  FF_FOURCC1_OP(DV50,dvsd & rawmask,CODEC_ID_DVVIDEO) 
  470.  FF_FOURCC1_OP(HFYU,hfyu & rawmask,CODEC_ID_HUFFYUV) 
  471.  FF_FOURCC1_OP(FFVH,hfyu & rawmask,CODEC_ID_HUFFYUV) 
  472.  FF_FOURCC1_OP(CYUV,cyuv & rawmask,CODEC_ID_CYUV) 
  473.  FF_FOURCC1_OP(ASV1,asv1 & rawmask,CODEC_ID_ASV1) 
  474.  FF_FOURCC1_OP(ASV2,asv1 & rawmask,CODEC_ID_ASV2) 
  475.  FF_FOURCC1_OP(VCR1,vcr1 & rawmask,CODEC_ID_VCR1) 
  476.  FF_FOURCC_OP (THEO,theo & rawmask,c_theora) 
  477.  FF_FOURCC1_OP(SVQ1,svq1 & rawmask,CODEC_ID_SVQ1) 
  478.  FF_FOURCC1_OP(SVQ3,svq3 & rawmask,CODEC_ID_SVQ3) 
  479.  FF_FOURCC1_OP(FFV1,ffv1 & rawmask,CODEC_ID_FFV1) 
  480.  FF_FOURCC1_OP(VP31,vp3  & rawmask,CODEC_ID_VP3) 
  481.  FF_FOURCC1_OP(RLE8,rle  & rawmask,CODEC_ID_MSRLE) 
  482.  FF_FOURCC1_OP(MSZH,mszh & rawmask,CODEC_ID_MSZH) 
  483.  FF_FOURCC1_OP(ZLIB,zlib & rawmask,CODEC_ID_ZLIB) 
  484.  FF_FOURCC1_OP(FLV1,flv1 & rawmask,CODEC_ID_FLV1) 
  485.  FF_FOURCC1_OP(PNG1,png1 & rawmask,CODEC_ID_COREPNG) 
  486.  FF_FOURCC1_OP(MPNG,png1 & rawmask,CODEC_ID_PNG) 
  487.  FF_FOURCC1_OP(AVIS,avis & rawmask,CODEC_ID_AVISYNTH) 
  488.  FF_FOURCC1_OP(CRAM,cram & rawmask,CODEC_ID_MSVIDEO1) 
  489.  FF_FOURCC1_OP(IV32,iv32 & rawmask,CODEC_ID_INDEO3) 
  490.  FF_FOURCC1_OP(IV31,iv32 & rawmask,CODEC_ID_INDEO3) 
  491.  FF_FOURCC1_OP(CVID,cvid & rawmask,CODEC_ID_CINEPAK) 
  492.  FF_FOURCC1_OP(RV10,rv10 & rawmask,CODEC_ID_RV10) 
  493.  FF_FOURCC1_OP(RV20,rv10 & rawmask,CODEC_ID_RV20) 
  494.  FF_FOURCC1_OP(8BPS,_8bps& rawmask,CODEC_ID_8BPS) 
  495.  FF_FOURCC1_OP(QRLE,qtrle& rawmask,CODEC_ID_QTRLE) 
  496.  FF_FOURCC1_OP(DUCK,duck & rawmask,CODEC_ID_TRUEMOTION1) 
  497.  FF_FOURCC1_OP(TM20,duck & rawmask,CODEC_ID_TRUEMOTION2) 
  498.  FF_FOURCC1_OP(TSCC,tscc & rawmask,CODEC_ID_TSCC) 
  499.  FF_FOURCC1_OP(SNOW,config->isDecoder[IDFF_MOVIE_LAVC] && rawmask,CODEC_ID_SNOW) 
  500.  FF_FOURCC1_OP(QPEG,qpeg & rawmask,CODEC_ID_QPEG) 
  501.  FF_FOURCC1_OP(Q1_0,qpeg & rawmask,CODEC_ID_QPEG) 
  502.  FF_FOURCC1_OP(Q1_1,qpeg & rawmask,CODEC_ID_QPEG) 
  503.  FF_FOURCC1_OP(H261,h261 & rawmask,CODEC_ID_H261) 
  504.  FF_FOURCC1_OP(LOCO,loco & rawmask,CODEC_ID_LOCO) 
  505.  FF_FOURCC1_OP(WNV1,wnv1 & rawmask,CODEC_ID_WNV1) 
  506.  FF_FOURCC1_OP(CSCD,cscd & rawmask,CODEC_ID_CSCD) 
  507.  FF_FOURCC1_OP(ZMBV,zmbv & rawmask,CODEC_ID_ZMBV) 
  508.  FF_FOURCC1_OP(ULTI,ulti & rawmask,CODEC_ID_ULTI) 
  509.  /* uncompressed video */ 
  510.  FF_FOURCC1_OP(YUY2,rawv==1 || rawv==2 || rawv==FOURCC_YUY2,CODEC_ID_YUY2) 
  511.  FF_FOURCC1_OP(YV12,rawv==1 || rawv==2 || rawv==FOURCC_YV12,CODEC_ID_YV12) 
  512.  FF_FOURCC1_OP(YVYU,rawv==1 || rawv==2 || rawv==FOURCC_YVYU,CODEC_ID_YVYU) 
  513.  FF_FOURCC1_OP(UYVY,rawv==1 || rawv==2 || rawv==FOURCC_UYVY,CODEC_ID_UYVY) 
  514.  FF_FOURCC1_OP(VYUY,rawv==1 || rawv==2 || rawv==FOURCC_VYUY,CODEC_ID_VYUY) 
  515.  FF_FOURCC1_OP(I420,rawv==1 || rawv==2 || rawv==FOURCC_I420,CODEC_ID_I420) 
  516.  FF_FOURCC1_OP(IYUV,rawv==1 || rawv==2 || rawv==FOURCC_IYUV,CODEC_ID_I420) 
  517.  FF_FOURCC1_OP(RGB2,rawv==1 || rawv==3 || rawv==FOURCC_RGB2,CODEC_ID_RGB2) 
  518.  FF_FOURCC1_OP(RGB3,rawv==1 || rawv==3 || rawv==FOURCC_RGB3,CODEC_ID_RGB3) 
  519.  FF_FOURCC1_OP(RGB5,rawv==1 || rawv==3 || rawv==FOURCC_RGB5,CODEC_ID_RGB5) 
  520.  FF_FOURCC1_OP(RGB6,rawv==1 || rawv==3 || rawv==FOURCC_RGB6,CODEC_ID_RGB6) 
  521.  FF_FOURCC1_OP(CLJR,rawv==1            || rawv==FOURCC_CLJR,CODEC_ID_CLJR) 
  522.  FF_FOURCC1_OP(Y800,rawv==1 || rawv==2 || rawv==FOURCC_Y800,CODEC_ID_Y800) 
  523.  FF_FOURCC1_OP(444P,rawv==1 || rawv==2 || rawv==FOURCC_444P,CODEC_ID_444P) 
  524.  FF_FOURCC1_OP(YV24,rawv==1 || rawv==2 || rawv==FOURCC_YV24,CODEC_ID_444P) 
  525.  FF_FOURCC1_OP(422P,rawv==1 || rawv==2 || rawv==FOURCC_422P,CODEC_ID_422P) 
  526.  FF_FOURCC1_OP(YV16,rawv==1 || rawv==2 || rawv==FOURCC_YV16,CODEC_ID_422P) 
  527.  FF_FOURCC1_OP(411P,rawv==1 || rawv==2 || rawv==FOURCC_411P,CODEC_ID_411P) 
  528.  FF_FOURCC1_OP(Y41B,rawv==1 || rawv==2 || rawv==FOURCC_Y41B,CODEC_ID_411P) 
  529.  FF_FOURCC1_OP(410P,rawv==1 || rawv==2 || rawv==FOURCC_410P,CODEC_ID_410P) 
  530.  FF_FOURCC1_OP(NV12,rawv==1 || rawv==2 || rawv==FOURCC_NV12,CODEC_ID_NV12) 
  531.  FF_FOURCC1_OP(NV21,rawv==1 || rawv==2 || rawv==FOURCC_NV12,CODEC_ID_NV21) 
  532.  /*FF_FOURCC1_OP(PAL1,rawv==1 || rawv==4 || rawv==FOURCC_PAL1,CODEC_ID_PAL1)*/ 
  533.  /*FF_FOURCC1_OP(PAL4,rawv==1 || rawv==4 || rawv==FOURCC_PAL4,CODEC_ID_PAL4)*/ 
  534.  /*FF_FOURCC1_OP(PAL8,rawv==1 || rawv==4 || rawv==FOURCC_PAL8,CODEC_ID_PAL8)*/ 
  535.  /* mencoder's raw formats */ 
  536.  FF_FOURCC1_OP(RGB24MPLAYER,rawv==1 || rawv==3 || rawv==FOURCC_RGB2,CODEC_ID_BGR2) 
  537.  FF_FOURCC1_OP(RGB32MPLAYER,rawv==1 || rawv==3 || rawv==FOURCC_RGB3,CODEC_ID_BGR3) 
  538.  FF_FOURCC1_OP(RGB15MPLAYER,rawv==1 || rawv==3 || rawv==FOURCC_RGB5,CODEC_ID_BGR5) 
  539.  FF_FOURCC1_OP(RGB16MPLAYER,rawv==1 || rawv==3 || rawv==FOURCC_RGB6,CODEC_ID_BGR6) 
  540.  /* exotic */ 
  541.  FF_FOURCC_OP (MP4S,divx & rawmask,c_mpeg4) 
  542.  FF_FOURCC_OP (M4S2,divx & rawmask,c_mpeg4) 
  543.  FF_FOURCC1_OP(COL1,div3 & rawmask,CODEC_ID_MSMPEG4V3) 
  544.  FF_FOURCC_OP (BLZ0,dx50 & rawmask,c_mpeg4) 
  545.  FF_FOURCC_OP (DXGM,dx50 & rawmask,c_mpeg4) 
  546.  FF_FOURCC_OP (3IV2,_3iv & rawmask,c_mpeg4) 
  547.  FF_FOURCC_OP (RMP4,_3iv & rawmask,c_mpeg4) 
  548.  FF_FOURCC_OP (DM4V,_3iv & rawmask,c_mpeg4) 
  549.  FF_FOURCC_OP (HDX4,_3iv & rawmask,c_mpeg4) 
  550.  FF_FOURCC_OP (XVIX,xvid & rawmask,c_mpeg4) 
  551.  FF_FOURCC1_OP(DIV4,div3 & rawmask,CODEC_ID_MSMPEG4V3) 
  552.  FF_FOURCC1_OP(DIV5,div3 & rawmask,CODEC_ID_MSMPEG4V3) 
  553.  FF_FOURCC1_OP(DIV6,div3 & rawmask,CODEC_ID_MSMPEG4V3) 
  554.  FF_FOURCC1_OP(AP41,div3 & rawmask,CODEC_ID_MSMPEG4V3) 
  555.  FF_FOURCC1_OP(MPG3,div3 & rawmask,CODEC_ID_MSMPEG4V3) 
  556.  FF_FOURCC1_OP(DIV2,mp42 & rawmask,CODEC_ID_MSMPEG4V2) 
  557.  FF_FOURCC1_OP(MPG4,mp41 & rawmask,CODEC_ID_MSMPEG4V1) 
  558.  FF_FOURCC1_OP(DIV1,mp41 & rawmask,CODEC_ID_MSMPEG4V1) 
  559. #define FF_FOURCC_LIST(fourCC,decoder,codec) _l(#fourCC),
  560. const char_t* TglobalSettingsDecVideo::fourccs[]=
  561. {
  562.  #undef FF_FOURCC_OP
  563.  #undef FF_FOURCC1_OP
  564.  #define FF_FOURCC_OP  FF_FOURCC_LIST
  565.  #define FF_FOURCC1_OP FF_FOURCC_LIST
  566.  VIDEO_FOURCCS
  567.  NULL
  568. }; 
  569. const char_t** TglobalSettingsDecVideo::getFOURCClist(void) const
  570. {
  571.  return fourccs; 
  572. }
  573. const CodecID TglobalSettingsDecVideo::c_mpeg4[IDFF_MOVIE_MAX+1]=
  574. {
  575.  CODEC_ID_NONE, 
  576.  CODEC_ID_MPEG4,
  577.  CODEC_ID_NONE, 
  578.  CODEC_ID_NONE,          
  579.  CODEC_ID_NONE,          
  580.  CODEC_ID_NONE,          
  581.  CODEC_ID_NONE,          
  582.  CODEC_ID_NONE,          
  583.  CODEC_ID_NONE,          
  584.  CODEC_ID_XVID4,
  585. };
  586. const CodecID TglobalSettingsDecVideo::c_mpeg1[IDFF_MOVIE_MAX+1]=
  587. {
  588.  CODEC_ID_NONE,
  589.  CODEC_ID_MPEG1VIDEO,
  590.  CODEC_ID_NONE,
  591.  CODEC_ID_NONE,
  592.  CODEC_ID_NONE,
  593.  CODEC_ID_LIBMPEG2
  594. };
  595. const CodecID TglobalSettingsDecVideo::c_mpeg2[IDFF_MOVIE_MAX+1]=
  596. {
  597.  CODEC_ID_NONE,
  598.  CODEC_ID_MPEG2VIDEO,
  599.  CODEC_ID_NONE,
  600.  CODEC_ID_NONE,
  601.  CODEC_ID_NONE,
  602.  CODEC_ID_LIBMPEG2
  603. };
  604. const CodecID TglobalSettingsDecVideo::c_theora[IDFF_MOVIE_MAX+1]=
  605. {
  606.  CODEC_ID_NONE,
  607.  CODEC_ID_THEORA,
  608.  CODEC_ID_NONE,
  609.  CODEC_ID_THEORA_LIB
  610. };
  611. void TglobalSettingsDecVideo::getCodecsList(Tstrptrs &codecs) const
  612. {
  613.  std::vector<CodecID> ids;
  614.  #undef FF_FOURCC_OP
  615.  #undef FF_FOURCC1_OP
  616.  #define FF_FOURCC_OP(format,decoder,codecs) for (int j=0;j<=IDFF_MOVIE_MAX;j++) if (codecs[j]!=CODEC_ID_NONE) ids.push_back(codecs[j]);
  617.  #define FF_FOURCC1_OP(format,decoder,codec) ids.push_back(codec);
  618.  VIDEO_FOURCCS
  619.  cleanupCodecsList(ids,codecs);
  620. }
  621. CodecID TglobalSettingsDecVideo::getCodecId(DWORD fourCC,FOURCC *AVIfourCC) const
  622. {
  623.  fourCC=FCCupper(fourCC);
  624.  CodecID codecId=CODEC_ID_NONE;
  625.  int rawmask=filtermode&IDFF_FILTERMODE_VIDEORAW?0:0xffff;
  626.  switch(fourCC)
  627.   {
  628.    #undef FF_FOURCC_OP
  629.    #undef FF_FOURCC1_OP
  630.    #define FF_FOURCC_OP FF_FOURCC_CODEC
  631.    #define FF_FOURCC1_OP FF_FOURCC1_CODEC
  632.    VIDEO_FOURCCS
  633.    default:return CODEC_ID_NONE;
  634.   }
  635.  if (codecId && AVIfourCC)
  636.   *AVIfourCC=fourCC;
  637.  return codecId; 
  638. }
  639. //======================== TglobalSettingsDecVideo::TsubtitlesSettings ==========================
  640. TglobalSettingsDecVideo::TsubtitlesSettings::TsubtitlesSettings(TintStrColl *Icoll):Toptions(Icoll)
  641. {
  642.  static const TintOptionT<TsubtitlesSettings> iopts[]=
  643.   {
  644.    IDFF_subTextpin        ,&TsubtitlesSettings::textpin        ,0,0,_l(""),0,
  645.      _l("subTextpin"),0,
  646.    IDFF_subTextpinSSA     ,&TsubtitlesSettings::textpinSSA     ,0,0,_l(""),0,
  647.      _l("subTextpinSSA"),0,
  648.    IDFF_subWatch          ,&TsubtitlesSettings::watch          ,0,0,_l(""),1,
  649.      _l("subWatch"),0,
  650.    IDFF_subSearchHeuristic,&TsubtitlesSettings::searchHeuristic,0,0,_l(""),1,
  651.      _l("subSearchHeuristic"),0,
  652.    0
  653.   };
  654.  addOptions(iopts); 
  655.  static const TstrOption sopts[]=
  656.   {
  657.    IDFF_subSearchDir,(TstrVal)&TsubtitlesSettings::searchDir,2*MAX_PATH ,_l(""),0,
  658.      _l("subSearchDir"),NULL,
  659.    0
  660.   };
  661.  addOptions(sopts); 
  662. }
  663. void TglobalSettingsDecVideo::TsubtitlesSettings::getDefaultStr(int id,char_t *buf,size_t buflen)
  664. {
  665.  if (id==IDFF_subSearchDir)
  666.   {
  667.    TregOpRegRead tt(HKEY_LOCAL_MACHINE,_l("SOFTWARE\PRR\DivXG400"));
  668.    tt._REG_OP_S(0,_l("SubPath"),buf,buflen,_l("."));
  669.   } 
  670. }
  671. //=================================== TglobalSettingsDecAudio ===================================
  672. TglobalSettingsDecAudio::TglobalSettingsDecAudio(const Tconfig *Iconfig,int Imode,TintStrColl *Icoll,const char_t *Ireg_child):TglobalSettingsDec(Iconfig,Imode,Ireg_child,Icoll,&osd),osd(Icoll)
  673. {
  674.  static const TintOptionT<TglobalSettingsDecAudio> iopts[]=
  675.   {
  676.    IDFF_wma7                   ,&TglobalSettingsDecAudio::wma1                   ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  677.    IDFF_wma8                   ,&TglobalSettingsDecAudio::wma2                   ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  678.    IDFF_mp3                    ,&TglobalSettingsDecAudio::mp3                    ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  679.    IDFF_mp2                    ,&TglobalSettingsDecAudio::mp2                    ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  680.    IDFF_ac3                    ,&TglobalSettingsDecAudio::ac3                    ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  681.    IDFF_dts                    ,&TglobalSettingsDecAudio::dts                    ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  682.    IDFF_aac                    ,&TglobalSettingsDecAudio::aac                    ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  683.    IDFF_amr                    ,&TglobalSettingsDecAudio::amr                    ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  684.    IDFF_iadpcm                 ,&TglobalSettingsDecAudio::iadpcm                 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  685.    IDFF_msadpcm                ,&TglobalSettingsDecAudio::msadpcm                ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  686.    IDFF_otherAdpcm             ,&TglobalSettingsDecAudio::otherAdpcm             ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  687.    IDFF_law                    ,&TglobalSettingsDecAudio::law                    ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  688.    IDFF_gsm                    ,&TglobalSettingsDecAudio::gsm                    ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  689.    IDFF_lpcm                   ,&TglobalSettingsDecAudio::lpcm                   ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  690.    IDFF_flac                   ,&TglobalSettingsDecAudio::flac                   ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  691.    IDFF_tta                    ,&TglobalSettingsDecAudio::tta                    ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  692.    IDFF_qdm2                   ,&TglobalSettingsDecAudio::qdm2                   ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  693.    IDFF_mace                   ,&TglobalSettingsDecAudio::mace                   ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  694.    IDFF_truespeech             ,&TglobalSettingsDecAudio::truespeech             ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  695.    IDFF_vorbis                 ,&TglobalSettingsDecAudio::vorbis                 ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  696.    IDFF_avisA                  ,&TglobalSettingsDecAudio::avis                   ,0,IDFF_MOVIE_MAX,_l(""),0,NULL,0,
  697.    IDFF_rawa                   ,&TglobalSettingsDecAudio::rawa                   ,0,0             ,_l(""),0,NULL,0,
  698.    IDFF_showCurrentVolume      ,&TglobalSettingsDecAudio::showCurrentVolume      ,0,0             ,_l(""),0,
  699.      _l("showCurrentVolume"),0,
  700.    IDFF_showCurrentFFT         ,&TglobalSettingsDecAudio::showCurrentFFT         ,0,0             ,_l(""),0,
  701.      _l("showCurrentFFT"),0,
  702.    IDFF_firIsUserDisplayMaxFreq,&TglobalSettingsDecAudio::firIsUserDisplayMaxFreq,0,0             ,_l(""),0,
  703.      _l("firIsUserDisplayMaxFreq"),0,
  704.    IDFF_firUserDisplayMaxFreq  ,&TglobalSettingsDecAudio::firUserDisplayMaxFreq  ,1,192000/2      ,_l(""),0,
  705.      _l("firUserDisplayMaxFreq"),48000,
  706.    IDFF_isAudioSwitcher        ,&TglobalSettingsDecAudio::isAudioSwitcher        ,0,0             ,_l(""),0,
  707.      _l("isAudioSwitcher"),0,
  708.    IDFF_alwaysextensible       ,&TglobalSettingsDecAudio::alwaysextensible       ,0,0             ,_l(""),0,
  709.      _l("alwaysextensible"),1,
  710.    IDFF_allowOutStream         ,&TglobalSettingsDecAudio::allowOutStream         ,0,0             ,_l(""),0,
  711.      _l("allowOutStream"),1,
  712.    IDFF_ac3drc                 ,&TglobalSettingsDecAudio::ac3drc                 ,0,0             ,_l(""),0,
  713.      _l("ac3drc"),1,
  714.    IDFF_dtsdrc                 ,&TglobalSettingsDecAudio::dtsdrc                 ,0,0             ,_l(""),0,
  715.      _l("dtsdrc"),1,
  716.    IDFF_dtsinwav               ,&TglobalSettingsDecAudio::dtsinwav               ,0,0             ,_l(""),0,
  717.      _l("dtsinwav"),1,
  718.    IDFF_vorbisgain             ,&TglobalSettingsDecAudio::vorbisgain             ,0,0             ,_l(""),0,
  719.      _l("vorbisgain"),0,
  720.    0
  721.   };
  722.  addOptions(iopts); 
  723.  static const TstrOption sopts[]=
  724.   {
  725.    IDFF_winamp2dir,(TstrVal)&TglobalSettingsDecAudio::winamp2dir,MAX_PATH,_l(""),0,
  726.      _l("winamp2dir"),NULL,
  727.    0
  728.   };
  729.  addOptions(sopts); 
  730. }
  731. int TglobalSettingsDecAudio::getDefault(int id)
  732. {
  733.  switch (id)
  734.   {
  735.    case IDFF_multipleInstances:return filtermode&IDFF_FILTERMODE_AUDIORAW?0:1;
  736.    default:return TglobalSettingsDec::getDefault(id);
  737.   }
  738. }
  739. void TglobalSettingsDecAudio::getDefaultStr(int id,char_t *buf,size_t buflen)
  740. {
  741.  if (id==IDFF_winamp2dir)
  742.   {
  743.    TregOpRegRead wt(HKEY_CURRENT_USER,_l("Software\Winamp"));
  744.    wt._REG_OP_S(0,NULL,buf,buflen,_l(""));
  745.   }
  746.  else
  747.   TglobalSettingsDec::getDefaultStr(id,buf,buflen); 
  748. }
  749. void TglobalSettingsDecAudio::reg_op_codec(TregOp &t,TregOp *t2)
  750. {
  751.  _reg_op_codec(IDFF_wma7      ,t,t2,_l("wma1")      ,wma1      ,0);
  752.  _reg_op_codec(IDFF_wma8      ,t,t2,_l("wma2")      ,wma2      ,0);
  753.  _reg_op_codec(IDFF_mp2       ,t,t2,_l("mp2")       ,mp2       ,0);
  754.  _reg_op_codec(IDFF_mp3       ,t,t2,_l("mp3")       ,mp3       ,0);
  755.  _reg_op_codec(IDFF_ac3       ,t,t2,_l("ac3")       ,ac3       ,IDFF_MOVIE_LIBA52);
  756.  _reg_op_codec(IDFF_dts       ,t,t2,_l("dts")       ,dts       ,IDFF_MOVIE_LIBDTS);
  757.  _reg_op_codec(IDFF_aac       ,t,t2,_l("aac")       ,aac       ,0);
  758.  _reg_op_codec(IDFF_amr       ,t,t2,_l("amr")       ,amr       ,0);
  759.  _reg_op_codec(IDFF_iadpcm    ,t,t2,_l("iadpcm")    ,iadpcm    ,IDFF_MOVIE_LAVC);
  760.  _reg_op_codec(IDFF_msadpcm   ,t,t2,_l("msadpcm")   ,msadpcm   ,0);
  761.  _reg_op_codec(IDFF_otherAdpcm,t,t2,_l("otherAdpcm"),otherAdpcm,0);
  762.  _reg_op_codec(IDFF_law       ,t,t2,_l("law")       ,law       ,0);
  763.  _reg_op_codec(IDFF_gsm       ,t,t2,_l("gsm")       ,gsm       ,0);
  764.  _reg_op_codec(IDFF_lpcm      ,t,t2,_l("lpcm")      ,lpcm      ,0);
  765.  _reg_op_codec(IDFF_flac      ,t,t2,_l("flac")      ,flac      ,0);
  766.  _reg_op_codec(IDFF_tta       ,t,t2,_l("tta")       ,tta       ,0);
  767.  _reg_op_codec(IDFF_qdm2      ,t,t2,_l("qdm2")      ,qdm2      ,0);
  768.  _reg_op_codec(IDFF_mace      ,t,t2,_l("mace")      ,mace      ,0);
  769.  _reg_op_codec(IDFF_truespeech,t,t2,_l("truespeech"),truespeech,0);
  770.  _reg_op_codec(IDFF_vorbis    ,t,t2,_l("vorbis")    ,vorbis    ,0);
  771.  _reg_op_codec(IDFF_avisA     ,t,t2,_l("avis")      ,avis      ,IDFF_MOVIE_AVIS);
  772.  _reg_op_codec(IDFF_rawa      ,t,t2,filtermode&IDFF_FILTERMODE_AUDIORAW?_l("raw_rawa"):_l("rawa"),rawa,filtermode&IDFF_FILTERMODE_AUDIORAW?IDFF_MOVIE_RAW:0);
  773. }
  774. void TglobalSettingsDecAudio::load(void)
  775. {
  776.  TglobalSettingsDec::load();
  777.  
  778.  if (ac3==IDFF_MOVIE_MPLAYER || ac3==IDFF_MOVIE_LAVC) ac3=IDFF_MOVIE_LIBA52;
  779.  fixMissing(wma1      ,IDFF_MOVIE_LAVC);
  780.  fixMissing(wma2      ,IDFF_MOVIE_LAVC);
  781.  fixMissing(amr       ,IDFF_MOVIE_LAVC);
  782.  fixMissing(ac3       ,IDFF_MOVIE_LIBA52);
  783.  fixMissing(dts       ,IDFF_MOVIE_LIBDTS);
  784.  fixMissing(mp2       ,IDFF_MOVIE_MPLAYER,IDFF_MOVIE_LIBMAD,IDFF_MOVIE_AUDX);
  785.  fixMissing(mp3       ,IDFF_MOVIE_MPLAYER,IDFF_MOVIE_LIBMAD,IDFF_MOVIE_AUDX);
  786.  fixMissing(aac       ,IDFF_MOVIE_LIBFAAD,IDFF_MOVIE_REALAAC);
  787.  fixMissing(avis      ,IDFF_MOVIE_AVIS);
  788.  fixMissing(iadpcm    ,IDFF_MOVIE_LAVC);
  789.  fixMissing(msadpcm   ,IDFF_MOVIE_LAVC);
  790.  fixMissing(otherAdpcm,IDFF_MOVIE_LAVC);
  791.  fixMissing(law       ,IDFF_MOVIE_LAVC);
  792.  fixMissing(gsm       ,IDFF_MOVIE_LAVC);
  793.  fixMissing(flac      ,IDFF_MOVIE_LAVC);
  794.  fixMissing(tta       ,IDFF_MOVIE_LAVC);
  795.  fixMissing(qdm2      ,IDFF_MOVIE_LAVC);
  796.  fixMissing(mace      ,IDFF_MOVIE_LAVC);
  797.  fixMissing(truespeech,IDFF_MOVIE_LAVC);
  798.  fixMissing(vorbis    ,IDFF_MOVIE_LAVC,IDFF_MOVIE_TREMOR);
  799. }
  800. #define FF_WAVE_FORMAT1_CODEC(format,decoder,codec) 
  801.  case WAVE_FORMAT_##format:                         
  802.   codecId=(decoder)?codec:CODEC_ID_NONE;            
  803.   break;
  804. #define FF_WAVE_FORMAT_CODEC(format,decoder,codecs) 
  805.  case WAVE_FORMAT_##format:                         
  806.   codecId=codecs[decoder];                          
  807.   break;
  808. #define AUDIO_FOURCCS 
  809.  FF_WAVE_FORMAT1_OP(WMA7   ,wma1   & rawmask,CODEC_ID_WMAV1) 
  810.  FF_WAVE_FORMAT1_OP(WMA8   ,wma2   & rawmask,CODEC_ID_WMAV2) 
  811.  FF_WAVE_FORMAT_OP (MPEGLAYER3,mp3 & rawmask,c_mp123) 
  812.  FF_WAVE_FORMAT_OP (MPEG   ,mp2    & rawmask,c_mp123) 
  813.  FF_WAVE_FORMAT_OP (AC3_W  ,ac3    & rawmask,c_ac3) 
  814.  FF_WAVE_FORMAT_OP (DTS_W  ,dts    & rawmask,c_dts) 
  815.  FF_WAVE_FORMAT_OP (AAC1   ,aac    & rawmask,c_aac) 
  816.  FF_WAVE_FORMAT_OP (AAC2   ,aac    & rawmask,c_aac) 
  817.  FF_WAVE_FORMAT_OP (AAC3   ,aac    & rawmask,c_aac) 
  818.  FF_WAVE_FORMAT_OP (AAC4   ,aac    & rawmask,c_aac) 
  819.  FF_WAVE_FORMAT1_OP(AMR    ,amr    & rawmask,CODEC_ID_AMR_NB) 
  820.  FF_WAVE_FORMAT1_OP(SAMR   ,amr    & rawmask,CODEC_ID_AMR_NB) 
  821.  FF_WAVE_FORMAT1_OP(IMA_DK3,iadpcm & rawmask,CODEC_ID_ADPCM_IMA_DK3) 
  822.  FF_WAVE_FORMAT1_OP(IMA_WAV,iadpcm & rawmask,CODEC_ID_ADPCM_IMA_WAV) 
  823.  FF_WAVE_FORMAT1_OP(IMA_DK4,iadpcm & rawmask,CODEC_ID_ADPCM_IMA_DK4) 
  824.  FF_WAVE_FORMAT1_OP(IMA4   ,iadpcm & rawmask,CODEC_ID_ADPCM_IMA_QT) 
  825.  FF_WAVE_FORMAT1_OP(ADPCM  ,msadpcm& rawmask,CODEC_ID_ADPCM_MS) 
  826.  FF_WAVE_FORMAT1_OP(CREATIVE_ADPCM,otherAdpcm& rawmask,CODEC_ID_ADPCM_CT) 
  827.  FF_WAVE_FORMAT1_OP(YAMAHA_ADPCM  ,otherAdpcm& rawmask,CODEC_ID_ADPCM_YAMAHA) 
  828.  FF_WAVE_FORMAT1_OP(G726          ,otherAdpcm& rawmask,CODEC_ID_ADPCM_G726) 
  829.  FF_WAVE_FORMAT1_OP(ALAW   ,law    & rawmask,CODEC_ID_PCM_ALAW) 
  830.  FF_WAVE_FORMAT1_OP(MULAW  ,law    & rawmask,CODEC_ID_PCM_MULAW) 
  831.  /*FF_WAVE_FORMAT1_OP(QT_ULAW,law    & rawmask,CODEC_ID_PCM_MULAW)*/ 
  832.  FF_WAVE_FORMAT1_OP(GSM610 ,gsm    & rawmask,CODEC_ID_GSM_MS) 
  833.  /*FF_WAVE_FORMAT1_OP(QT_GSM ,gsm    & rawmask,CODEC_ID_GSM_MS)*/ 
  834.  FF_WAVE_FORMAT1_OP(FLAC   ,flac   & rawmask,CODEC_ID_FLAC) 
  835.  FF_WAVE_FORMAT1_OP(TTA    ,tta    & rawmask,CODEC_ID_TTA) 
  836.  FF_WAVE_FORMAT1_OP(QDM2   ,qdm2   & rawmask,CODEC_ID_QDM2) 
  837.  FF_WAVE_FORMAT1_OP(MAC3   ,mace   & rawmask,CODEC_ID_MACE3) 
  838.  FF_WAVE_FORMAT1_OP(MAC6   ,mace   & rawmask,CODEC_ID_MACE6) 
  839.  FF_WAVE_FORMAT1_OP(DSPGROUP_TRUESPEECH,truespeech & rawmask,CODEC_ID_TRUESPEECH) 
  840.  /*FF_WAVE_FORMAT1_OP(COOK   ,1   & rawmask,CODEC_ID_COOK)*/ 
  841.  FF_WAVE_FORMAT_OP (VORBIS  ,vorbis & rawmask,c_vorbis) 
  842.  FF_WAVE_FORMAT_OP (FFVORBIS,vorbis & rawmask,c_vorbis) 
  843.  /*FF_WAVE_FORMAT1_OP(VORBIS1 ,vorbis& rawmask,CODEC_ID_TREMOR)*/ 
  844.  /*FF_WAVE_FORMAT1_OP(VORBIS2 ,vorbis& rawmask,CODEC_ID_TREMOR)*/ 
  845.  /*FF_WAVE_FORMAT1_OP(VORBIS3 ,vorbis& rawmask,CODEC_ID_TREMOR)*/ 
  846.  /*FF_WAVE_FORMAT1_OP(VORBIS1P,vorbis& rawmask,CODEC_ID_TREMOR)*/ 
  847.  /*FF_WAVE_FORMAT1_OP(VORBIS2P,vorbis& rawmask,CODEC_ID_TREMOR)*/ 
  848.  /*FF_WAVE_FORMAT1_OP(VORBIS3P,vorbis& rawmask,CODEC_ID_TREMOR)*/ 
  849.  FF_WAVE_FORMAT1_OP(LPCM   ,lpcm   & rawmask,CODEC_ID_LPCM) 
  850.  FF_WAVE_FORMAT1_OP(AVIS   ,avis   & rawmask,CODEC_ID_AVISYNTH) 
  851.  FF_WAVE_FORMAT1_OP(PCM8   ,rawa==IDFF_MOVIE_RAW || rawa==(TsampleFormat::SF_ALLINT<<8) || rawa==(TsampleFormat::SF_PCM8 <<8),CODEC_ID_PCM) 
  852.  FF_WAVE_FORMAT1_OP(PCM16  ,rawa==IDFF_MOVIE_RAW || rawa==(TsampleFormat::SF_ALLINT<<8) || rawa==(TsampleFormat::SF_PCM16<<8),CODEC_ID_PCM) 
  853.  FF_WAVE_FORMAT1_OP(PCM24  ,rawa==IDFF_MOVIE_RAW || rawa==(TsampleFormat::SF_ALLINT<<8) || rawa==(TsampleFormat::SF_PCM24<<8),CODEC_ID_PCM) 
  854.  FF_WAVE_FORMAT1_OP(PCM32  ,rawa==IDFF_MOVIE_RAW || rawa==(TsampleFormat::SF_ALLINT<<8) || rawa==(TsampleFormat::SF_PCM32<<8),CODEC_ID_PCM) 
  855.  FF_WAVE_FORMAT1_OP(FLOAT32,rawa==IDFF_MOVIE_RAW || rawa==(TsampleFormat::SF_FLOAT32<<8) || rawa==(TsampleFormat::SF_ALLFLOAT<<8),CODEC_ID_PCM) 
  856.  FF_WAVE_FORMAT1_OP(FLOAT64,rawa==IDFF_MOVIE_RAW || rawa==(TsampleFormat::SF_FLOAT64<<8) || rawa==(TsampleFormat::SF_ALLFLOAT<<8),CODEC_ID_PCM)
  857. const char_t *TglobalSettingsDecAudio::wave_formats[]=
  858. {
  859.  #undef FF_WAVE_FORMAT_OP
  860.  #undef FF_WAVE_FORMAT1_OP
  861.  #define FF_WAVE_FORMAT_OP  FF_FOURCC_LIST
  862.  #define FF_WAVE_FORMAT1_OP FF_FOURCC_LIST
  863.  AUDIO_FOURCCS
  864.  NULL
  865. }; 
  866. const char_t** TglobalSettingsDecAudio::getFOURCClist(void) const
  867. {
  868.  return wave_formats; 
  869. }
  870. const CodecID TglobalSettingsDecAudio::c_mp123[IDFF_MOVIE_MAX+1]=
  871. {
  872.  CODEC_ID_NONE,  
  873.  CODEC_ID_NONE,  
  874.  CODEC_ID_NONE,  
  875.  CODEC_ID_NONE,  
  876.  CODEC_ID_NONE,  
  877.  CODEC_ID_NONE,  
  878.  CODEC_ID_MP3LIB,
  879.  CODEC_ID_LIBMAD,
  880.  CODEC_ID_NONE,  
  881.  CODEC_ID_NONE,  
  882.  CODEC_ID_NONE,  
  883.  CODEC_ID_NONE,  
  884.  CODEC_ID_NONE,  
  885.  CODEC_ID_NONE,  
  886.  CODEC_ID_NONE,  
  887.  CODEC_ID_NONE,  
  888.  CODEC_ID_NONE,  
  889.  CODEC_ID_NONE,  
  890.  CODEC_ID_NONE,  
  891.  CODEC_ID_NONE,  
  892.  CODEC_ID_AUDX   
  893. };
  894. const CodecID TglobalSettingsDecAudio::c_ac3[IDFF_MOVIE_MAX+1]=
  895. {
  896.  CODEC_ID_NONE,
  897.  CODEC_ID_NONE,
  898.  CODEC_ID_NONE,
  899.  CODEC_ID_NONE,
  900.  CODEC_ID_NONE,
  901.  CODEC_ID_NONE,
  902.  CODEC_ID_NONE,
  903.  CODEC_ID_NONE,
  904.  CODEC_ID_NONE,
  905.  CODEC_ID_NONE,
  906.  CODEC_ID_NONE,
  907.  CODEC_ID_NONE,
  908.  CODEC_ID_NONE,
  909.  CODEC_ID_NONE,
  910.  CODEC_ID_NONE,
  911.  CODEC_ID_LIBA52,
  912.  CODEC_ID_SPDIF_AC3
  913. };
  914. const CodecID TglobalSettingsDecAudio::c_dts[IDFF_MOVIE_MAX+1]=
  915. {
  916.  CODEC_ID_NONE,
  917.  CODEC_ID_NONE,
  918.  CODEC_ID_NONE,
  919.  CODEC_ID_NONE,
  920.  CODEC_ID_NONE,
  921.  CODEC_ID_NONE,
  922.  CODEC_ID_NONE,
  923.  CODEC_ID_NONE,
  924.  CODEC_ID_NONE,
  925.  CODEC_ID_NONE,
  926.  CODEC_ID_NONE,
  927.  CODEC_ID_NONE,
  928.  CODEC_ID_NONE,
  929.  CODEC_ID_NONE,
  930.  CODEC_ID_NONE,
  931.  CODEC_ID_NONE,
  932.  CODEC_ID_SPDIF_DTS,
  933.  CODEC_ID_LIBDTS
  934. };
  935. const CodecID TglobalSettingsDecAudio::c_aac[IDFF_MOVIE_MAX+1]=
  936. {
  937.  CODEC_ID_NONE,
  938.  CODEC_ID_NONE,
  939.  CODEC_ID_NONE,
  940.  CODEC_ID_NONE,
  941.  CODEC_ID_NONE,
  942.  CODEC_ID_NONE,
  943.  CODEC_ID_NONE,
  944.  CODEC_ID_NONE,
  945.  CODEC_ID_LIBFAAD,
  946.  CODEC_ID_NONE,
  947.  CODEC_ID_NONE,
  948.  CODEC_ID_NONE,
  949.  CODEC_ID_NONE,
  950.  CODEC_ID_NONE,
  951.  CODEC_ID_NONE,
  952.  CODEC_ID_NONE,
  953.  CODEC_ID_NONE,
  954.  CODEC_ID_NONE,
  955.  CODEC_ID_NONE,
  956.  CODEC_ID_REALAAC
  957. };
  958. const CodecID TglobalSettingsDecAudio::c_vorbis[IDFF_MOVIE_MAX+1]=
  959. {
  960.  CODEC_ID_NONE,
  961.  CODEC_ID_VORBIS,    
  962.  CODEC_ID_NONE,  
  963.  CODEC_ID_NONE,    
  964.  CODEC_ID_NONE,     
  965.  CODEC_ID_NONE,
  966.  CODEC_ID_NONE, 
  967.  CODEC_ID_NONE,
  968.  CODEC_ID_NONE,  
  969.  CODEC_ID_NONE, 
  970.  CODEC_ID_NONE,   
  971.  CODEC_ID_NONE,    
  972.  CODEC_ID_NONE,    
  973.  CODEC_ID_NONE,    
  974.  CODEC_ID_NONE,    
  975.  CODEC_ID_NONE,  
  976.  CODEC_ID_NONE,   
  977.  CODEC_ID_NONE,  
  978.  CODEC_ID_TREMOR  
  979. };
  980. void TglobalSettingsDecAudio::getCodecsList(Tstrptrs &codecs) const
  981. {
  982.  std::vector<CodecID> ids;
  983.  #undef FF_WAVE_FORMAT_OP
  984.  #undef FF_WAVE_FORMAT1_OP
  985.  #define FF_WAVE_FORMAT_OP(format,decoder,codecs) for (int j=0;j<=IDFF_MOVIE_MAX;j++) if (codecs[j]!=CODEC_ID_NONE) ids.push_back(codecs[j]);
  986.  #define FF_WAVE_FORMAT1_OP(format,decoder,codec) ids.push_back(codec);
  987.  AUDIO_FOURCCS
  988.  cleanupCodecsList(ids,codecs);
  989. }
  990. CodecID TglobalSettingsDecAudio::getCodecId(DWORD fourCC,FOURCC*) const
  991. {
  992.  CodecID codecId=CODEC_ID_NONE;
  993.  int rawmask=filtermode&IDFF_FILTERMODE_AUDIORAW?0:0xffff;
  994.  switch(fourCC)
  995.   {
  996.    #undef FF_WAVE_FORMAT_OP
  997.    #undef FF_WAVE_FORMAT1_OP
  998.    #define FF_WAVE_FORMAT_OP FF_WAVE_FORMAT_CODEC
  999.    #define FF_WAVE_FORMAT1_OP FF_WAVE_FORMAT1_CODEC
  1000.    AUDIO_FOURCCS
  1001.    default:return CODEC_ID_NONE;
  1002.   }
  1003.  return codecId; 
  1004. }
  1005. //==================================== TglobalSettingsEnc ====================================
  1006. TglobalSettingsEnc::TglobalSettingsEnc(const Tconfig *Iconfig,int Imode,TintStrColl *Icoll):TglobalSettingsBase(Iconfig,Imode,FFDSHOWENC,Icoll)
  1007. {
  1008.  static const TintOptionT<TglobalSettingsEnc> iopts[]=
  1009.   {
  1010.    IDFF_enc_psnr         ,&TglobalSettingsEnc::psnr             ,0,0,_l(""),0,
  1011.      _l("psnr"),0,
  1012.    IDFF_isDyInterlaced   ,&TglobalSettingsEnc::isDyInterlaced   ,0,0,_l(""),0,
  1013.      _l("isDyInterlaced"),0,
  1014.    IDFF_dyInterlaced     ,&TglobalSettingsEnc::dyInterlaced     ,0,4096,_l(""),0,
  1015.      _l("dyInterlaced"),288,
  1016.    0
  1017.   };
  1018.  addOptions(iopts); 
  1019. }
  1020. int TglobalSettingsEnc::getDefault(int id)
  1021. {
  1022.  switch (id)
  1023.   {
  1024.    case IDFF_trayIcon:return 0;
  1025.    case IDFF_multipleInstances:return 0;
  1026.    default:return TglobalSettingsBase::getDefault(id);
  1027.   }
  1028. }