|
|
Subscribe / Log in / New account

The world beyond OpenH264

The world beyond OpenH264

Posted Mar 26, 2025 14:19 UTC (Wed) by mcatanzaro (subscriber, #93033)
In reply to: The world beyond OpenH264 by mat2
Parent article: Bhattcharya: Closing the chapter on OpenH264

> The OpenH264 codec supports only a Constrained Baseline Profile of H.264, not the Main or High profiles of it

This is wrong.


to post comments

The world beyond OpenH264

Posted Mar 26, 2025 14:46 UTC (Wed) by farnz (subscriber, #17727) [Link] (6 responses)

In what way is it wrong? The official Cisco OpenH264 GitHub says that it only supports "Constrained Baseline Profile" up to "Level 5.2", and not Baseline, Main, Extended or High profiles.

The world beyond OpenH264

Posted Mar 26, 2025 15:15 UTC (Wed) by mcatanzaro (subscriber, #93033) [Link] (4 responses)

The official Cisco OpenH264 GitHub README is wrong. I guess nobody updated the README when support for higher profiles was added.

If I uninstall OpenH264, I can't play videos in my web browser anymore except on websites that do not require H.264, like YouTube. With it installed, I can play video on almost every website. I understand web videos generally use high profile? (I'm not actually familiar with this terminology, but it was a big deal when OpenH264 started to support web videos several years ago; originally, it only supported WebRTC and was otherwise not useful.)

The world beyond OpenH264

Posted Mar 26, 2025 15:46 UTC (Wed) by farnz (subscriber, #17727) [Link] (1 responses)

This gets complicated, and you'd need to actually test with a conformance suite to find out what it actually supports, or do a detailed dive into the code.

As best I can tell from a cursory code inspection, the README is correct in as far as it goes; it only fully supports CBP, but doesn't bail out on the wrong profile marker in the bitstream (allowing you to at least attempt to decode potentially unsupported profiles), and supports a subset of Main and High Profiles. Note that just because you flagged your video as Main profile doesn't mean it's actually using all the features of Main Profile; it's permissible for a video flagged as High profile to use only CBP features, for example.

What I'm seeing is signs that someone's added support for B slices, CABAC encoding, and some (but not all) of the options around quantization matrixes present in High profile. As a result, it doesn't support Main or High profiles, but it does support the output of some encoders.

For background, the profiles tell you what bitstream components the decoder can handle (or the encoder can use); the levels tell you how many macroblocks/second, macroblocks/frame and bits/second your decoder needs to handle to keep up, and how big the decoded picture buffer is. If you're claiming support for a profile in a decoder, you're claiming that you can decode all of the bitstream elements that that profile permits, but (for example), I'm not spotting code to handle separate quantization parameters for Cb and Cr planes, which is required for High profile, but not used by common encoders.

The world beyond OpenH264

Posted Mar 27, 2025 0:26 UTC (Thu) by numgmt (guest, #167446) [Link]

Thank you for this explanation! I now finally know why the support for decoding High Profile video is so spotty.

The world beyond OpenH264

Posted Mar 27, 2025 0:21 UTC (Thu) by numgmt (guest, #167446) [Link] (1 responses)

The web uses High Profile video. But OpenH264 doesn't fully support all High profile video. For instance, it doesn't support High 10. There are a number of High profile videos I have available locally that I can't play.

So it has some support for High Profile, but it's incomplete. Enough for web.

Profile names in H.264

Posted Mar 27, 2025 9:34 UTC (Thu) by farnz (subscriber, #17727) [Link]

Confusingly, High Profile and High 10 Profile are separate profiles. You can fully support High Profile, and have no support for High 10 Profile; the difference between High Profile and High 10 Profile is simply that High Profile only supports 8 bpc, while High 10 Profile supports 8, 9 and 10 bpc.

And remember that the decoder's behaviour is fully specified by the standard; a High 10 Profile bitstream can assume that if a 9 bpc picture is in the set of reference pictures, it's in there at 9 bpc, and thus pictures that reference the 9 bpc picture will be doing their differences against the 9 bpc reference, not that reference truncated to 8 bpc. And since H.264 allows for reference pictures to themselves be reconstructed from previous reference pictures, the error can accumulate quite quickly, going from "off by the LSB" to "reduced to 4 bpc of data plus 4 bpc of noise" if you use an 8 bpc truncated reference.

The world beyond OpenH264

Posted Mar 31, 2025 13:50 UTC (Mon) by fabiop (guest, #24661) [Link]

Other than other replies here, note there is this PR for OpenH264 project: https://github.com/cisco/openh264/pull/3656
It never got any response in a couple years.


Copyright © 2025, Eklektix, Inc.
Comments and public postings are copyrighted by their creators.
Linux is a registered trademark of Linus Torvalds