| Age | Commit message (Collapse) | Author |
|
Summary of required changes:
Replace ::from_frames with a constructor that takes num/den.
Provide and use member to_debug_string() instead of to_string().
Provide and use member to_serializable_string() and string constructor instead of fmt::to_string on .get() and number constructor.
Provide and use content_time() member instead of ContentTime constructor from DCPTime.
Use frames_round(96000) instead of get() when comparing times to see if they are "close enough".
Provide and use DCPTime(x, FrameRateChange) constructor when converting from ContentTime.
Use .seconds() when calculating proportions or sometimes when dividing by HZ.
Provide and use operator bool().
Pass explicit 96000 denominator in a lot of places.
Add member max() and use it instead of static max()
Change BOOST_CHECK_EQUAL to BOOST_CHECK
Provide operator/ and use it instead of .get() / 2.
|
|
sed -i "/include.*compose.hpp/d;" src/lib/*.cc src/wx/*.cc src/wx/*.h src/tools/*.cc src/lib/*.h test/*.cc
|
|
sed -i "/Plural-Forms/n;/%100/n;/scanf/n;s/%[123456789]/{}/g" src/lib/*.cc src/lib/*.h src/wx/*.cc src/tools/*.cc src/lib/po/*.po src/wx/po/*.po src/tools/po/*.po test/*.cc
sed -i "s/String::compose */fmt::format/g" src/lib/*.cc src/lib/*.h src/wx/*.cc src/tools/*.cc test/*.cc
|
|
I'm not sure why I did it like this in the first place - perhaps so that
if the API endpoint changes there aren't so many old values stuck in
config files all over the place? Anyway, it seems cleaner to do it like
this, as it's how we handle the other config.
|
|
Had a report of this assertion tripping with "only servers encode" switched on.
The user had encode servers but they were running old software, so
wouldn't be enabled for use. Obviously the main DCP-o-matic should not
crash in this situation.
|
|
|
|
|
|
|
|
|
|
|
|
(#2784).
This feels like a hack, but I can't think of a nicer way to do it.
The interruption disable makes sense because when we destroy encoder threads
during a DCP encode (because a remote server goes away, for example) we don't
want any frames to be lost due to the encode thread being interrupted between
taking the frame off the queue and sending it to the writer.
When we're destroying the encoder we don't care about this, but I can't see
how you'd differentiate.
Maybe the encoder queue could have two lists: to-do and in-progress;
the encoder thread atomically moves a frame from to-do to in-progress,
but then how do you know when the in-progress ones are orphaned and need
to be re-added to the main queue.
You could make the writer return saying "no" if the queue is full (rather
than blocking and waiting for the queue to empty) but that seems wasteful
as then the frame would be re-encoded.
|
|
|
|
|
|
|
|
|
|
It should be allowed to not have any grok stuff in the config file,
and we should generally call it grok rather than GPU in case
other non-grok GPU stuff arrives in the future.
|
|
|
|
|
|
I think this makes sense, and also allows us to forward-declare the
contexts in a forthcoming commit.
|
|
|
|
|
|
Soon we'll add a new encoder type, and the existing structure was
already creaking a bit at the seams while handling local and remote
encodes. Here we split out an encoder thread and introduce the concept
of a "sync" thread (which blocks while the encoding is happening).
Later we'll have another type which submits the encode request to a
GPU and receives the reply back later.
|
|
|
|
|
|
|
|
|
|
|
|
via his tool "grok".
|
|
Otherwise it can happen that a signal is emitted before we connect
to it, and then after that no more signals come because nothing
changes.
|
|
|
|
|
|
|
|
|
|
J2KEncoder.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
and _threads.reset(); move the lock.
|
|
73ebb92e9df01ba7afb97121b6e2cef6ca13a18e
I'm not sure why it was removed, and it seems necessary;
servers_list_changed() can be called from a variety of different places
(the constructor and two different EncodeServerFinder threads).
May help with #1854.
|
|
of 4MB of data for every JPEG2000 frame we decode.
|
|
|
|
assertion failures.
Before this, it was possible for J2KEncoder::terminate_threads()
to finish without terminating all threads if the thread _running_
terminate_threads() was itself interrupt()ed.
This is because the thread_group::join_all() in terminate_threads()
is an interruption point, so it was possible it not to complete
but instead to throw interrupted_exception. Then the owning
J2KEncoder would be torn down but the threads would still be running,
causing use-after-frees.
This commit adds some boost::this_thread::disable_interruption
objects to ensure that the owning thread is not interrupted while
it is being destroyed.
Also tidy up code that does this stuff, assuming that it's safe
to not call thread::joinable but instead do
thread.interrupt();
try {
thread.join();
} catch (...) {}
|
|
|
|
|
|
(probably because of a lack of addressable RAM).
See #1540.
|