ffmpeg | branch: master | John Cox <j...@kynesim.co.uk> | Wed Jan 20 17:48:30 2016 +0000| [48f80831bad87addf40b6496210817ea0efc85af] | committer: Michael Niedermayer
cabac: Ensure 2-byte cabac loads are on 2-byte boundry Ensure that cabac init sets the bitstream pointer to an even value. It is often faster to load from an aligned boundry Signed-off-by: Michael Niedermayer <mich...@niedermayer.cc> > http://git.videolan.org/gitweb.cgi/ffmpeg.git/?a=commit;h=48f80831bad87addf40b6496210817ea0efc85af --- libavcodec/cabac.c | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/libavcodec/cabac.c b/libavcodec/cabac.c index 5bf5bc2..f2c239d 100644 --- a/libavcodec/cabac.c +++ b/libavcodec/cabac.c @@ -183,10 +183,19 @@ int ff_init_cabac_decoder(CABACContext *c, const uint8_t *buf, int buf_size){ #if CABAC_BITS == 16 c->low = (*c->bytestream++)<<18; c->low+= (*c->bytestream++)<<10; + // Keep our fetches on a 2-byte boundry as this should avoid ever having to + // do unaligned loads if the compiler (or asm) optimises the double byte + // load into a single instruction + if(((uintptr_t)c->bytestream & 1) == 0) { + c->low += (1 << 9); + } + else { + c->low += ((*c->bytestream++) << 2) + 2; + } #else c->low = (*c->bytestream++)<<10; -#endif c->low+= ((*c->bytestream++)<<2) + 2; +#endif c->range= 0x1FE; if ((c->range<<(CABAC_BITS+1)) < c->low) return AVERROR_INVALIDDATA; _______________________________________________ ffmpeg-cvslog mailing list ffmpeg-cvslog@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-cvslog