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

/*
 *  $Date: 2000/10/22 10:44:48 $
 *  $Author: hafner $
 *  $Revision: 5.3 $
 *  $State: Exp $
 */

#ifndef _DECODE_H
#define _DECODE_H

#include "types.h"
#include "image.h"
#include "wfa.h"

typedef struct video
{
   unsigned  future_display;            /* number of a future frame */
   unsigned  display;                   /* current display number */
   image_t  *frame;                     /* current frame */
   image_t  *sframe;                    /* current smoothed frame */
   image_t  *future;                    /* future reference */
   image_t  *sfuture;                   /* future (smmothed) reference */
   image_t  *past ;                     /* past reference */
   wfa_t    *wfa;                       /* current wfa */
   wfa_t    *wfa_future;                /* future wfa */
   wfa_t    *wfa_past;                  /* past wfa */
} video_t;

typedef struct dectimer
{
   unsigned int input [3];
   unsigned int preprocessing [3];
   unsigned int decoder [3];
   unsigned int cleanup [3];
   unsigned int motion [3];
   unsigned int smooth [3];
   unsigned int display [3];
   unsigned int frames [3];
} dectimer_t;

image_t *
get_next_frame (bool_t store_wfa, int enlarge_factor,
                int smoothing, const char *reference_frame,
                format_e format, video_t *video, dectimer_t *timer,
                wfa_t *orig_wfa, bitfile_t *input);
image_t *
decode_image (unsigned orig_width, unsigned orig_height, format_e format,
              unsigned *dec_timer, const wfa_t *wfa);
word_t *
decode_range (unsigned range_state, unsigned range_label, unsigned range_level,
              word_t **domain, wfa_t *wfa);
image_t *
decode_state (unsigned state, unsigned level, wfa_t *wfa);
void
smooth_image (unsigned sf, const wfa_t *wfa, image_t *image);
video_t *
alloc_video (bool_t store_wfa);
void
free_video (video_t *video);

#endif /* not _DECODE_H */
