view src/image.hh @ 703:e2b30a2f4654

[mq]: dicache-cleanup1
author Jorge Arellano Cid <>
date Sat, 27 Dec 2008 14:39:04 -0300
parents 0b47756eeb13
children 697145062347
line wrap: on
line source
#ifndef __IMAGE_HH__
#define __IMAGE_HH__

// The DilloImage data-structure and methods

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

#include "bitvec.h"
#include "url.h"

typedef struct _DilloImage DilloImage;

typedef enum {
   DILLO_IMG_TYPE_NOTSET    /* Initial value */
} DilloImgType;

/* These will reflect the Image's "state" */
typedef enum {
   IMG_Empty,      /* Just created the entry */
   IMG_SetParms,   /* Parameters set */
   IMG_SetCmap,    /* Color map set */
   IMG_Write,      /* Feeding the entry */
   IMG_Close,      /* Whole image got! */
   IMG_Abort       /* Image transfer aborted */
} ImageState;

struct _DilloImage {
   void *dw;

   /* Parameters as told by image data */
   uint_t width;
   uint_t height;

   const uchar_t *cmap;     /* Color map (only for indexed) */
   DilloImgType in_type;    /* Image Type */
   int32_t bg_color;        /* Background color */

   bitvec_t *BitVec;        /* Bit vector for decoded rows */
   uint_t ScanNumber;       /* Current decoding scan */
   ImageState State;        /* Processing status */

   int RefCount;            /* Reference counter */

 * Function prototypes
DilloImage *a_Image_new(int width, int height,
                        const char *alt_text, int32_t bg_color);
void a_Image_ref(DilloImage *Image);
void a_Image_unref(DilloImage *Image);

void a_Image_set_parms(DilloImage *Image, void *v_imgbuf, DilloUrl *url,
                       int version, uint_t width, uint_t height,
                       DilloImgType type);
void a_Image_set_cmap(DilloImage *Image, const uchar_t *cmap);
void a_Image_new_scan(DilloImage *image, void *v_imgbuf);
void a_Image_write(DilloImage *Image, void *v_imgbuf,
                   const uchar_t *buf, uint_t y, int decode);
void a_Image_close(DilloImage *Image);

void a_Image_imgbuf_ref(void *v_imgbuf);
void a_Image_imgbuf_unref(void *v_imgbuf);
void *a_Image_imgbuf_new(void *v_dw, int img_type, int width, int height);
int a_Image_imgbuf_last_reference(void *v_imgbuf);
void a_Image_imgbuf_update(DilloImage *Image, void *v_imgbuf,
                           const uchar_t *buf, uint_t y);

#ifdef __cplusplus
#endif /* __cplusplus */

#endif /* __IMAGE_HH__ */