]> git.sesse.net Git - nageru/log
nageru
3 years agoWIP patch for async output. unsync-output
Steinar H. Gunderson [Mon, 5 Apr 2021 16:18:21 +0000 (18:18 +0200)]
WIP patch for async output.

3 years agoAdd an explicit dependency om libdrm.
Steinar H. Gunderson [Mon, 5 Apr 2021 16:06:32 +0000 (18:06 +0200)]
Add an explicit dependency om libdrm.

3 years agoAdd some missing FFmpeg dependencies in shared/.
Steinar H. Gunderson [Mon, 5 Apr 2021 15:58:22 +0000 (17:58 +0200)]
Add some missing FFmpeg dependencies in shared/.

Reported by Einar Jørgen Haraldseid.

3 years agoFix a Qt deprecation warning.
Steinar H. Gunderson [Mon, 5 Apr 2021 15:56:42 +0000 (17:56 +0200)]
Fix a Qt deprecation warning.

3 years agoFix a Qt deprecation on pixmap().
Steinar H. Gunderson [Mon, 5 Apr 2021 15:51:51 +0000 (17:51 +0200)]
Fix a Qt deprecation on pixmap().

3 years agoStop decoding video/audio in FFmpegCapture if we are not going to use the decoded...
Steinar H. Gunderson [Sun, 4 Apr 2021 11:41:29 +0000 (13:41 +0200)]
Stop decoding video/audio in FFmpegCapture if we are not going to use the decoded information anyway.

3 years agoPass through non-ADTS data (used when transcoding from MP4 instead of MPEG-TS).
Steinar H. Gunderson [Sun, 4 Apr 2021 13:23:32 +0000 (15:23 +0200)]
Pass through non-ADTS data (used when transcoding from MP4 instead of MPEG-TS).

3 years agoMake kaeru insert the aac_adtstoasc filter when needed.
Steinar H. Gunderson [Sun, 4 Apr 2021 10:35:17 +0000 (12:35 +0200)]
Make kaeru insert the aac_adtstoasc filter when needed.

This seemingly fixes mp4 + aac passthrough with no reencoding.

3 years agoAdd a --no-transcode-video flag to Kaeru.
Steinar H. Gunderson [Sun, 4 Apr 2021 09:55:23 +0000 (11:55 +0200)]
Add a --no-transcode-video flag to Kaeru.

This is useful primarily if you want Kaeru to rewrap the stream into
Metacube (for cubemap) and do nothing else with it. Only H.264
is supported for now, since everything else assumes that.

Currently, we only really support --http-mux=mpegts; other muxes seem
to have issues.

3 years agoFix a bug where FFmpegCapture would get the wrong height, causing bogus scaling.
Steinar H. Gunderson [Sun, 4 Apr 2021 09:22:39 +0000 (11:22 +0200)]
Fix a bug where FFmpegCapture would get the wrong height, causing bogus scaling.

3 years agoReset jitter history when frame rate changes.
Steinar H. Gunderson [Sun, 30 Aug 2020 22:25:40 +0000 (00:25 +0200)]
Reset jitter history when frame rate changes.

This is seemingly especially important when we have input format autodetect
and PAL input rates; it gives us one 59.97 fps frame, then a delay as the
card autodetects and resyncs (might be as much as 30–50 ms; not entirely sure),
and then a steady stream of 50 fps frames. This then causes us to overestimate
the jitter by a lot until we get more than 1000 frames and can reject that
very first event as the outlier it is.

3 years agoFix an oversight in JitterHistory::clear().
Steinar H. Gunderson [Sun, 30 Aug 2020 21:01:46 +0000 (23:01 +0200)]
Fix an oversight in JitterHistory::clear().

3 years agoIn DeckLinkOutput, keep a list of all the scheduled frames instead of just a count.
Steinar H. Gunderson [Sun, 30 Aug 2020 17:23:43 +0000 (19:23 +0200)]
In DeckLinkOutput, keep a list of all the scheduled frames instead of just a count.

This will be important when we want to track frames the driver inserts
on our behalf; we'll need to be able to adjust their estimated pts then.

