upvote
Not just C, dav1d and dav2d are actually mostly written in ASM! Then there's a bit of C as the glue or for functions that don't have optimized ASM yet.

Since dav2d is newer it has a higher fraction of C, but not enough for it to be the main language in the codebase :)

reply
for dav1d there is https://github.com/memorysafety/rav1d although it reuses the dav1d assembly and performance is typically slower by a single-digit percentage.
reply
What are you even implying?
reply
It’s not Rust, therefore it’s bad. Or something. This is getting rather tedious.
reply
I don’t think it’s unfounded. Media codecs have been one of the top sources for serious vulnerabilities. The code is incredibly complex, and takes complex input from untrusted sources.

Decoders are one of the best places for rust because they are both performance critical and security critical.

JPEG-XL couldn’t get off the ground until they recreated the decoder in Rust since none of the browsers wanted to touch it. And the apps that did utilise the C based libjxl ended up hit with vulnerabilities in it.

reply
> JPEG-XL couldn’t get off the ground until they recreated the decoder in Rust since none of the browsers wanted to touch it.

This is extremely misleading. Before they even started work on the Rust-based decoder, experimental JPEG XL support was added to Chrome and Firefox using the reference C++ implementation. Chrome later removed this support for very dubious claims of lack of interest and improvement over previous generation of codecs.

Around that time, Safari shipped JPEG XL support in production, still without the Rust implementation. So the assertion no one wanted to touch it is plain false.

It was actually Mozilla who, a long time after stating they were ambivalent on JPEG XL, brought up memory safety as a major consideration, for the very first time. That’s when the work on the Rust implementation started.

Since the format continued to be more and more supported and talked about, it’s hard to say what exactly were the factors which made Google reconsider their stance. The notion that somehow everyone was super worried about memory safety from the very beginning, and once the JXL team fixed that, everyone was happy to embrace it, seems to come up a lot lately, but it’s terribly distorted and simply not true.

reply
> I don’t think it’s unfounded.

Not necessarily. What’s annoying is these low-effort posts that bring nothing. In some contexts the discussion is worth having, but we can do better than "it’s bad because it’s not in my pet language" groupthink.

reply
you're falling for and/or playing along with astroturfing, that's what's tedious

can't people coping about rust come up with something fresh? always the same dance:

- fake annoyance about <thing> not being written in rust (bonus points if nonsensical, like here)

- if merely insinuated, fake question about what do they mean exactly

- fake surprise about omg why are people like this, the rust community is so bad, wah wah wah

yawn

oh yeah, let's not forget the other classic:

- the rust community is so dumb for thinking <shit they don't think made up for an easy beatdown>

- yeah ikr haha so stupid

every fucking rust thread is like this, and it's unreadable. by intention of course, obviously.

but it's ai / corporations / the government ruining the internet guys! totally...

reply
I think they mean that video decoders and encoders tend to have custom assembly code for speedup.
reply
And? It's common knowledge that the "reference" or "research" version of any codec is always quite high level to get development going and actually produce a working bitstream
reply
That codecs should be written in safer languages given that they usually process untrusted files. There have been a number of serious hacks from file parsing bugs due to them being written in unsafe languages.

There's literally a DSL designed for this purpose (Wuffs) so it would be interesting to hear why they didn't use it.

reply
There's an order of magnitude difference in speed requirements between file format parsing and image decoding, then another order of magnitude difference to video decoding. Even rav1d reuses dav1d's assembly (most of the actual runtime) to approach its speed.
reply
There was already attempt for dav1d to re-implement in rust by rav1d. It was hard to match performance: https://www.memorysafety.org/blog/rav1d-perf-bounty/
reply
Not just performance, the code was littered with unsafe blocks and the benchmarks (IIRC) were gamed heavily by the Rust people.

It was a dishonest effort that actually undermined the memory safety pitch.

reply
> It was hard to match performance

They say it is 5% slower. That's close enough. I know they say it isn't but in reality that speed difference is just going to be used as an excuse by the anti-Rust crowd.

reply
The people who write DSLs for video codec asm, or who claim that it's fine to use intrinsics or X higher-level language and it will still be fast enough to be usable, are simply wrong and have never been able to demonstrate otherwise.

Having said that I do think you could write a DSL to generate safe performant asm for a video codec. Just not a platform-independent one. It would still have to be asm.

reply
It sounds like your second statement contradicts your first. But also, WUFFS exists and it looks like the Google Chrome GIF decoder ships in it: https://github.com/google/wuffs
reply
It does not contradict it, and also, a gif is not a video.
reply
> a gif is not a video.

They're not that different; the image codec WebP is derived from VP8's intra-frame coding.

reply
[flagged]
reply