Practically every programming language has a “hello world” implementation. This is typically a minimal sample program that prints the greeting “Hello, world!” to the terminal. We thought it might be entertaining to invent a “hello world” relevant to HEVC.
Rather than trying to make a minimal bitstream that decodes to a textual video message, we approached this from the opposite angle. What would happen if you take a text file containing the ASCII string “Hello, world” and input it to a HEVC decoder? Our “bitstream” was created in a popular text editor, not an encoding process we generally recommend.
Obviously HelloWorld.hevc
is nothing like a conforming HEVC bitstream file and cannot be decoded to video. But why doesn’t it work? How far does the decoder get before it gives up?
In the Pro edition of our HEVC bitstream analyzer, we see the following:
As expected, there are no decoded pictures shown in the right-hand output pane. The red syntax tree expanders show errors. The user has selected the errant leading_zero_8bits
element, and the details pane shows the corresponding error. According to the standard, the decoder should first look for a 0x00 0x00 0x01
byte pattern and if that is not found, it should expect a leading_zero_8bits
. A bitstream with a f()
element of incorrect value is not a conforming bitstream and Parabola’s parser aborts.
Parabola’s command-line bitstream verification tool shares the same bitstream validation framework as Parabola Explorer. So both tools will detect and report the same bitstream issues. The Parabola Verifier UI is a textual one.
The same error is reported, concisely because we have not requested verbose output. As if we didn’t know, the tool informs us that this is not a conforming HEVC bitstream and that decoders may not be able to process it.
There is an important distinction between the set of conforming bitstreams and the set of bitstreams that will be decoded correctly by any conforming decoder. We will expand on this in a future blog entry.
Let’s try decoding @HelloWorld.hevc@ with the reference decoder.
HM has a few bitstream syntax checks implemented as assert()
constructs. It detects the obvious problem with HelloWorld.hevc
and stops. Although HM detected our blatantly broken stream, decoding with HM alone is not enough to know for sure whether or not a bitstream is conforming. HM is a reference decoder and current versions only run a handful of simple tests on the bistream.
Parabola’s goal is to check everything in the bitstream that can be tested. More than 200 distinct checks are embodied in our software framework. To express this another way, there are more than 200 different error messages that the current version of Parabola Verifier could report. We test all aspects of the bitstream from correct element values to complex interrelationships between high-level stream constructs.
Parabola Verifier is comprehensive and fast. It parses every slice, every CTU, every CABAC bin looking for all requirement violations. Already we can process 4k (2160p24) sequences two times faster than real time on a single CPU core and we have more optimisations in the works.
Parabola’s tools consistently detect HEVC bitstream issues that are invisible to other tools. Our products helps those creating HEVC encoders or running encoding workflows ensure that their streams are 100% HEVC compliant and avoid embarrassing and expensive future interoperability problems.
Copyright © 2024 Parabola Research Limited | Registered in England and Wales 7668051 | VAT number GB 117 8538 94