3 years agoClarify a parameter name to update_policy().
Steinar H. Gunderson [Sun, 30 Aug 2020 13:45:07 +0000 (15:45 +0200)]
Clarify a parameter name to update_policy().

3 years agoUpdate README; Debian ships libsrt-gnutls-dev now.
Steinar H. Gunderson [Sun, 6 Dec 2020 17:21:51 +0000 (18:21 +0100)]
Update README; Debian ships libsrt-gnutls-dev now.

3 years agoLink to libcef.so in the current directory.
Steinar H. Gunderson [Mon, 9 Nov 2020 19:24:25 +0000 (20:24 +0100)]
Link to libcef.so in the current directory.

Newer CEF hard-codes that icudtl.dat _must_ be in the same directory
as libcef.so, but the release tarballs have a different structure,
so this fails. This should be fine on installs, but it won't work
for running Nageru from the build directory. Search for the library
in the local directory instead, where we have a symlink. This makes
the build rpath point to ., which makes sure icudtl.dat is picked up
from the other symlink.

3 years agoStop using the deprecated srt_socket().
Steinar H. Gunderson [Sat, 31 Oct 2020 16:21:26 +0000 (17:21 +0100)]
Stop using the deprecated srt_socket().

3 years agoSmall indent fix.
Steinar H. Gunderson [Wed, 26 Aug 2020 22:17:42 +0000 (00:17 +0200)]
Small indent fix.

3 years agoMove Jitterhistory / QueueLengthPolicy into a separate header file.
Steinar H. Gunderson [Tue, 25 Aug 2020 22:06:12 +0000 (00:06 +0200)]
Move Jitterhistory / QueueLengthPolicy into a separate header file.

