From 4a01eed1921b8cd8b8f098ab234ebf75d681b0a9 Mon Sep 17 00:00:00 2001
From: deva <deva>
Date: Tue, 18 Oct 2005 14:21:17 +0000
Subject: *** empty log message ***

---
 src/camera.cc  | 2 +-
 src/encoder.cc | 9 +++++++++
 src/encoder.h  | 1 +
 3 files changed, 11 insertions(+), 1 deletion(-)

diff --git a/src/camera.cc b/src/camera.cc
index d24f9af..85ef404 100644
--- a/src/camera.cc
+++ b/src/camera.cc
@@ -127,8 +127,8 @@ void Camera::stop(n_savestate save)
 {
   if(initialized) {
     player->stoprecord(); // For the textoverlay
-    decoder->stop(save);
     encoder->stop(save);
+    decoder->stop(save);
   } else {
     info->error("Camera not initialized.");
   }
diff --git a/src/encoder.cc b/src/encoder.cc
index b4227b0..4898888 100644
--- a/src/encoder.cc
+++ b/src/encoder.cc
@@ -35,6 +35,7 @@
 #include <config.h>
 #ifdef USE_GUI
 
+#include "util.h"
 #include "encoder.h"
 
 Encoder::Encoder(Info *ginfo,
@@ -65,6 +66,7 @@ Encoder::Encoder(Info *ginfo,
 
   frozen = false;
 
+  savestate_sent = false;
   savestate = NO_CHANGE;
 
   //  shoot_request = 0;
@@ -113,6 +115,8 @@ void Encoder::encode()
 
         n_header h;
       
+        if(savestate != NO_CHANGE) savestate_sent = true;
+
         h.header_type = DATA_HEADER;
         sprintf(h.header.h_data.cpr, cpr);
         h.header.h_data.freeze = frame->freeze;
@@ -223,6 +227,11 @@ void Encoder::start()
 void Encoder::stop(n_savestate save)
 {
   savestate = save;
+  // Don't return until we are sure the savestate has been sent.
+  while(savestate_sent == false) {
+    // Just wait a while (in a while!)
+    sleep_0_2_frame();
+  }
 /*
   struct timespec ts;
   // TODO: set save state in package header.
diff --git a/src/encoder.h b/src/encoder.h
index 2aa8729..a8ffcc5 100644
--- a/src/encoder.h
+++ b/src/encoder.h
@@ -103,6 +103,7 @@ private:
   //  volatile int freeze_request;
   //  int freeze_value;
 
+  volatile bool savestate_sent;
   volatile n_savestate savestate;
   
   sem_t	record_sem;
-- 
cgit v1.2.3