[x264-devel] patch for: alignment problem on sparc (maybe others 32bit archs, too)

Chris Fensch cf-x264 at fens.ch
Fri Mar 6 12:30:26 CET 2009


Hi,

> This is not an appropriate fix.  The bitstream pointer itself should
> always be aligned, and if it is not, the bitstream writer should be
> modified to ensure that it is.

Well, I do agree to some extend. The fix does not affect architectures that can 
cope with unaligned memory access (such as x86), but allows to x264 to run on 
machines which are not that flexible. As such it fixes the symtoms but not the 
cause: The problem is caused by the current implementation of:

/* Write the rest of cur_bits to the bitstream; results in a bitstream no 
longer 32/64-bit aligned. */
static inline void bs_flush( bs_t *s )

I, unfortunately, do not know enough about the underlying semantics of the 
bitstream writer and feel not confident of submitting a patch that changes the 
semantics. I see one possible solution (but that changes the semantics):

Instead of writing cur_bits to the bitstream, just change i_left in such a way 
that it is byte aligned and shift the bits in cur_bits by the same amount. The 
resulting bitstream should be the same, if cur_bits is written to the bitstream 
at later point. Of course, if no further bits are written to the bitstream, 
then that write might never happen...

Maybe the person who wrote the current implementation of bs_flush can fix this 
method in a way that the semantics is preserved.

Cheers
   Chris


More information about the x264-devel mailing list