From 3e5963c755fea09b2a28aa1398f4a92c835a2c69 Mon Sep 17 00:00:00 2001 From: Vito Caputo Date: Sat, 11 Jul 2020 12:08:57 -0700 Subject: get_frame: more unfucking synchronizatoin --- recordmydesktop/src/rmd_get_frame.c | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/recordmydesktop/src/rmd_get_frame.c b/recordmydesktop/src/rmd_get_frame.c index cb21c1c..162b2f5 100644 --- a/recordmydesktop/src/rmd_get_frame.c +++ b/recordmydesktop/src/rmd_get_frame.c @@ -325,6 +325,7 @@ void *rmdGetFrame(ProgData *pdata) { rmdInitEventsPolling(pdata); while (pdata->running) { + unsigned time_frameno; //if we are left behind we must not wait. //also before actually pausing we must make sure the streams @@ -334,7 +335,7 @@ void *rmdGetFrame(ProgData *pdata) { pdata->capture_frameno >= pdata->time_frameno) pthread_cond_wait(&pdata->time_cond, &pdata->time_mutex); - pdata->capture_frameno = pdata->time_frameno; + time_frameno = pdata->time_frameno; pthread_mutex_unlock(&pdata->time_mutex); //read all events and construct list with damage @@ -569,20 +570,15 @@ void *rmdGetFrame(ProgData *pdata) { if (!pdata->args.full_shots) rmdClearList(&pdata->rect_root); - + /* notify the encoder of the new frame */ pthread_mutex_lock(&pdata->img_buff_ready_mutex); - pdata->th_enc_thread_waiting = 0; - pthread_cond_signal(&pdata->image_buffer_ready); + pdata->capture_frameno = time_frameno; + pthread_cond_broadcast(&pdata->image_buffer_ready); pthread_mutex_unlock(&pdata->img_buff_ready_mutex); } if (!pdata->args.noframe) - XDestroyWindow(pdata->dpy,pdata->shaped_w); - - pthread_mutex_lock(&pdata->img_buff_ready_mutex); - pdata->th_enc_thread_waiting = 0; - pthread_cond_signal(&pdata->image_buffer_ready); - pthread_mutex_unlock(&pdata->img_buff_ready_mutex); + XDestroyWindow(pdata->dpy, pdata->shaped_w); if (!pdata->args.noshared) { XShmDetach(pdata->dpy, &image.shm_info); -- cgit v1.2.3