projects
/
dcpomatic.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Merge branch 'master' into 1.0-seek
[dcpomatic.git]
/
src
/
lib
/
encoder.cc
diff --git
a/src/lib/encoder.cc
b/src/lib/encoder.cc
index 475c230da5ac1f3ba4458afd6cb55d062810e365..ca9134c04d29e52400579330eb34d4fa75a5196e 100644
(file)
--- a/
src/lib/encoder.cc
+++ b/
src/lib/encoder.cc
@@
-96,7
+96,6
@@
Encoder::process_begin ()
ServerFinder::instance()->connect (boost::bind (&Encoder::server_found, this, _1));
}
ServerFinder::instance()->connect (boost::bind (&Encoder::server_found, this, _1));
}
-
void
Encoder::process_end ()
{
void
Encoder::process_end ()
{
@@
-199,9
+198,12
@@
Encoder::process_video (shared_ptr<PlayerImage> image, Eyes eyes, ColourConversi
return;
}
return;
}
- if (_writer->thrown ()) {
- _writer->rethrow ();
- }
+ _writer->rethrow ();
+ /* Re-throw any exception raised by one of our threads. If more
+ than one has thrown an exception, only one will be rethrown, I think;
+ but then, if that happens something has gone badly wrong.
+ */
+ rethrow ();
if (_writer->can_fake_write (_video_frames_out)) {
_writer->fake_write (_video_frames_out, eyes);
if (_writer->can_fake_write (_video_frames_out)) {
_writer->fake_write (_video_frames_out, eyes);
@@
-257,6
+259,7
@@
Encoder::terminate_threads ()
void
Encoder::encoder_thread (optional<ServerDescription> server)
void
Encoder::encoder_thread (optional<ServerDescription> server)
+try
{
/* Number of seconds that we currently wait between attempts
to connect to the server; not relevant for localhost
{
/* Number of seconds that we currently wait between attempts
to connect to the server; not relevant for localhost
@@
-338,6
+341,10
@@
Encoder::encoder_thread (optional<ServerDescription> server)
_condition.notify_all ();
}
}
_condition.notify_all ();
}
}
+catch (...)
+{
+ store_current ();
+}
void
Encoder::server_found (ServerDescription s)
void
Encoder::server_found (ServerDescription s)