## schroarith

schroarith

## Synopsis

                        SchroArith;
                        SchroArithContext;
    SchroArith *        schro_arith_new                     (void);
    void                schro_arith_free                    (SchroArith *arith);
    void                schro_arith_decode_init             (SchroArith *arith,
                                                             SchroBuffer *buffer);
    void                schro_arith_encode_init             (SchroArith *arith,
                                                             SchroBuffer *buffer);
    void                schro_arith_flush                   (SchroArith *arith);
    int                 schro_arith_decode_bit              (SchroArith *arith,
                                                             unsigned int context);
    void                schro_arith_decode_flush            (SchroArith *arith);
    int                 schro_arith_decode_sint             (SchroArith *arith,
                                                             unsigned int cont_context,
                                                             unsigned int value_context,
                                                             unsigned int sign_context);
    int                 schro_arith_decode_uint             (SchroArith *arith,
                                                             unsigned int cont_context,
                                                             unsigned int value_context);
    void                schro_arith_encode_bit              (SchroArith *arith,
                                                             int context,
                                                             int value);
    void                schro_arith_encode_sint             (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int sign_context,
                                                             int value);
    void                schro_arith_encode_uint             (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int value);
    void                schro_arith_estimate_bit            (SchroArith *arith,
                                                             int i,
                                                             int value);
    void                schro_arith_estimate_init           (SchroArith *arith);
    void                schro_arith_estimate_sint           (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int sign_context,
                                                             int value);
    void                schro_arith_estimate_uint           (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int value);

## Description

## Details

### SchroArith

    typedef struct {
      SchroBuffer *buffer;
      uint8_t *dataptr;
      uintptr_t offset;

      uint32_t range[2];
      uint32_t code;
      uint32_t range_size;
      int cntr;
      int carry;

      uint16_t probabilities[SCHRO_CTX_LAST];
      uint16_t lut[512];
      SchroArithContext contexts[SCHRO_CTX_LAST];
    } SchroArith;

### SchroArithContext

    typedef struct {
      unsigned int next;
      int stat_range;
      int n_bits;
      int n_symbols;
      int ones;
    } SchroArithContext;

### schro_arith_new ()

    SchroArith *        schro_arith_new                     (void);

Returns : |

### schro_arith_free ()

    void                schro_arith_free                    (SchroArith *arith);

`arith` : |

### schro_arith_decode_init ()

    void                schro_arith_decode_init             (SchroArith *arith,
                                                             SchroBuffer *buffer);

`arith` : |
`buffer` : |

### schro_arith_encode_init ()

    void                schro_arith_encode_init             (SchroArith *arith,
                                                             SchroBuffer *buffer);

`arith` : |
`buffer` : |

### schro_arith_flush ()

    void                schro_arith_flush                   (SchroArith *arith);

`arith` : |

### schro_arith_decode_bit ()

    int                 schro_arith_decode_bit              (SchroArith *arith,
                                                             unsigned int context);

`arith` : |
`context` : |
Returns : |

### schro_arith_decode_flush ()

    void                schro_arith_decode_flush            (SchroArith *arith);

`arith` : |

### schro_arith_decode_sint ()

    int                 schro_arith_decode_sint             (SchroArith *arith,
                                                             unsigned int cont_context,
                                                             unsigned int value_context,
                                                             unsigned int sign_context);

`arith` : |
`cont_context` : |
`value_context` : |
`sign_context` : |
Returns : |

### schro_arith_decode_uint ()

    int                 schro_arith_decode_uint             (SchroArith *arith,
                                                             unsigned int cont_context,
                                                             unsigned int value_context);

`arith` : |
`cont_context` : |
`value_context` : |
Returns : |

### schro_arith_encode_bit ()

    void                schro_arith_encode_bit              (SchroArith *arith,
                                                             int context,
                                                             int value);

`arith` : |
`context` : |
`value` : |

### schro_arith_encode_sint ()

    void                schro_arith_encode_sint             (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int sign_context,
                                                             int value);

`arith` : |
`cont_context` : |
`value_context` : |
`sign_context` : |
`value` : |

### schro_arith_encode_uint ()

    void                schro_arith_encode_uint             (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int value);

`arith` : |
`cont_context` : |
`value_context` : |
`value` : |

### schro_arith_estimate_bit ()

    void                schro_arith_estimate_bit            (SchroArith *arith,
                                                             int i,
                                                             int value);

`arith` : |
`i` : |
`value` : |

### schro_arith_estimate_init ()

    void                schro_arith_estimate_init           (SchroArith *arith);

`arith` : |

### schro_arith_estimate_sint ()

    void                schro_arith_estimate_sint           (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int sign_context,
                                                             int value);

`arith` : |
`cont_context` : |
`value_context` : |
`sign_context` : |
`value` : |

### schro_arith_estimate_uint ()

    void                schro_arith_estimate_uint           (SchroArith *arith,
                                                             int cont_context,
                                                             int value_context,
                                                             int value);

`arith` : |
`cont_context` : |
`value_context` : |
`value` : |