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

📄 tpresets.cpp

📁 从FFMPEG转换而来的H264解码程序,VC下编译..
💻 CPP
字号:
/*
 * 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 "Tpresets.h"
#include "reg.h"
#include "TpresetSettings.h"
#include "TpresetSettingsVideo.h"
#include "TpresetSettingsAudio.h"
#include "IffdshowBase.h"
#include "IffdshowDec.h"
#include "IffdshowDecVideo.h"
#include "IffdshowDecAudio.h"

//========================================== Tpresets =========================================
Tpresets::~Tpresets()
{
 done();
}
void Tpresets::listRegKeys(strings &l)
{
 l.clear();

 HKEY hKey;
 char_t rkey[MAX_PATH];tsprintf(rkey,FFDSHOW_REG_PARENT _l("\\%s"),reg_child);
 RegOpenKeyEx(HKEY_CURRENT_USER,rkey,0,KEY_READ,&hKey);
 for (int i=0,retCode=ERROR_SUCCESS;retCode==ERROR_SUCCESS;i++)
  {
   char_t keyName[256];DWORD keyNameSize=255;
   FILETIME ftLastWriteTime;
   retCode = RegEnumKeyEx(hKey,
                          i,
                          keyName,
                          &keyNameSize,
                          NULL,
                          NULL,
                          NULL,
                          &ftLastWriteTime
                         );
   if (retCode==ERROR_SUCCESS)
    l.push_back(ffstring(keyName));
   else
    break;
  }
 RegCloseKey(hKey);
}
void Tpresets::init(void)
{
 Tpreset *def=newPreset();
 def->loadDefault();
 push_back(def);

 strings keys;
 listRegKeys(keys);
 for (strings::const_iterator i=keys.begin();i!=keys.end();i++)
  if (findPreset(i->c_str())==end())
   {
    Tpreset *preset=newPreset(i->c_str());
    preset->loadReg();
    push_back(preset);
   }
 if (keys.size()==0)
  (*begin())->saveReg();
}
void Tpresets::done(void)
{
 for (iterator i=begin();i!=end();i++)
  delete *i;
 clear();
}
Tpresets::iterator Tpresets::findPreset(const char_t *presetName)
{
 for (iterator i=begin();i!=end();i++)
  if (_stricoll(presetName,(*i)->presetName)==0)
   return i;
 return end();
}

void Tpresets::storePreset(Tpreset *preset)
{
 iterator i=findPreset(preset->presetName);
 if (i!=end())
  *i=preset;
 else
  push_back(preset);
}

Tpreset* Tpresets::getPreset(const char_t *presetName,bool create)
{
 iterator i=findPreset(presetName);
 if (i!=end()) return *i;
 else
  if (create)
   {
    Tpreset *newpreset=newPreset(presetName);
    newpreset->loadReg();
    storePreset(newpreset);
    return newpreset;
   }
  else
   return NULL;
}

void Tpresets::savePreset(Tpreset *preset,const char_t *presetName)
{
 if (presetName)
  strcpy(preset->presetName,presetName);
 preset->saveReg();
 storePreset(preset);
}
bool  Tpresets::savePresetFile(Tpreset *preset,const char_t *flnm)
{
 bool res=preset->saveFile(flnm);
 if (res)
  storePreset(preset);
 return res;
}

bool Tpresets::removePreset(const char_t *presetName)
{
 iterator i=findPreset(presetName);
 if (i!=begin() && i!=end())
  {
   delete *i;
   erase(i);
   return true;
  }
 else return false;
}

void Tpresets::nextUniqueName(Tpreset *preset)
{
 nextUniqueName(preset->presetName);
}
void Tpresets::nextUniqueName(char_t *presetName)
{
 iterator i=findPreset(presetName);
 if (i==end()) return;
 for (int ii=1;;ii++)
  {
   char_t pomS[260];
   tsprintf(pomS,_l("%s %i"),presetName,ii);
   if (findPreset(pomS)==end())
    {
     strcpy(presetName,pomS);
     return;
    }
  }
}
void Tpresets::saveRegAll(void)
{
 for (iterator ii=begin();ii!=end();ii++)
  if (!(*ii)->autoLoadedFromFile)
   (*ii)->saveReg();

 strings keys;
 listRegKeys(keys);
 for (strings::const_iterator i=keys.begin();i!=keys.end();i++)
  if (i->c_str()[0]!='\0' && findPreset(i->c_str())==end())
   {
    char_t presetRegStr[256];
    tsprintf(presetRegStr,FFDSHOW_REG_PARENT _l("\\%s\\%s"),reg_child,i->c_str());
    RegDeleteKey(HKEY_CURRENT_USER,presetRegStr);
   }
}

Tpreset* Tpresets::getAutoPreset(IffdshowBase *deci,bool filefirst)
{
 TautoPresetProps aprops(deci);
 return getAutoPreset0(aprops,filefirst);
}
Tpreset* Tpresets::getAutoPreset0(TautoPresetProps &aprops,bool filefirst)
{
 if (filefirst)
  {
   const char_t *AVIname=aprops.getSourceFullFlnm();
   char_t drive[MAX_PATH],path[MAX_PATH],name[MAX_PATH];
   _splitpath(AVIname,drive,path,name,NULL);
   char_t presetFlnm[1024];
   _makepath(presetFlnm,drive,path,name,presetext);
   if (fileexists(presetFlnm))
    {
     Tpreset *preset=newPreset(AVIname);
     preset->loadFile(presetFlnm);
     Tpreset::normalizePresetName(preset->presetName,AVIname);
     preset->autoLoadedFromFile=true;
     iterator i=findPreset(preset->presetName);
     if (i!=end() && (*i)->autoLoadedFromFile) removePreset(preset->presetName);
     nextUniqueName(preset);
     push_back(preset);
     return preset;
    }
  }
 for (iterator i=begin();i!=end();i++)
  if ((*i)->isAutoPreset(aprops))
   return *i;
 return NULL;
}

//======================================= TpresetsVideo =======================================
Tpreset* TpresetsVideo::getAutoPreset(IffdshowBase *deci,bool filefirst)
{
 TvideoAutoPresetProps aprops(deci);
 return getAutoPreset0(aprops,filefirst);
}
Tpreset* TpresetsVideo::getAutoPreset0(TautoPresetProps &aprops,bool filefirst)
{
 if (Tpreset *preset=Tpresets::getAutoPreset0(aprops,filefirst))
  return preset;
 else
  {
   unsigned int dx,dy;
   ((TvideoAutoPresetProps&)aprops).getSourceResolution(&dx,&dy);
   for (iterator i=begin();i!=end();i++)
    {
     TpresetVideo *presetV=(TpresetVideo*)*i;
     if (presetV->autoloadSize && presetV->autoloadSizeMatch(dx,dy))
      return presetV;
    }
  }
 return NULL;
}
Tpreset* TpresetsVideo::newPreset(const char_t *presetName)
{
 return new TpresetVideo(reg_child,presetName?presetName:FFPRESET_DEFAULT);
}

//======================================= TpresetsVideo =======================================
Tpreset* TpresetsVideoPlayer::newPreset(const char_t *presetName)
{
 return new TpresetVideoPlayer(reg_child,presetName?presetName:FFPRESET_DEFAULT);
}

//======================================= TpresetsAudio =======================================
Tpreset* TpresetsAudio::newPreset(const char_t *presetName)
{
 return new TpresetAudio(presetName?presetName:FFPRESET_DEFAULT,reg_child);
}
Tpreset* TpresetsAudio::getAutoPreset(IffdshowBase *deci,bool filefirst)
{
 TaudioAutoPresetProps aprops(deci);
 return getAutoPreset0(aprops,filefirst);
}

⌨️ 快捷键说明

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