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

Reply via email to