From: Loren Merritt Date: Mon, 24 Mar 2008 07:56:31 +0000 (-0600) Subject: faster cabac_encode_ue_bypass X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=aaced0861e76767a5c0ce24a94214a261d9eb459;p=libx264 faster cabac_encode_ue_bypass --- diff --git a/common/cabac.c b/common/cabac.c index 6ecb9a5c..ad5d203f 100644 --- a/common/cabac.c +++ b/common/cabac.c @@ -919,6 +919,25 @@ void x264_cabac_encode_bypass( x264_cabac_t *cb, int b ) x264_cabac_putbyte( cb ); } +void x264_cabac_encode_ue_bypass( x264_cabac_t *cb, int exp_bits, int val ) +{ + int k, i; + uint32_t x; + for( k = exp_bits; val >= (1<i_low <<= i; + cb->i_low += ((x>>k)&0xff) * cb->i_range; + cb->i_queue += i; + x264_cabac_putbyte( cb ); + i = 8; + } while( k > 0 ); +} + void x264_cabac_encode_terminal( x264_cabac_t *cb ) { cb->i_range -= 2; diff --git a/common/cabac.h b/common/cabac.h index c0a2e185..709c516e 100644 --- a/common/cabac.h +++ b/common/cabac.h @@ -55,6 +55,7 @@ void x264_cabac_context_init( x264_cabac_t *cb, int i_slice_type, int i_qp, int void x264_cabac_encode_init ( x264_cabac_t *cb, uint8_t *p_data, uint8_t *p_end ); void x264_cabac_encode_decision( x264_cabac_t *cb, int i_ctx, int b ); void x264_cabac_encode_bypass( x264_cabac_t *cb, int b ); +void x264_cabac_encode_ue_bypass( x264_cabac_t *cb, int exp_bits, int val ); void x264_cabac_encode_terminal( x264_cabac_t *cb ); void x264_cabac_encode_flush( x264_t *h, x264_cabac_t *cb ); diff --git a/encoder/cabac.c b/encoder/cabac.c index bccb4eb5..e150cb0a 100644 --- a/encoder/cabac.c +++ b/encoder/cabac.c @@ -24,23 +24,6 @@ #include "common/common.h" #include "macroblock.h" -static inline void x264_cabac_encode_ue_bypass( x264_cabac_t *cb, int exp_bits, int val ) -{ -#ifdef RDO_SKIP_BS - cb->f8_bits_encoded += ( bs_size_ue( val + (1<= (1<> k)&0x01 ); -#endif -} - static inline void x264_cabac_mb_type_intra( x264_t *h, x264_cabac_t *cb, int i_mb_type, int ctx0, int ctx1, int ctx2, int ctx3, int ctx4, int ctx5 ) { diff --git a/encoder/rdo.c b/encoder/rdo.c index c34fac3c..7f29af74 100644 --- a/encoder/rdo.c +++ b/encoder/rdo.c @@ -44,6 +44,7 @@ static int cabac_prefix_size[15][128]; #define x264_cabac_encode_decision(c,x,v) x264_cabac_size_decision(c,x,v) #define x264_cabac_encode_terminal(c) x264_cabac_size_decision(c,276,0) #define x264_cabac_encode_bypass(c,v) ((c)->f8_bits_encoded += 256) +#define x264_cabac_encode_ue_bypass(c,e,v) ((c)->f8_bits_encoded += (bs_size_ue(v+(1<