omion
5th October 2006, 00:51
I've been having a bit of a problem running x264 from piped data in Windows.
I think the problem is that something along the way sees the 0x1A character as an end-of-file character and halts encoding. As an example, type this into a console:
perl -e "for $a (1 .. (388800 * 8)) {print chr(128)}; for $a (1 .. 388800) {print chr(26)}; for $a (1 .. 388800 * 8) {print chr(128)}" | x264.exe --verbose -o outfile.mkv - 720x360
This will make Perl output 8 frames of character 128, 1 frame of character 26 (0x1A), and 8 more frames of character 128. However, it never gets past the first 8 frames. You can try with other characters, but I noticed that it just stops encoding if a character 26 is found.
So here's the really weird part:
I tried it on a bunch of different versions of x264, and the only ones I found actually work are some 64-bit builds I made a long time ago (revs 389 - 477).
I don't know if it's a 32 vs 64-bit issue, but I noticed that I had built with MSVC, whereas it seems that everybody else builds with GCC.
Any ideas?
I think the problem is that something along the way sees the 0x1A character as an end-of-file character and halts encoding. As an example, type this into a console:
perl -e "for $a (1 .. (388800 * 8)) {print chr(128)}; for $a (1 .. 388800) {print chr(26)}; for $a (1 .. 388800 * 8) {print chr(128)}" | x264.exe --verbose -o outfile.mkv - 720x360
This will make Perl output 8 frames of character 128, 1 frame of character 26 (0x1A), and 8 more frames of character 128. However, it never gets past the first 8 frames. You can try with other characters, but I noticed that it just stops encoding if a character 26 is found.
So here's the really weird part:
I tried it on a bunch of different versions of x264, and the only ones I found actually work are some 64-bit builds I made a long time ago (revs 389 - 477).
I don't know if it's a 32 vs 64-bit issue, but I noticed that I had built with MSVC, whereas it seems that everybody else builds with GCC.
Any ideas?