Robert Heller <
hel...@deepsoft.com> writes:
> Has *anyone* looked at the actual code? The specific limitation might
> even be (shudder) *documented* in the code.
It does not appear to be, I'm afraid.
> And there might even be an explaination as to why the limitation is
> there. The limitation might be stupid or might be a design flaw, but
> it is obviously there.
The error string reported is "File size limit exceeded" which
corresponds to SIGXFSZ. This signal is sent as a result of breaching
RLIMIT_FSIZE (i.e. ulimit -f).
There's a per-filesystem bound that can produce the same outcome but
that should not be an issue here.
The usual reason for a 2GB limit in 32-bit executables is failure to
compile with -D_FILE_OFFSET_BITS=64. I don't see anything in the
'motion' package that addresses this, so it's a strong possibility.
However the result of this should be the EFBIG error, for which the
expected output would be "File too large".
It's also possible to acquire a 2G limitation (even in 64-bit
executables) by poor choices of data type to reflect file offsets and
sizes. I've skimmed the relevant bits of 'motion' and don't see
anything fitting the bill.
Finally it could be a bug in the ffmpeg libraries used. Upstream knows
about _FILE_OFFSET_BITS and the API is obviously designed with 64-bit
offsets in mind so I don't think this is likely to be the cause.
Things the OP can do include:
- see what 'ulimit -a' says prior to running motion
- see what 'echo $?' says immediately after it fails
(i.e. see if the exit status reflects the signal)
- use strace to get a lower-level idea of what's going on
- if they aren't using a 64-bit platform, try recompiling motion with
-D_FILE_OFFSET_BITS=64 on the compiler command line
--
http://www.greenend.org.uk/rjk/