[Theora-dev] Patch that fixes distortions during static scenes

Ivan Popov pin at medic.chalmers.se
Thu Mar 3 05:15:32 PST 2005

Hi Aaron,

> Here is a patch that fixes distortions that appear during scenes with no 
> motion. Tbe problem was that UpdateFrame() was not being called when a 
> MotionScore of 0 was computed. Since UpdateFrame() was not called the buffer
> returned by theora_encode_packetout() would be the same buffer that was output
> for the last frame that had a non-zero MotionScore. This is obviously incorrect
> behavior. I've just moved the UpdateFrame() out of the (MotionScore > 0) 
> conditional block. 

this fix definitely removes the "accumulating artifacts" I observed.

On the other side, other keyframe-related artifacts are in place,
and I see a problem which is quite opposite to one you descibed.
It looks like a keyframe is being encoded with a "too bad" quality,
so that the following frames gradually improve it.
This looks like a perfect behaviour when a keyframe is inserted as the scene
changes, but as well very bad during static scenes (causing a burst
of artifacts).

It looks even more strange as it happens when we clearly have a huge
excess of unused bits - I ask for 2000 kbit/s and get about 250 kbit/s

On the third side, I can reduce the probablility of such "error bursts"
by tweaking keyframe frequency - yet it feels like a workaround for
an unexpected encoder behaviour. I guess the bit-allocation machinery
has some problems yet.

Again, thanks for fix!

More information about the Theora-dev mailing list