blog
Weekly notes 15
in

Work

I’m continuing doing Gecko work, not much on the spec front. We had to patch release, doing 92.0.1, which is always a bit stressful, because some Linux users didn’t have audio, despite having no warning signs of anything going wrong in the CI and about 8 weeks of Nightly and Beta.

I’ve been helping in a couple of areas related to performance and measurements of memory copies, and making a test pass with the upcoming update of the webrtc.org codebase vendored in Firefox, which is an enormous library used to implement some bits of code necessary for various WebRTC specs. Expect much better call quality soon in any case.

The Web Codecs specification editors are giving two (remote) talks about this new specification, and one of the talk will feature a crude re-implementation of the <video> element: take an mp4 file, decode the video and audio, paint the video frames to a canvas (after having been decoded in hardware, the frames reside in graphics memory and are painted directly), and play the audio out using an AudioWorkletNode, pushing the sample via a wait-free ring buffer that I wrote a couple of years ago or so, keeping A/V in sync, with play/pause, volume changes, etc.

It was very easy to write something performant and the code doesn’t look bad at all, which tell us we did something right when designing the API.

It was also fun to develop a website in Chrome for once (because Firefox doesn’t have a Web Codecs implementation yet).

Personal

I’m really deep into the design of my third module, and the whole thing is starting to look clearer, in terms of form and function. I had somewhat already decided what this module would do, but I ended up changing a few things.

This project, unlike the previous modules, has a fairly big software components, clocking in at around 8k SLOC, and I want to be able to change the software after having built the hardware, so I’m making the hardware configurable as well, with trim-pots and components a bit more capable than they need to initially be. This is all very new to me, and it takes me ages to do the simplest thing.

The electronic schematic for the CV outputs, and the audio input and outputs

I’m soon going to have to dust off the various rust crates I’ve written specifically for this module, and I’ll see how easy it will be to port a few thousand lines of Rust code from version 1.31 (december 2018) to today’s ~1.56.

In parallel, I’ve been continuing my exploration of the modulary synthesizer world, making unremarkable tunes and sounds. I got to plug an 5-strings electric violin into it though, that was fun.