Googles appar
Huvudmeny

Post a Comment On: cbloom rants

"05-20-10 - Some quick notes on H265"

6 Comments -

1 – 6 of 6
Blogger ryg said...

All documents from the Dresden meeting here: http://ftp3.itu.ch/av-arch/jctvc-site/2010_04_A_Dresden/

Re: "Loop filtering"
That's what's left of it after multiple stages of progressive shortening. It started as "in-loop deblocking filter" (i.e. inside the encoder feedback loop, as opposed to the purely postprocess deblocking filters that most MPEG4 ASP codecs have). That turned into "in-loop filter" and now just "loop filter".

Re: Entropy coding
Well, there's two aspects to this. The first is the actual entropy coders used, the second is the bitstream/model design.

As for the actual coders, the main bottleneck is hardware decoders, and the entropy coders bend over backwards to make reasonably small, power-efficient HW decoders possible. CABAC is a prime example. The ridiculously small range severely limits available probabilities, and using tables to encode what is effectively a shift-and-add update rule makes no sense in SW. But it makes sure that the HW can be implemented with a bunch of medium-sized state machines and a tiny ALU without wide adders or barrel shifters. The new Fraunhofer entropy coder proposal for H.265 (PIPE) goes even more in that direction. When they're talking of "low complexity" there, they're definitely thinking of HW. Their fixed-probability variable-to-variable codes make for trivial hardware bitstream decoders/encoders, but I seriously doubt that SW implementations are any simpler (or faster) than CABAC.

In terms of the model, they're definitely very basic. Again, HW complexity is definitely a factor there - you want to keep the overall state space small, so huge context models are out. In terms of residual coding, their simple run-length codes are a reasonable choice for the 4x4 blocks that H.264 was originally designed for. It's definitely subpar with the 8x8 blocks they added later (particularly since they had to shoehorn it into the 4x4 block models!), and particularly with the new larger partition sizes, that's definitely something they should try to fix.

May 22, 2010 at 10:45 PM

Blogger cbloom said...

"As for the actual coders, the main bottleneck is hardware decoders, and the entropy coders bend over backwards to make reasonably small, power-efficient HW decoders possible. CABAC is a prime example. The ridiculously small range severely limits available probabilities, and using tables to encode what is effectively a shift-and-add update rule makes no sense in SW"

Yeah the same is true of the Q-coder stuff in JPEG. Actually I think CABAC/etc is a lot like the ancient Howard/Vitter coders.

One of the H265 proposals is basically "add lots more contexts that make more sense".

It is rather tricky designing for Software and Hardware at the same time. The type of algorithms that they handle well are very different.

May 23, 2010 at 11:29 AM

Blogger Pinky's Brain said...

I think the comfort noise suggestion from NEC has potential, although it's a bit spartan compared to say MD Nadenau's WITCH.

May 23, 2010 at 11:52 AM

Anonymous Anonymous said...

So I assume I shouldn't read any of those Dresden documents since they're all going to describe patented techniques, right?

May 23, 2010 at 3:26 PM

Blogger cbloom said...

"I think the comfort noise suggestion from NEC has potential, although it's a bit spartan compared to say MD Nadenau's WITCH."

Yeah the NEC thing is good. I tried something very similar in the RAD NewDct Image coder. There are some evil subtleties there. In particular the amount of noise you should inject at any given pixel is related to modeling some characteristics of that part of the frame.

I can't read the WITCH paper because it's in the IEEE pay gulag.

"So I assume I shouldn't read any of those Dresden documents since they're all going to describe patented techniques, right?"

Yep.

May 23, 2010 at 4:33 PM

Blogger cbloom said...

BTW there's a very common idea floating around of restoring missing information in image decompression with something semi-random instead of just using zero. I mentioned it here :

http://cbloomrants.blogspot.com/2009/02/02-10-09-fixed-block-size-embedded-dct.html

but I'm sure there are earlier references. I know I've been talking about it conversation seen the 90's when I did wavelet stuff.

In quantization it's well known that you should restore the mean of the expected laplacian (or whatever) distribution within the bucket rather than restoring to the middle of the bucket.

But instead you could draw a random restoration from that distribution.

The problem with this is that you have to have a very good guess of that distribution. And the biggest problem is with all the zeros you decode - you don't have enough information from a zero about how wide the distribution probably is, just that its half width is probably smaller than one quantization bucket.

So you might try turning on random restoration only for non-zero values and just keep restoring zeros to zero, but that creates too big a sudden visual difference where the random restore gets turned on and off.

May 23, 2010 at 4:46 PM

You can use some HTML tags, such as <b>, <i>, <a>

This blog does not allow anonymous comments.

Comment moderation has been enabled. All comments must be approved by the blog author.

You will be asked to sign in after submitting your comment.