@@ -1154,6 +1154,7 @@ void cls_camera::init()
11541154 }
11551155
11561156 cfg->parms_copy (conf_src);
1157+ conf_chg = false ;
11571158
11581159 mythreadname_set (" cl" ,cfg->device_id , cfg->device_name .c_str ());
11591160
@@ -1864,6 +1865,54 @@ void cls_camera::check_schedule()
18641865 */
18651866}
18661867
1868+ /* Apply any changes to the configuration parameters set by webcontrol*/
1869+ void cls_camera::check_config ()
1870+ {
1871+ std::string parm_nm, parm_vl_cur, parm_vl_src;
1872+ PARM_CAT parm_ct;
1873+ PARM_CHG parm_ch;
1874+ int indx;
1875+
1876+ if ((restart == true ) || (handler_stop == true ) || (conf_chg == false )) {
1877+ return ;
1878+ }
1879+
1880+ indx=0 ;
1881+ while (config_parms[indx].parm_name != " " ) {
1882+ parm_nm = config_parms[indx].parm_name ;
1883+ parm_ct = config_parms[indx].parm_cat ;
1884+ parm_ch = config_parms[indx].parm_chg ;
1885+ conf_src->edit_get (parm_nm, parm_vl_src, parm_ct);
1886+ cfg->edit_get (parm_nm, parm_vl_cur, parm_ct);
1887+ if (parm_vl_cur != parm_vl_src) {
1888+ if (parm_ch == PARM_CHG_COPY) {
1889+ cfg->edit_set (parm_nm, parm_vl_src);
1890+ MOTION_LOG (INF, TYPE_EVENTS, NO_ERRNO
1891+ , _ (" %s:%s applied" )
1892+ , parm_nm.c_str (), parm_vl_src.c_str ());
1893+ } else if (parm_ch == PARM_CHG_CODE) {
1894+ if ((parm_nm == " v4l2_params" ) &&
1895+ (camera_type == CAMERA_TYPE_V4L2)) {
1896+ v4l2cam->parms_update ();
1897+ } else if ((parm_nm == " libcam_params" ) &&
1898+ (camera_type == CAMERA_TYPE_LIBCAM)) {
1899+ libcam->parms_update ();
1900+ } else {
1901+ MOTION_LOG (ERR, TYPE_ALL, NO_ERRNO
1902+ , _ (" Programming error for changes to parameter %s" )
1903+ ,parm_nm.c_str ());
1904+ }
1905+ cfg->edit_set (parm_nm, parm_vl_src);
1906+ MOTION_LOG (INF, TYPE_EVENTS, NO_ERRNO
1907+ , _ (" %s:%s applied" )
1908+ , parm_nm.c_str (), parm_vl_src.c_str ());
1909+ }
1910+ }
1911+ indx++;
1912+ }
1913+ conf_chg = false ;
1914+ }
1915+
18671916/* sleep the loop to get framerate requested */
18681917void cls_camera::frametiming ()
18691918{
@@ -1908,6 +1957,7 @@ void cls_camera::handler()
19081957 timelapse ();
19091958 loopback ();
19101959 check_schedule ();
1960+ check_config ();
19111961 frametiming ();
19121962 }
19131963
@@ -2036,6 +2086,7 @@ cls_camera::cls_camera(cls_motapp *p_app)
20362086 handler_stop = true ;
20372087 restart = false ;
20382088 finish = false ;
2089+ conf_chg = false ;
20392090 watchdog = 90 ;
20402091 passflag = false ;
20412092 pthread_mutex_init (&stream.mutex , NULL );
0 commit comments