/*
 *  coeff.h
 *
 *  Written by:         Ullrich Hafner
 *              
 *  This file is part of FIASCO (Fractal Image And Sequence COdec)
 *  Copyright (C) 1994-2000 Ullrich Hafner
 */

/*
 *  $Date: 2000/06/14 20:50:51 $
 *  $Author: hafner $
 *  $Revision: 5.1 $
 *  $State: Exp $
 */

#ifndef _COEFF_H
#define _COEFF_H

#include "types.h"
#include "rpf.h"
#include "wfa.h"

typedef struct coeff
{
   rpf_t    *rpf;                       /* reduced precision format */
   rpf_t    *dc_rpf;                    /* RPF of DC (state 0) component */
   unsigned min_level, max_level;       /* allocate memory for [min,..,max] */
   void     *model;                     /* generic pointer to prob. model */
   real_t (*bits) (const real_t *used_coeff, const word_t *used_domains,
                   unsigned level, const struct coeff *coeff);
   /*
    *  Compute bit-rate of a range approximation with coefficients given by
    *  -1 terminated list 'used_domains'.
    */
   void   (*update) (const real_t *used_coeff, const word_t *used_domains,
                       unsigned level, struct coeff *coeff);
   /*
    *  Update the probability model according to the chosen approximation.
    *  (given by the -1 terminated list 'used_domains').
    */
   void   (*free) (struct coeff *coeff);
   /*
    *  Discard the given coefficients struct.
    */
   void   (*model_free) (void *model);
   /*
    *  Free given probability model.
    */
   void   *(*model_duplicate) (const struct coeff *coeff, const void *model);
   /*
    *  Duplicate the given probability model (i.e. alloc and copy).
    */
} coeff_t;

coeff_t *
alloc_coeff_model (const char *coeff_model_name, rpf_t *rpf, rpf_t *dc_rpf,
                   unsigned min_level, unsigned max_level);

#endif /* not _COEFF_H */

