[x264-devel] commit: faster ue/se/te write (Loren Merritt )
git version control
git at videolan.org
Thu Jul 10 15:38:45 CEST 2008
x264 | branch: master | Loren Merritt <pengvado at akuvian.org> | Fri Jul 4 18:56:30 2008 -0600| [3d2b0006a80fca9a8ddad9d0769fa55517fdfcd6]
faster ue/se/te write
> http://git.videolan.org/gitweb.cgi/x264.git/?a=commit;h=3d2b0006a80fca9a8ddad9d0769fa55517fdfcd6
---
common/bs.h | 129 ++++++++++++++++++++--------------------------------------
1 files changed, 45 insertions(+), 84 deletions(-)
diff --git a/common/bs.h b/common/bs.h
index 768d542..3d0235f 100644
--- a/common/bs.h
+++ b/common/bs.h
@@ -132,73 +132,61 @@ static inline void bs_align_1( bs_t *s )
/* golomb functions */
-static const uint8_t i_size0_255[256] =
-{
- 1,1,2,2,3,3,3,3,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,
- 6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,
- 8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8,8
+static const uint8_t x264_ue_size_tab[256] =
+{
+ 1, 1, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7,
+ 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
+ 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
+ 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
+ 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
+ 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
};
static inline void bs_write_ue_big( bs_t *s, unsigned int val )
{
- int i_size = 0;
-
- if( val == 0 )
- bs_write1( s, 1 );
- else
+ int size = 0;
+ int tmp = ++val;
+ if( tmp >= 0x10000 )
{
- unsigned int tmp = ++val;
-
- if( tmp >= 0x00010000 )
- {
- i_size += 16;
- tmp >>= 16;
- }
- if( tmp >= 0x100 )
- {
- i_size += 8;
- tmp >>= 8;
- }
- i_size += i_size0_255[tmp];
-
- bs_write( s, 2 * i_size - 1, val );
+ bs_write32( s, 0 );
+ tmp >>= 16;
+ }
+ if( tmp >= 0x100 )
+ {
+ size = 16;
+ tmp >>= 8;
}
+ size += x264_ue_size_tab[tmp];
+ bs_write( s, size, val );
}
/* Only works on values under 255. */
static inline void bs_write_ue( bs_t *s, int val )
{
- if( val == 0 )
- bs_write1( s, 1 );
- else
- bs_write( s, 2 * i_size0_255[val+1] - 1, val+1 );
+ bs_write( s, x264_ue_size_tab[val+1], val+1 );
}
static inline void bs_write_se( bs_t *s, int val )
{
- int i_size = 0;
- val = val <= 0 ? -val * 2 : val * 2 - 1;
-
- if( val == 0 )
- bs_write1( s, 1 );
- else
+ int size = 0;
+ int tmp = val = val <= 0 ? -val*2+1 : val*2;
+ if( tmp >= 0x100 )
{
- unsigned int tmp = ++val;
-
- if( tmp >= 0x100 )
- {
- i_size += 8;
- tmp >>= 8;
- }
- i_size += i_size0_255[tmp];
-
- bs_write( s, 2 * i_size - 1, val );
+ size = 16;
+ tmp >>= 8;
}
+ size += x264_ue_size_tab[tmp];
+ bs_write( s, size, val );
}
static inline void bs_write_te( bs_t *s, int x, int val )
@@ -215,50 +203,22 @@ static inline void bs_rbsp_trailing( bs_t *s )
bs_flush( s );
}
-static const uint8_t i_size0_254[255] =
-{
- 1, 3, 3, 5, 5, 5, 5, 7, 7, 7, 7, 7, 7, 7, 7,
- 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9, 9,
- 11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,11,
- 11,11,11,11,11,11,11,11,11,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,13,
- 13,13,13,13,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
- 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
- 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
- 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
- 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,
- 15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15,15
-};
-
static inline int bs_size_ue( unsigned int val )
{
- return i_size0_254[val];
+ return x264_ue_size_tab[val+1];
}
static inline int bs_size_ue_big( unsigned int val )
{
if( val < 255 )
- return i_size0_254[val];
+ return x264_ue_size_tab[val+1];
else
- {
- val++;
- val = (val >> 8) - 1;
- return i_size0_254[val] + 16;
- }
+ return x264_ue_size_tab[(val+1)>>8] + 16;
}
static inline int bs_size_se( int val )
{
- val = val <= 0 ? -val * 2 : val * 2 - 1;
- if( val < 255 )
- return i_size0_254[val];
- else
- {
- val++;
- val = (val >> 8) - 1;
- return i_size0_254[val] + 16;
- }
+ return bs_size_ue_big( val <= 0 ? -val*2 : val*2-1 );
}
static inline int bs_size_te( int x, int val )
@@ -266,8 +226,9 @@ static inline int bs_size_te( int x, int val )
if( x == 1 )
return 1;
else if( x > 1 )
- return i_size0_254[val];
- return 0;
+ return x264_ue_size_tab[val+1];
+ else
+ return 0;
}
#endif
More information about the x264-devel
mailing list