[XviD-devel] Finally, GMC rc1

Christoph Lampert xvid-devel@xvid.org
Sat, 11 Jan 2003 17:34:55 +0100 (CET)


Hi,

I just commited GMC to dev-api-3 branch. This GMC is not in release stage,
it's for _testing_ by developers, not for testing by users. In particular,
I just noticed that the results are slightly different (worse) with the
committed version than they were with my local version, so there is some
hidden bug which I'm searching at the moment. 

If I find any binaries in the internet where this GMC is enabled, I will
never ever commit any code to CVS again (at least none that is working but
under construction). And I mean it! Honestly!

It is easy to optimize the current code for speed. I did not unroll a
single loop, I did not change multiplication to summation, I did nothing.
This is the next thing I will be doing... I also havent tested decoding
with other decoders (ffmpeg). So please wait ONE more WEEK until you
re-enable GMC in binary builds.

BUGS: GMC + QPel might not work, yet. I've checked, but not
enought. QPel without GMC should not be changed. If you have image
problems with anything else than GMC+Qpel, please report
them! 

TODO: Speed and quality. I'll post another mail about how and what to
optimize.




About the options: 

Currently GMC is enabled by the general option XVID_GMC. I don't know if
this is a good idea, but it's the simplest.  
Soon, there will be another option: XVID_GMC_TRANSLATIONAL (which isn't
supported yet!).

XVID_GMC and XVID_GMC_TRANSLATIONS can be combined into 4 combinations 
with the meaning: 

(!GMC && !GMC_TRANSLATIONAL)  no GMC, as before, only P-VOPs

(!GMC && GMC_TRANSLATIONAL)   1 warppoint (translational-only) GMC is 
                              performed,  
                              P-VOP if warppoint==(0,0), otherwise S-VOP

(GMC && GMC_TRANSLATIONAL)    2 warppoints GMC, P-VOPs if wp1==(0,0) and
                              wp2==(0,0), otherwise S-VOP. 

(GMC && !GMC_TRANSLATIONAL)   2 warrpoints GMC, P-VOPs if wp2=(0,0), 
                              otherwise S-VOPs

Best results might be the last combination, because only hardly gain
anything from translational GMC (motion vectors do fine for translations),
but you need 1 extra bit per MB in S-VOPs. This is also the current
default. 

for 1 warppoint we might want to add or always use "DivX5
compatability", which means 2 warppoints are written to the bitstream, but
the second is always (0,0). 

gruel