diff --git a/doc/motionplus_config.html b/doc/motionplus_config.html
index e039638b..c6fd3c8b 100644
--- a/doc/motionplus_config.html
+++ b/doc/motionplus_config.html
@@ -919,43 +919,31 @@
|
|
|
- sql_log_movie |
+ sql_event_end |
|
|
|
- sql_log_picture |
+ sql_event_start |
|
|
|
- sql_log_snapshot |
+ sql_movie_end |
|
|
|
- sql_log_timelapse |
+ sql_movie_start |
|
|
|
- sql_query |
-
-
-
|
- |
- |
- sql_query_start |
-
-
-
|
- |
- |
- sql_query_stop |
+ sql_pic_save |
|
@@ -1683,17 +1671,13 @@
database_user |
database_password |
database_busy_timeout |
- sql_log_picture |
+ sql_event_end |
- | sql_log_snapshot |
- sql_log_movie |
- sql_log_timelapse |
- sql_query |
-
-
- | sql_query_start |
- sql_query_stop |
+ sql_event_start |
+ sql_movie_end |
+ sql_movie_start |
+ sql_pic_save |
@@ -4008,123 +3992,67 @@
- sql_log_picture
+ sql_event_end
- - Type: Boolean
- - Range / Valid values: on, off
- - Default: off
+ - Type: string
+ - Range / Valid values: string
+ - Default:
- Log to the database when MotionPlus triggers a image file to be saved.
+ SQL query to execute at the end of the event.
- sql_log_snapshot
+
+ sql_event_start
- - Type: Boolean
- - Range / Valid values: on, off
- - Default: off
+ - Type: string
+ - Range / Valid values: string
+ - Default:
- Log to the database when creating a snapshot image file.
+ SQL query to execute at the start of the event.
- sql_log_movie
+
+ sql_movie_end
- - Type: Boolean
- - Range / Valid values: on, off
- - Default: off
+ - Type: string
+ - Range / Valid values: string
+ - Default:
- Log to the database when creating motion triggered movie file.
+ SQL query to execute at the end of the movie.
- sql_log_timelapse
+
+ sql_movie_start
- - Type: Boolean
- - Range / Valid values: on, off
- - Default: off
+ - Type: string
+ - Range / Valid values: string
+ - Default:
- Log to the database when creating timelapse movie file
+ SQL query to execute at the start of the movie.
- sql_query_start
+
+ sql_pic_save
- - Type: String
- - Range / Valid values: Max 4095 characters
- - Default: Not defined
+ - Type: string
+ - Range / Valid values: string
+ - Default:
- SQL query that executes against the event table which tracks the unique events of motion.
-
- Once the new record is added to this table, the mysql function mysql_insert_id is then
- executed to provide the key back into the dbeventid specifier.
-
- The dbeventid specifier can then be used in the sql_query as a parameter
- to that query for inserting into the table.
-
- Although this query is run for all the different database options, the dbeventid is
- only set for mysql databases. For the other databases, the dbeventid is always set
- to zero.
-
+ SQL query to execute when a picture has been saved.
You can use Conversion Specifiers within the query.
- Sample Query
-
- insert into security_events(camera, event_time_stamp) values('%t', '%Y-%m-%d %T')"
-
-
-
- sql_query_stop
-
-
- - Type: String
- - Range / Valid values: Max 4095 characters
- - Default: Not defined
-
-
- SQL query that executes after a movie has finished.
- This can be used to for example update the events table with an end timestamp for the recording.
-
-
- You can use Conversion Specifiers within the query.
-
-
- Sample Query
-
- update security_events set event_end_time_stamp='%Y-%m-%d %T' where filename='%f'
-
-
-
- sql_query
-
-
- - Type: String
- - Range / Valid values: Max 4095 characters
- - Default: Not defined
-
-
- SQL query string that is sent to the database when the sql_log_* item is triggered.
-
-
- You can use Conversion Specifiers
- within the query.
-
-
- Sample Queries (depend upon the table created)
-
-
insert into security(camera, filename, frame, file_type, time_stamp, text_event) values('%t', '%f', '%q', '%n', '%Y-%m-%d %T', '%C')
-
insert or ignore into images (camera_nbr, file_name, year, month, day, hour, minute) values (8, '%f', '%Y','%m','%d','%H','%M')
-
insert into security_file(camera, event_id, filename, frame, file_type, time_stamp) values('%t', '%{dbeventid}', '%f', '%q', '%n', '%Y-%m-%d %T')"
-
-
diff --git a/src/conf.cpp b/src/conf.cpp
index 22acfe85..8c1abaaf 100644
--- a/src/conf.cpp
+++ b/src/conf.cpp
@@ -186,13 +186,11 @@ struct ctx_parm config_parms[] = {
{"database_password", PARM_TYP_STRING, PARM_CAT_15, WEBUI_LEVEL_RESTRICTED },
{"database_busy_timeout", PARM_TYP_INT, PARM_CAT_15, WEBUI_LEVEL_ADVANCED },
- {"sql_log_picture", PARM_TYP_BOOL, PARM_CAT_16, WEBUI_LEVEL_LIMITED },
- {"sql_log_snapshot", PARM_TYP_BOOL, PARM_CAT_16, WEBUI_LEVEL_LIMITED},
- {"sql_log_movie", PARM_TYP_BOOL, PARM_CAT_16, WEBUI_LEVEL_LIMITED },
- {"sql_log_timelapse", PARM_TYP_BOOL, PARM_CAT_16, WEBUI_LEVEL_LIMITED},
- {"sql_query_start", PARM_TYP_STRING, PARM_CAT_16, WEBUI_LEVEL_ADVANCED },
- {"sql_query_stop", PARM_TYP_STRING, PARM_CAT_16, WEBUI_LEVEL_ADVANCED },
- {"sql_query", PARM_TYP_STRING, PARM_CAT_16, WEBUI_LEVEL_ADVANCED},
+ {"sql_event_start", PARM_TYP_STRING, PARM_CAT_16, WEBUI_LEVEL_ADVANCED },
+ {"sql_event_end", PARM_TYP_STRING, PARM_CAT_16, WEBUI_LEVEL_ADVANCED },
+ {"sql_movie_start", PARM_TYP_STRING, PARM_CAT_16, WEBUI_LEVEL_ADVANCED },
+ {"sql_movie_end", PARM_TYP_STRING, PARM_CAT_16, WEBUI_LEVEL_ADVANCED },
+ {"sql_pic_save", PARM_TYP_STRING, PARM_CAT_16, WEBUI_LEVEL_ADVANCED},
{"ptz_auto_track", PARM_TYP_BOOL, PARM_CAT_17, WEBUI_LEVEL_LIMITED },
{"ptz_wait", PARM_TYP_INT, PARM_CAT_17, WEBUI_LEVEL_LIMITED },
@@ -2660,95 +2658,69 @@ static void conf_edit_database_busy_timeout(struct ctx_cam *cam, std::string &pa
MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","database_busy_timeout",_("database_busy_timeout"));
}
-static void conf_edit_sql_log_picture(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
+static void conf_edit_sql_event_start(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
{
if (pact == PARM_ACT_DFLT) {
- cam->conf->sql_log_picture = false;
+ cam->conf->sql_event_start = "";
} else if (pact == PARM_ACT_SET) {
- conf_edit_set_bool(cam->conf->sql_log_picture, parm);
+ cam->conf->sql_event_start = parm;
} else if (pact == PARM_ACT_GET) {
- conf_edit_get_bool(parm, cam->conf->sql_log_picture);
+ parm = cam->conf->sql_event_start;
}
return;
- MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_log_picture",_("sql_log_picture"));
+ MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_event_start",_("sql_event_start"));
}
-static void conf_edit_sql_log_snapshot(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
+static void conf_edit_sql_event_end(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
{
if (pact == PARM_ACT_DFLT) {
- cam->conf->sql_log_snapshot = false;
+ cam->conf->sql_event_end = "";
} else if (pact == PARM_ACT_SET) {
- conf_edit_set_bool(cam->conf->sql_log_snapshot, parm);
+ cam->conf->sql_event_end = parm;
} else if (pact == PARM_ACT_GET) {
- conf_edit_get_bool(parm, cam->conf->sql_log_snapshot);
+ parm = cam->conf->sql_event_end;
}
return;
- MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_log_snapshot",_("sql_log_snapshot"));
+ MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_event_end",_("sql_event_end"));
}
-static void conf_edit_sql_log_movie(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
+static void conf_edit_sql_movie_start(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
{
if (pact == PARM_ACT_DFLT) {
- cam->conf->sql_log_movie = false;
+ cam->conf->sql_movie_start = "";
} else if (pact == PARM_ACT_SET) {
- conf_edit_set_bool(cam->conf->sql_log_movie, parm);
+ cam->conf->sql_movie_start = parm;
} else if (pact == PARM_ACT_GET) {
- conf_edit_get_bool(parm, cam->conf->sql_log_movie);
+ parm = cam->conf->sql_movie_start;
}
return;
- MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_log_movie",_("sql_log_movie"));
+ MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_movie_start",_("sql_movie_start"));
}
-static void conf_edit_sql_log_timelapse(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
+static void conf_edit_sql_movie_end(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
{
if (pact == PARM_ACT_DFLT) {
- cam->conf->sql_log_timelapse = false;
+ cam->conf->sql_movie_end = "";
} else if (pact == PARM_ACT_SET) {
- conf_edit_set_bool(cam->conf->sql_log_timelapse, parm);
+ cam->conf->sql_movie_end = parm;
} else if (pact == PARM_ACT_GET) {
- conf_edit_get_bool(parm, cam->conf->sql_log_timelapse);
+ parm = cam->conf->sql_movie_end;
}
return;
- MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_log_timelapse",_("sql_log_timelapse"));
+ MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_movie_end",_("sql_movie_end"));
}
-static void conf_edit_sql_query_start(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
+static void conf_edit_sql_pic_save(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
{
if (pact == PARM_ACT_DFLT) {
- cam->conf->sql_query_start = "";
+ cam->conf->sql_pic_save = "";
} else if (pact == PARM_ACT_SET) {
- cam->conf->sql_query_start = parm;
+ cam->conf->sql_pic_save = parm;
} else if (pact == PARM_ACT_GET) {
- parm = cam->conf->sql_query_start;
+ parm = cam->conf->sql_pic_save;
}
return;
- MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_query_start",_("sql_query_start"));
-}
-
-static void conf_edit_sql_query_stop(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
-{
- if (pact == PARM_ACT_DFLT) {
- cam->conf->sql_query_stop = "";
- } else if (pact == PARM_ACT_SET) {
- cam->conf->sql_query_stop = parm;
- } else if (pact == PARM_ACT_GET) {
- parm = cam->conf->sql_query_stop;
- }
- return;
- MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_query_stop",_("sql_query_stop"));
-}
-
-static void conf_edit_sql_query(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
-{
- if (pact == PARM_ACT_DFLT) {
- cam->conf->sql_query = "";
- } else if (pact == PARM_ACT_SET) {
- cam->conf->sql_query = parm;
- } else if (pact == PARM_ACT_GET) {
- parm = cam->conf->sql_query;
- }
- return;
- MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_query",_("sql_query"));
+ MOTION_LOG(DBG, TYPE_ALL, NO_ERRNO,"%s:%s","sql_pic_save",_("sql_pic_save"));
}
static void conf_edit_ptz_auto_track(struct ctx_cam *cam, std::string &parm, enum PARM_ACT pact)
@@ -3123,13 +3095,11 @@ static void conf_edit_cat15(struct ctx_cam *cam, std::string parm_nm, std::strin
static void conf_edit_cat16(struct ctx_cam *cam, std::string parm_nm
, std::string &parm_val, enum PARM_ACT pact)
{
- if (parm_nm == "sql_log_picture") { conf_edit_sql_log_picture(cam, parm_val, pact);
- } else if (parm_nm == "sql_log_snapshot") { conf_edit_sql_log_snapshot(cam, parm_val, pact);
- } else if (parm_nm == "sql_log_movie") { conf_edit_sql_log_movie(cam, parm_val, pact);
- } else if (parm_nm == "sql_log_timelapse") { conf_edit_sql_log_timelapse(cam, parm_val, pact);
- } else if (parm_nm == "sql_query_start") { conf_edit_sql_query_start(cam, parm_val, pact);
- } else if (parm_nm == "sql_query_stop") { conf_edit_sql_query_stop(cam, parm_val, pact);
- } else if (parm_nm == "sql_query") { conf_edit_sql_query(cam, parm_val, pact);
+ if (parm_nm == "sql_event_start") { conf_edit_sql_event_start(cam, parm_val, pact);
+ } else if (parm_nm == "sql_event_end") { conf_edit_sql_event_end(cam, parm_val, pact);
+ } else if (parm_nm == "sql_movie_start") { conf_edit_sql_movie_start(cam, parm_val, pact);
+ } else if (parm_nm == "sql_movie_end") { conf_edit_sql_movie_end(cam, parm_val, pact);
+ } else if (parm_nm == "sql_pic_save") { conf_edit_sql_pic_save(cam, parm_val, pact);
}
}
diff --git a/src/conf.hpp b/src/conf.hpp
index 43ae2f35..9e48b89e 100644
--- a/src/conf.hpp
+++ b/src/conf.hpp
@@ -178,13 +178,11 @@
std::string database_password;
int database_busy_timeout;
- bool sql_log_picture;
- bool sql_log_snapshot;
- bool sql_log_movie;
- bool sql_log_timelapse;
- std::string sql_query_start;
- std::string sql_query_stop;
- std::string sql_query;
+ std::string sql_event_start;
+ std::string sql_event_end;
+ std::string sql_movie_start;
+ std::string sql_movie_end;
+ std::string sql_pic_save;
bool ptz_auto_track; /* Bool to enable auto tracking */
int ptz_wait; /* Frames to wait after a PTZ move */
diff --git a/src/dbse.cpp b/src/dbse.cpp
index b4b69801..b3d2bb0a 100644
--- a/src/dbse.cpp
+++ b/src/dbse.cpp
@@ -344,7 +344,6 @@ void dbse_init(struct ctx_cam *cam)
,_("Invalid Database backend %s")
, cam->conf->database_type.c_str());
}
- dbse_sqlmask_update(cam);
}
return;
@@ -386,20 +385,6 @@ void dbse_deinit(struct ctx_cam *cam)
}
-void dbse_sqlmask_update(struct ctx_cam *cam)
-{
- /*
- * Set the sql mask file according to the SQL config options
- * We update it for every frame in case the config was updated
- * via remote control.
- */
- cam->dbse->sql_mask = cam->conf->sql_log_picture * (FTYPE_IMAGE + FTYPE_IMAGE_MOTION) +
- cam->conf->sql_log_snapshot * FTYPE_IMAGE_SNAPSHOT +
- cam->conf->sql_log_movie * (FTYPE_MPEG + FTYPE_MPEG_MOTION) +
- cam->conf->sql_log_timelapse * FTYPE_MPEG_TIMELAPSE;
-
-}
-
static void dbse_mysql_exec(char *sqlquery,struct ctx_cam *cam, int save_id)
{
@@ -571,38 +556,37 @@ static void dbse_sqlite3_exec(char *sqlquery,struct ctx_cam *cam, int save_id)
#endif /* HAVE_SQLITE3 */
}
-void dbse_firstmotion(struct ctx_cam *cam)
+void dbse_exec(struct ctx_cam *cam, char *filename
+ , int sqltype, struct timespec *ts1, const char *cmd)
{
-
char sqlquery[PATH_MAX];
- mystrftime(cam, sqlquery, sizeof(sqlquery), cam->conf->sql_query_start.c_str(),
- &cam->current_image->imgts, NULL, 0);
-
- if (strlen(sqlquery) <= 0) {
- MOTION_LOG(WRN, TYPE_DB, NO_ERRNO, "Ignoring empty sql query");
+ if (cam->conf->database_type == "") {
return;
}
- if (cam->conf->database_type == "mysql") {
- dbse_mysql_exec(sqlquery, cam, 1);
- } else if (cam->conf->database_type == "mariadb") {
- dbse_mariadb_exec(sqlquery, cam, 1);
- } else if (cam->conf->database_type == "postgresql") {
- dbse_pgsql_exec(sqlquery, cam, 1);
- } else if (cam->conf->database_type == "sqlite3") {
- dbse_sqlite3_exec(sqlquery, cam, 1);
+ if (mystreq(cmd,"pic_save")) {
+ mystrftime(cam, sqlquery, sizeof(sqlquery)
+ , cam->conf->sql_pic_save.c_str()
+ , ts1, filename, sqltype);
+ } else if (mystreq(cmd,"movie_start")) {
+ mystrftime(cam, sqlquery, sizeof(sqlquery)
+ , cam->conf->sql_movie_start.c_str()
+ , ts1, filename, sqltype);
+ } else if (mystreq(cmd,"movie_end")) {
+ mystrftime(cam, sqlquery, sizeof(sqlquery)
+ , cam->conf->sql_movie_end.c_str()
+ , ts1, filename, sqltype);
+ } else if (mystreq(cmd,"event_start")) {
+ mystrftime(cam, sqlquery, sizeof(sqlquery)
+ , cam->conf->sql_event_start.c_str()
+ , ts1, filename, sqltype);
+ } else if (mystreq(cmd,"event_end")) {
+ mystrftime(cam, sqlquery, sizeof(sqlquery)
+ , cam->conf->sql_event_end.c_str()
+ , ts1, filename, sqltype);
}
-}
-
-void dbse_newfile(struct ctx_cam *cam, char *filename, int sqltype, struct timespec *ts1)
-{
- char sqlquery[PATH_MAX];
-
- mystrftime(cam, sqlquery, sizeof(sqlquery), cam->conf->sql_query.c_str(),
- ts1, filename, sqltype);
-
if (strlen(sqlquery) <= 0) {
MOTION_LOG(WRN, TYPE_DB, NO_ERRNO, "Ignoring empty sql query");
return;
@@ -620,24 +604,6 @@ void dbse_newfile(struct ctx_cam *cam, char *filename, int sqltype, struct times
}
-void dbse_fileclose(struct ctx_cam *cam, char *filename, int sqltype, struct timespec *ts1)
-{
- char sqlquery[PATH_MAX];
-
- mystrftime(cam, sqlquery, sizeof(sqlquery), cam->conf->sql_query_stop.c_str(),
- ts1, filename, sqltype);
-
- if (cam->conf->database_type == "mysql") {
- dbse_mysql_exec(sqlquery, cam, 0);
- } else if (cam->conf->database_type == "mariadb") {
- dbse_mariadb_exec(sqlquery, cam, 0);
- } else if (cam->conf->database_type == "postgresql") {
- dbse_pgsql_exec(sqlquery, cam, 0);
- } else if (cam->conf->database_type == "sqlite3") {
- dbse_sqlite3_exec(sqlquery, cam, 0);
- }
-
-}
static int dbse_motpls_callback(
void *ptr, int arg_nb, char **arg_val, char **col_nm)
diff --git a/src/dbse.hpp b/src/dbse.hpp
index fd785f7c..ed248a47 100644
--- a/src/dbse.hpp
+++ b/src/dbse.hpp
@@ -62,7 +62,6 @@
PGconn *database_pg;
#endif
- int sql_mask;
uint64_t database_event_id;
};
@@ -94,14 +93,12 @@
void dbse_global_init(struct ctx_motapp *motapp);
void dbse_init(struct ctx_cam *cam);
void dbse_deinit(struct ctx_cam *cam);
- void dbse_sqlmask_update(struct ctx_cam *cam);
- void dbse_firstmotion(struct ctx_cam *cam);
- void dbse_newfile(struct ctx_cam *cam, char *filename, int sqltype, struct timespec *ts1);
- void dbse_fileclose(struct ctx_cam *cam, char *filename, int sqltype, struct timespec *ts1);
void dbse_motpls_init(struct ctx_cam *cam);
void dbse_motpls_deinit(struct ctx_cam *cam);
void dbse_motpls_exec(char *sqlquery, struct ctx_cam *cam);
int dbse_motpls_getlist(struct ctx_cam *cam);
void dbse_motpls_addrec(struct ctx_cam *cam,char *fname, struct timespec *ts1);
+ void dbse_exec(struct ctx_cam *cam, char *filename
+ , int sqltype, struct timespec *ts1, const char *cmd);
#endif /* _INCLUDE_DBSE_HPP_ */
\ No newline at end of file
diff --git a/src/event.cpp b/src/event.cpp
index cc601f5a..1d30a9d4 100644
--- a/src/event.cpp
+++ b/src/event.cpp
@@ -74,7 +74,7 @@ static void event_newfile(struct ctx_cam *cam, motion_event evnt
* on_picture_save_command
* handles both on_picture_save and on_movie_start
* If arg = FTYPE_IMAGE_ANY on_picture_save script is executed
- * If arg = FTYPE_MPEG_ANY on_movie_start script is executed
+ * If arg = FTYPE_MOVIE_ANY on_movie_start script is executed
* The scripts are executed with the filename of picture or movie appended
* to the config parameter.
*/
@@ -92,7 +92,7 @@ static void on_picture_save_command(struct ctx_cam *cam, motion_event evnt
util_exec_command(cam, cam->conf->on_picture_save.c_str(), fname, filetype);
}
- if ((filetype & FTYPE_MPEG_ANY) != 0 && (cam->conf->on_movie_start != "")) {
+ if ((filetype & FTYPE_MOVIE_ANY) != 0 && (cam->conf->on_movie_start != "")) {
util_exec_command(cam, cam->conf->on_movie_start.c_str(), fname, filetype);
}
}
@@ -112,60 +112,6 @@ static void on_motion_detected_command(struct ctx_cam *cam, motion_event evnt
}
}
-static void event_sqlfirstmotion(struct ctx_cam *cam, motion_event evnt
- ,struct ctx_image_data *img_data, char *fname, void *ftype, struct timespec *ts1)
-{
-
- (void)evnt;
- (void)img_data;
- (void)fname;
- (void)ftype;
- (void)ts1;
-
- if (cam->conf->database_type == "") {
- return;
- } else {
- dbse_firstmotion(cam);
- }
-}
-
-static void event_sqlnewfile(struct ctx_cam *cam, motion_event evnt
- ,struct ctx_image_data *img_data, char *fname, void *ftype, struct timespec *ts1)
-{
-
- int sqltype = (unsigned long)ftype;
-
- (void)evnt;
- (void)img_data;
-
- /* Only log the file types we want */
- if ((cam->conf->database_type == "") || (sqltype & cam->dbse->sql_mask) == 0) {
- return;
- } else {
- dbse_newfile(cam, fname, sqltype, ts1);
- }
-
-}
-
-static void event_sqlfileclose(struct ctx_cam *cam, motion_event evnt
- ,struct ctx_image_data *img_data, char *fname, void *ftype, struct timespec *ts1)
-{
-
- int sqltype = (unsigned long)ftype;
-
- (void)evnt;
- (void)img_data;
-
- /* Only log the file types we want */
- if ((cam->conf->database_type == "") || (sqltype & cam->dbse->sql_mask) == 0) {
- return;
- } else {
- dbse_fileclose(cam, fname, sqltype, ts1);
- }
-
-
-}
-
static void on_area_command(struct ctx_cam *cam, motion_event evnt
,struct ctx_image_data *img_data, char *fname, void *ftype, struct timespec *ts1)
{
@@ -276,6 +222,7 @@ static void event_image_detect(struct ctx_cam *cam, motion_event evnt
pic_save_norm(cam, fullfilename,img_data->image_norm, FTYPE_IMAGE);
}
event(cam, EVENT_FILECREATE, NULL, fullfilename, (void *)FTYPE_IMAGE, ts1);
+ dbse_exec(cam, fullfilename, FTYPE_IMAGE, ts1, "pic_save");
}
}
@@ -302,7 +249,8 @@ static void event_imagem_detect(struct ctx_cam *cam, motion_event evnt
return;
}
pic_save_norm(cam, fullfilename, cam->imgs.image_motion.image_norm, FTYPE_IMAGE_MOTION);
- event(cam, EVENT_FILECREATE, NULL, fullfilename, (void *)FTYPE_IMAGE, ts1);
+ event(cam, EVENT_FILECREATE, NULL, fullfilename, (void *)FTYPE_IMAGE_MOTION, ts1);
+ dbse_exec(cam, fullfilename, FTYPE_IMAGE_MOTION, ts1, "pic_save");
} else if (cam->conf->picture_output_motion == "roi") {
mystrftime(cam, filename, sizeof(filename), cam->conf->picture_filename.c_str(), ts1, NULL, 0);
retcd = snprintf(fullfilename, PATH_MAX, "%s/%sr.%s"
@@ -313,7 +261,8 @@ static void event_imagem_detect(struct ctx_cam *cam, motion_event evnt
return;
}
pic_save_roi(cam, fullfilename, cam->current_image->image_norm);
- event(cam, EVENT_FILECREATE, NULL, fullfilename, (void *)FTYPE_IMAGE, ts1);
+ event(cam, EVENT_FILECREATE, NULL, fullfilename, (void *)FTYPE_IMAGE_ROI, ts1);
+ dbse_exec(cam, fullfilename, FTYPE_IMAGE_ROI, ts1, "pic_save");
}
}
@@ -350,6 +299,7 @@ static void event_image_snapshot(struct ctx_cam *cam, motion_event evnt
pic_save_norm(cam, fullfilename, img_data->image_norm, FTYPE_IMAGE_SNAPSHOT);
event(cam, EVENT_FILECREATE, NULL, fullfilename, (void *)FTYPE_IMAGE_SNAPSHOT, ts1);
+ dbse_exec(cam, fullfilename, FTYPE_IMAGE_SNAPSHOT, ts1, "pic_save");
/* Update symbolic link */
snprintf(linkpath, PATH_MAX, "%s/lastsnap.%s", cam->conf->target_dir.c_str(), imageext(cam));
@@ -374,6 +324,7 @@ static void event_image_snapshot(struct ctx_cam *cam, motion_event evnt
remove(fullfilename);
pic_save_norm(cam, fullfilename, img_data->image_norm, FTYPE_IMAGE_SNAPSHOT);
event(cam, EVENT_FILECREATE, NULL, fullfilename, (void *)FTYPE_IMAGE_SNAPSHOT, ts1);
+ dbse_exec(cam, fullfilename, FTYPE_IMAGE_SNAPSHOT, ts1, "pic_save");
}
cam->snapshot = 0;
@@ -413,6 +364,7 @@ static void event_image_preview(struct ctx_cam *cam, motion_event evnt
pic_save_norm(cam, previewname, cam->imgs.image_preview.image_norm, FTYPE_IMAGE);
}
event(cam, EVENT_FILECREATE, NULL, previewname, (void *)FTYPE_IMAGE, ts1);
+ dbse_exec(cam, previewname, FTYPE_IMAGE, ts1, "pic_save");
/* Restore global context values. */
cam->current_image = saved_current_image;
@@ -476,7 +428,7 @@ static void on_movie_end_command(struct ctx_cam *cam, motion_event evnt
(void)img_data;
(void)ts1;
- if ((filetype & FTYPE_MPEG_ANY) && (cam->conf->on_movie_end != "")) {
+ if ((filetype & FTYPE_MOVIE_ANY) && (cam->conf->on_movie_end != "")) {
util_exec_command(cam, cam->conf->on_movie_end.c_str(), fname, filetype);
}
}
@@ -508,10 +460,12 @@ static void event_extpipe_end(struct ctx_cam *cam, motion_event evnt
, _("Unable to remove file %s"), cam->extpipefilename);
}
} else {
- event(cam, EVENT_FILECLOSE, NULL, cam->extpipefilename, (void *)FTYPE_MPEG, ts1);
+ event(cam, EVENT_FILECLOSE, NULL, cam->extpipefilename, (void *)FTYPE_MOVIE, ts1);
+ dbse_exec(cam, cam->extpipefilename, FTYPE_MOVIE, ts1, "movie_end");
}
} else {
- event(cam, EVENT_FILECLOSE, NULL, cam->extpipefilename, (void *)FTYPE_MPEG, ts1);
+ event(cam, EVENT_FILECLOSE, NULL, cam->extpipefilename, (void *)FTYPE_MOVIE, ts1);
+ dbse_exec(cam, cam->extpipefilename, FTYPE_MOVIE, ts1, "movie_end");
}
}
@@ -576,7 +530,8 @@ static void event_extpipe_start(struct ctx_cam *cam, motion_event evnt
MOTION_LOG(NTC, TYPE_EVENTS, NO_ERRNO, "cam->moviefps: %d", cam->movie_fps);
- event(cam, EVENT_FILECREATE, NULL, cam->extpipefilename, (void *)FTYPE_MPEG, ts1);
+ event(cam, EVENT_FILECREATE, NULL, cam->extpipefilename, (void *)FTYPE_MOVIE, ts1);
+ dbse_exec(cam, cam->extpipefilename, FTYPE_MOVIE, ts1, "movie_start");
cam->extpipe = popen(cam->extpipecmdline, "we");
if (cam->extpipe == NULL) {
@@ -654,7 +609,8 @@ static void event_movie_start(struct ctx_cam *cam, motion_event evnt
cam->movie_norm = NULL;
return;
}
- event(cam, EVENT_FILECREATE, NULL, cam->movie_norm->filename, (void *)FTYPE_MPEG, ts1);
+ event(cam, EVENT_FILECREATE, NULL, cam->movie_norm->filename, (void *)FTYPE_MOVIE, ts1);
+ dbse_exec(cam, cam->movie_norm->filename, FTYPE_MOVIE, ts1, "movie_start");
}
if (cam->conf->movie_output_motion) {
@@ -716,11 +672,13 @@ static void event_movie_end(struct ctx_cam *cam, motion_event evnt
, _("Unable to remove file %s"), cam->newfilename);
}
} else {
- event(cam, EVENT_FILECLOSE, NULL, cam->newfilename, (void *)FTYPE_MPEG, ts1);
+ event(cam, EVENT_FILECLOSE, NULL, cam->newfilename, (void *)FTYPE_MOVIE, ts1);
+ dbse_exec(cam, cam->newfilename, FTYPE_MOVIE, ts1, "movie_end");
dbse_motpls_addrec(cam, cam->newfilename, ts1);
}
} else {
- event(cam, EVENT_FILECLOSE, NULL, cam->newfilename, (void *)FTYPE_MPEG, ts1);
+ event(cam, EVENT_FILECLOSE, NULL, cam->newfilename, (void *)FTYPE_MOVIE, ts1);
+ dbse_exec(cam, cam->newfilename, FTYPE_MOVIE, ts1, "movie_end");
dbse_motpls_addrec(cam, cam->newfilename, ts1);
}
}
@@ -740,11 +698,13 @@ static void event_movie_end(struct ctx_cam *cam, motion_event evnt
, _("Unable to remove file %s"), cam->motionfilename);
}
} else {
- event(cam, EVENT_FILECLOSE, NULL, cam->motionfilename, (void *)FTYPE_MPEG_MOTION, ts1);
+ event(cam, EVENT_FILECLOSE, NULL, cam->motionfilename, (void *)FTYPE_MOVIE_MOTION, ts1);
+ dbse_exec(cam, cam->motionfilename, FTYPE_MOVIE_MOTION, ts1, "movie_end");
dbse_motpls_addrec(cam, cam->motionfilename, ts1);
}
} else {
- event(cam, EVENT_FILECLOSE, NULL, cam->motionfilename, (void *)FTYPE_MPEG_MOTION, ts1);
+ event(cam, EVENT_FILECLOSE, NULL, cam->motionfilename, (void *)FTYPE_MOVIE_MOTION, ts1);
+ dbse_exec(cam, cam->motionfilename, FTYPE_MOVIE_MOTION, ts1, "movie_end");
dbse_motpls_addrec(cam, cam->motionfilename, ts1);
}
}
@@ -773,7 +733,9 @@ static void event_tlapse_start(struct ctx_cam *cam, motion_event evnt
return;
}
event(cam, EVENT_FILECREATE, NULL, cam->movie_timelapse->filename
- , (void *)FTYPE_MPEG_TIMELAPSE, ts1);
+ , (void *)FTYPE_MOVIE_TIMELAPSE, ts1);
+ dbse_exec(cam, cam->movie_timelapse->filename, FTYPE_MOVIE_TIMELAPSE
+ , ts1, "movie_start");
}
if (movie_put_image(cam->movie_timelapse, img_data, ts1) == -1) {
@@ -797,7 +759,8 @@ static void event_tlapse_end(struct ctx_cam *cam, motion_event evnt
free(cam->movie_timelapse);
}
cam->movie_timelapse = NULL;
- event(cam, EVENT_FILECLOSE, NULL, cam->timelapsefilename, (void *)FTYPE_MPEG_TIMELAPSE, ts1);
+ event(cam, EVENT_FILECLOSE, NULL, cam->timelapsefilename, (void *)FTYPE_MOVIE_TIMELAPSE, ts1);
+ dbse_exec(cam, cam->timelapsefilename, FTYPE_MOVIE_TIMELAPSE, ts1, "movie_end");
}
}
@@ -807,10 +770,6 @@ struct event_handlers {
};
struct event_handlers event_handlers[] = {
- {
- EVENT_FILECREATE,
- event_sqlnewfile
- },
{
EVENT_FILECREATE,
on_picture_save_command
@@ -829,10 +788,6 @@ struct event_handlers event_handlers[] = {
},
{
EVENT_START,
- event_sqlfirstmotion
- },
- {
- EVENT_START,
on_event_start_command
},
{
@@ -909,10 +864,6 @@ struct event_handlers event_handlers[] = {
},
{
EVENT_FILECLOSE,
- event_sqlfileclose
- },
- {
- EVENT_FILECLOSE,
on_movie_end_command
},
{
diff --git a/src/motion_loop.cpp b/src/motion_loop.cpp
index 1880a749..81fc401b 100644
--- a/src/motion_loop.cpp
+++ b/src/motion_loop.cpp
@@ -211,6 +211,9 @@ static void mlp_detected_trigger(struct ctx_cam *cam, struct ctx_image_data *img
event(cam, EVENT_START, img, NULL, NULL,
&cam->imgs.image_ring[cam->imgs.ring_out].imgts);
+ dbse_exec(cam, NULL, 0
+ , &cam->imgs.image_ring[cam->imgs.ring_out].imgts
+ , "event_start");
if (cam->new_img & (NEWIMG_FIRST | NEWIMG_BEST | NEWIMG_CENTER)) {
pic_save_preview(cam, img);
@@ -742,6 +745,8 @@ void mlp_cleanup(struct ctx_cam *cam)
}
event(cam, EVENT_END, NULL, NULL, NULL, &cam->current_image->imgts);
+ dbse_exec(cam, NULL, 0, &cam->current_image->imgts, "event_end");
+
}
} else {
movie_free(cam->movie_norm);
@@ -1329,6 +1334,8 @@ static void mlp_actions_event(struct ctx_cam *cam)
cam->imgs.image_preview.diffs = 0;
}
event(cam, EVENT_END, NULL, NULL, NULL, &cam->current_image->imgts);
+ dbse_exec(cam, NULL, 0, &cam->current_image->imgts, "event_end");
+
mlp_track_center(cam);
@@ -1570,8 +1577,6 @@ static void mlp_parmsupdate(struct ctx_cam *cam)
cam->smartmask_ratio = 5 * cam->lastrate * (11 - cam->smartmask_speed);
}
- dbse_sqlmask_update(cam);
-
cam->threshold = cam->conf->threshold;
if (cam->conf->threshold_maximum > cam->conf->threshold ) {
cam->threshold_maximum = cam->conf->threshold_maximum;
diff --git a/src/motionplus.hpp b/src/motionplus.hpp
index ffa830ec..e47e21ad 100644
--- a/src/motionplus.hpp
+++ b/src/motionplus.hpp
@@ -88,15 +88,16 @@ struct ctx_v4l2cam;
#define THRESHOLD_TUNE_LENGTH 256
/* Filetype defines */
-#define FTYPE_IMAGE 1
-#define FTYPE_IMAGE_SNAPSHOT 2
-#define FTYPE_IMAGE_MOTION 4
-#define FTYPE_MPEG 8
-#define FTYPE_MPEG_MOTION 16
-#define FTYPE_MPEG_TIMELAPSE 32
+#define FTYPE_IMAGE 1
+#define FTYPE_IMAGE_SNAPSHOT 2
+#define FTYPE_IMAGE_MOTION 4
+#define FTYPE_MOVIE 8
+#define FTYPE_MOVIE_MOTION 16
+#define FTYPE_MOVIE_TIMELAPSE 32
+#define FTYPE_IMAGE_ROI 64
-#define FTYPE_MPEG_ANY (FTYPE_MPEG | FTYPE_MPEG_MOTION | FTYPE_MPEG_TIMELAPSE)
-#define FTYPE_IMAGE_ANY (FTYPE_IMAGE | FTYPE_IMAGE_SNAPSHOT | FTYPE_IMAGE_MOTION)
+#define FTYPE_MOVIE_ANY (FTYPE_MOVIE | FTYPE_MOVIE_MOTION | FTYPE_MOVIE_TIMELAPSE)
+#define FTYPE_IMAGE_ANY (FTYPE_IMAGE | FTYPE_IMAGE_SNAPSHOT | FTYPE_IMAGE_MOTION | FTYPE_IMAGE_ROI)
/* What types of images files do we want to have */
#define NEWIMG_OFF 0