[SCM] libav/experimental: refill cabac variables in 16bit steps, 3% faster get_cabac()

siretart at users.alioth.debian.org siretart at users.alioth.debian.org
Sun Jun 30 15:51:53 UTC 2013


The following commit has been merged in the experimental branch:
commit 5659b509c74ccee0f4abfe197d4dd269cfe21afd
Author: Michael Niedermayer <michaelni at gmx.at>
Date:   Sat Oct 7 15:44:14 2006 +0000

    refill cabac variables in 16bit steps, 3% faster get_cabac()
    
    Originally committed as revision 6578 to svn://svn.ffmpeg.org/ffmpeg/trunk

diff --git a/libavcodec/cabac.h b/libavcodec/cabac.h
index 7498f64..4453c09 100644
--- a/libavcodec/cabac.h
+++ b/libavcodec/cabac.h
@@ -29,7 +29,7 @@
 //#undef NDEBUG
 #include <assert.h>
 
-#define CABAC_BITS 8
+#define CABAC_BITS 16
 #define CABAC_MASK ((1<<CABAC_BITS)-1)
 
 typedef struct CABACContext{
@@ -302,7 +302,7 @@ static inline void renorm_cabac_decoder_once(CABACContext *c){
 #if 0
     //P3:683
     asm(
-        "lea -0x20000(%0), %2       \n\t"
+        "lea -0x2000000(%0), %2     \n\t"
         "shr $31, %2                \n\t"  //FIXME 31->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 0b5e792..6a308a6 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;

-- 
Libav/FFmpeg packaging



More information about the pkg-multimedia-commits mailing list