On Tue, Jan 3, 2012 at 2:28 PM, Diego Biurrun <[email protected]> wrote: > --- > libavcodec/cabac.c | 157 > ---------------------------------------------------- > libavcodec/cabac.h | 25 -------- > 2 files changed, 0 insertions(+), 182 deletions(-) > > diff --git a/libavcodec/cabac.c b/libavcodec/cabac.c > index bcb2429..f299de6 100644 > --- a/libavcodec/cabac.c > +++ b/libavcodec/cabac.c > @@ -162,174 +162,17 @@ void ff_init_cabac_states(CABACContext *c){ > #include "avcodec.h" > #include "cabac.h" > > -static void put_cabac(CABACContext *c, uint8_t * const state, int bit){ > - int RangeLPS= ff_h264_lps_range[2*(c->range&0xC0) + *state]; > - > - if(bit == ((*state)&1)){ > - c->range -= RangeLPS; > - *state= ff_h264_mps_state[*state]; > - }else{ > - c->low += c->range - RangeLPS; > - c->range = RangeLPS; > - *state= ff_h264_lps_state[*state]; > - } > - > - renorm_cabac_encoder(c); > -} > - > -/** > - * @param bit 0 -> write zero bit, !=0 write one bit > - */ > -static void put_cabac_bypass(CABACContext *c, int bit){ > - c->low += c->low; > - > - if(bit){ > - c->low += c->range; > - } > -//FIXME optimize > - if(c->low<0x200){ > - put_cabac_bit(c, 0); > - }else if(c->low<0x400){ > - c->outstanding_count++; > - c->low -= 0x200; > - }else{ > - put_cabac_bit(c, 1); > - c->low -= 0x400; > - } > -} > - > -/** > - * > - * @return the number of bytes written > - */ > -static int put_cabac_terminate(CABACContext *c, int bit){ > - c->range -= 2; > - > - if(!bit){ > - renorm_cabac_encoder(c); > - }else{ > - c->low += c->range; > - c->range= 2; > - > - renorm_cabac_encoder(c); > - > - assert(c->low <= 0x1FF); > - put_cabac_bit(c, c->low>>9); > - put_bits(&c->pb, 2, ((c->low>>7)&3)|1); > - > - flush_put_bits(&c->pb); //FIXME FIXME FIXME XXX wrong > - } > - > - return (put_bits_count(&c->pb)+7)>>3; > -} > - > -/** > - * put (truncated) unary binarization. > - */ > -static void put_cabac_u(CABACContext *c, uint8_t * state, int v, int max, > int max_index, int truncated){ > - int i; > - > - assert(v <= max); > - > - for(i=0; i<v; i++){ > - put_cabac(c, state, 1); > - if(i < max_index) state++; > - } > - if(truncated==0 || v<max) > - put_cabac(c, state, 0); > -} > - > -/** > - * put unary exp golomb k-th order binarization. > - */ > -static void put_cabac_ueg(CABACContext *c, uint8_t * state, int v, int max, > int is_signed, int k, int max_index){ > - int i; > - > - if(v==0) > - put_cabac(c, state, 0); > - else{ > - const int sign= v < 0; > - > - if(is_signed) v= FFABS(v); > - > - if(v<max){ > - for(i=0; i<v; i++){ > - put_cabac(c, state, 1); > - if(i < max_index) state++; > - } > - > - put_cabac(c, state, 0); > - }else{ > - int m= 1<<k; > - > - for(i=0; i<max; i++){ > - put_cabac(c, state, 1); > - if(i < max_index) state++; > - } > - > - v -= max; > - while(v >= m){ //FIXME optimize > - put_cabac_bypass(c, 1); > - v-= m; > - m+= m; > - } > - put_cabac_bypass(c, 0); > - while(m>>=1){ > - put_cabac_bypass(c, v&m); > - } > - } > - > - if(is_signed) > - put_cabac_bypass(c, sign); > - } > -} > - > int main(void){ > CABACContext c; > uint8_t b[9*SIZE]; > uint8_t r[9*SIZE]; > int i; > uint8_t state[10]= {0}; > - AVLFG prng; > > - av_lfg_init(&prng, 1); > - ff_init_cabac_encoder(&c, b, SIZE); > ff_init_cabac_states(&c); > > - for(i=0; i<SIZE; i++){ > - r[i] = av_lfg_get(&prng) % 7; > - } > - > - for(i=0; i<SIZE; i++){ > -START_TIMER > - put_cabac_bypass(&c, r[i]&1); > -STOP_TIMER("put_cabac_bypass") > - } > - > - for(i=0; i<SIZE; i++){ > -START_TIMER > - put_cabac(&c, state, r[i]&1); > -STOP_TIMER("put_cabac") > - } > - > - for(i=0; i<SIZE; i++){ > -START_TIMER > - put_cabac_u(&c, state, r[i], 6, 3, i&1); > -STOP_TIMER("put_cabac_u") > - } > - > - for(i=0; i<SIZE; i++){ > -START_TIMER > - put_cabac_ueg(&c, state, r[i], 3, 0, 1, 2); > -STOP_TIMER("put_cabac_ueg") > - } > - > - put_cabac_terminate(&c, 1); > - > ff_init_cabac_decoder(&c, b, SIZE); > > - memset(state, 0, sizeof(state)); > - > for(i=0; i<SIZE; i++){ > START_TIMER > if( (r[i]&1) != get_cabac_bypass(&c) ) > diff --git a/libavcodec/cabac.h b/libavcodec/cabac.h > index cb61266..8d7e457 100644 > --- a/libavcodec/cabac.h > +++ b/libavcodec/cabac.h > @@ -62,31 +62,6 @@ void ff_init_cabac_decoder(CABACContext *c, const uint8_t > *buf, int buf_size); > void ff_init_cabac_states(CABACContext *c); > > > -static inline void put_cabac_bit(CABACContext *c, int b){ > - put_bits(&c->pb, 1, b); > - for(;c->outstanding_count; c->outstanding_count--){ > - put_bits(&c->pb, 1, 1-b); > - } > -} > - > -static inline void renorm_cabac_encoder(CABACContext *c){ > - while(c->range < 0x100){ > - //FIXME optimize > - if(c->low<0x100){ > - put_cabac_bit(c, 0); > - }else if(c->low<0x200){ > - c->outstanding_count++; > - c->low -= 0x100; > - }else{ > - put_cabac_bit(c, 1); > - c->low -= 0x200; > - } > - > - c->range+= c->range; > - c->low += c->low; > - } > -} > - > static void refill(CABACContext *c){ > #if CABAC_BITS == 16 > c->low+= (c->bytestream[0]<<9) + (c->bytestream[1]<<1); > -- > 1.7.1
What is wrong with having such a basic put/get test for the CABAC decoder? Is there a good reason we should drop it if it does its job? Jason _______________________________________________ libav-devel mailing list [email protected] https://lists.libav.org/mailman/listinfo/libav-devel
