Re: Bug in reference idct.

"Timothy B. Terriberry" <[email protected]>
Newsgroups gmane.comp.multimedia.ogg.theora.devel
Message-ID <[email protected]>
Chris Brien wrote:
> Lines 106, 150 and 190 in idct.c do the same thing - the spec says the
> result of (T[4] - T[5]) should be negated before being multiplied. I
> believe this is a bug in the reference implementation.

I'm pretty sure the actual error is in the spec. The current reference
implementation decoder is based on theora-exp, so naturally they will
have the same bugs. However, you will find in
http://svn.xiph.org/trunk/theora-old the original VP3-based decoder,
which uses a completely different iDCT implementation. Using
(t[4]-t[5]), the two match exactly (tested on 65536 random inputs).
Using (t[5]-t[4]), they differ completely.

You will also notice that in the diagram in Figure 7.1, it is output
line 5 that is negated in this butterfly, not 4. Therefore I believe
this is an error in the spec.

I didn't check the output against an exact matrix-mul iDCT
implementation, but even if they did differ, we would need a compelling
reason to change the code now, for compatibility reasons.

> This is impossible as X is defined to be an array. I believe the intent
> was to assign R the value of (T[1] - T[6]). The reference decoder states:
>   _y[6<<3]=(ogg_int16_t)(t[1]-t[6]);
> 
> which would achieve the same result as assigning to R. I believe this is a
> bug in the spec.

Yes, it is.

Both errors have been fixed in svn r14555. Thanks for the report.
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.