From 5659b509c74ccee0f4abfe197d4dd269cfe21afd Mon Sep 17 00:00:00 2001 From: Michael Niedermayer Date: Sat, 7 Oct 2006 15:44:14 +0000 Subject: [PATCH] refill cabac variables in 16bit steps, 3% faster get_cabac() Originally committed as revision 6578 to svn://svn.ffmpeg.org/ffmpeg/trunk --- libavcodec/cabac.h | 12 ++++++------ libavcodec/h264.c | 2 +- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/libavcodec/cabac.h b/libavcodec/cabac.h index 7498f644a0..4453c09af7 100644 --- a/libavcodec/cabac.h +++ b/libavcodec/cabac.h @@ -29,7 +29,7 @@ //#undef NDEBUG #include -#define CABAC_BITS 8 +#define CABAC_BITS 16 #define CABAC_MASK ((1<63 for x86-64 "shl %%cl, %0 \n\t" "shl %%cl, %1 \n\t" @@ -311,7 +311,7 @@ static inline void renorm_cabac_decoder_once(CABACContext *c){ #elif 0 //P3:680 asm( - "cmp $0x20000, %0 \n\t" + "cmp $0x2000000, %0 \n\t" "setb %%cl \n\t" //FIXME 31->63 for x86-64 "shl %%cl, %0 \n\t" "shl %%cl, %1 \n\t" @@ -321,7 +321,7 @@ static inline void renorm_cabac_decoder_once(CABACContext *c){ int temp2; //P3:665 asm( - "lea -0x20000(%0), %%eax \n\t" + "lea -0x2000000(%0), %%eax \n\t" "cdq \n\t" "mov %0, %%eax \n\t" "and %%edx, %0 \n\t" @@ -334,7 +334,7 @@ static inline void renorm_cabac_decoder_once(CABACContext *c){ int temp2; //P3:673 asm( - "cmp $0x20000, %0 \n\t" + "cmp $0x2000000, %0 \n\t" "sbb %%edx, %%edx \n\t" "mov %0, %%eax \n\t" "and %%edx, %0 \n\t" @@ -347,7 +347,7 @@ static inline void renorm_cabac_decoder_once(CABACContext *c){ int temp2; //P3:677 asm( - "cmp $0x20000, %0 \n\t" + "cmp $0x2000000, %0 \n\t" "lea (%0, %0), %%eax \n\t" "lea (%1, %1), %%edx \n\t" "cmovb %%eax, %0 \n\t" diff --git a/libavcodec/h264.c b/libavcodec/h264.c index 0b5e7923ed..6a308a6a8f 100644 --- a/libavcodec/h264.c +++ b/libavcodec/h264.c @@ -7420,7 +7420,7 @@ static int decode_slice(H264Context *h){ } eos = get_cabac_terminate( &h->cabac ); - if( ret < 0 || h->cabac.bytestream > h->cabac.bytestream_end + 1) { + if( ret < 0 || h->cabac.bytestream > h->cabac.bytestream_end + 2) { av_log(h->s.avctx, AV_LOG_ERROR, "error while decoding MB %d %d, bytestream (%d)\n", s->mb_x, s->mb_y, h->cabac.bytestream_end - h->cabac.bytestream); ff_er_add_slice(s, s->resync_mb_x, s->resync_mb_y, s->mb_x, s->mb_y, (AC_ERROR|DC_ERROR|MV_ERROR)&part_mask); return -1;