Monday, 01 July 2013

Hello World of HEVC

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.

Hello, world

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?

Parabola Explorer Pro

In the Pro edition of our HEVC bitstream analyzer, we see the following:

Hello, world

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 Verifier

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.

Verifier

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.

HM 11.0 Decoder

Let’s try decoding HelloWorld.hevc with the reference decoder.

HM

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.

End Notes

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.

Commenting is not enabled for this post.

Copyright © 2016 Parabola Research Limited | Registered in England and Wales 7668051 | VAT number GB 117 8538 94

This site uses Google Analytics cookies. You may disable or remove them via your browser’s settings.