* qatar/master:
configure: add POWER[5-7] support
arm: intreadwrite: revert 16-bit load asm to old version for gcc < 4.6
vqavideo: return error if image size is not a multiple of block size
cosmetics: indentation
avformat: only fill-in interpolated timestamps if duration is non-zero
avformat: remove a workaround for broken timestamps
Conflicts:
libavformat/utils.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Commit adebad0 "arm: intreadwrite: fix inline asm constraints for gcc
4.6 and later" caused some older gcc versions to miscompile code.
This reverts to the old version of the code for these compilers.
Signed-off-by: Mans Rullgard <mans@mansr.com>
* qatar/master:
arm: intreadwrite: disable inline asm for gcc 4.7 and later
arm: intreadwrite: fix inline asm constraints for gcc 4.6 and later
indeo3: fix motion vector validation
pcm_bluray: set bits_per_raw_sample for > 16-bit
twinvq: fix out of bounds array access
lavr: use 8.8 instead of 10.6 as the 16-bit fixed-point mixing coeff type
Conflicts:
doc/APIchanges
libavcodec/indeo3.c
libavcodec/pcm-mpeg.c
Merged-by: Michael Niedermayer <michaelni@gmx.at>
Starting with version 4.7, gcc properly supports unaligned
memory accesses on ARM. Not using the inline asm with these
compilers results in better code.
Signed-off-by: Mans Rullgard <mans@mansr.com>
With a dereferenced type-cast pointer as memory operand, gcc 4.6
and later will sometimes copy the data to a temporary location,
the address of which is used as the operand value, if it thinks
the target address might be misaligned. Using a pointer to a
packed struct type instead does the right thing.
The 16-bit case is special since the ldrh instruction addressing
modes are limited compared to ldr. The "Uq" constraint produces a
memory reference suitable for an ldrsb instruction, which supports
the same addressing modes as ldrh. However, the restrictions appear
to apply only when the operand addresses a single byte. The memory
reference must thus be split into two operands each targeting one
byte. Finally, the "Uq" constraint is only available in ARM mode.
The Thumb-2 ldrh instruction supports most addressing modes so the
normal "m" constraint can be used there.
Signed-off-by: Mans Rullgard <mans@mansr.com>
This prevents gcc inserting useless UXTH instructions, at least
in some cases.
Originally committed as revision 25212 to svn://svn.ffmpeg.org/ffmpeg/trunk
ARMv6 and later support unaligned loads and stores for single
word/halfword but not double/multiple. GCC is ignorant of this and
will always use bytewise accesses for unaligned data. Casting to an
int32_t pointer is dangerous since a load/store double or multiple
instruction might be used (this happens with some code in FFmpeg).
Implementing the AV_[RW]* macros with inline asm using only supported
instructions gives fast and safe unaligned accesses. ARM RVCT does
the right thing with generic code.
This gives an overall speedup of up to 10%.
Originally committed as revision 18601 to svn://svn.ffmpeg.org/ffmpeg/trunk