Currently this used the _MSC_VER && !WIN64 to enable the inline
assembly, which still tried to use this code on windows on arm.
Using _MSC_VER && _M_IX86 is enough since _M_IX86 is defined only
when targeting 32 bit x86, not for x64.
astyle was only run on .cpp files this time - already in
ff6b66917 where the style cleanup was done initially, not all
.h files seem to have gotten the same styling (rerunning astyle
on .h files at that commit produces a huge diff).
These pragmas specified that structs should be packed in a way
different from the normal way defined by the current platform ABI.
Since these pragmas are in headers part of the public API, and the
pragmas are nonstandard, this is a portability and compatibility
hazard (all code calling the library need to have the same support
for the nonstandard pragma).
Additionally, accessing unaligned struct members (as produced by this
tight struct packing) can give reduced performance or even lead to
crashes on platforms that require strict alignment.
The only theoretical possible benefits of using the pragma are either
matching a certain struct layout defined in some other, fixed ABI
(but since this is an interface defined by this library itself, there's
no such prior binary interface that needs to be matched), or to reduce
the memory usage by packing the structs tighter (where the reduction
would be marginal at best).
Problems fixed:
1. No longer segfaults if an option is specified without an accompanying argument.
2. Wrongly incrementing i by 3 instead of by 2 while parsing command line options.
For the first encoded frame, is bEncCurFrmAsIdrFlag true
while bIdrPeriodFlag is false.
Previously, the scene detection code unnecessarily checked for
a scene change in the first encoded frame (where the reference
frame was an uninitialized frame), triggering valgrind warnings
about using uninitialized memory.
welsenc.exe -h is now a valid command which returns success.
No longer prints help text twice in the case when the -h switch
is given along with a wrong cfg.
The same ifdefs are already used in the corresponding constructors,
so this just avoids a runtime/link time library dependency which
is practically unused in this build setup.