1919#include "util/system.h"
2020
2121bool dvr_is_recording = false;
22+ bool record_pending = false;
2223
2324static time_t dvr_recording_start = 0 ;
2425static pthread_mutex_t dvr_mutex ;
2526
2627///////////////////////////////////////////////////////////////////
2728//-1=error;
2829// 0=idle,1=recording,2=stopped,3=No SD card,4=recorf file path error,
29- // 5=SD card Full,6=Encoder error
30+ // 5=SD card Full,6=Encoder error,7=Open Record File Failed
3031void dvr_update_status () {
3132 pthread_mutex_lock (& dvr_mutex );
3233 if (dvr_is_recording ) {
@@ -39,7 +40,8 @@ void dvr_update_status() {
3940 if (ret != 1 ) {
4041 dvr_is_recording = false;
4142 system_script (REC_STOP );
42- sleep (2 ); // wait for record process
43+ record_pending = false;
44+ sleep (2 ); // wait for record process
4345 }
4446 }
4547 pthread_mutex_unlock (& dvr_mutex );
@@ -313,16 +315,11 @@ static void dvr_update_record_conf() {
313315void dvr_cmd (osd_dvr_cmd_t cmd ) {
314316 LOGI ("dvr_cmd: sdcard=%d, recording=%d, cmd=%d" , g_sdcard_enable , dvr_is_recording , cmd );
315317
316- if (!g_sdcard_enable )
317- return ;
318-
319- pthread_mutex_lock (& dvr_mutex );
320-
321318 bool start_rec = dvr_is_recording ;
322319
323320 switch (cmd ) {
324321 case DVR_TOGGLE :
325- start_rec = !dvr_is_recording ;
322+ start_rec = !dvr_is_recording && ! record_pending ;
326323 break ;
327324 case DVR_STOP :
328325 start_rec = false;
@@ -332,14 +329,26 @@ void dvr_cmd(osd_dvr_cmd_t cmd) {
332329 break ;
333330 }
334331
332+ if (!g_sdcard_enable ) {
333+ record_pending = start_rec ;
334+ return ;
335+ }
336+
337+ pthread_mutex_lock (& dvr_mutex );
338+
335339 if (start_rec ) {
336340 if (!dvr_is_recording && !sdcard_is_full ()) {
337341 dvr_update_record_conf ();
338- dvr_is_recording = true;
339- usleep (100 * 1000 );
340- system_script (REC_START );
341- dvr_recording_start = time (NULL );
342- sleep (2 ); // wait for record process
342+ if (g_sdcard_ready ) {
343+ dvr_is_recording = true;
344+ record_pending = false;
345+ usleep (100 * 1000 );
346+ system_script (REC_START );
347+ dvr_recording_start = time (NULL );
348+ sleep (2 ); // wait for record process
349+ } else {
350+ record_pending = true;
351+ }
343352 }
344353 } else {
345354 if (dvr_is_recording ) {
0 commit comments