@@ -84,6 +84,7 @@ int video_zpos = 1;
84
84
85
85
bool mavlink_dvr_on_arm = false ;
86
86
bool osd_custom_message = false ;
87
+ bool disable_vsync = false ;
87
88
88
89
VideoCodec codec = VideoCodec::H265;
89
90
Dvr *dvr = NULL ;
@@ -294,7 +295,7 @@ void *__DISPLAY_THREAD__(void *param)
294
295
// show DRM FB in plane
295
296
uint32_t flags = DRM_MODE_ATOMIC_NONBLOCK;
296
297
if (fb_id != 0 ) {
297
- flags = DRM_MODE_ATOMIC_ALLOW_MODESET;
298
+ flags = disable_vsync ? DRM_MODE_ATOMIC_NONBLOCK : DRM_MODE_ATOMIC_ALLOW_MODESET;
298
299
ret = set_drm_object_property (output_list->video_request , &output_list->video_plane , " FB_ID" , fb_id);
299
300
assert (ret>0 );
300
301
}
@@ -376,6 +377,24 @@ void sigusr1_handler(int signum) {
376
377
}
377
378
}
378
379
380
+ void sigusr2_handler (int signum) {
381
+ // Toggle the disable_vsync flag
382
+ disable_vsync = disable_vsync ^ 1 ;
383
+
384
+ // Open the file for writing
385
+ std::ofstream outFile (" /run/pixelpilot.msg" );
386
+ if (!outFile.is_open ()) {
387
+ spdlog::error (" Error opening file!" );
388
+ return ; // Exit the function if the file cannot be opened
389
+ }
390
+
391
+ // Write the formatted text to the file
392
+ outFile << " disable_vsync: " << std::boolalpha << disable_vsync << std::endl;
393
+ outFile.close ();
394
+
395
+ // Log the new state of disable_vsync
396
+ spdlog::info (" disable_vsync: {}" , disable_vsync);
397
+ }
379
398
380
399
int decoder_stalled_count=0 ;
381
400
bool feed_packet_to_decoder (MppPacket *packet,void * data_p,int data_len){
@@ -532,6 +551,8 @@ void printHelp() {
532
551
" \n "
533
552
" --screen-mode <mode> - Override default screen mode. <width>x<heigth>@<fps> ex: 1920x1080@120\n "
534
553
" \n "
554
+ " --disable-vsync - Disable VSYNC commits\n "
555
+ " \n "
535
556
" --screen-mode-list - Print the list of supported screen modes and exit.\n "
536
557
" \n "
537
558
" --version - Show program version\n "
@@ -709,6 +730,11 @@ int main(int argc, char **argv)
709
730
continue ;
710
731
}
711
732
733
+ __OnArgument (" --disable-vsync" ) {
734
+ disable_vsync = true ;
735
+ continue ;
736
+ }
737
+
712
738
__OnArgument (" --screen-mode-list" ) {
713
739
print_modelist = 1 ;
714
740
continue ;
@@ -730,6 +756,8 @@ int main(int argc, char **argv)
730
756
731
757
printf (" PixelPilot Rockchip %d.%d\n " , APP_VERSION_MAJOR, APP_VERSION_MINOR);
732
758
759
+ spdlog::info (" disable_vsync: {}" , disable_vsync);
760
+
733
761
if (enable_osd == 0 ) {
734
762
video_zpos = 4 ;
735
763
}
@@ -788,6 +816,7 @@ int main(int argc, char **argv)
788
816
if (dvr_template) {
789
817
signal (SIGUSR1, sigusr1_handler);
790
818
}
819
+ signal (SIGUSR2, sigusr2_handler);
791
820
// ////////////////// THREADS SETUP
792
821
793
822
ret = pthread_mutex_init (&video_mutex, NULL );
0 commit comments