Thanks the debug messages, in found a potential issue with the video clips being pulled from the in house test cameras. Sometimes the video clips are being pulled with incomplete meta information causing opencv to fail to open the clips. Added "-movflags faststart" to the ffmpeg command that should hopefully fix this and should help the app to handle unreliable camera streams more gracefully. max_clips now defaults to 90 instead of 30.
90 lines
2.6 KiB
C++
90 lines
2.6 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.t15"
|
|
#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 vidCodec;
|
|
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
|