]>
git.sesse.net Git - nageru/log
Steinar H. Gunderson [Fri, 23 Sep 2016 17:36:51 +0000 (19:36 +0200)]
Do not use the timing of dropped frames as part of the video master clock.
Hopefully improves resampling somewhat when we are dropping frames;
it is tricky to deal with such an uneven master clock, though.
Steinar H. Gunderson [Wed, 21 Sep 2016 22:57:40 +0000 (00:57 +0200)]
Interpolate EQ changes smoothly, just like volume changes.
Steinar H. Gunderson [Wed, 21 Sep 2016 18:00:09 +0000 (20:00 +0200)]
Shut down the ALSA probe retry threads cleanly on exit.
Steinar H. Gunderson [Wed, 21 Sep 2016 17:49:29 +0000 (19:49 +0200)]
Shut down the ALSA inotify thread cleanly on exit.
Steinar H. Gunderson [Wed, 21 Sep 2016 17:19:10 +0000 (19:19 +0200)]
Move ALSAPool into its own file; it is pretty large now.
Steinar H. Gunderson [Wed, 21 Sep 2016 17:00:21 +0000 (19:00 +0200)]
Let settings follow buses when editing the mapping.
If a user wants to add a new bus (or delete one), we shouldn't
delete all their settings. Track them as a nicely bound-together
hidden state when editing. (This also lays the ground for
serialization of the entire mixer state in the future,
should we want to do that.)
Steinar H. Gunderson [Tue, 20 Sep 2016 21:50:34 +0000 (23:50 +0200)]
Actually set the fader positions when making the views for each audio bus.
Steinar H. Gunderson [Sat, 17 Sep 2016 21:41:17 +0000 (23:41 +0200)]
Make it possible to load an audio input mapping on start, through a command-line flag.
Steinar H. Gunderson [Fri, 16 Sep 2016 18:20:45 +0000 (20:20 +0200)]
Make it possible to load/save input mappings.
Settings these up can be a bit of a hassle if you have a lot of them,
so we allow them to be saved to disk and then loaded back (complete
with machinery for fuzzy-matching devices if the state has changed,
e.g. cards moved around).
This introduces a dependency on protocol buffers, because it's a
convenient way to store simple data to disk (including forward
compatibility). We choose to use the text format for the user's
convenience; we don't need the speed or compactness of the binary format.
Steinar H. Gunderson [Sat, 17 Sep 2016 20:26:47 +0000 (22:26 +0200)]
Move InputMapping and friends into its own header file.
Steinar H. Gunderson [Thu, 15 Sep 2016 17:50:36 +0000 (19:50 +0200)]
Rename “name” to “display name”.
This makes for less confusion when AudioDevice's “name” doesn't
match what's in ALSA's “name” (it is composed of name+info).
Steinar H. Gunderson [Sun, 11 Sep 2016 23:09:04 +0000 (01:09 +0200)]
Make sure AudioDevice::name is set for ALSA cards, not just video capture cards.
Steinar H. Gunderson [Sun, 11 Sep 2016 16:51:05 +0000 (18:51 +0200)]
Update to a bmusb version where fake cards output 8-channel audio.
Steinar H. Gunderson [Sun, 11 Sep 2016 15:34:08 +0000 (17:34 +0200)]
Update the UI with state changes and new ALSA cards as they come in.
Steinar H. Gunderson [Sun, 11 Sep 2016 15:26:13 +0000 (17:26 +0200)]
Unplug ALSA cards as soon as we get the inotify message.
If not, devices not in use would not be properly removed before
someone tried to remove them.
Steinar H. Gunderson [Sat, 10 Sep 2016 14:42:46 +0000 (16:42 +0200)]
If a dead device comes back, put it into the right slot.
This fulfills one of the basic goals of hotplug, namely that a sound
card can disappear (ie., lost cable), be replugged and then safely
come back without any manual intervention.
Steinar H. Gunderson [Sat, 10 Sep 2016 12:56:47 +0000 (14:56 +0200)]
When we stop capturing from an ALSA card, close the PCM handle a bit sooner.
Steinar H. Gunderson [Sat, 10 Sep 2016 12:06:54 +0000 (14:06 +0200)]
When an ALSA input goes away, replace it by silence.
Silences the warning spew from the resampler that no data is coming.
Steinar H. Gunderson [Sat, 10 Sep 2016 09:51:50 +0000 (11:51 +0200)]
Make ALSA initialization errors fail-soft.
Instead of exit(1) whenever something in ALSA initialization fails,
we now return false and try again after a second. (This means we could
potentially be doing init for a long time, so it is moved to the
capture thread.)
Steinar H. Gunderson [Thu, 8 Sep 2016 21:43:50 +0000 (23:43 +0200)]
Support limited ALSA hotplug.
We don't support removing cards yet (we still just exit on error),
and thus also not replacing dead cards with re-plugged ones.
We also don't communicate changed state to the UI yet, and retry
could still be improved.
Steinar H. Gunderson [Thu, 8 Sep 2016 18:09:04 +0000 (20:09 +0200)]
Refactor ALSA code in preparation for hotplug.
In particular, all the inputs are not owned by a class ALSAPool,
which also takes over enumeration. There's a new state machine
(only in preparation, not actually used yet), and some policy
has been defined for what to do when cards go in and out.
Steinar H. Gunderson [Wed, 7 Sep 2016 20:55:21 +0000 (22:55 +0200)]
Add a global variable for the audio mixer; it was getting too tedious.
Steinar H. Gunderson [Sun, 4 Sep 2016 23:09:17 +0000 (01:09 +0200)]
Update the zita-reampler SSE2 patch.
This version supports not only two channels, but mono, stereo or
multiples of four. (In time, we might reorganize so that
e.g. 11 channels are split into 8-, 2- and 1-channel resamplers.)
Steinar H. Gunderson [Sun, 4 Sep 2016 09:17:23 +0000 (11:17 +0200)]
Set a default locut cutoff, for the benchmark.
Steinar H. Gunderson [Mon, 29 Aug 2016 18:26:16 +0000 (20:26 +0200)]
Fix an issue where cutoff would not be properly marked when setting new mappings.
Steinar H. Gunderson [Mon, 29 Aug 2016 18:23:27 +0000 (20:23 +0200)]
Hook up the EQ controls and labels.
Steinar H. Gunderson [Sun, 28 Aug 2016 22:55:31 +0000 (00:55 +0200)]
Implement the EQ in AudioMixer. (No UI yet.)
Steinar H. Gunderson [Sun, 28 Aug 2016 22:29:25 +0000 (00:29 +0200)]
Add support for EQ filters to the Filter class.
Steinar H. Gunderson [Sun, 28 Aug 2016 21:47:52 +0000 (23:47 +0200)]
Make it possible to click the bus peak label to reset it.
Steinar H. Gunderson [Sun, 28 Aug 2016 21:18:58 +0000 (23:18 +0200)]
When the fader is moved, interpolate its volume over the next frame.
Faders are among the things one should definitely be allowed to move
around during an actual mix without hearing clicking; the gain and threshold
is maybe somewhat less so, so I won't give it the same treatment, at least not
right now.
Steinar H. Gunderson [Sun, 28 Aug 2016 20:32:01 +0000 (22:32 +0200)]
Show historic peak of each bus under the peak meter.
Steinar H. Gunderson [Sun, 28 Aug 2016 15:49:23 +0000 (17:49 +0200)]
Replace the R128 meters for each channel with a digital peak meter.
R128 is a superior way of measuring loudness, but for each bus, we care more
about getting the recording levels right (ie., that we don't peak) than loudness.
Since we do our mixing in float, unlike a typical digital mixer, it's not as
critical (at least assuming that the limiter is on and will save us later in
the mastering chain), but it's probably better to be consistent with convention
here.
Thus, use a simple digital meter for each bus, even though we of course still
use R128 for the mastering section.
Steinar H. Gunderson [Sun, 28 Aug 2016 15:20:39 +0000 (17:20 +0200)]
Split VUMeter into a left and right side, so one can (optionally) have stereo meters.
Steinar H. Gunderson [Fri, 26 Aug 2016 19:20:39 +0000 (21:20 +0200)]
Remove an (easily-predictable) branch from the StereoCompressor inner loop.
Steinar H. Gunderson [Fri, 26 Aug 2016 18:46:51 +0000 (20:46 +0200)]
Add a correctness test to the audio benchmark.
Steinar H. Gunderson [Fri, 26 Aug 2016 18:23:35 +0000 (20:23 +0200)]
Add some low-volume 24-bit data to the benchmark, for variety.
Steinar H. Gunderson [Thu, 25 Aug 2016 07:37:36 +0000 (09:37 +0200)]
Fix a small theoretical inefficiency; does not actually matter in practice, just cleaner.
Steinar H. Gunderson [Thu, 25 Aug 2016 07:33:57 +0000 (09:33 +0200)]
Save another ~1% on the audio benchmark, by dealing with the std::deque more efficiently. (Still some potential here.)
Steinar H. Gunderson [Wed, 24 Aug 2016 23:11:10 +0000 (01:11 +0200)]
Tiny audio optimization (~1%) by making an SSE version of find_peak(); mostly to see whether the benchmark can pick up stuff at all.
Steinar H. Gunderson [Wed, 24 Aug 2016 22:43:08 +0000 (00:43 +0200)]
Add a benchmark for a simple audio chain; easier than profiling all of Nageru.
Steinar H. Gunderson [Tue, 23 Aug 2016 22:54:45 +0000 (00:54 +0200)]
Make the compression meters work.
It's possible that the range here needs to be nonlinear,
but we'll deal with that later; for now it's only 0..10 dB
on a linear scale.
This required VU meters that grow downwards, so add that.
Steinar H. Gunderson [Tue, 23 Aug 2016 20:20:59 +0000 (22:20 +0200)]
Make reference level of VUMeter and LRAMeter adjustable.
Steinar H. Gunderson [Tue, 23 Aug 2016 20:18:46 +0000 (22:18 +0200)]
Make min/max level of VUMeter and LRAMeter adjustable.
Steinar H. Gunderson [Tue, 23 Aug 2016 20:11:46 +0000 (22:11 +0200)]
Remove obsolete comment.
Steinar H. Gunderson [Tue, 23 Aug 2016 19:16:57 +0000 (21:16 +0200)]
Small refactoring in the audio level callback API.
Steinar H. Gunderson [Tue, 23 Aug 2016 16:31:35 +0000 (18:31 +0200)]
Make it clearer that the cutoff knob affects the channel lo-cut filter.
Steinar H. Gunderson [Mon, 22 Aug 2016 22:00:18 +0000 (00:00 +0200)]
Move the gain staging and compressors into each bus, and hook up the corresponding controls.
Steinar H. Gunderson [Mon, 22 Aug 2016 19:36:55 +0000 (21:36 +0200)]
Move the lo-cut into each bus.
Steinar H. Gunderson [Mon, 22 Aug 2016 18:49:26 +0000 (20:49 +0200)]
Make the faders in the expanded audio view work.
Steinar H. Gunderson [Mon, 22 Aug 2016 16:28:32 +0000 (18:28 +0200)]
Create buses in the expanded view. (Still inert.)
Steinar H. Gunderson [Mon, 22 Aug 2016 16:05:20 +0000 (18:05 +0200)]
Hook up the controls on the second (full mode) page.
Steinar H. Gunderson [Sun, 21 Aug 2016 23:03:47 +0000 (01:03 +0200)]
Add some pagination to the main window.
This allows us to switch between compact and full audio layout.
The full audio layout is not really populated yet; there are only
some widgets (a subset of the compact ones), and they are not
hooked up.
Steinar H. Gunderson [Mon, 15 Aug 2016 20:13:43 +0000 (22:13 +0200)]
Add a UI file for the expanded audio interface.
Steinar H. Gunderson [Thu, 18 Aug 2016 23:12:08 +0000 (01:12 +0200)]
Add support for ALSA devices that have no channel maps.
In particular, my Focusrite Scarlett 18i6 presents no such map,
and thus, we'll need to get number of channels some other way.
(For good measure, it refuses to capture unless you ask for at least
14 of the 18 channels.)
Steinar H. Gunderson [Thu, 18 Aug 2016 21:35:42 +0000 (23:35 +0200)]
Make a non-linear fader for dB use. Not perfect yet, but will do.
Steinar H. Gunderson [Thu, 18 Aug 2016 17:03:08 +0000 (19:03 +0200)]
Ask for the right number of channels when creating an ALSA device.
Steinar H. Gunderson [Sat, 13 Aug 2016 20:47:26 +0000 (22:47 +0200)]
Hook up the per-bus VU meters.
Steinar H. Gunderson [Sat, 13 Aug 2016 17:22:07 +0000 (19:22 +0200)]
Move the R128 and correlation measurements into AudioMixer.
Steinar H. Gunderson [Sat, 13 Aug 2016 14:29:18 +0000 (16:29 +0200)]
Fix a deadlock issue when shutting down ALSA cards.
Steinar H. Gunderson [Sat, 13 Aug 2016 12:29:01 +0000 (14:29 +0200)]
Add support for ALSA inputs to the mixer.
Steinar H. Gunderson [Sat, 13 Aug 2016 11:45:24 +0000 (13:45 +0200)]
Rename reset_device to reset_resampler.
Steinar H. Gunderson [Sat, 13 Aug 2016 10:19:49 +0000 (12:19 +0200)]
Make the samples_card array capable of storing samples from multiple kinds of cards.
Steinar H. Gunderson [Thu, 11 Aug 2016 17:48:12 +0000 (19:48 +0200)]
Consistently use “video card” instead of “card”.
Steinar H. Gunderson [Wed, 10 Aug 2016 21:00:49 +0000 (23:00 +0200)]
Communicate number of channels to the input mapping dialog.
Steinar H. Gunderson [Wed, 10 Aug 2016 20:58:27 +0000 (22:58 +0200)]
Add a comment about hotswapping issues.
Steinar H. Gunderson [Mon, 8 Aug 2016 21:52:07 +0000 (23:52 +0200)]
Prepare InputMappingDialog for arbitrary kinds of input source types, by storing the DeviceSpec in the QComboBox items.
Steinar H. Gunderson [Mon, 8 Aug 2016 16:25:01 +0000 (18:25 +0200)]
Add some ALSA device enumeration code.
Steinar H. Gunderson [Sun, 7 Aug 2016 19:26:47 +0000 (21:26 +0200)]
Add a class for ALSA audio input. (No enumeration yet.)
Steinar H. Gunderson [Sun, 7 Aug 2016 18:28:04 +0000 (20:28 +0200)]
Small cleanup in AudioMixer::set_input_mapping().
Steinar H. Gunderson [Sun, 7 Aug 2016 18:25:58 +0000 (20:25 +0200)]
Prepare for inputs of another frequency than the capture frequency.
Steinar H. Gunderson [Sun, 7 Aug 2016 18:08:42 +0000 (20:08 +0200)]
Add support for 16-bit audio.
Steinar H. Gunderson [Thu, 4 Aug 2016 22:15:34 +0000 (00:15 +0200)]
Make AudioMixer ready for indexing on multiple types of devices.
Steinar H. Gunderson [Tue, 2 Aug 2016 22:10:27 +0000 (00:10 +0200)]
Make remove/up/down buttons work.
Steinar H. Gunderson [Mon, 1 Aug 2016 16:36:52 +0000 (18:36 +0200)]
Refactor fill_audio_bus() into its own function.
Steinar H. Gunderson [Mon, 1 Aug 2016 15:50:27 +0000 (17:50 +0200)]
Pick out the right channels when resampling.
Steinar H. Gunderson [Sun, 31 Jul 2016 23:03:33 +0000 (01:03 +0200)]
Rename InputMapping::Input to InputMapping::Bus; it's less ambiguous.
Steinar H. Gunderson [Sun, 31 Jul 2016 22:59:22 +0000 (00:59 +0200)]
Make AudioMixer respect the input mapping.
There are tons of TODOs left, and it's totally unoptimized, but it's
nearing something that could in theory actually be used.
Steinar H. Gunderson [Sun, 31 Jul 2016 12:18:53 +0000 (14:18 +0200)]
Populate the audio miniview from the mapping.
Steinar H. Gunderson [Sun, 31 Jul 2016 11:25:07 +0000 (13:25 +0200)]
Make most of the input mapping dialog actually work.
You can now add new mappings and edit them, but not delete existing ones
or move them around. OK/Cancel works and actually sets the mapping
in the AudioMixer, but the AudioMixer doesn't care (and neither does the UI).
Steinar H. Gunderson [Sat, 30 Jul 2016 23:37:54 +0000 (01:37 +0200)]
Tweak the look of the input mapping dialog box a bit.
Steinar H. Gunderson [Sat, 30 Jul 2016 23:26:59 +0000 (01:26 +0200)]
Store an input mapping, and show it in the UI.
Edits you do in the UI are not actually editable yet, and the mixer doesn't
care about the mapping either.
Steinar H. Gunderson [Sat, 30 Jul 2016 10:23:44 +0000 (12:23 +0200)]
Add a beginning UI for mapping inputs. No logic connected yet.
Steinar H. Gunderson [Fri, 29 Jul 2016 18:35:19 +0000 (20:35 +0200)]
Make the final makeup gain adjustment a little faster; 100 seconds was probably a tad too conservative, and painfully slow.
Steinar H. Gunderson [Fri, 29 Jul 2016 18:34:22 +0000 (20:34 +0200)]
Fix a bug where the automatic makeup gain adjustment would never quite get to the right level.
Steinar H. Gunderson [Fri, 29 Jul 2016 18:05:44 +0000 (20:05 +0200)]
Actually activate the faders.
Steinar H. Gunderson [Fri, 29 Jul 2016 17:25:35 +0000 (19:25 +0200)]
Make some common decibel macros.
Steinar H. Gunderson [Fri, 29 Jul 2016 15:02:01 +0000 (17:02 +0200)]
Some minor IWYU work in mixer.h.
Steinar H. Gunderson [Fri, 29 Jul 2016 14:45:11 +0000 (16:45 +0200)]
Move most of the audio processing logic from Mixer into a new class, AudioMixer.
Steinar H. Gunderson [Fri, 29 Jul 2016 13:20:51 +0000 (15:20 +0200)]
Mix all channels instead of just picking one (very rough, no volume control or anything).
Steinar H. Gunderson [Fri, 29 Jul 2016 13:20:24 +0000 (15:20 +0200)]
Start adding some faders for the miniview (they don't do much yet).
Steinar H. Gunderson [Wed, 19 Oct 2016 22:55:13 +0000 (00:55 +0200)]
libbmusb-dev has been in testing for a while.
Steinar H. Gunderson [Wed, 28 Sep 2016 21:56:23 +0000 (23:56 +0200)]
Make the UI show free disk space, and a rough estimation of for how much longer we can record.
Steinar H. Gunderson [Mon, 26 Sep 2016 23:04:44 +0000 (01:04 +0200)]
Don't call avio_closep() unless we actually have an output file (e.g. in the stream mux).
Steinar H. Gunderson [Mon, 26 Sep 2016 22:46:41 +0000 (00:46 +0200)]
Remove an obsolete comment.
Steinar H. Gunderson [Fri, 23 Sep 2016 19:36:12 +0000 (21:36 +0200)]
Fix a file descriptor leak.
Steinar H. Gunderson [Fri, 23 Sep 2016 17:36:51 +0000 (19:36 +0200)]
Do not use the timing of dropped frames as part of the video master clock.
Hopefully improves resampling somewhat when we are dropping frames;
it is tricky to deal with such an uneven master clock, though.
Steinar H. Gunderson [Sat, 17 Sep 2016 21:35:13 +0000 (23:35 +0200)]
Add the missing -I short option.
Steinar H. Gunderson [Sat, 10 Sep 2016 11:01:04 +0000 (13:01 +0200)]
Use std::chrono for (almost) all time keeping.
It is annoyingly verbose at times, but overall it's much less
fiddly and low-level than timespec and friends, especially when
doing arithmetic.
Steinar H. Gunderson [Sun, 28 Aug 2016 19:18:41 +0000 (21:18 +0200)]
More tweaks to the dB formatting.
Steinar H. Gunderson [Sun, 28 Aug 2016 15:55:33 +0000 (17:55 +0200)]
Fix another bug in ResamplingQueue::get_output_samples() with non-stereo signals.