diff --git a/libavcodec/h264_parser.c b/libavcodec/h264_parser.c index e0973bf6e0f25d4e5753197fc81d6f73fae447c6..62cd9485959e4f897250d9603ee94a24b2cce611 100644 --- a/libavcodec/h264_parser.c +++ b/libavcodec/h264_parser.c @@ -44,6 +44,15 @@ int ff_h264_find_frame_end(H264Context *h, const uint8_t *buf, int buf_size) for(i=0; i<buf_size; i++){ if(state==7){ +#ifdef HAVE_FAST_UNALIGNED +# ifdef HAVE_FAST_64BIT + while(i<buf_size && !((~*(uint64_t*)(buf+i) & (*(uint64_t*)(buf+i) - 0x0101010101010101ULL)) & 0x8080808080808080ULL)) + i+=8; +# else + while(i<buf_size && !((~*(uint32_t*)(buf+i) & (*(uint32_t*)(buf+i) - 0x01010101U)) & 0x80808080U)) + i+=4; +# endif +#endif for(; i<buf_size; i++){ if(!buf[i]){ state=2;