3 years agoFix a bug; 60.00 fps would never be autoselected for output. (Then again, 59.97 shoul...
Steinar H. Gunderson [Mon, 24 Aug 2020 21:08:54 +0000 (23:08 +0200)]
Fix a bug; 60.00 fps would never be autoselected for output. (Then again, 59.97 should always exist.)

3 years agoQueueLengthPolicy::reset() does nothing anymore, so just remove it.
Steinar H. Gunderson [Sun, 23 Aug 2020 19:18:19 +0000 (21:18 +0200)]
QueueLengthPolicy::reset() does nothing anymore, so just remove it.

In its place, what we often want is to clear the associated jitter history,
so do that instead.

3 years agoRelease Nageru and Futatabi 2.0.1. 2.0.1
Steinar H. Gunderson [Thu, 9 Jul 2020 07:56:24 +0000 (09:56 +0200)]
Release Nageru and Futatabi 2.0.1.

3 years agoUnbreak compilation with libmicrohttpd 0.9.71.
Steinar H. Gunderson [Wed, 8 Jul 2020 18:49:21 +0000 (20:49 +0200)]
Unbreak compilation with libmicrohttpd 0.9.71.

3 years agoMake Futatabi look for multicam.mp4, not multiangle.mp4.
Steinar H. Gunderson [Mon, 8 Jun 2020 21:31:05 +0000 (23:31 +0200)]
Make Futatabi look for multicam.mp4, not multiangle.mp4.

The use of multiangle.mp4 is confusing when the HTTP endpoint is called
multicam.mp4.

3 years agoSkip DeckLink cards marked as inactive.
Steinar H. Gunderson [Wed, 3 Jun 2020 21:45:02 +0000 (23:45 +0200)]
Skip DeckLink cards marked as inactive.

This prevents a crash on startup with e.g. Duo 2 in the default mode,
which disables connectors 3 and 4 by default (well, uses them for dual link).

3 years agoUpgrade DeckLink SDK to 10.11.4.
Steinar H. Gunderson [Wed, 3 Jun 2020 21:40:37 +0000 (23:40 +0200)]
Upgrade DeckLink SDK to 10.11.4.

This is the oldest version that supports the duplex information
used in the next patch.

3 years agoRelease Nageru and Futatabi 2.0.0. 2.0.0
Steinar H. Gunderson [Tue, 2 Jun 2020 08:05:32 +0000 (10:05 +0200)]
Release Nageru and Futatabi 2.0.0.

3 years agoUpdate README for libsrt.
Steinar H. Gunderson [Tue, 2 Jun 2020 08:10:48 +0000 (10:10 +0200)]
Update README for libsrt.

3 years agoFix FFmpeg frame rate calculation with VA-API acceleration.
Steinar H. Gunderson [Mon, 1 Jun 2020 21:45:54 +0000 (23:45 +0200)]
Fix FFmpeg frame rate calculation with VA-API acceleration.

3 years agoSupport decoding FFmpeg videos via VA-API.
Steinar H. Gunderson [Mon, 1 Jun 2020 20:36:58 +0000 (22:36 +0200)]
Support decoding FFmpeg videos via VA-API.

This is more relevant now that having multiple SRT cameras can lead to
decoding lots of videos at the same time. It would be possible to support
other mechanisms (e.g. VDPAU) in FFmpeg depending on what FFmpeg is
built against, but it's a bit cumbersome to do, so this is VA-API only for now.

3 years agoWhen hot-unplugging capture cards, actually allow making them inactive.
Steinar H. Gunderson [Mon, 1 Jun 2020 19:38:16 +0000 (21:38 +0200)]
When hot-unplugging capture cards, actually allow making them inactive.

This was an oversight; removed cards would always be replaced by fake ones.
However, this exposed a few tricky issues, like that the master card can
go away, that needed to be dealt with.

3 years agoIncrease the master card timeout to 200 ms.
Steinar H. Gunderson [Mon, 1 Jun 2020 19:37:03 +0000 (21:37 +0200)]
Increase the master card timeout to 200 ms.

5 fps is pretty crappy, but evidently, 100 ms happens with SRT cards
all the time even when nothing is wrong. Perhaps a situation with
B-frames at 30 fps? I haven't really checked.

3 years agoWhen creating a fake master card frame, create some fake silence with it.
Steinar H. Gunderson [Mon, 1 Jun 2020 19:31:48 +0000 (21:31 +0200)]
When creating a fake master card frame, create some fake silence with it.

3 years agoWhen the master card times out, print a message.
Steinar H. Gunderson [Mon, 1 Jun 2020 19:29:46 +0000 (21:29 +0200)]
When the master card times out, print a message.

3 years agoSmall stylistic cleanup.
Steinar H. Gunderson [Mon, 1 Jun 2020 19:29:04 +0000 (21:29 +0200)]
Small stylistic cleanup.

3 years agoWhen hotplugging cards, reset resampler only after the device name and number of...
Steinar H. Gunderson [Mon, 1 Jun 2020 19:24:43 +0000 (21:24 +0200)]
When hotplugging cards, reset resampler only after the device name and number of channels are set.

3 years agoIf there is no frame from the master card after 100 ms, tick anyway.
Steinar H. Gunderson [Mon, 1 Jun 2020 18:01:43 +0000 (20:01 +0200)]
If there is no frame from the master card after 100 ms, tick anyway.

This is especially relevant now that SRT cards can be the master card.

3 years agoFix a deadlock exposed by the previous patch.
Steinar H. Gunderson [Mon, 1 Jun 2020 18:01:37 +0000 (20:01 +0200)]
Fix a deadlock exposed by the previous patch.

3 years agoFix a missing lock around handle_hotplugged_cards().
Steinar H. Gunderson [Mon, 1 Jun 2020 16:17:34 +0000 (18:17 +0200)]
Fix a missing lock around handle_hotplugged_cards().

3 years agoRefresh mainwindow.ui in newer Qt Creator.
Steinar H. Gunderson [Mon, 1 Jun 2020 10:31:03 +0000 (12:31 +0200)]
Refresh mainwindow.ui in newer Qt Creator.

The changes seem inconsequential, but it's nice to keep future diffs down.

3 years agoAdd a UI toggle to turn off SRT at runtime.
Steinar H. Gunderson [Mon, 1 Jun 2020 10:30:11 +0000 (12:30 +0200)]
Add a UI toggle to turn off SRT at runtime.

This is both useful for discoveirng the feature, and also should you be
on a hostile network where suddenly someone connects to you when you
don't want to. Existing connections will remain just fine.

3 years agoRemove a TODO that was fixed a while back.
Steinar H. Gunderson [Mon, 1 Jun 2020 10:19:42 +0000 (12:19 +0200)]
Remove a TODO that was fixed a while back.

3 years agoSuppress repeated chroma location warnings from FFmpeg.
Steinar H. Gunderson [Mon, 1 Jun 2020 08:25:52 +0000 (10:25 +0200)]
Suppress repeated chroma location warnings from FFmpeg.

It's no good getting one of these for every frame. This works around
an FFmpeg bug where HEVC doesn't get the right chroma location set.

3 years agoFix a crash on startup with MJPEG software encoding.
Steinar H. Gunderson [Mon, 1 Jun 2020 08:12:00 +0000 (10:12 +0200)]
Fix a crash on startup with MJPEG software encoding.

3 years agoMake number of cards flexible at runtime.
Steinar H. Gunderson [Sat, 30 May 2020 16:29:38 +0000 (18:29 +0200)]
Make number of cards flexible at runtime.

This is a cleanup that should really have been done when we added
hotplug in the first place, but it's becoming even more relevant
now that SRT “cards” are supported.

Basically, empty slots can now be filled with nothing instead of
fake capture cards (which generate frames and take a little bit
of CPU time); we only instantiate fake capture cards if the slot is
below some certain minimum index or has been used by the theme.
(Cards that are unused are now “inactive” and will generally not
show up in the UI.) This means that the --num-cards parameter is now
largely irrelevant; it is only there for guaranteeing a minimum
amount of fake cards, for testing. Most users will be happy just using the
default of 2. There's also a new --max-num-cards in the unlikely case
that you want to leave some cards unused, e.g. for other applications
on the same machine.

This also unifies handling of regular capture cards, FFmpeg “cards”
and CEF “cards”; they are indexed pretty much the same way.

3 years agoIn Futatabi, support 4:2:0 MJPEG decoding via VA-API.
Steinar H. Gunderson [Fri, 29 May 2020 20:27:43 +0000 (22:27 +0200)]
In Futatabi, support 4:2:0 MJPEG decoding via VA-API.

This was fairly easy now that all the VA-API code was unified with
Nageru, which already supported 4:2:0.

3 years agoMove VAResourcePool into a shared class between MJPEGEncoder in Nageru and the VA...
Steinar H. Gunderson [Fri, 29 May 2020 20:01:10 +0000 (22:01 +0200)]
Move VAResourcePool into a shared class between MJPEGEncoder in Nageru and the VA-API JPEG decoder in Futatabi.

3 years agoFix another lingering reconfigure bug; the previous fix was incomplete.
Steinar H. Gunderson [Sun, 24 May 2020 21:23:27 +0000 (23:23 +0200)]
Fix another lingering reconfigure bug; the previous fix was incomplete.

3 years agoMove texture uploading out of a lambda.
Steinar H. Gunderson [Sun, 24 May 2020 19:16:00 +0000 (21:16 +0200)]
Move texture uploading out of a lambda.

This doesn't make all that much sense anymore, and having it outside
std::function helps debuggability. (Also, it probably saves a few
allocations.)

3 years agoStop leaking SRT sockets on disconnect.
Steinar H. Gunderson [Sun, 24 May 2020 17:40:41 +0000 (19:40 +0200)]
Stop leaking SRT sockets on disconnect.

3 years agoUnify VA-API initialization.
Steinar H. Gunderson [Thu, 21 May 2020 13:49:05 +0000 (15:49 +0200)]
Unify VA-API initialization.

We initialized VA-API and enumerated configs etc. in three different
ways for H.264 encoding (Nageru), MJPEG encoding (Nageru) and MJPEG
decoding (Futatabi). Unify them into one shared function, to reduce
the amount of duplication.

3 years agoMove VADisplayWithCleanup into its own header file, in shared/.
Steinar H. Gunderson [Thu, 21 May 2020 09:38:22 +0000 (11:38 +0200)]
Move VADisplayWithCleanup into its own header file, in shared/.

This is the first step on trying to unify the initialization code
a bit between Nageru and Futatabi.

3 years agoCorrect sampling factors for 4:2:2 VA-API encoding.
Steinar H. Gunderson [Thu, 21 May 2020 09:20:14 +0000 (11:20 +0200)]
Correct sampling factors for 4:2:2 VA-API encoding.

3 years agoCorrect a comment in YCbCrConverter.
Steinar H. Gunderson [Wed, 20 May 2020 22:21:08 +0000 (00:21 +0200)]
Correct a comment in YCbCrConverter.

3 years agoGive in the right VAAPI context when decoding MJPEG.
Steinar H. Gunderson [Wed, 20 May 2020 22:04:54 +0000 (00:04 +0200)]
Give in the right VAAPI context when decoding MJPEG.

This mirrors the fixes of e550c3b, but for the MJPEG decoding in
Futatabi instead of the MJPEG encoding in Nageru.

3 years agoUnbreak Futatabi software (non-VA-API) MJPEG decoding.
Steinar H. Gunderson [Wed, 20 May 2020 22:00:16 +0000 (00:00 +0200)]
Unbreak Futatabi software (non-VA-API) MJPEG decoding.

This was all broken after adc0df0, it seems. It not only assumed 4:2:2,
but had broken chroma pitch, too.

3 years agoSupport MJPEG encoding of planar Y'CbCr sources.
Steinar H. Gunderson [Tue, 19 May 2020 21:49:57 +0000 (23:49 +0200)]
Support MJPEG encoding of planar Y'CbCr sources.

This enables MJPEG encoding for video sources, but in practice,
only SRT cameras are enabled. There's VA-API support for 4:2:0 only,
by means of converting to NV12; if you had 4:2:2 or 4:4:4, you will
get fallback to libjpeg, which should handle that gracefully.
(If I actually had an SRT source doing 4:2:2, I might have added
more support, but it seems pretty narrow.)

Futatabi seemingly has some problems handling these files, but that
should be fixable.

3 years agoExport SRT statistics as Prometheus metrics.
Steinar H. Gunderson [Sun, 17 May 2020 07:58:39 +0000 (09:58 +0200)]
Export SRT statistics as Prometheus metrics.

Note that there are some bugs in libsrt 1.4.0 that are fixed in
1.4.1, e.g. receive buffer sizes are negative.

3 years agoSupport overriding color space for SRT inputs.
Steinar H. Gunderson [Sat, 16 May 2020 08:15:30 +0000 (10:15 +0200)]
Support overriding color space for SRT inputs.

This is mainly for completeness.

3 years agoGive in the right VAAPI context when encoding MJPEG.
Steinar H. Gunderson [Fri, 15 May 2020 17:52:56 +0000 (19:52 +0200)]
Give in the right VAAPI context when encoding MJPEG.

The context ID was typoed, and we used the config ID instead.
This seemingly worked with the older Intel drivers (they didn't care
about the context ID), but not with the newer ones.

3 years agoWhen reconnecting an SRT input, try to use the same slot as last time.
Steinar H. Gunderson [Fri, 15 May 2020 17:41:46 +0000 (19:41 +0200)]
When reconnecting an SRT input, try to use the same slot as last time.

3 years agoFix behavior around reconfigure.
Steinar H. Gunderson [Tue, 12 May 2020 20:09:24 +0000 (22:09 +0200)]
Fix behavior around reconfigure.

When disconnecting a fake card and replacing it with an SRT card
(or, theoretically, vice versa), we'd delete the old frames assuming
the old pixel format, which would cause us to delete garbage data
and eventually (seemingly?) use deleted texture numbers, causing
GL errors and thus crashes.

3 years agoFix an integer overflow with very long master frames.
Steinar H. Gunderson [Mon, 11 May 2020 18:14:47 +0000 (20:14 +0200)]
Fix an integer overflow with very long master frames.

3 years agoServe a better frame rate from streams (especially SRT streams) with packet length...
Steinar H. Gunderson [Mon, 11 May 2020 18:07:20 +0000 (20:07 +0200)]
Serve a better frame rate from streams (especially SRT streams) with packet length zero.

This fixes issues when a Larix SRT client becomes the master card, at least.

3 years agoAllow SRT inputs to pass through without a rescale (only colorspace conversion).
Steinar H. Gunderson [Mon, 11 May 2020 17:01:13 +0000 (19:01 +0200)]
Allow SRT inputs to pass through without a rescale (only colorspace conversion).

3 years agoSupport SRT inputs.
Steinar H. Gunderson [Sun, 10 May 2020 21:57:06 +0000 (23:57 +0200)]
Support SRT inputs.

FFmpeg can support SRT in VideoInput, but this goes beyond that;
the number of SRT inputs can be dynamic (they can fill any input
card slot), and they generally behave much more like regular input
cards than video inputs. SRT input is on by default (port 9710)
but can be disabled at runtime.

Due to licensing issues (e.g. Debian does not currently have a
suitable libsrt, as its libsrt links to OpenSSL), it is possible
to build without it.

3 years agoWhen reconfiguring a PBO frame allocator, don't reuse userdata.
Steinar H. Gunderson [Sun, 10 May 2020 17:33:11 +0000 (19:33 +0200)]
When reconfiguring a PBO frame allocator, don't reuse userdata.

This would cause odd stuttering, as old and new frames would share
userdata briefly, causing chaos.

3 years agoFix some issues with cards changing pixel format on-the-fly.
Steinar H. Gunderson [Sun, 10 May 2020 16:14:10 +0000 (18:14 +0200)]
Fix some issues with cards changing pixel format on-the-fly.

If a card came back with another pixel format than before,
we would still allocate frames with the same pixel format,
which obviously didn't work.

This is very unlikely to happen in the current situation
(or even impossible?), but needs to be fixed for upcoming patches.

4 years agoRelease Nageru and Futatabi 1.9.3. 1.9.3
Steinar H. Gunderson [Sun, 12 Apr 2020 09:25:34 +0000 (11:25 +0200)]
Release Nageru and Futatabi 1.9.3.

4 years agoUpgrade the embedded bmusb to 0.7.5, to get the udev rules file.
Steinar H. Gunderson [Sun, 12 Apr 2020 09:23:38 +0000 (11:23 +0200)]
Upgrade the embedded bmusb to 0.7.5, to get the udev rules file.

4 years agoCorrect flag name in a comment.
Steinar H. Gunderson [Tue, 7 Apr 2020 19:00:34 +0000 (21:00 +0200)]
Correct flag name in a comment.

4 years agoUpdate v4l2loopback modprobe line.
Steinar H. Gunderson [Mon, 6 Apr 2020 20:30:24 +0000 (22:30 +0200)]
Update v4l2loopback modprobe line.

I can't get Chrome to work properly without max width/height being set.

4 years agoAdd missing --help for --v4l-output.
Steinar H. Gunderson [Mon, 6 Apr 2020 19:17:12 +0000 (21:17 +0200)]
Add missing --help for --v4l-output.

4 years agoAdd support for V4L2 output.
Steinar H. Gunderson [Mon, 6 Apr 2020 19:12:41 +0000 (21:12 +0200)]
Add support for V4L2 output.

This is video-only (no audio) and unsynchronized. It's intended mainly
for a way to pipe Nageru output into a videoconferencing application,
in these Covid-19 days.

4 years agoDocument that bmusb 0.7.4 is not in buster.
Steinar H. Gunderson [Fri, 3 Apr 2020 20:29:06 +0000 (22:29 +0200)]
Document that bmusb 0.7.4 is not in buster.

4 years agoRelease Nageru and Futatabi 1.9.2. 1.9.2
Steinar H. Gunderson [Sun, 29 Mar 2020 13:12:34 +0000 (15:12 +0200)]
Release Nageru and Futatabi 1.9.2.

4 years agoRename add_auto_white_balance() to add_white_balance().
Steinar H. Gunderson [Sun, 29 Mar 2020 13:00:35 +0000 (15:00 +0200)]
Rename add_auto_white_balance() to add_white_balance().

“auto” white balance sounds like we are doing some kind of analysis
to find the correct white balance, which we're not, so rename before
release to reduce the chance of confusion.

4 years agoReintroduce faster DeckLink shutdown; now with a fix for the UI switcher.
Steinar H. Gunderson [Sun, 29 Mar 2020 12:33:32 +0000 (14:33 +0200)]
Reintroduce faster DeckLink shutdown; now with a fix for the UI switcher.

4 years agoFix a memory leak in DecklinkOutput.
Steinar H. Gunderson [Sun, 29 Mar 2020 12:32:56 +0000 (14:32 +0200)]
Fix a memory leak in DecklinkOutput.

4 years agoFix some leftovers in warning messages.
Steinar H. Gunderson [Sun, 29 Mar 2020 11:25:54 +0000 (13:25 +0200)]
Fix some leftovers in warning messages.

4 years agoSupport getting all 8 channels from DeckLink capture cards.
Steinar H. Gunderson [Wed, 25 Mar 2020 18:14:42 +0000 (19:14 +0100)]
Support getting all 8 channels from DeckLink capture cards.

You could select channels 3–8 in the UI, but Nageru would simply
crash with an assertion failure.

4 years agoFix an issue with 10-bit input and nonstandard heights (e.g. 1920x800).
Steinar H. Gunderson [Sat, 28 Mar 2020 23:47:38 +0000 (00:47 +0100)]
Fix an issue with 10-bit input and nonstandard heights (e.g. 1920x800).

4 years agoUpdate for newer CEF.
Steinar H. Gunderson [Fri, 20 Mar 2020 18:59:48 +0000 (19:59 +0100)]
Update for newer CEF.

4 years agoWhen deciding which signal to connect, delay the mapping to cards.
Steinar H. Gunderson [Wed, 18 Mar 2020 18:38:25 +0000 (19:38 +0100)]
When deciding which signal to connect, delay the mapping to cards.

This fixes an issue where scenes that get display() once at start
and then never afterwards wouldn't get updated properly when mappings
changed in the UI.

4 years agoStretch the ease length to get back into the right cadence.
Steinar H. Gunderson [Mon, 16 Mar 2020 22:00:50 +0000 (23:00 +0100)]
Stretch the ease length to get back into the right cadence.

Unless the speed change is very small, we can stretch the ease a bit
(from the default 200 ms into anything in the [0,2] second range)
such that we conveniently hit an original frame. This means that if
we go into a speed such as 100% or 200%, we've got a very high
likelyhood of going into a locked cadence, with the associated
quality and performance benefits.

4 years agoOnly bother going into an ease if there is an actual speed change.
Steinar H. Gunderson [Sat, 14 Mar 2020 23:47:47 +0000 (00:47 +0100)]
Only bother going into an ease if there is an actual speed change.

4 years agoAdd versions of the binary search utilities that take in const references.
Steinar H. Gunderson [Sat, 14 Mar 2020 16:14:34 +0000 (17:14 +0100)]
Add versions of the binary search utilities that take in const references.

4 years agoWhenever the speed changes, ease into it over the next 200 ms.
Steinar H. Gunderson [Wed, 11 Mar 2020 20:30:15 +0000 (21:30 +0100)]
Whenever the speed changes, ease into it over the next 200 ms.

This causes a slight delay compared to the operator's wishes,
but that should hardly be visible, and it allows for somewhat
better behavior when we get very abrupt changes from the controller
(or the lock button suddenly is pressed) -- it's essentially
more of an interpolation. Even more importantly, it will allow us
to make a little trick to increase performance in the next patch
that would be somewhat more jerky without it.

4 years agoRefactor the handling of the various time origins in Player into a class.
Steinar H. Gunderson [Wed, 11 Mar 2020 18:58:54 +0000 (19:58 +0100)]
Refactor the handling of the various time origins in Player into a class.

4 years agoChange Futatabi frames to be cached as textures instead of in system memory.
Steinar H. Gunderson [Sun, 8 Mar 2020 14:57:51 +0000 (15:57 +0100)]
Change Futatabi frames to be cached as textures instead of in system memory.

The JPEGs are now decoded into PBO bounce buffers, which saves a lot of CPU
time (copying is asynchronous, and done by the GPU -- plus we save a copy
into a staging buffer).

Similarly, keeping the cache in textures allows the driver (if it wants!)
to keep it in VRAM, saving repeated uploading if the same frame is used
multiple times.

CPU usage is down from 1.05 to 0.60 cores on my machine, when not playing.
More importantly, the 99-percentile player queue status is extremely much
better.

4 years agoAdd metrics for how many frames we are decoding, but did not have the time to display.
Steinar H. Gunderson [Sun, 8 Mar 2020 14:02:21 +0000 (15:02 +0100)]
Add metrics for how many frames we are decoding, but did not have the time to display.

4 years agoMove RefCountedTexture to shared.
Steinar H. Gunderson [Fri, 6 Mar 2020 21:18:41 +0000 (22:18 +0100)]
Move RefCountedTexture to shared.

4 years agoAdd a metric for general Futatabi player health (how much buffer there is left).
Steinar H. Gunderson [Wed, 4 Mar 2020 23:16:47 +0000 (00:16 +0100)]
Add a metric for general Futatabi player health (how much buffer there is left).

4 years agoFix MJPEG white balance information when VA-API is in use.
Steinar H. Gunderson [Wed, 4 Mar 2020 18:53:49 +0000 (19:53 +0100)]
Fix MJPEG white balance information when VA-API is in use.

The JPEG headers were cached (per resolution) and never invalidated,
causing wrong/outdated information to be sent.

I can't really remember why I wanted to cache these, but I suppose
I had a reason, so I'm a bit reluctant to just kill the cache.
Hopefully, the white balance won't change often enough, and these
objects are so small, that we won't need invalidation; we can just
let it grow until program exit.

4 years agoAdd summaries for tracking fade and interpolation latency across the GPU.
Steinar H. Gunderson [Sat, 29 Feb 2020 23:32:15 +0000 (00:32 +0100)]
Add summaries for tracking fade and interpolation latency across the GPU.

4 years agoAdd a Futatabi metric for JPEG decode times.
Steinar H. Gunderson [Sat, 29 Feb 2020 23:07:27 +0000 (00:07 +0100)]
Add a Futatabi metric for JPEG decode times.

4 years agoFix a deadlock in Futatabi when using MIDI devices.
Steinar H. Gunderson [Sat, 29 Feb 2020 22:25:11 +0000 (23:25 +0100)]
Fix a deadlock in Futatabi when using MIDI devices.

If something in the UI wanted to update a light on the MIDI device
at the exact same time the operator pressed a button on said device,
we could get a deadlock. The problem was that MIDIDevice::handle_event()
would lock the MIDIDevice and then go to tell MIDIMapper that the
note was coming (which needs a lock on the MIDIMapper), while in the
other thread, MIDIMapper::refresh_lights() would first lock the MIDIMapper
and then call MIDIDevice::update_lights() with the new set of lights
(which nedes a lock on the MIDIDevice). This is a classic lock ordering
issue.

The solution is to simply make MIDIDevice::handle_event() not lock the
MIDIDevice for anything that calls MIDIMapper; it doesn't actually modify
any state in MIDIDevice, except when we hotplug new devices (and that never
calls MIDIMapper).

4 years agoMake so that auto white balance is stored per (physical) card, not per signal.
Steinar H. Gunderson [Sat, 29 Feb 2020 21:44:07 +0000 (22:44 +0100)]
Make so that auto white balance is stored per (physical) card, not per signal.

This fixes an issue where auto white balance would be completely off if
any signals were remapped out of the default. It means you no longer can
duplicate a signal and have different white balance on it, but that seems
narrow enough that one could use manual white balance for that (I can't
really imagine what the use case would be).

4 years agoNomenclature cleanups around channels, signals and cards.
Steinar H. Gunderson [Sat, 29 Feb 2020 21:30:30 +0000 (22:30 +0100)]
Nomenclature cleanups around channels, signals and cards.

4 years agoMake it possible to get and set EQ parameters from the theme.
Steinar H. Gunderson [Wed, 26 Feb 2020 17:47:55 +0000 (18:47 +0100)]
Make it possible to get and set EQ parameters from the theme.