diff options
Diffstat (limited to 'libavutil')
-rw-r--r-- | libavutil/crc.c | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/libavutil/crc.c b/libavutil/crc.c index ed065d8d50..6fa14fcc58 100644 --- a/libavutil/crc.c +++ b/libavutil/crc.c @@ -115,7 +115,10 @@ uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t le const uint8_t *end= buffer+length; #if !CONFIG_SMALL - if(!ctx[256]) + if(!ctx[256]) { + while(((intptr_t) buffer & 3) && buffer < end) + crc = ctx[((uint8_t)crc) ^ *buffer++] ^ (crc >> 8); + while(buffer<end-3){ crc ^= le2me_32(*(const uint32_t*)buffer); buffer+=4; crc = ctx[3*256 + ( crc &0xFF)] @@ -123,6 +126,7 @@ uint32_t av_crc(const AVCRC *ctx, uint32_t crc, const uint8_t *buffer, size_t le ^ctx[1*256 + ((crc>>16)&0xFF)] ^ctx[0*256 + ((crc>>24) )]; } + } #endif while(buffer<end) crc = ctx[((uint8_t)crc) ^ *buffer++] ^ (crc >> 8); |