[FFmpeg-devel] [PATCH] Fix non-rounding up to next 16-bit aligned bug in IFF decoder

Ronald S. Bultje rsbultje
Wed Apr 28 15:24:12 CEST 2010


Hi,

On Wed, Apr 28, 2010 at 7:30 AM, Sebastian Vater
<cdgs.basty at googlemail.com> wrote:
> I have fixed the wrong IFF decoding issue in the IFF decoder.
>
> The reason is that the IFF docs say that each line in the BODY chunk has
> it's width rounded up to next 16-bit boundary, such that each new line
> begins on a word boundary (address divisible by 2).
[..]
> +    s->planesize = ((avctx->width + 15) >> 4) * 2;

This is not how people commonly round up to 2. Most people do
(x+1)&~1, so you could do:

((width+15)>>4)<<1

or (which is what most people do, so I'd prefer this):

((width+15)>>3)&~1

But both are fine. And add a comment what this does, e.g. "/* round up
width to word-boundary */" or so, for the unsuspecting reader.

The rest of the patch is unrelated to this change and should be
reviewed separately.

> -    const unsigned b = (buf_size * 8) + bps - 1;
> +    const uint8_t *end = dst + (buf_size * 8);

I'm not convinced that is correct. "It doesn't change the output of my
files" isn't a good enough reason. You're changing the math so it will
either get worse or better, and for the "better" part it'd need to fix
a bug or you'd need to show the documentation pointing out that this
is better.

Ronald



More information about the ffmpeg-devel mailing list