Files
Work/avifile/MAIN.CPP
2024-08-07 09:12:07 -04:00

108 lines
3.3 KiB
C++

#include <common/file.hpp>
#include <common/pathfnd.hpp>
#include <common/finddata.hpp>
#include <common/qsort.hpp>
#include <common/profile.hpp>
#include <avifile/AVIGenerator.hpp>
#include <avifile/fileinfo.hpp>
#include <avifile/params.hpp>
#include <vidcap/vidcap.hpp>
bool getFileList(const String &strPathFileSpec,Block<FileInfo> &fileList);
bool getFileList(const String &strPathFileSpec,Block<String> &pathFileNames)
{
QuickSort<FileInfo> sorter;
Block<FileInfo> fileList;
String strPathDirectory;
FindData findData;
pathFileNames.remove();
strPathDirectory=strPathFileSpec;
Profile::makeDirectoryName(strPathDirectory);
strPathDirectory+="\\";
if(findData.findFirst(strPathFileSpec))
{
fileList.insert(&FileInfo());
FileInfo &fileInfo=fileList[fileList.size()-1];
fileInfo.setFileName(strPathDirectory+findData.fileName());
fileInfo.setCreationTime(findData.creationTime());
while(findData.findNext())
{
fileList.insert(&FileInfo());
FileInfo &fileInfo=fileList[fileList.size()-1];
fileInfo.setFileName(strPathDirectory+findData.fileName());
fileInfo.setCreationTime(findData.creationTime());
}
}
sorter.sortItems(fileList);
for(int index=0;index<fileList.size();index++)pathFileNames.insert(&String(fileList[index].getPathFileName()));
return pathFileNames.size()?true:false;
}
// fcchandlers "msvc","cvid"
int main(int argc,char **argv)
{
String keyAVIFileName("avifilename");
String keyPathFileSpec("pathfilespec");
String keyResampleSpec("resample");
String keyFCCHandler("fcchandler");
String keyRate("rate");
String keyScale("scale");
String keyQuality("quality");
AVIGenerator aviGenerator;
Block<String> fileList;
Params params;
params.setArgs(argc,argv);
if(!params.contains(keyAVIFileName)||!params.contains(keyPathFileSpec))
{
::printf("USAGE: avifile avifilename=<avifilename> pathfilespec=<pathfilespec>\n");
::printf(" resample=<width,height> fcchandler=<fcchandler> rate=<rate> \n");
::printf(" scale=<scale> quality=<quality>\n");
::printf("(ie) avifile avifilename=d:\\capture.avi pathfilespec=c:\\images\\*.jpg resample=320,200\n");
::printf("(ie) avifile avifilename=d:\\capture.avi pathfilespec=c:\\images\\*.jpg fcchandler=cvid\n");
::printf("scale=time scale.\n");
::printf("rate=rate in integer format.\n");
::printf("rate/scale=samples per second.\n");
::printf("quality=integer (1-10000).\n");
return 1;
}
params.showParams();
if(!getFileList(params.getParam(keyPathFileSpec),fileList))
{
::printf("Failed to retrieve file list from %s\n",params.getParam(keyPathFileSpec).str());
return 1;
}
if(params.contains(keyResampleSpec))
{
String strResample=params.getParam(keyResampleSpec);
aviGenerator.setResample(Point(strResample.betweenString(0,',').toInt(),strResample.betweenString(',',0).toInt()));
}
if(params.contains(keyRate))
{
aviGenerator.setRate(params.getParam(keyRate).toInt());
}
if(params.contains(keyScale))
{
aviGenerator.setScale(params.getParam(keyScale).toInt());
}
if(params.contains(keyQuality))
{
aviGenerator.setQuality(params.getParam(keyQuality).toInt());
}
if(params.contains(keyFCCHandler))
{
aviGenerator.createAVIFile(params.getParam(keyAVIFileName),FOURCC(params.getParam(keyFCCHandler)),fileList);
}
else aviGenerator.createAVIFile(params.getParam(keyAVIFileName),fileList);
return 0;
}