Hi Josh,
I got a new computer yesterday, a 64bit intel core 2 duo. I am running
the amd64 port of Ubuntu 6.10 (edgy). I compiled flac-1.1.3 beta and had
trouble encoding:
dave@jimmy:/tmp$ ./bin/flac -o /tmp/foo.flac foo.wav
-----------------
flac 1.1.3-beta2, Copyright (C) 2000,2001,2002,2003,2004,2005,2006 Josh Coalson
flac comes with ABSOLUTELY NO WARRANTY. This is free software, and you are
welcome to redistribute it under certain conditions. Type `flac' for
details.
options: -P 8192 -b 4608 -m -l 8 -q 0 -r 3,3
foo.wav: 99% complete, ratio=0.722
foo.wav: ERROR during encoding
state = FLAC__STREAM_ENCODER_CLIENT_ERROR
An error occurred while writing; the most common cause is that the disk is full.
-----------------
Strace reveals this:
write(4, "\377\370Y\210\340\266\253\223\22\0\2\f?\377\375\235\235"...,
1652) = 1652
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
4096) = 4096
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
4096) = 4096
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
4096) = 4096
read(3, "\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0\0"...,
4096) = 4096
write(4, "\377\370Y\30\340\266\254\320\22\0\1\f\31\323\356R\315/"...,
1276) = 1276
write(4, "", 47747151429632) = 199596
write(4, "", 47747151230036) = -1 EFAULT (Bad address)
write(2, "\nfoo.wav: ERROR during encoding\n", 32
foo.wav: ERROR during encoding
The final write is getting a bogus size.
I think I have tracked it down to "FLAC__bitbuffer_get_buffer" in
bitbuffer.c taking an unsigned * for bytes, but "write_bitbuffer_" in
stream_encoder.c is passing a size_t *. On my system it looks like unsigned
is 4 bytes, where size_t is 8 bytes.
Changing FLAC__bitbuffer_get_buffer to take a size_t * seems to fix it.
But as I said, I only have 1 days amd64 experience, so I don't really
know what I am doing! I also havent checked if anyone else is calling
get_buffer with an unsigned * so maby this will break elseware now.
Has anyone else tested on amd64?
Let me know if you want me to do any more tests.
Thanks,
Dave