Found the infinite loop issue in moDetect(), turns out the frame parameters at some point were never returning empty, hence moDetect() would continue into perpetuity. Changed the loop structure to use a fixed frame count instead of relying on frameFF() to return empty on EOF.
89 lines
2.5 KiB
C++
89 lines
2.5 KiB
C++
#ifndef COMMON_H
|
|
#define COMMON_H
|
|
|
|
// This file is part of Motion Watch.
|
|
|
|
// Motion Watch 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 3 of the License, or
|
|
// (at your option) any later version.
|
|
|
|
// Motion Watch 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.
|
|
|
|
#include <iostream>
|
|
#include <fstream>
|
|
#include <string>
|
|
#include <unistd.h>
|
|
#include <time.h>
|
|
#include <stdlib.h>
|
|
#include <errno.h>
|
|
#include <vector>
|
|
#include <thread>
|
|
#include <filesystem>
|
|
#include <mutex>
|
|
#include <sys/types.h>
|
|
#include <sys/stat.h>
|
|
#include <fcntl.h>
|
|
|
|
#include <opencv4/opencv2/opencv.hpp>
|
|
#include <opencv4/opencv2/videoio.hpp>
|
|
|
|
using namespace cv;
|
|
using namespace std;
|
|
using namespace std::filesystem;
|
|
|
|
#define APP_VER "1.5.t11"
|
|
#define APP_NAME "Motion Watch"
|
|
|
|
struct shared_t
|
|
{
|
|
|
|
ofstream recLogFile;
|
|
ofstream detLogFile;
|
|
string recLogPath;
|
|
string detLogPath;
|
|
string recordUrl;
|
|
string outDir;
|
|
string postCmd;
|
|
string conf;
|
|
string buffDir;
|
|
string vidExt;
|
|
string camName;
|
|
string webBg;
|
|
string webTxt;
|
|
string webFont;
|
|
string webRoot;
|
|
bool init;
|
|
bool recLoopWait;
|
|
bool logRun;
|
|
bool skipCmd;
|
|
int frameGap;
|
|
int pixThresh;
|
|
int imgThresh;
|
|
int secs;
|
|
int maxDays;
|
|
int maxClips;
|
|
int maxLogSize;
|
|
int retCode;
|
|
};
|
|
|
|
string genDstFile(const string &dirOut, const char *fmt, const string &ext);
|
|
string genTimeStr(const char *fmt);
|
|
string cleanDir(const string &path);
|
|
string parseForParam(const string &arg, int argc, char** argv, bool argOnly);
|
|
bool createDir(const string &dir);
|
|
bool createDirTree(const string &full_path);
|
|
void enforceMaxDays(const string &dirPath, shared_t *share);
|
|
void enforceMaxClips(const string &dirPath, shared_t *share);
|
|
void rdLine(const string ¶m, const string &line, string *value);
|
|
void rdLine(const string ¶m, const string &line, int *value);
|
|
void statOut(shared_t *share);
|
|
bool rdConf(shared_t *share);
|
|
vector<string> lsFilesInDir(const string &path, const string &ext = string());
|
|
vector<string> lsDirsInDir(const string &path);
|
|
|
|
#endif // COMMON_H
|