108 lines
3.3 KiB
C++
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;
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|