Codebase list dillo / upstream/3.0.5_rc1 src / dicache.h
upstream/3.0.5_rc1

Tree @upstream/3.0.5_rc1 (Download .tar.gz)

dicache.h @upstream/3.0.5_rc1raw · history · blame

#ifndef __DICACHE_H__
#define __DICACHE_H__

#ifdef __cplusplus
extern "C" {
#endif /* __cplusplus */


#include "bitvec.h"
#include "image.hh"
#include "cache.h"

/* Symbolic name to request the last version of an image */
#define DIC_Last  -1
/* Flags: Last version, Valid entry */
#define DIF_Last  1
#define DIF_Valid 2


/* These will reflect the entry's "state" */
typedef enum {
   DIC_Empty,      /* Just created the entry */
   DIC_SetParms,   /* Parameters set */
   DIC_SetCmap,    /* Color map set */
   DIC_Write,      /* Feeding the entry */
   DIC_Close,      /* Whole image got! */
   DIC_Abort       /* Image transfer aborted */
} DicEntryState;

typedef struct DICacheEntry {
   DilloUrl *url;          /* Image URL for this entry */
   DilloImgType type;      /* Image type */
   uint_t width, height;   /* As taken from image data */
   short Flags;            /* See Flags */
   short SurvCleanup;      /* Cleanup-pass survival for unused images */
   uchar_t *cmap;          /* Color map */
   void *v_imgbuf;         /* Void pointer to an Imgbuf object */
   uint_t TotalSize;       /* Amount of memory the image takes up */
   uint_t ScanNumber;      /* Current decoding scan */
   bitvec_t *BitVec;       /* Bit vector for decoded rows */
   DicEntryState State;    /* Current status for this entry */
   int RefCount;           /* Reference Counter */
   int version;            /* Version number, used for different
                              versions of the same URL image */

   uint_t DecodedSize;     /* Size of already decoded data */
   CA_Callback_t Decoder;  /* Client function */
   void *DecoderData;      /* Client function data */
} DICacheEntry;


void a_Dicache_init (void);

DICacheEntry *a_Dicache_get_entry(const DilloUrl *Url, int version);

void *a_Dicache_png_image(const char *Type, void *Ptr, CA_Callback_t *Call,
                          void **Data);
void *a_Dicache_gif_image(const char *Type, void *Ptr, CA_Callback_t *Call,
                          void **Data);
void *a_Dicache_jpeg_image(const char *Type, void *Ptr, CA_Callback_t *Call,
                           void **Data);
void a_Dicache_callback(int Op, CacheClient_t *Client);

void a_Dicache_set_parms(DilloUrl *url, int version, DilloImage *Image,
                         uint_t width, uint_t height, DilloImgType type,
                         double gamma);
void a_Dicache_set_cmap(DilloUrl *url, int version, int bg_color,
                        const uchar_t *cmap, uint_t num_colors,
                        int num_colors_max, int bg_index);
void a_Dicache_new_scan(const DilloUrl *url, int version);
void a_Dicache_write(DilloUrl *url, int version, const uchar_t *buf, uint_t Y);
void a_Dicache_close(DilloUrl *url, int version, CacheClient_t *Client);

void a_Dicache_invalidate_entry(const DilloUrl *Url);
DICacheEntry* a_Dicache_ref(const DilloUrl *Url, int version);
void a_Dicache_unref(const DilloUrl *Url, int version);
void a_Dicache_cleanup(void);
void a_Dicache_freeall(void);


#ifdef __cplusplus
}
#endif /* __cplusplus */
#endif /* __DICACHE_H__ */