Merge image related changes from the render branch. This includes the image
authorBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 7 May 2010 15:18:04 +0000 (15:18 +0000)
committerBrecht Van Lommel <brechtvanlommel@pandora.be>
Fri, 7 May 2010 15:18:04 +0000 (15:18 +0000)
tile cache code in imbuf, but it is not hooked up to the render engine.

Imbuf module: some small refactoring and removing a lot of unused or old code
(about 6.5k lines).

* Added a ImFileType struct with callbacks to make adding an file format type,
  or making changes to the API easier.
* Move imbuf init/exit code into IMB_init()/IMB_exit() functions.
* Increased mipmap levels from 10 to 20, you run into this limit already with
  a 2k image.
* Removed hamx, amiga, anim5 format support.
* Removed colormap saving, only simple colormap code now for reading tga.
* Removed gen_dynlibtiff.py, editing this is almost as much work as just
  editing the code directly.
* Functions removed that were only used for sequencer plugin API:
  IMB_anim_nextpic, IMB_clever_double, IMB_antialias, IMB_gamwarp,
  IMB_scalefieldImBuf, IMB_scalefastfieldImBuf, IMB_onethird, IMB_halflace,
  IMB_dit0, IMB_dit2, IMB_cspace
* Write metadata info into OpenEXR images. Can be viewed with the command
  line utility 'exrheader'

For the image tile cache code, see this page:
http://wiki.blender.org/index.php/Dev:2.5/Source/Imaging/ImageTileCache

102 files changed:
source/blender/blenkernel/BKE_image.h
source/blender/blenkernel/intern/blender.c
source/blender/blenkernel/intern/bmfont.c
source/blender/blenkernel/intern/image.c
source/blender/blenkernel/intern/multires.c
source/blender/blenkernel/intern/sequencer.c
source/blender/blenkernel/intern/writeavi.c
source/blender/blenlib/BLI_math_vector.h
source/blender/blenlib/BLI_path_util.h
source/blender/blenlib/BLI_storage.h
source/blender/blenlib/intern/math_vector_inline.c
source/blender/blenlib/intern/path_util.c
source/blender/blenlib/intern/storage.c
source/blender/blenloader/intern/readfile.c
source/blender/blenpluginapi/iff.h
source/blender/blenpluginapi/intern/pluginapi.c
source/blender/editors/interface/interface_draw.c
source/blender/editors/interface/interface_icons.c
source/blender/editors/screen/screendump.c
source/blender/editors/space_file/filelist.c
source/blender/editors/space_file/writeimage.c
source/blender/editors/space_image/image_buttons.c
source/blender/imbuf/IMB_imbuf.h
source/blender/imbuf/IMB_imbuf_types.h
source/blender/imbuf/IMB_thumbs.h
source/blender/imbuf/SConscript
source/blender/imbuf/intern/IMB_amiga.h [deleted file]
source/blender/imbuf/intern/IMB_anim.h
source/blender/imbuf/intern/IMB_anim5.h [deleted file]
source/blender/imbuf/intern/IMB_bitplanes.h [deleted file]
source/blender/imbuf/intern/IMB_bmp.h [deleted file]
source/blender/imbuf/intern/IMB_cmap.h [deleted file]
source/blender/imbuf/intern/IMB_cocoa.h [deleted file]
source/blender/imbuf/intern/IMB_divers.h [deleted file]
source/blender/imbuf/intern/IMB_dpxcineon.h [deleted file]
source/blender/imbuf/intern/IMB_filetype.h [new file with mode: 0644]
source/blender/imbuf/intern/IMB_filter.h
source/blender/imbuf/intern/IMB_hamx.h [deleted file]
source/blender/imbuf/intern/IMB_iff.h [deleted file]
source/blender/imbuf/intern/IMB_iris.h [deleted file]
source/blender/imbuf/intern/IMB_jp2.h [deleted file]
source/blender/imbuf/intern/IMB_jpeg.h [deleted file]
source/blender/imbuf/intern/IMB_metadata.h [moved from source/blender/imbuf/intern/IMB_imginfo.h with 76% similarity]
source/blender/imbuf/intern/IMB_png.h [deleted file]
source/blender/imbuf/intern/IMB_radiance_hdr.h [deleted file]
source/blender/imbuf/intern/IMB_targa.h [deleted file]
source/blender/imbuf/intern/IMB_tiff.h [deleted file]
source/blender/imbuf/intern/allocimbuf.c
source/blender/imbuf/intern/amiga.c [deleted file]
source/blender/imbuf/intern/anim.c
source/blender/imbuf/intern/anim5.c [deleted file]
source/blender/imbuf/intern/antialias.c [deleted file]
source/blender/imbuf/intern/bitplanes.c [deleted file]
source/blender/imbuf/intern/bmp.c
source/blender/imbuf/intern/cache.c [new file with mode: 0644]
source/blender/imbuf/intern/cineon/cineon_dpx.c
source/blender/imbuf/intern/cmap.c [deleted file]
source/blender/imbuf/intern/cspace.c [deleted file]
source/blender/imbuf/intern/data.c [deleted file]
source/blender/imbuf/intern/dds/dds_api.cpp
source/blender/imbuf/intern/dds/dds_api.h
source/blender/imbuf/intern/dither.c [deleted file]
source/blender/imbuf/intern/divers.c
source/blender/imbuf/intern/dynlibtiff.c
source/blender/imbuf/intern/dynlibtiff.h
source/blender/imbuf/intern/filetype.c [new file with mode: 0644]
source/blender/imbuf/intern/filter.c
source/blender/imbuf/intern/gen_dynlibtiff.py [deleted file]
source/blender/imbuf/intern/ham.c [deleted file]
source/blender/imbuf/intern/hamx.c [deleted file]
source/blender/imbuf/intern/iff.c [deleted file]
source/blender/imbuf/intern/imageprocess.c
source/blender/imbuf/intern/imbuf.h
source/blender/imbuf/intern/imbuf_cocoa.m
source/blender/imbuf/intern/imbuf_patch.h [deleted file]
source/blender/imbuf/intern/iris.c
source/blender/imbuf/intern/jp2.c
source/blender/imbuf/intern/jpeg.c
source/blender/imbuf/intern/matrix.h [deleted file]
source/blender/imbuf/intern/metadata.c [moved from source/blender/imbuf/intern/imginfo.c with 66% similarity]
source/blender/imbuf/intern/module.c [moved from source/blender/imbuf/intern/IMB_ham.h with 68% similarity]
source/blender/imbuf/intern/openexr/openexr_api.cpp
source/blender/imbuf/intern/openexr/openexr_api.h
source/blender/imbuf/intern/png.c
source/blender/imbuf/intern/radiance_hdr.c
source/blender/imbuf/intern/readimage.c
source/blender/imbuf/intern/rectop.c
source/blender/imbuf/intern/rotate.c
source/blender/imbuf/intern/scaling.c
source/blender/imbuf/intern/targa.c
source/blender/imbuf/intern/thumbs.c
source/blender/imbuf/intern/tiff.c
source/blender/imbuf/intern/util.c
source/blender/imbuf/intern/writeimage.c
source/blender/makesdna/DNA_image_types.h
source/blender/makesrna/intern/rna_image.c
source/blender/quicktime/apple/qtkit_import.m
source/blender/quicktime/apple/quicktime_import.c
source/blender/windowmanager/intern/wm_init_exit.c
source/creator/creator.c
source/gameengine/GamePlayer/ghost/GPG_Application.cpp
source/gameengine/GamePlayer/ghost/GPG_ghost.cpp

index 915f59b..7bdb9aa 100644 (file)
@@ -55,7 +55,6 @@ int           BKE_imtype_is_movie(int imtype);
 
 struct anim *openanim(char * name, int flags);
 
-void   converttopremul(struct ImBuf *ibuf);
 void   image_de_interlace(struct Image *ima, int odd);
        
 void   tag_image_time(struct Image *ima);
index 3ccf068..42c492d 100644 (file)
@@ -100,7 +100,7 @@ void free_blender(void)
 
        BKE_spacetypes_free();          /* after free main, it uses space callbacks */
        
-       IMB_freeImBufdata();            /* imbuf lib */
+       IMB_exit();
        
        free_nodesystem();      
 }
index 1b053b4..e2a6c04 100644 (file)
@@ -174,7 +174,7 @@ void detectBitmapFont(ImBuf *ibuf)
        unsigned short version;
        int i;
        
-       if (ibuf != NULL) {
+       if (ibuf != NULL && ibuf->rect != NULL) {
                        // bitmap must have an x size that is a power of two
                if (is_power_of_two(ibuf->x)) {
                        rect = (unsigned char *) (ibuf->rect + (ibuf->x * (ibuf->y - 1)));
index 2c71cc9..a377bbe 100644 (file)
 
 /* ******** IMAGE PROCESSING ************* */
 
-/* used by sequencer and image premul option - IMA_DO_PREMUL */
-void converttopremul(struct ImBuf *ibuf)
-{
-       int x, y;
-       
-       if(ibuf==0) return;
-       if (ibuf->rect) {
-               int val;
-               char *cp;
-               if(ibuf->depth==24) {   /* put alpha at 255 */
-                       cp= (char *)(ibuf->rect);
-                       for(y=0; y<ibuf->y; y++) {
-                               for(x=0; x<ibuf->x; x++, cp+=4) {
-                                       cp[3]= 255;
-                               }
-                       }
-               } else {
-                       cp= (char *)(ibuf->rect);
-                       for(y=0; y<ibuf->y; y++) {
-                               for(x=0; x<ibuf->x; x++, cp+=4) {
-                                       val= cp[3];
-                                       cp[0]= (cp[0]*val)>>8;
-                                       cp[1]= (cp[1]*val)>>8;
-                                       cp[2]= (cp[2]*val)>>8;
-                               }
-                       }
-               }
-       }
-       if (ibuf->rect_float) {
-               float val;
-               float *cp;
-               if(ibuf->depth==24) {   /* put alpha at 1.0 */
-                       cp= ibuf->rect_float;;
-                       for(y=0; y<ibuf->y; y++) {
-                               for(x=0; x<ibuf->x; x++, cp+=4) {
-                                       cp[3]= 1.0;
-                               }
-                       }
-               } else {
-                       cp= ibuf->rect_float;
-                       for(y=0; y<ibuf->y; y++) {
-                               for(x=0; x<ibuf->x; x++, cp+=4) {
-                                       val= cp[3];
-                                       cp[0]= cp[0]*val;
-                                       cp[1]= cp[1]*val;
-                                       cp[2]= cp[2]*val;
-                               }
-                       }
-               }
-       }
-}
-
 static void de_interlace_ng(struct ImBuf *ibuf)        /* neogeo fields */
 {
        struct ImBuf * tbuf1, * tbuf2;
@@ -735,8 +683,6 @@ int BKE_imtype_to_ftype(int imtype)
                return TGA;
        else if(imtype==R_RAWTGA)
                return RAWTGA;
-       else if(imtype==R_HAMX)
-               return AN_hamx;
 #ifdef WITH_OPENJPEG
        else if(imtype==R_JP2)
                return JP2;
@@ -773,8 +719,6 @@ int BKE_ftype_to_imtype(int ftype)
                return R_TARGA;
        else if(ftype & RAWTGA)
                return R_RAWTGA;
-       else if(ftype == AN_hamx)
-               return R_HAMX;
 #ifdef WITH_OPENJPEG
        else if(ftype & JP2)
                return R_JP2;
@@ -787,7 +731,6 @@ int BKE_ftype_to_imtype(int ftype)
 int BKE_imtype_is_movie(int imtype)
 {
        switch(imtype) {
-       case R_MOVIE:
        case R_AVIRAW:
        case R_AVIJPEG:
        case R_AVICODEC:
@@ -864,7 +807,7 @@ void BKE_add_image_extension(char *string, int imtype)
                        extension= ".jp2";
        }
 #endif
-       else { //   R_MOVIE, R_AVICODEC, R_AVIRAW, R_AVIJPEG, R_JPEG90, R_QUICKTIME etc
+       else { //   R_AVICODEC, R_AVIRAW, R_AVIJPEG, R_JPEG90, R_QUICKTIME etc
                if(!( BLI_testextensie(string, ".jpg") || BLI_testextensie(string, ".jpeg")))
                        extension= ".jpg";
        }
@@ -1211,15 +1154,15 @@ void BKE_stamp_info(Scene *scene, struct ImBuf *ibuf)
        /* fill all the data values, no prefix */
        stampdata(scene, &stamp_data, 0);
        
-       if (stamp_data.file[0])         IMB_imginfo_change_field (ibuf, "File",         stamp_data.file);
-       if (stamp_data.note[0])         IMB_imginfo_change_field (ibuf, "Note",         stamp_data.note);
-       if (stamp_data.date[0])         IMB_imginfo_change_field (ibuf, "Date",         stamp_data.date);
-       if (stamp_data.marker[0])       IMB_imginfo_change_field (ibuf, "Marker",       stamp_data.marker);
-       if (stamp_data.time[0])         IMB_imginfo_change_field (ibuf, "Time",         stamp_data.time);
-       if (stamp_data.frame[0])        IMB_imginfo_change_field (ibuf, "Frame",        stamp_data.frame);
-       if (stamp_data.camera[0])       IMB_imginfo_change_field (ibuf, "Camera",       stamp_data.camera);
-       if (stamp_data.scene[0])        IMB_imginfo_change_field (ibuf, "Scene",        stamp_data.scene);
-       if (stamp_data.strip[0])        IMB_imginfo_change_field (ibuf, "Strip",        stamp_data.strip);
+       if (stamp_data.file[0])         IMB_metadata_change_field (ibuf, "File",                stamp_data.file);
+       if (stamp_data.note[0])         IMB_metadata_change_field (ibuf, "Note",                stamp_data.note);
+       if (stamp_data.date[0])         IMB_metadata_change_field (ibuf, "Date",                stamp_data.date);
+       if (stamp_data.marker[0])       IMB_metadata_change_field (ibuf, "Marker",      stamp_data.marker);
+       if (stamp_data.time[0])         IMB_metadata_change_field (ibuf, "Time",                stamp_data.time);
+       if (stamp_data.frame[0])        IMB_metadata_change_field (ibuf, "Frame",       stamp_data.frame);
+       if (stamp_data.camera[0])       IMB_metadata_change_field (ibuf, "Camera",      stamp_data.camera);
+       if (stamp_data.scene[0])        IMB_metadata_change_field (ibuf, "Scene",       stamp_data.scene);
+       if (stamp_data.strip[0])        IMB_metadata_change_field (ibuf, "Strip",       stamp_data.strip);
 }
 
 int BKE_write_ibuf(Scene *scene, ImBuf *ibuf, char *name, int imtype, int subimtype, int quality)
@@ -1273,9 +1216,6 @@ int BKE_write_ibuf(Scene *scene, ImBuf *ibuf, char *name, int imtype, int subimt
        else if(imtype==R_RAWTGA) {
                ibuf->ftype= RAWTGA;
        }
-       else if(imtype==R_HAMX) {
-               ibuf->ftype= AN_hamx;
-       }
 #ifdef WITH_OPENJPEG
        else if(imtype==R_JP2) {
                if(quality < 10) quality= 90;
@@ -1299,7 +1239,7 @@ int BKE_write_ibuf(Scene *scene, ImBuf *ibuf, char *name, int imtype, int subimt
        }
 #endif
        else {
-               /* R_JPEG90, R_MOVIE, etc. default we save jpegs */
+               /* R_JPEG90, etc. default we save jpegs */
                if(quality < 10) quality= 90;
                ibuf->ftype= JPG|quality;
                if(ibuf->depth==32) ibuf->depth= 24;    /* unsupported feature only confuses other s/w */
@@ -1595,6 +1535,7 @@ static ImBuf *image_load_sequence_file(Image *ima, ImageUser *iuser, int frame)
        struct ImBuf *ibuf;
        unsigned short numlen;
        char name[FILE_MAX], head[FILE_MAX], tail[FILE_MAX];
+       int flag;
        
        /* XXX temp stuff? */
        if(ima->lastframe != frame)
@@ -1611,8 +1552,12 @@ static ImBuf *image_load_sequence_file(Image *ima, ImageUser *iuser, int frame)
        else
                BLI_path_abs(name, G.sce);
        
+       flag= IB_rect|IB_multilayer;
+       if(ima->flag & IMA_DO_PREMUL)
+               flag |= IB_premul;
+
        /* read ibuf */
-       ibuf = IMB_loadiffname(name, IB_rect|IB_multilayer);
+       ibuf = IMB_loadiffname(name, flag);
        if(G.f & G_DEBUG) printf("loaded %s\n", name);
        
        if (ibuf) {
@@ -1632,10 +1577,6 @@ static ImBuf *image_load_sequence_file(Image *ima, ImageUser *iuser, int frame)
                image_initialize_after_load(ima, ibuf);
                image_assign_ibuf(ima, ibuf, 0, frame);
 #endif
-               
-               if(ima->flag & IMA_DO_PREMUL)
-                       converttopremul(ibuf);
-               
        }
        else
                ima->ok= 0;
@@ -1718,7 +1659,7 @@ static ImBuf *image_load_movie_file(Image *ima, ImageUser *iuser, int frame)
                else
                        BLI_path_abs(str, G.sce);
                
-               ima->anim = openanim(str, IB_cmap | IB_rect);
+               ima->anim = openanim(str, IB_rect);
                
                /* let's initialize this user */
                if(ima->anim && iuser && iuser->frames==0)
@@ -1749,21 +1690,25 @@ static ImBuf *image_load_movie_file(Image *ima, ImageUser *iuser, int frame)
        return ibuf;
 }
 
-/* cfra used for # code, Image can only have this # for all its users */
+/* cfra used for # code, Image can only have this # for all its users
+ * warning, 'iuser' can be NULL */
 static ImBuf *image_load_image_file(Image *ima, ImageUser *iuser, int cfra)
 {
        struct ImBuf *ibuf;
        char str[FILE_MAX];
-       int assign = 0;
+       int assign = 0, flag;
        
        /* always ensure clean ima */
        image_free_buffers(ima);
        
        /* is there a PackedFile with this image ? */
        if (ima->packedfile) {
-               ibuf = IMB_ibImageFromMemory((int *) ima->packedfile->data, ima->packedfile->size, IB_rect|IB_multilayer);
+               ibuf = IMB_ibImageFromMemory((unsigned char*)ima->packedfile->data, ima->packedfile->size, IB_rect|IB_multilayer);
        } 
        else {
+               flag= IB_rect|IB_multilayer|IB_metadata;
+               if(ima->flag & IMA_DO_PREMUL)
+                       flag |= IB_premul;
                        
                /* get the right string */
                BLI_strncpy(str, ima->name, sizeof(str));
@@ -1775,7 +1720,7 @@ static ImBuf *image_load_image_file(Image *ima, ImageUser *iuser, int cfra)
                BLI_path_frame(str, cfra, 0);
                
                /* read ibuf */
-               ibuf = IMB_loadiffname(str, IB_rect|IB_multilayer|IB_imginfo);
+               ibuf = IMB_loadiffname(str, flag);
        }
        
        if (ibuf) {
@@ -1797,9 +1742,6 @@ static ImBuf *image_load_image_file(Image *ima, ImageUser *iuser, int cfra)
                        if ((ima->packedfile == NULL) && (G.fileflags & G_AUTOPACK))
                                ima->packedfile = newPackedFile(NULL, str);
                }
-               
-               if(ima->flag & IMA_DO_PREMUL)
-                       converttopremul(ibuf);
        }
        else
                ima->ok= 0;
index 52c6f93..9e95581 100644 (file)
@@ -264,38 +264,6 @@ int multiresModifier_reshapeFromDeformMod(MultiresModifierData *mmd, Object *ob,
        return result;
 }
 
-static void multires_set_tot_mdisps(Mesh *me, int lvl)
-{
-       MDisps *mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS);
-       int i;
-
-       if(mdisps) {
-               for(i = 0; i < me->totface; i++) {
-                       if(mdisps[i].totdisp == 0) {
-                               int nvert = (me->mface[i].v4)? 4: 3;
-                               mdisps[i].totdisp = multires_grid_tot[lvl]*nvert;
-                       }
-               }
-       }
-}
-
-static void multires_reallocate_mdisps(Mesh *me, MDisps *mdisps, int lvl)
-{
-       int i;
-
-       /* reallocate displacements to be filled in */
-       for(i = 0; i < me->totface; ++i) {
-               int nvert = (me->mface[i].v4)? 4: 3;
-               int totdisp = multires_grid_tot[lvl]*nvert;
-               float (*disps)[3] = MEM_callocN(sizeof(float) * 3 * totdisp, "multires disps");
-
-               if(mdisps[i].disps)
-                       MEM_freeN(mdisps[i].disps);
-
-               mdisps[i].disps = disps;
-               mdisps[i].totdisp = totdisp;
-       }
-}
 
 static void column_vectors_to_mat3(float mat[][3], float v1[3], float v2[3], float v3[3])
 {
@@ -352,7 +320,6 @@ void multiresModifier_del_levels(MultiresModifierData *mmd, Object *ob, int dire
        int levels = mmd->totlvl - lvl;
        MDisps *mdisps;
 
-       multires_set_tot_mdisps(me, mmd->totlvl);
        CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
        mdisps= CustomData_get_layer(&me->fdata, CD_MDISPS);
 
@@ -426,6 +393,24 @@ static DerivedMesh *subsurf_dm_create_local(Object *ob, DerivedMesh *dm, int lvl
        return subsurf_make_derived_from_derived(dm, &smd, 0, NULL, 0, 0);
 }
 
+static void multires_reallocate_mdisps(Mesh *me, MDisps *mdisps, int lvl)
+{
+       int i;
+
+       /* reallocate displacements to be filled in */
+       for(i = 0; i < me->totface; ++i) {
+               int nvert = (me->mface[i].v4)? 4: 3;
+               int totdisp = multires_grid_tot[lvl]*nvert;
+               float (*disps)[3] = MEM_callocN(sizeof(float) * 3 * totdisp, "multires disps");
+
+               if(mdisps[i].disps)
+                       MEM_freeN(mdisps[i].disps);
+
+               mdisps[i].disps = disps;
+               mdisps[i].totdisp = totdisp;
+       }
+}
+
 void multiresModifier_subdivide(MultiresModifierData *mmd, Object *ob, int updateblock, int simple)
 {
        Mesh *me = ob->data;
@@ -630,7 +615,6 @@ static void multiresModifier_update(DerivedMesh *dm)
        ob = ccgdm->multires.ob;
        me = ccgdm->multires.ob->data;
        mmd = ccgdm->multires.mmd;
-       multires_set_tot_mdisps(me, mmd->totlvl);
        CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
        mdisps = CustomData_get_layer(&me->fdata, CD_MDISPS);
 
@@ -766,7 +750,6 @@ DerivedMesh *multires_dm_create_from_derived(MultiresModifierData *mmd, int loca
                memcpy(subGridData[i], gridData[i], sizeof(DMGridData)*gridSize*gridSize);
        }
 
-       multires_set_tot_mdisps(me, mmd->totlvl);
        CustomData_external_read(&me->fdata, &me->id, CD_MASK_MDISPS, me->totface);
        multiresModifier_disp_run(result, ob->data, 0, 0, subGridData, mmd->totlvl);
 
index e48c4ea..4a96240 100644 (file)
@@ -1777,7 +1777,7 @@ static void input_preprocess(Scene *scene, Sequence *seq, TStripElem *se, int cf
 
        if(seq->flag & SEQ_MAKE_PREMUL) {
                if(se->ibuf->depth == 32 && se->ibuf->zbuf == 0) {
-                       converttopremul(se->ibuf);
+                       IMB_premultiply_alpha(se->ibuf);
                }
        }
 
index f4bcb6d..00614ef 100644 (file)
@@ -75,11 +75,6 @@ bMovieHandle *BKE_get_movie_handle(int imtype)
        mh.get_movie_path = filepath_avi;
        
        /* do the platform specific handles */
-#ifdef __sgi
-       if (imtype == R_MOVIE) {
-               
-       }
-#endif
 #if defined(_WIN32) && !defined(FREE_WINDOWS)
        if (imtype == R_AVICODEC) {             
                //XXX mh.start_movie= start_avi_codec;
index 91e7432..02d5fb2 100644 (file)
@@ -71,6 +71,7 @@ MINLINE void mul_v3_v3fl(float r[3], const float a[3], float f);
 MINLINE void mul_v2_v2(float r[2], const float a[2]);
 MINLINE void mul_v3_v3(float r[3], const float a[3]);
 MINLINE void mul_v3_v3v3(float r[3], const float a[3], const float b[3]);
+MINLINE void mul_v4_fl(float r[4], float f);
 
 MINLINE void madd_v3_v3fl(float r[3], const float a[3], float f);
 MINLINE void madd_v3_v3v3(float r[3], const float a[3], const float b[3]);
index 45bbd9f..9bdc6c4 100644 (file)
 #ifndef BLI_UTIL_H
 #define BLI_UTIL_H
 
-/* XXX doesn't seem to be used, marded for removal
-#define mallocstructN(x,y,name) (x*)MEM_mallocN((y)* sizeof(x),name)
-#define callocstructN(x,y,name) (x*)MEM_callocN((y)* sizeof(x),name)
-*/
-
 struct ListBase;
 struct direntry;
 
@@ -61,6 +56,7 @@ void BLI_join_dirfile(char *string, const char *dir, const char *file);
 int BKE_rebase_path(char *abs, int abs_size, char *rel, int rel_size, const char *base_dir, const char *src_dir, const char *dest_dir);
 void BLI_getlastdir(const char* dir, char *last, int maxlen);
 int BLI_testextensie(const char *str, const char *ext);
+int BLI_replace_extension(char *path, int maxlen, const char *ext);
 void BLI_uniquename(struct ListBase *list, void *vlink, const char defname[], char delim, short name_offs, short len);
 void BLI_newname(char * name, int add);
 int BLI_stringdec(const char *string, char *head, char *start, unsigned short *numlen);
index 61f175c..0d9db40 100644 (file)
@@ -76,5 +76,8 @@ struct LinkNode *BLI_read_file_as_lines(char *name);
         */
 void BLI_free_file_lines(struct LinkNode *lines);
 
+       /* Compare if one was last modified before the other */
+int            BLI_file_older(const char *file1, const char *file2);
+
 #endif /* BLI_STORAGE_H */
 
index 9748320..fa8d1a3 100644 (file)
@@ -188,6 +188,14 @@ MINLINE void mul_v3_v3(float r[3], const float a[3])
        r[2] *= a[2];
 }
 
+MINLINE void mul_v4_fl(float r[4], float f)
+{
+       r[0]*= f;
+       r[1]*= f;
+       r[2]*= f;
+       r[3]*= f;
+}
+
 MINLINE void madd_v2_v2fl(float r[2], const float a[2], float f)
 {
        r[0] += a[0]*f;
index 454663d..85d18d9 100644 (file)
@@ -1109,6 +1109,24 @@ int BLI_testextensie(const char *str, const char *ext)
        return (retval);
 }
 
+int BLI_replace_extension(char *path, int maxlen, const char *ext)
+{
+       int a;
+
+       for(a=strlen(path)-1; a>=0; a--)
+               if(path[a] == '.' || path[a] == '/' || path[a] == '\\')
+                       break;
+       
+       if(path[a] != '.')
+               a= strlen(path);
+
+       if(a + strlen(ext) >= maxlen)
+               return 0;
+
+       strcpy(path+a, ext);
+       return 1;
+}
+
 /* Converts "/foo/bar.txt" to "/foo/" and "bar.txt"
  * - wont change 'string'
  * - wont create any directories
index d9fea24..51d5f03 100644 (file)
@@ -500,3 +500,14 @@ void BLI_free_file_lines(LinkNode *lines)
 {
        BLI_linklist_free(lines, (void(*)(void*)) MEM_freeN);
 }
+
+int BLI_file_older(const char *file1, const char *file2)
+{
+       struct stat st1, st2;
+
+       if(stat(file1, &st1)) return 0;
+       if(stat(file2, &st2)) return 0;
+
+       return (st1.st_mtime < st2.st_mtime);
+}
+
index 42a3aeb..08835c4 100644 (file)
@@ -8453,8 +8453,6 @@ static void do_versions(FileData *fd, Library *lib, Main *main)
                                                ima->flag |= IMA_FIELDS;
                                        if(tex->imaflag & TEX_STD_FIELD_)
                                                ima->flag |= IMA_STD_FIELD;
-                                       if(tex->imaflag & TEX_ANTIALI_)
-                                               ima->flag |= IMA_ANTIALI;
                                }
                                tex->iuser.frames= tex->frames;
                                tex->iuser.fie_ima= tex->fie_ima;
index 9378cdc..b8628b0 100644 (file)
 #include "util.h"
 #include "externdef.h"
 
-#define IB_rect                        (1 << 0)
-#define IB_planes              (1 << 1)
-#define IB_cmap                        (1 << 2)
-#define IB_test                        (1 << 7)
-
-#define IB_fields              (1 << 11)
-#define IB_yuv                 (1 << 12)
-#define IB_zbuf                        (1 << 13)
-#define IB_rgba                        (1 << 14)
-
-#define JP2             (1 << 18)
-
-#define AMI             (1 << 31)
-#define PNG             (1 << 30)
-#define Anim            (1 << 29)
-#define TGA             (1 << 28)
-#define JPG             (1 << 27)
-#define BMP             (1 << 26)
-#ifdef WITH_QUICKTIME
-#define QUICKTIME       (1 << 25)
-#endif
-#define RADHDR  (1<<24)
-
-#define RAWTGA (TGA | 1)
-
-#define JPG_STD        (JPG | (0 << 8))
-#define JPG_VID        (JPG | (1 << 8))
-#define JPG_JST        (JPG | (2 << 8))
-#define JPG_MAX        (JPG | (3 << 8))
-#define JPG_MSK        (0xffffff00)
-
-#define AM_ham     (0x0800 | AMI)
-#define AM_hbrite   (0x0080 | AMI)
-#define AM_lace            (0x0004 | AMI)
-#define AM_hires    (0x8000 | AMI)
-#define AM_hblace   (AM_hbrite | AM_lace)
-#define AM_hilace   (AM_hires | AM_lace)
-#define AM_hamlace  (AM_ham | AM_lace)
-
-#define RGB888 1
-#define RGB555 2
-#define DYUV   3
-#define CLUT8  4
-#define CLUT7  5
-#define CLUT4  6
-#define CLUT3  7
-#define RL7    8
-#define RL3    9
-#define MPLTE  10
-
-#define DYUV1  0
-#define C233   1
-#define YUVX   2
-#define HAMX   3
-#define TANX   4
-
-#define AN_c233                        (Anim | C233)
-#define AN_yuvx                        (Anim | YUVX)
-#define AN_hamx                        (Anim | HAMX)
-#define AN_tanx                        (Anim | TANX)
-
-#define IS_amiga(x)            (x->ftype & AMI)
-#define IS_ham(x)              ((x->ftype & AM_ham) == AM_ham)
-#define IS_hbrite(x)   ((x->ftype & AM_hbrite) == AM_hbrite)
-
-#define IS_lace(x)             ((x->ftype & AM_lace) == AM_lace)
-#define IS_hires(x)            ((x->ftype & AM_hires) == AM_hires)
-#define IS_hblace(x)   ((x->ftype & AM_hblace) == AM_hblace)
-#define IS_hilace(x)   ((x->ftype & AM_hilace) == AM_hilace)
-#define IS_hamlace(x)  ((x->ftype & AM_hamlace) == AM_hamlace)
-
-#define IS_anim(x)             (x->ftype & Anim)
-#define IS_hamx(x)             (x->ftype == AN_hamx)
-#define IS_tga(x)              (x->ftype & TGA)
-#define IS_png(x)               (x->ftype & PNG)
-#define IS_bmp(x)               (x->ftype & BMP)
-#define IS_radhdr(x)           (x->ftype & RADHDR)
-#define IS_tim(x)              (x->ftype & TIM)
-#define IS_tiff(x)             (x->ftype & TIFF)
-#define IS_openexr(x)           (x->ftype & OPENEXR)
-#define IS_jp2(x)           (x->ftype & JP2)
-
-
-#define IMAGIC         0732
-#define IS_iris(x)             (x->ftype == IMAGIC)
-
-#define IS_jpg(x)              (x->ftype & JPG)
-#define IS_stdjpg(x)   ((x->ftype & JPG_MSK) == JPG_STD)
-#define IS_vidjpg(x)   ((x->ftype & JPG_MSK) == JPG_VID)
-#define IS_jstjpg(x)   ((x->ftype & JPG_MSK) == JPG_JST)
-#define IS_maxjpg(x)   ((x->ftype & JPG_MSK) == JPG_MAX)
-
-#define AN_INIT an_stringdec = stringdec; an_stringenc = stringenc;
-
-#define IB_MIPMAP_LEVELS       10
-
-struct MEM_CacheLimiterHandle_s;
+struct ImMetaData;
+
+#define IB_MIPMAP_LEVELS       20
+#define IB_FILENAME_SIZE       1023
 
 typedef struct ImBuf {
        struct ImBuf *next, *prev;      /**< allow lists of ImBufs, for caches or flipbooks */
        short   x, y;                           /**< width and Height of our image buffer */
-       short   skipx;                          /**< Width in ints to get to the next scanline */
        unsigned char   depth;          /**< Active amount of bits/bitplanes */
-       unsigned char   cbits;          /**< Amount of active bits in cmap */
-       unsigned short  mincol;         /**< smallest color in colormap */
-       unsigned short  maxcol;         /**< Largest color in colormap */
-       int     type;                                   /**< 0=abgr, 1=bitplanes */
-       int     ftype;                                  /**< File type we are going to save as */
-       unsigned int    *cmap;          /**< Color map data. */
        unsigned int    *rect;          /**< pixel values stored here */
-       unsigned int    **planes;       /**< bitplanes */
+       unsigned int    *crect;         /**< color corrected pixel values stored here */
        int     flags;                          /**< Controls which components should exist. */
        int     mall;                           /**< what is malloced internal, and can be freed */
-       short   xorig, yorig;           /**< Cordinates of first pixel of an image used in some formats (example: targa) */
-       char    name[1023];             /**< The file name assocated with this image */
-       char    namenull;               /**< Unused don't want to remove it thought messes things up */
-       int     userflags;                      /**< Used to set imbuf to Dirty and other stuff */
        int     *zbuf;                          /**< z buffer data, original zbuffer */
        float *zbuf_float;              /**< z buffer data, camera coordinates */
        void *userdata;                 /**< temporary storage, only used by baking at the moment */
@@ -159,34 +55,43 @@ typedef struct ImBuf {
        unsigned int   encodedsize;       /**< Size of data written to encodedbuffer */
        unsigned int   encodedbuffersize; /**< Size of encodedbuffer */
 
-       float *rect_float;              /**< floating point Rect equivilant */
+       float *rect_float;              /**< floating point Rect equivalent
+                                                               Linear RGB color space - may need gamma correction to 
+                                                               sRGB when generating 8bit representations */
        int channels;                   /**< amount of channels in rect_float (0 = 4 channel default) */
        float dither;                   /**< random dither value, for conversion from float -> byte rect */
-       
-       struct MEM_CacheLimiterHandle_s * c_handle; /**< handle for cache limiter */
-       struct ImgInfo * img_info;
-       int refcounter;                 /**< Refcounter for multiple users */
-       int index;                              /**< reference index for ImBuf lists */
-       
+       short profile;                  /** color space/profile preset that the byte rect buffer represents */
+       char profile_filename[256];             /** to be implemented properly, specific filename for custom profiles */
+
+       /* mipmapping */
        struct ImBuf *mipmap[IB_MIPMAP_LEVELS]; /**< MipMap levels, a series of halved images */
+       int miplevels;
+
+       /* externally used flags */
+       int index;                              /* reference index for ImBuf lists */
+       int     userflags;                      /* used to set imbuf to dirty and other stuff */
+       struct ImMetaData *metadata;
+
+       /* file information */
+       int     ftype;                                          /* file type we are going to save as */
+       char name[IB_FILENAME_SIZE];    /* filename associated with this image */
+
+       /* memory cache limiter */
+       struct MEM_CacheLimiterHandle_s *c_handle; /* handle for cache limiter */
+       int refcounter; /* reference counter for multiple users */
 } ImBuf;
 
 LIBIMPORT struct ImBuf *allocImBuf(short,short,uchar,uint,uchar);
 LIBIMPORT struct ImBuf *dupImBuf(struct ImBuf *);
 LIBIMPORT void freeImBuf(struct ImBuf*);
 
-LIBIMPORT short converttocmap(struct ImBuf* ibuf);
-
 LIBIMPORT short saveiff(struct ImBuf *,char *,int);
 
-LIBIMPORT struct ImBuf *loadiffmem(int *,int);
 LIBIMPORT struct ImBuf *loadifffile(int,int);
 LIBIMPORT struct ImBuf *loadiffname(char *,int);
 LIBIMPORT struct ImBuf *testiffname(char *,int);
 
 LIBIMPORT struct ImBuf *onehalf(struct ImBuf *);
-LIBIMPORT struct ImBuf *onethird(struct ImBuf *);
-LIBIMPORT struct ImBuf *halflace(struct ImBuf *);
 LIBIMPORT struct ImBuf *half_x(struct ImBuf *);
 LIBIMPORT struct ImBuf *half_y(struct ImBuf *);
 LIBIMPORT struct ImBuf *double_x(struct ImBuf *);
@@ -196,17 +101,11 @@ LIBIMPORT struct ImBuf *double_fast_y(struct ImBuf *);
 
 LIBIMPORT int ispic(char *);
 
-LIBIMPORT void dit2(struct ImBuf *, short, short);
-LIBIMPORT void dit0(struct ImBuf *, short, short);
-
 LIBIMPORT struct ImBuf *scaleImBuf(struct ImBuf *, short, short);
 LIBIMPORT struct ImBuf *scalefastImBuf(struct ImBuf *, short, short);
-LIBIMPORT struct ImBuf *scalefieldImBuf(struct ImBuf *, short, short);
-LIBIMPORT struct ImBuf *scalefastfieldImBuf(struct ImBuf *, short, short);
 
 LIBIMPORT void de_interlace(struct ImBuf *ib);
 LIBIMPORT void interlace(struct ImBuf *ib);
-LIBIMPORT void gamwarp(struct ImBuf *ibuf, double gamma);
 
 LIBIMPORT void IMB_rectcpy(struct ImBuf *dbuf, struct ImBuf *sbuf, 
        int destx, int desty, int srcx, int srcy, int width, int height);
index 28bc06e..9e739f7 100644 (file)
@@ -118,11 +118,6 @@ LIBEXPORT void freeImBuf(struct ImBuf* ib)
        IMB_freeImBuf(ib);
 }
 
-LIBEXPORT short converttocmap(struct ImBuf* ibuf)
-{
-       return IMB_converttocmap(ibuf);
-}
-
 LIBEXPORT short saveiff(struct ImBuf *ib,
                          char *c,
                          int i)
@@ -130,11 +125,6 @@ LIBEXPORT short saveiff(struct ImBuf *ib,
        return IMB_saveiff(ib, c, i);
 }
 
-LIBEXPORT struct ImBuf *loadiffmem(int *mem,int flags)
-{
-       return IMB_loadiffmem(mem, flags);
-}
-       
 LIBEXPORT struct ImBuf *loadifffile(int a,
                                                  int b)
 {
@@ -158,16 +148,6 @@ LIBEXPORT struct ImBuf *onehalf(struct ImBuf *ib)
        return IMB_onehalf(ib);
 }
 
-LIBEXPORT struct ImBuf *onethird(struct ImBuf *ib)
-{
-       return IMB_onethird(ib);
-}
-
-LIBEXPORT struct ImBuf *halflace(struct ImBuf *ib)
-{
-       return IMB_halflace(ib);
-}
-
 LIBEXPORT struct ImBuf *half_x(struct ImBuf *ib)
 {
        return IMB_half_x(ib);
@@ -203,20 +183,6 @@ LIBEXPORT int ispic(char * name)
        return IMB_ispic(name);
 }
 
-LIBEXPORT void dit2(struct ImBuf *ib,
-                  short a,
-                  short b)
-{
-       IMB_dit2(ib, a, b);
-}
-
-LIBEXPORT void dit0(struct ImBuf *ib,
-                  short a,
-                  short b)
-{
-       IMB_dit0(ib, a, b);
-}
-
 /* still the same name */
 /*  void (*ditherfunc)(struct ImBuf *, short, short){} */
 
@@ -234,21 +200,6 @@ LIBEXPORT struct ImBuf *scalefastImBuf(struct ImBuf *ib,
        return IMB_scalefastImBuf(ib, x, y);
 }
 
-
-LIBEXPORT struct ImBuf *scalefieldImBuf(struct ImBuf *ib,
-                                                         short x,
-                                                         short y)
-{
-       return IMB_scalefieldImBuf(ib, x, y);
-}
-
-LIBEXPORT struct ImBuf *scalefastfieldImBuf(struct ImBuf *ib,
-                                                                 short x,
-                                                                 short y)
-{
-       return IMB_scalefastfieldImBuf(ib, x, y);
-}
-
        /* Extra ones that some NaN (read Ton) plugins use,
         * even though they aren't in the header
         */
@@ -258,11 +209,6 @@ LIBEXPORT void interlace(struct ImBuf *ibuf)
        IMB_interlace(ibuf);
 }
 
-LIBEXPORT void gamwarp(struct ImBuf *ibuf, double gamma)
-{
-       IMB_gamwarp(ibuf,gamma);
-}
-        
 LIBEXPORT void de_interlace(struct ImBuf *ib)
 {
        IMB_de_interlace(ib);
@@ -334,15 +280,11 @@ int pluginapi_force_ref(void)
                GET_INT_FROM_POINTER( allocImBuf ) +
                GET_INT_FROM_POINTER( dupImBuf ) +
                GET_INT_FROM_POINTER( freeImBuf ) +
-               GET_INT_FROM_POINTER( converttocmap ) +
                GET_INT_FROM_POINTER( saveiff ) +
-               GET_INT_FROM_POINTER( loadiffmem ) +
                GET_INT_FROM_POINTER( loadifffile ) +
                GET_INT_FROM_POINTER( loadiffname ) +
                GET_INT_FROM_POINTER( testiffname ) +
                GET_INT_FROM_POINTER( onehalf ) +
-               GET_INT_FROM_POINTER( onethird ) +
-               GET_INT_FROM_POINTER( halflace ) +
                GET_INT_FROM_POINTER( half_x ) +
                GET_INT_FROM_POINTER( half_y ) +
                GET_INT_FROM_POINTER( double_x ) +
@@ -350,17 +292,12 @@ int pluginapi_force_ref(void)
                GET_INT_FROM_POINTER( double_fast_x ) +
                GET_INT_FROM_POINTER( double_fast_y ) +
                GET_INT_FROM_POINTER( ispic ) +
-               GET_INT_FROM_POINTER( dit2 ) +
-               GET_INT_FROM_POINTER( dit0 ) +
                GET_INT_FROM_POINTER( scaleImBuf ) +
                GET_INT_FROM_POINTER( scalefastImBuf ) +
-               GET_INT_FROM_POINTER( scalefieldImBuf ) +
-               GET_INT_FROM_POINTER( scalefastfieldImBuf ) +
                GET_INT_FROM_POINTER( hnoise ) +
                GET_INT_FROM_POINTER( hnoisep ) +
                GET_INT_FROM_POINTER( turbulence ) +
                GET_INT_FROM_POINTER( turbulence1 ) +
                GET_INT_FROM_POINTER( de_interlace ) +
-               GET_INT_FROM_POINTER( interlace ) +
-               GET_INT_FROM_POINTER( gamwarp );
+               GET_INT_FROM_POINTER( interlace );
 }
index 9c5b4fe..16ef2dd 100644 (file)
@@ -469,7 +469,7 @@ void ui_draw_but_IMAGE(ARegion *ar, uiBut *but, uiWidgetColors *wcol, rcti *rect
        //int w, h;
        
        /* hardcoded to splash, loading and freeing every draw, eek! */
-       ibuf= IMB_ibImageFromMemory((int *)datatoc_splash_png, datatoc_splash_png_size, IB_rect);
+       ibuf= IMB_ibImageFromMemory((unsigned char*)datatoc_splash_png, datatoc_splash_png_size, IB_rect);
 
        if (!ibuf) return;
        
index 7ffd46c..622b9dd 100644 (file)
@@ -480,7 +480,7 @@ static void init_internal_icons()
                }
        }
        if(bbuf==NULL)
-               bbuf = IMB_ibImageFromMemory((int *)datatoc_blenderbuttons, datatoc_blenderbuttons_size, IB_rect);
+               bbuf = IMB_ibImageFromMemory((unsigned char*)datatoc_blenderbuttons, datatoc_blenderbuttons_size, IB_rect);
 
        if(bbuf) {
                /* free existing texture if any */
index 1224243..32b60b6 100644 (file)
@@ -88,8 +88,6 @@ static int screenshot_exec(bContext *C, wmOperator *op)
                ibuf= IMB_allocImBuf(scd->dumpsx, scd->dumpsy, 24, 0, 0);
                ibuf->rect= scd->dumprect;
                
-               if(scene->r.planes == 8) IMB_cspace(ibuf, rgb_to_bw);
-               
                BKE_write_ibuf(scene, ibuf, path, scene->r.imtype, scene->r.subimtype, scene->r.quality);
 
                IMB_freeImBuf(ibuf);
index f38b06e..6655208 100644 (file)
@@ -375,7 +375,7 @@ void filelist_init_icons()
        short x, y, k;
        ImBuf *bbuf;
        ImBuf *ibuf;
-       bbuf = IMB_ibImageFromMemory((int *)datatoc_prvicons, datatoc_prvicons_size, IB_rect);
+       bbuf = IMB_ibImageFromMemory((unsigned char*)datatoc_prvicons, datatoc_prvicons_size, IB_rect);
        if (bbuf) {
                for (y=0; y<SPECIAL_IMG_ROWS; y++) {
                        for (x=0; x<SPECIAL_IMG_COLS; x++) {
@@ -850,6 +850,7 @@ void filelist_setfiletypes(struct FileList* filelist, short has_quicktime)
                                ||      BLI_testextensie(file->relname, ".psd")
                                ||      BLI_testextensie(file->relname, ".tif")
                                ||      BLI_testextensie(file->relname, ".tiff")
+                               ||      BLI_testextensie(file->relname, ".tx")
                                ||      BLI_testextensie(file->relname, ".pct")
                                ||      BLI_testextensie(file->relname, ".pict")
                                ||      BLI_testextensie(file->relname, ".pntg") //macpaint
@@ -913,6 +914,7 @@ void filelist_setfiletypes(struct FileList* filelist, short has_quicktime)
                                ||      BLI_testextensie(file->relname, ".iff")
                                ||      BLI_testextensie(file->relname, ".tif")
                                ||      BLI_testextensie(file->relname, ".tiff")
+                               ||      BLI_testextensie(file->relname, ".tx")
                                ||      BLI_testextensie(file->relname, ".hdr")
 #ifdef WITH_DDS
                                ||      BLI_testextensie(file->relname, ".dds")
index d05ed3e..c9b3098 100644 (file)
@@ -183,7 +183,6 @@ void save_image_filesel_str(Scene *scene, char *str)
 #endif
                        /* default we save jpeg, also for all movie formats */
                case R_JPEG90:
-               case R_MOVIE:
                case R_AVICODEC:
                case R_AVIRAW:
                case R_AVIJPEG:
index aaae7e1..f7c810e 100644 (file)
@@ -882,7 +882,6 @@ void uiTemplateImage(uiLayout *layout, bContext *C, PointerRNA *ptr, char *propn
                                        uiLayoutSetActive(row, RNA_boolean_get(&imaptr, "fields"));
 
                                        col= uiLayoutColumn(split, 0);
-                                       uiItemR(col, &imaptr, "antialias", 0, NULL, 0);
                                        uiItemR(col, &imaptr, "premultiply", 0, NULL, 0);
                                }
                        }
index 14c5849..37399c9 100644 (file)
  *     blenlib handles guarded memory management in blender-style.
  *     BLI_winstuff.h makes a few windows specific behaviours
  *     posix-compliant.
- * - avi
- *     avi defines import/export to the avi format. Only anim.c
- *     needs this. It uses the following functions:
- *       - avi_close
- *       - avi_is_avi
- *       - avi_print_error
- *       - avi_open_movie
- *       - avi_read_frame
- *       - avi_get_stream
- *     Additionally, it needs the types from the avi module.
- * - external jpeg library
- *     The jpeg lib defines import/export to the jpeg format.
- *     only jpeg.c needs these. Used functions are:
- *       - jpeg_destroy
- *       - jpeg_resync_to_restart
- *       - jpeg_set_marker_processor
- *       - jpeg_read_header
- *       - jpeg_start_decompress
- *       - jpeg_abort_decompress
- *       - jpeg_read_scanlines
- *       - jpeg_finish_decompress
- *       - jpeg_std_error
- *       - jpeg_create_decompress
- *       - jpeg_stdio_src
- *       - jpeg_start_compress
- *       - jpeg_write_marker
- *       - jpeg_write_scanlines
- *       - jpeg_finish_compress
- *       - jpeg_create_compress
- *       - jpeg_stdio_dest
- *       - jpeg_set_defaults
- *       - jpeg_set_quality
- *       - jpeg_destroy_compress
- *     Additionally, it needs the types from the jpeg lib.
  */
 /*
  * $Id$ 
  *
  * ***** END GPL LICENSE BLOCK *****
  */
+
 #ifndef IMB_IMBUF_H
 #define IMB_IMBUF_H
 
@@ -117,33 +84,16 @@ struct anim;
 
 /**
  *
- * @attention Defined in cmap.c
- */
-void IMB_freeImBufdata(void);
-
-/**
- *
- * @attention Defined in cmap.c
- */
-void IMB_applycmap(struct ImBuf *ibuf);
-
-/**
- *
- * @attention Defined in cmap.c
- */
-short IMB_converttocmap(struct ImBuf *ibuf);
-
-/**
- *
- * @attention Defined in cmap.c
+ * @attention Defined in allocimbuf.c
  */
-int IMB_alpha_to_col0(int value);
+void IMB_init(void);
+void IMB_exit(void);
 
 /**
  *
  * @attention Defined in readimage.c
  */
-struct ImBuf *IMB_ibImageFromMemory(int *mem, int size, int flags);
+struct ImBuf *IMB_ibImageFromMemory(unsigned char *mem, int size, int flags);
 
 /**
  *
@@ -161,7 +111,7 @@ struct ImBuf *IMB_loadiffname(const char *naam, int flags);
  *
  * @attention Defined in allocimbuf.c
  */
-void IMB_freeImBuf(struct ImBuf * ibuf);
+void IMB_freeImBuf(struct ImBuf *ibuf);
 
 /**
  *
@@ -180,37 +130,33 @@ struct ImBuf *IMB_allocImBuf(short x, short y,
  * @attention Defined in allocimbuf.c
  */
 
-void IMB_refImBuf(struct ImBuf * ibuf);
+void IMB_refImBuf(struct ImBuf *ibuf);
 
 /**
  *
  * @attention Defined in allocimbuf.c
  */
-void IMB_cache_limiter_insert(struct ImBuf * i);
-void IMB_cache_limiter_unmanage(struct ImBuf * i);
-void IMB_cache_limiter_touch(struct ImBuf * i);
-void IMB_cache_limiter_ref(struct ImBuf * i);
-void IMB_cache_limiter_unref(struct ImBuf * i);
-int IMB_cache_limiter_get_refcount(struct ImBuf * i);
+void IMB_cache_limiter_insert(struct ImBuf *i);
+void IMB_cache_limiter_unmanage(struct ImBuf *i);
+void IMB_cache_limiter_touch(struct ImBuf *i);
+void IMB_cache_limiter_ref(struct ImBuf *i);
+void IMB_cache_limiter_unref(struct ImBuf *i);
+int IMB_cache_limiter_get_refcount(struct ImBuf *i);
 
-/**
- *
- * @attention Defined in allocimbuf.c
- */
-struct ImBuf *IMB_dupImBuf(struct ImBuf *ibuf1);
+void IMB_free_cache_limiter(void);
 
 /**
  *
  * @attention Defined in allocimbuf.c
  */
-short addzbufImBuf(struct ImBuf * ibuf);
-short addzbuffloatImBuf(struct ImBuf * ibuf);
+struct ImBuf *IMB_dupImBuf(struct ImBuf *ibuf1);
 
 /**
  *
  * @attention Defined in allocimbuf.c
  */
-void IMB_freecmapImBuf(struct ImBuf * ibuf);
+short addzbufImBuf(struct ImBuf *ibuf);
+short addzbuffloatImBuf(struct ImBuf *ibuf);
 
 /**
  *
@@ -253,8 +199,8 @@ int IMB_anim_get_duration(struct anim *anim);
  *
  * @attention Defined in anim.c
  */
-struct anim * IMB_open_anim(const char * name, int ib_flags);
-void IMB_close_anim(struct anim * anim);
+struct anim *IMB_open_anim(const char *name, int ib_flags);
+void IMB_close_anim(struct anim *anim);
 
 /**
  *
@@ -262,53 +208,34 @@ void IMB_close_anim(struct anim * anim);
  */
 
 int ismovie(char *name);
-void IMB_anim_set_preseek(struct anim * anim, int preseek);
-int IMB_anim_get_preseek(struct anim * anim);
+void IMB_anim_set_preseek(struct anim *anim, int preseek);
+int IMB_anim_get_preseek(struct anim *anim);
 
 /**
  *
  * @attention Defined in anim.c
  */
 
-struct ImBuf * IMB_anim_absolute(struct anim * anim, int position);
+struct ImBuf *IMB_anim_absolute(struct anim *anim, int position);
 
 /**
  *
  * @attention Defined in anim.c
  * fetches a define previewframe, usually half way into the movie
  */
-struct ImBuf * IMB_anim_previewframe(struct anim * anim);
+struct ImBuf *IMB_anim_previewframe(struct anim *anim);
 
 /**
  *
  * @attention Defined in anim.c
  */
-void IMB_free_anim_ibuf(struct anim * anim);
+void IMB_free_anim_ibuf(struct anim *anim);
 
 /**
  *
  * @attention Defined in anim.c
  */
-void IMB_free_anim(struct anim * anim);
-
-/**
- *
- * @attention Defined in anim.c
- */
-struct ImBuf * IMB_anim_nextpic(struct anim * anim);     
-
-
-/**
- *
- * @attention Defined in antialias.c
- */
-void IMB_clever_double (struct ImBuf * ibuf);
-
-/**
- *
- * @attention Defined in antialias.c
- */
-void IMB_antialias(struct ImBuf * ibuf);
+void IMB_free_anim(struct anim *anim);
 
 /**
  *
@@ -318,30 +245,34 @@ void IMB_filter(struct ImBuf *ibuf);
 void IMB_filterN(struct ImBuf *out, struct ImBuf *in);
 void IMB_filter_extend(struct ImBuf *ibuf, char *mask);
 void IMB_makemipmap(struct ImBuf *ibuf, int use_filter);
+struct ImBuf *IMB_getmipmap(struct ImBuf *ibuf, int level);
 
 /**
  *
- * @attention Defined in filter.c
+ * @attention Defined in cache.c
  */
-void IMB_filtery(struct ImBuf *ibuf);
+
+void IMB_tile_cache_params(int totthread, int maxmem);
+unsigned int *IMB_gettile(struct ImBuf *ibuf, int tx, int ty, int thread);
+void IMB_tiles_to_rect(struct ImBuf *ibuf);
 
 /**
  *
- * @attention Defined in scaling.c
+ * @attention Defined in filter.c
  */
-struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1);
+void IMB_filtery(struct ImBuf *ibuf);
 
 /**
  *
  * @attention Defined in scaling.c
  */
-struct ImBuf *IMB_scaleImBuf(struct ImBuf * ibuf, short newx, short newy);
+struct ImBuf *IMB_onehalf(struct ImBuf *ibuf1);
 
 /**
  *
  * @attention Defined in scaling.c
  */
-struct ImBuf *IMB_scalefieldImBuf(struct ImBuf *ibuf, short newx, short newy);
+struct ImBuf *IMB_scaleImBuf(struct ImBuf *ibuf, short newx, short newy);
 
 /**
  *
@@ -372,13 +303,13 @@ int IMB_ispic(char *name);
  *
  * @attention Defined in util.c
  */
-int IMB_isanim(char * name);
+int IMB_isanim(char *name);
 
 /**
  *
  * @attention Defined in util.c
  */
-int imb_get_anim_type(char * name);
+int imb_get_anim_type(char *name);
 
 /**
  *
@@ -386,7 +317,6 @@ int imb_get_anim_type(char * name);
  */
 void IMB_de_interlace(struct ImBuf *ibuf);
 void IMB_interlace(struct ImBuf *ibuf);
-void IMB_gamwarp(struct ImBuf *ibuf, double gamma);
 void IMB_rect_from_float(struct ImBuf *ibuf);
 void IMB_float_from_rect(struct ImBuf *ibuf);
 
@@ -397,18 +327,6 @@ void IMB_float_from_rect(struct ImBuf *ibuf);
  * @attention Defined in imageprocess.c
  */
 void IMB_convert_rgba_to_abgr(struct ImBuf *ibuf);
-/**
- *
- * @attention defined in imageprocess.c
- */
-void bicubic_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
-void neareast_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
-void bilinear_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
-
-void bicubic_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
-void neareast_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
-void bilinear_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
-void bilinear_interpolation_color_wrap(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
 
 /**
  * Change the ordering of the color bytes pointed to by rect from
@@ -420,11 +338,16 @@ void IMB_convert_bgra_to_rgba(int size, unsigned int *rect);
 
 /**
  *
- * @attention defined in scaling.c
+ * @attention defined in imageprocess.c
  */
-struct ImBuf *IMB_scalefastfieldImBuf(struct ImBuf *ibuf,
-                                                                         short newx,
-                                                                         short newy);
+void bicubic_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
+void neareast_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
+void bilinear_interpolation(struct ImBuf *in, struct ImBuf *out, float u, float v, int xout, int yout);
+
+void bicubic_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+void neareast_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+void bilinear_interpolation_color(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
+void bilinear_interpolation_color_wrap(struct ImBuf *in, unsigned char *col, float *col_float, float u, float v);
 
 /**
  *
@@ -478,68 +401,23 @@ struct ImBuf *IMB_double_fast_y(struct ImBuf *ibuf1);
  */
 struct ImBuf *IMB_double_y(struct ImBuf *ibuf1);
 
-/**
- *
- * @attention defined in scaling.c
- */
-struct ImBuf *IMB_onethird(struct ImBuf *ibuf1);
-
-/**
- *
- * @attention defined in scaling.c
- */
-struct ImBuf *IMB_halflace(struct ImBuf *ibuf1);
-
-/**
- *
- * @attention defined in dither.c
- */
-void IMB_dit2(struct ImBuf * ibuf, short ofs, short bits);
-
-/**
- *
- * @attention defined in dither.c
- */
-void IMB_dit0(struct ImBuf * ibuf, short ofs, short bits);
-
-/** Externally used vars: fortunately they do not use funny types */
-
-/**
- * boolean toggle that tells whether or not to
- * scale the color map in the y-direction.
- *
- * @attention declared in hamx.c
- */
-extern int scalecmapY;
-
-/**
- * This 'matrix' defines the transformation from rgb to bw color
- * maps. You need to do a sort of dot-product for that. It is a matrix
- * with fixed coefficients, extracted from some book.
- *
- * @attention Defined in matrix.h, only included in hamx.c
- */
-extern float rgb_to_bw[4][4]; 
-
 /**
  *
  * @attention Defined in rotate.c
  */
 void IMB_flipx(struct ImBuf *ibuf);
-void IMB_flipy(struct ImBuf * ibuf);
+void IMB_flipy(struct ImBuf *ibuf);
 
-/**
- *
- * @attention Defined in cspace.c
- */
-void IMB_cspace(struct ImBuf *ibuf, float mat[][4]);
+/* Premultiply alpha */
+
+void IMB_premultiply_alpha(struct ImBuf *ibuf);
 
 /**
  *
  * @attention Defined in allocimbuf.c
  */
-void IMB_freezbufImBuf(struct ImBuf * ibuf);
-void IMB_freezbuffloatImBuf(struct ImBuf * ibuf);
+void IMB_freezbufImBuf(struct ImBuf *ibuf);
+void IMB_freezbuffloatImBuf(struct ImBuf *ibuf);
 
 /**
  *
@@ -551,34 +429,19 @@ void IMB_rectfill_area(struct ImBuf *ibuf, float *col, int x1, int y1, int x2, i
 /* this should not be here, really, we needed it for operating on render data, IMB_rectfill_area calls it */
 void buf_rectfill_area(unsigned char *rect, float *rectf, int width, int height, float *col, int x1, int y1, int x2, int y2);
 
-/* defined in imginfo.c */
-int IMB_imginfo_change_field(struct ImBuf *img, const char *key, const char *field);
+/* defined in metadata.c */
+int IMB_metadata_change_field(struct ImBuf *img, const char *key, const char *field);
 
 /* exported for image tools in blender, to quickly allocate 32 bits rect */
-short imb_addrectImBuf(struct ImBuf * ibuf);
-void imb_freerectImBuf(struct ImBuf * ibuf);
+short imb_addrectImBuf(struct ImBuf *ibuf);
+void imb_freerectImBuf(struct ImBuf *ibuf);
 
-short imb_addrectfloatImBuf(struct ImBuf * ibuf);
-void imb_freerectfloatImBuf(struct ImBuf * ibuf);
-void imb_freemipmapImBuf(struct ImBuf * ibuf);
+short imb_addrectfloatImBuf(struct ImBuf *ibuf);
+void imb_freerectfloatImBuf(struct ImBuf *ibuf);
+void imb_freemipmapImBuf(struct ImBuf *ibuf);
 
-#ifdef WITH_QUICKTIME
-/**
- *
- * @attention Defined in quicktime_import.c
- */
-void quicktime_init(void);
-
-/**
- *
- * @attention Defined in quicktime_import.c
- */
-void quicktime_exit(void);
-
-#endif //WITH_QUICKTIME
-
-/* intern/dynlibtiff.c */
-void libtiff_init(void);
-void libtiff_exit(void);
+short imb_addtilesImBuf(struct ImBuf *ibuf);
+void imb_freetilesImBuf(struct ImBuf *ibuf);
 
 #endif
+
index 6c58641..e0dcc34 100644 (file)
 #ifndef IMB_IMBUF_TYPES_H
 #define IMB_IMBUF_TYPES_H
 
-#include <stdio.h>        /* for size_t */
-#include "DNA_listBase.h" /* for ListBase */
-struct _AviMovie;
-struct Mdec;
+struct ImMetaData;
 
-struct ImgInfo;
-
-#define IB_MIPMAP_LEVELS       10
+#define IB_MIPMAP_LEVELS       20
+#define IB_FILENAME_SIZE       1023
 
 /**
  * \brief The basic imbuf type
@@ -73,56 +69,69 @@ struct ImgInfo;
  */
 typedef struct ImBuf {
        struct ImBuf *next, *prev;      /**< allow lists of ImBufs, for caches or flipbooks */
-       short   x, y;                           /**< width and Height of our image buffer */
-       short   skipx;                          /**< Width in ints to get to the next scanline */
-       unsigned char   depth;          /**< Active amount of bits/bitplanes */
-       unsigned char   cbits;          /**< Amount of active bits in cmap */
-       unsigned short  mincol;         /**< smallest color in colormap */
-       unsigned short  maxcol;         /**< Largest color in colormap */
-       int     type;                                   /**< 0=abgr, 1=bitplanes */
-       int     ftype;                                  /**< File type we are going to save as */
-       unsigned int    *cmap;          /**< Color map data. */
-       unsigned int    *rect;          /**< pixel values stored here */
-       unsigned int    *crect;         /**< color corrected pixel values stored here */
-       unsigned int    **planes;       /**< bitplanes */
-       int     flags;                          /**< Controls which components should exist. */
-       int     mall;                           /**< what is malloced internal, and can be freed */
-       short   xorig, yorig;           /**< Cordinates of first pixel of an image used in some formats (example: targa) */
-       char    name[1023];             /**< The file name assocated with this image */
-       char    namenull;               /**< Unused don't want to remove it thought messes things up */
-       int     userflags;                      /**< Used to set imbuf to Dirty and other stuff */
-       int     *zbuf;                          /**< z buffer data, original zbuffer */
-       float *zbuf_float;              /**< z buffer data, camera coordinates */
-       void *userdata;                 /**< temporary storage, only used by baking at the moment */
-       unsigned char *encodedbuffer;     /**< Compressed image only used with png currently */
-       unsigned int   encodedsize;       /**< Size of data written to encodedbuffer */
-       unsigned int   encodedbuffersize; /**< Size of encodedbuffer */
-
-       float *rect_float;              /**< floating point Rect equivalent
-                                                               Linear RGB color space - may need gamma correction to 
-                                                               sRGB when generating 8bit representations */
-       int channels;                   /**< amount of channels in rect_float (0 = 4 channel default) */
-       float dither;                   /**< random dither value, for conversion from float -> byte rect */
-       short profile;                  /** color space/profile preset that the byte rect buffer represents */
-       char profile_filename[256];             /** to be implemented properly, specific filename for custom profiles */
-       
-       struct MEM_CacheLimiterHandle_s * c_handle; /**< handle for cache limiter */
-       struct ImgInfo * img_info;
-       int refcounter;                 /**< Refcounter for multiple users */
-       int index;                              /**< reference index for ImBuf lists */
+
+       /* dimensions */
+       short x, y;                             /* width and Height of our image buffer */
+       unsigned char depth;    /* Active amount of bits/bitplanes */
+       int channels;                   /* amount of channels in rect_float (0 = 4 channel default) */
+
+       /* flags */
+       int     flags;                          /* Controls which components should exist. */
+       int     mall;                           /* what is malloced internal, and can be freed */
+
+       /* pixels */
+       unsigned int *rect;             /* pixel values stored here */
+       unsigned int *crect;    /* color corrected pixel values stored here */
+       float *rect_float;              /* floating point Rect equivalent
+                                                       Linear RGB color space - may need gamma correction to 
+                                                       sRGB when generating 8bit representations */
        
-       struct ImBuf *mipmap[IB_MIPMAP_LEVELS]; /**< MipMap levels, a series of halved images */
+       /* tiled pixel storage */
+       int tilex, tiley;
+       int xtiles, ytiles;
+       unsigned int **tiles;   
+
+       /* zbuffer */
+       int     *zbuf;                          /* z buffer data, original zbuffer */
+       float *zbuf_float;              /* z buffer data, camera coordinates */
+
+       /* parameters used by conversion between byte and float */
+       float dither;                           /* random dither value, for conversion from float -> byte rect */
+       short profile;                          /* color space/profile preset that the byte rect buffer represents */
+       char profile_filename[256];     /* to be implemented properly, specific filename for custom profiles */
+
+       /* mipmapping */
+       struct ImBuf *mipmap[IB_MIPMAP_LEVELS]; /* MipMap levels, a series of halved images */
+       int miptot, miplevel;
+
+       /* externally used data */
+       int index;                                              /* reference index for ImBuf lists */
+       int     userflags;                                      /* used to set imbuf to dirty and other stuff */
+       struct ImMetaData *metadata;    /* image metadata */
+       void *userdata;                                 /* temporary storage, only used by baking at the moment */
+
+       /* file information */
+       int     ftype;                                                  /* file type we are going to save as */
+       char name[IB_FILENAME_SIZE];            /* filename associated with this image */
+       char cachename[IB_FILENAME_SIZE];       /* full filename used for reading from cache */
+
+       /* memory cache limiter */
+       struct MEM_CacheLimiterHandle_s *c_handle; /* handle for cache limiter */
+       int refcounter; /* reference counter for multiple users */
+
+       /* some parameters to pass along for packing images */
+       unsigned char *encodedbuffer;     /* Compressed image only used with png currently */
+       unsigned int   encodedsize;       /* Size of data written to encodedbuffer */
+       unsigned int   encodedbuffersize; /* Size of encodedbuffer */
 } ImBuf;
 
 /* Moved from BKE_bmfont_types.h because it is a userflag bit mask. */
 /**
  * \brief Flags used internally by blender for imagebuffers
  */
-typedef enum {
-       IB_BITMAPFONT = 1 << 0,         /* This image is a font */
-       IB_BITMAPDIRTY = 1 << 1         /* Image needs to be saved is not the same as filename */
-} ImBuf_userflagsMask;
 
+#define IB_BITMAPFONT          (1 << 0)        /* this image is a font */
+#define IB_BITMAPDIRTY         (1 << 1)        /* image needs to be saved is not the same as filename */
 
 /* From iff.h. This was once moved away by Frank, now Nzc moves it
  * back. Such is the way it is... It is a long list of defines, and
@@ -136,33 +145,26 @@ typedef enum {
  */
 /**@{*/
 /** \brief Flag defining the components of the ImBuf struct. */
-#define IB_rect                        (1 << 0)
-#define IB_planes              (1 << 1)
-#define IB_cmap                        (1 << 2)
-
-#define IB_vert                        (1 << 4)
-#define IB_freem               (1 << 6)
-#define IB_test                        (1 << 7)
-
-#define IB_ttob                        (1 << 8)
-#define IB_subdlta             (1 << 9)
-#define IB_fields              (1 << 11)
-#define IB_zbuf                        (1 << 13)
-
-#define IB_mem                 (1 << 14)
-#define IB_rectfloat   (1 << 15)
-#define IB_zbuffloat   (1 << 16)
-#define IB_multilayer  (1 << 17)
-#define IB_imginfo             (1 << 18)
-#define IB_animdeinterlace      (1 << 19)
+
+#define IB_rect                                (1 << 0)
+#define IB_test                                (1 << 1)
+#define IB_fields                      (1 << 2)
+#define IB_zbuf                                (1 << 3)
+#define IB_mem                         (1 << 4)
+#define IB_rectfloat           (1 << 5)
+#define IB_zbuffloat           (1 << 6)
+#define IB_multilayer          (1 << 7)
+#define IB_metadata                    (1 << 8)
+#define IB_animdeinterlace     (1 << 9)
+#define IB_tiles                       (1 << 10)
+#define IB_tilecache           (1 << 11)
+#define IB_premul                      (1 << 12)
 
 /*
  * The bit flag is stored in the ImBuf.ftype variable.
  * Note that the lower 10 bits is used for storing custom flags 
  */
-#define AMI                            (1 << 31)
 #define PNG                            (1 << 30)
-#define Anim           (1 << 29)
 #define TGA                            (1 << 28)
 #define JPG                            (1 << 27)
 #define BMP                            (1 << 26)
@@ -188,11 +190,11 @@ typedef enum {
 
 #ifdef WITH_OPENJPEG
 #define JP2                            (1 << 18)
-#define JP2_12BIT                      (1 << 17)
-#define JP2_16BIT                      (1 << 16)
+#define JP2_12BIT              (1 << 17)
+#define JP2_16BIT              (1 << 16)
 #define JP2_YCC                        (1 << 15)
-#define JP2_CINE                       (1 << 14)
-#define JP2_CINE_48FPS         (1 << 13) 
+#define JP2_CINE               (1 << 14)
+#define JP2_CINE_48FPS (1 << 13) 
 #endif
 
 #define RAWTGA         (TGA | 1)
@@ -203,66 +205,16 @@ typedef enum {
 #define JPG_MAX                (JPG | (3 << 8))
 #define JPG_MSK                (0xffffff00)
 
-#define AM_ham         (0x0800 | AMI)
-#define AM_hbrite       (0x0080 | AMI)
-
-#define C233   1
-#define YUVX   2
-#define HAMX   3
-#define TANX   4
-
-#define AN_c233                        (Anim | C233)
-#define AN_yuvx                        (Anim | YUVX)
-#define AN_hamx                        (Anim | HAMX)
-#define AN_tanx                        (Anim | TANX)
-/**@}*/
+#define IMAGIC                 0732
 
 /**
  * \name Imbuf preset profile tags
  * \brief Some predefined color space profiles that 8 bit imbufs can represent
  */
-/**@{*/
 #define IB_PROFILE_NONE                        0
 #define IB_PROFILE_LINEAR_RGB  1
 #define IB_PROFILE_SRGB                        2
 #define IB_PROFILE_CUSTOM              3
-/**@}*/
-
-
-/** \name Imbuf File Type Tests
- * \brief These macros test if an ImBuf struct is the corresponding file type.
- */
-/**@{*/
-/** \brief Tests the ImBuf.ftype variable for the file format. */
-#define IS_amiga(x)            (x->ftype & AMI)
-#define IS_ham(x)              ((x->ftype & AM_ham) == AM_ham)
-#define IS_hbrite(x)   ((x->ftype & AM_hbrite) == AM_hbrite)
-
-#define IS_anim(x)             (x->ftype & Anim)
-#define IS_hamx(x)             (x->ftype == AN_hamx)
-#define IS_tga(x)              (x->ftype & TGA)
-#define IS_png(x)              (x->ftype & PNG)
-#define IS_openexr(x)  (x->ftype & OPENEXR)
-#define IS_jp2(x)              (x->ftype & JP2)
-#define IS_cineon(x)   (x->ftype & CINEON)
-#define IS_dpx(x)              (x->ftype & DPX)
-#define IS_bmp(x)              (x->ftype & BMP)
-#define IS_tiff(x)             (x->ftype & TIF)
-#define IS_radhdr(x)   (x->ftype & RADHDR)
-
-#ifdef WITH_DDS
-#define IS_dds(x)              (x->ftype & DDS)
-#endif
-
-#define IMAGIC         0732
-#define IS_iris(x)             (x->ftype == IMAGIC)
-
-#define IS_jpg(x)              (x->ftype & JPG)
-#define IS_stdjpg(x)   ((x->ftype & JPG_MSK) == JPG_STD)
-#define IS_vidjpg(x)   ((x->ftype & JPG_MSK) == JPG_VID)
-#define IS_jstjpg(x)   ((x->ftype & JPG_MSK) == JPG_JST)
-#define IS_maxjpg(x)   ((x->ftype & JPG_MSK) == JPG_MAX)
-/**@}*/
 
 #endif
 
index 165accc..c7e39b9 100644 (file)
@@ -53,7 +53,7 @@ typedef enum ThumbSource {
        THB_SOURCE_MOVIE
 } ThumbSource;
 
-// IB_imginfo
+// IB_metadata
 
 /* create thumbnail for file and returns new imbuf for thumbnail */
 ImBuf* IMB_thumb_create(const char* path, ThumbSize size, ThumbSource source);
index a8d91b2..b4f56df 100644 (file)
@@ -14,6 +14,9 @@ incs += ' ' + env['BF_ZLIB_INC']
 
 defs = []
 
+if env['OURPLATFORM'] in ('win32-vc', 'win32-mingw', 'linuxcross', 'win64-vc'):
+    incs += ' ' + env['BF_PTHREADS_INC']
+
 if env['WITH_BF_OPENEXR']:
     defs.append('WITH_OPENEXR')
 
diff --git a/source/blender/imbuf/intern/IMB_amiga.h b/source/blender/imbuf/intern/IMB_amiga.h
deleted file mode 100644 (file)
index e8d908d..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/**
- * IMB_amiga.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_amiga.h
- * \ingroup imbuf
- * \brief Function declarations for amiga.c
- */
-
-#ifndef IMB_AMIGA_H
-#define IMB_AMIGA_H
-
-struct ImBuf;
-
-struct ImBuf *imb_loadamiga(int *iffmem,int flags);
-short imb_encodebodyh(struct ImBuf *ibuf, int file);
-short imb_encodebodyv(struct ImBuf *ibuf, int file);
-
-#endif
-
index 39b8e48..c9eac2c 100644 (file)
@@ -65,7 +65,6 @@
                                                        BLI_countlist BLI_stringdec */
 
 #include "imbuf.h"
-#include "imbuf_patch.h"
 
 #include "AVI_avi.h"
 
@@ -93,7 +92,6 @@
 #include "IMB_imbuf.h"
 
 #include "IMB_allocimbuf.h"
-#include "IMB_bitplanes.h"
 
 
 
 #define ANIM_NONE              (0)
 #define ANIM_SEQUENCE          (1 << 0)
 #define ANIM_DIR               (1 << 1)
-#define ANIM_ANIM5             (1 << 2)
+#define ANIM_DEPRECATED        (1 << 2)
 #define ANIM_TGA               (1 << 3)
 #define ANIM_MOVIE             (1 << 4)
 #define ANIM_MDEC              (1 << 5)
 #define ANIM_FFMPEG             (1 << 8)
 #define ANIM_REDCODE            (1 << 9)
 
-#define ANIM5_MMAP             0
-#define ANIM5_MALLOC           1
-#define ANIM5_SNGBUF           2
-#define ANIM5_XOR              4
-
 #define MAXNUMSTREAMS          50
 
+struct _AviMovie;
+
 struct anim {
        int ib_flags;
        int curtype;
@@ -145,14 +140,6 @@ struct anim {
                /* voor sequence */
        char first[256];
        
-               /* anim5 */
-       struct ListBase anim5base;
-       void            * anim5mmap;
-       int             anim5len;
-       struct Anim5Delta *anim5curdlta;
-       void            (*anim5decode)(struct ImBuf *, unsigned char *);
-       int             anim5flags;
-       
                /* movie */
        void *movie;
        void *track;
diff --git a/source/blender/imbuf/intern/IMB_anim5.h b/source/blender/imbuf/intern/IMB_anim5.h
deleted file mode 100644 (file)
index 245b3b9..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-/* IMB_anim.h */
-#ifndef IMB_ANIM5_H
-#define IMB_ANIM5_H
-
-struct anim;
-
-/**
- *
- * @attention Defined in anim5.c
- */
-int nextanim5(struct anim * anim);
-int rewindanim5(struct anim * anim);
-int startanim5(struct anim * anim);
-void free_anim_anim5(struct anim * anim);
-struct ImBuf * anim5_fetchibuf(struct anim * anim);
-
-
-#endif
-
-
diff --git a/source/blender/imbuf/intern/IMB_bitplanes.h b/source/blender/imbuf/intern/IMB_bitplanes.h
deleted file mode 100644 (file)
index c8deb6f..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * IMB_bitplanes.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_bitplanes.h
- * \ingroup imbuf
- * \brief Function declarations for bitplanes.c
- */
-
-#ifndef IMB_BITPLANES_H
-#define IMB_BITPLANES_H
-
-struct ImBuf;
-
-void imb_bptolong(struct ImBuf *ibuf);
-void imb_longtobp(struct ImBuf *ibuf);
-unsigned int **imb_copyplanelist(struct ImBuf *ibuf);
-
-#endif
-
diff --git a/source/blender/imbuf/intern/IMB_bmp.h b/source/blender/imbuf/intern/IMB_bmp.h
deleted file mode 100644 (file)
index 99561ee..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * IMB_bmp.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_bmp.h
- * \ingroup imbuf
- * \brief Function declarations for bmp.c
- */
-
-#ifndef IMB_BMP_H
-#define IMB_BMP_H
-
-struct ImBuf;
-
-int imb_is_a_bmp(void *buf);
-struct ImBuf *imb_bmp_decode(unsigned char *mem, int size, int flags);
-short imb_savebmp(struct ImBuf *ibuf, char *name, int flags);
-
-#endif
-
diff --git a/source/blender/imbuf/intern/IMB_cmap.h b/source/blender/imbuf/intern/IMB_cmap.h
deleted file mode 100644 (file)
index 5e30e66..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * IMB_cmap.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_cmap.h
- * \ingroup imbuf
- * \brief Function declarations for cmap.c
- */
-#ifndef IMB_CMAP_H
-#define IMB_CMAP_H
-
-struct ImBuf;
-
-void imb_makecolarray(struct ImBuf *ibuf, unsigned char *mem, short nocols);
-void imb_losecmapbits(struct ImBuf *ibuf, unsigned int *coltab);
-short *imb_coldeltatab(unsigned char *coltab, short mincol, short maxcol, short cbits);
-
-#endif
-
diff --git a/source/blender/imbuf/intern/IMB_cocoa.h b/source/blender/imbuf/intern/IMB_cocoa.h
deleted file mode 100644 (file)
index a62e702..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-/*
- * IMB_cocoa.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * Contributor(s): Damien Plisson 10/2009
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_cocoa.h
- * \ingroup imbuf
- * \brief Function declarations for imbuf_cocoa.m
- */
-
-#ifndef IMB_COCOA_H
-#define IMB_COCOA_H
-
-/* Foward declaration of ImBuf structure. */
-struct ImBuf;
-
-/* Declarations for imbuf_cocoa.m */
-struct ImBuf *imb_cocoaLoadImage(unsigned char *mem, int size, int flags);
-short imb_cocoaSaveImage(struct ImBuf *ibuf, char *name, int flags);
-
-#endif /* IMB_COCOA_H */
-
diff --git a/source/blender/imbuf/intern/IMB_divers.h b/source/blender/imbuf/intern/IMB_divers.h
deleted file mode 100644 (file)
index 5ab0ce2..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * divers.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_divers.h
- * \ingroup imbuf
- * \brief Function declarations for divers.c
- */
-
-#ifndef IMB_DIVERS_H
-#define IMB_DIVERS_H
-
-struct ImBuf;
-
-void imb_checkncols(struct ImBuf *ibuf);
-
-#endif
-
diff --git a/source/blender/imbuf/intern/IMB_dpxcineon.h b/source/blender/imbuf/intern/IMB_dpxcineon.h
deleted file mode 100644 (file)
index 4719ecd..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * IMB_dpxcineon.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version. 
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_dpxcineon.h
- * \ingroup imbuf
- */
-#ifndef _IMB_DPX_CINEON_H
-#define _IMB_DPX_CINEON_H
-
-struct ImBuf;
-
-short imb_savecineon(struct ImBuf *buf, char *myfil, int flags);
-struct ImBuf *imb_loadcineon(unsigned char *mem, int size, int flags);
-int imb_is_cineon(void *buf);
-short imb_save_dpx(struct ImBuf *buf, char *myfile, int flags);
-struct ImBuf *imb_loaddpx(unsigned char *mem, int size, int flags);
-int imb_is_dpx(void *buf);
-
-#endif /*_IMB_DPX_CINEON_H*/
diff --git a/source/blender/imbuf/intern/IMB_filetype.h b/source/blender/imbuf/intern/IMB_filetype.h
new file mode 100644 (file)
index 0000000..f6afe20
--- /dev/null
@@ -0,0 +1,120 @@
+/**
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Contributor(s): Blender Foundation 2010.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#ifndef IMB_FILETYPE_H
+#define IMB_FILETYPE_H
+
+/* Generic File Type */
+
+struct ImBuf;
+
+#define IM_FTYPE_FLOAT 1
+
+typedef struct ImFileType {
+       void (*init)(void);
+       void (*exit)(void);
+
+       int (*is_a)(unsigned char *buf);
+       int (*ftype)(struct ImFileType *type, struct ImBuf *ibuf);
+       struct ImBuf *(*load)(unsigned char *mem, int size, int flags);
+       int (*save)(struct ImBuf *ibuf, char *name, int flags);
+       void (*load_tile)(struct ImBuf *ibuf, unsigned char *mem, int size, int tx, int ty, unsigned int *rect);
+
+       int flag;
+       int filetype;
+} ImFileType;
+
+extern ImFileType IMB_FILE_TYPES[];
+
+void imb_filetypes_init(void);
+void imb_filetypes_exit(void);
+
+void imb_tile_cache_init(void);
+void imb_tile_cache_exit(void);
+
+void imb_loadtile(struct ImBuf *ibuf, int tx, int ty, unsigned int *rect);
+void imb_tile_cache_tile_free(struct ImBuf *ibuf, int tx, int ty);
+
+/* Type Specific Functions */
+
+/* png */
+int imb_is_a_png(unsigned char *buf);
+struct ImBuf *imb_loadpng(unsigned char *mem, int size, int flags);
+int imb_savepng(struct ImBuf *ibuf, char *name, int flags);
+
+/* targa */
+int imb_is_a_targa(unsigned char *buf);
+struct ImBuf *imb_loadtarga(unsigned char *mem, int size, int flags);
+int imb_savetarga(struct ImBuf * ibuf, char *name, int flags);
+
+/* iris */
+int imb_is_a_iris(unsigned char *mem);
+struct ImBuf *imb_loadiris(unsigned char *mem, int size, int flags);
+int imb_saveiris(struct ImBuf * ibuf, char *name, int flags);
+
+/* jp2 */
+int imb_is_a_jp2(unsigned char *buf);
+struct ImBuf *imb_jp2_decode(unsigned char *mem, int size, int flags);
+int imb_savejp2(struct ImBuf *ibuf, char *name, int flags);
+
+/* jpeg */
+int imb_is_a_jpeg(unsigned char *mem);
+int imb_savejpeg(struct ImBuf * ibuf, char * name, int flags);
+struct ImBuf * imb_ibJpegImageFromFilename (const char * filename, int flags);
+struct ImBuf * imb_load_jpeg (unsigned char * buffer, int size, int flags);
+
+/* bmp */
+int imb_is_a_bmp(unsigned char *buf);
+struct ImBuf *imb_bmp_decode(unsigned char *mem, int size, int flags);
+int imb_savebmp(struct ImBuf *ibuf, char *name, int flags);
+
+/* cocoa */
+struct ImBuf *imb_cocoaLoadImage(unsigned char *mem, int size, int flags);
+short imb_cocoaSaveImage(struct ImBuf *ibuf, char *name, int flags);
+
+/* cineon */
+int imb_savecineon(struct ImBuf *buf, char *myfil, int flags);
+struct ImBuf *imb_loadcineon(unsigned char *mem, int size, int flags);
+int imb_is_cineon(unsigned char *buf);
+
+/* dpx */
+int imb_save_dpx(struct ImBuf *buf, char *myfile, int flags);
+struct ImBuf *imb_loaddpx(unsigned char *mem, int size, int flags);
+int imb_is_dpx(unsigned char *buf);
+
+/* hdr */
+int imb_is_a_hdr(unsigned char *buf);
+struct ImBuf *imb_loadhdr(unsigned char *mem, int size, int flags);
+int imb_savehdr(struct ImBuf * ibuf, char *name, int flags);
+
+/* tiff */
+int imb_is_a_tiff(unsigned char *buf);
+struct ImBuf *imb_loadtiff(unsigned char *mem, int size, int flags);
+void imb_loadtiletiff(struct ImBuf *ibuf, unsigned char *mem, int size,
+       int tx, int ty, unsigned int *rect);
+int imb_savetiff(struct ImBuf *ibuf, char *name, int flags);
+void *libtiff_findsymbol(char *name);
+
+#endif /* IMB_FILETYPE_H */
+
index 4f54ea9..84ad72c 100644 (file)
@@ -41,5 +41,8 @@ struct ImBuf;
 
 void imb_filterx(struct ImBuf *ibuf);
 
+void IMB_premultiply_rect(unsigned int *rect, int depth, int w, int h);
+void IMB_premultiply_rect_float(float *rect_float, int depth, int w, int h);
+
 #endif
 
diff --git a/source/blender/imbuf/intern/IMB_hamx.h b/source/blender/imbuf/intern/IMB_hamx.h
deleted file mode 100644 (file)
index e39aef8..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-/*
- * IMB_hamx.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_hamx.h
- * \ingroup imbuf
- * \brief Function declarations for hamx.c
- */
-
-#ifndef IMB_HAMX_H
-#define IMB_HAMX_H
-
-struct ImBuf;
-
-struct ImBuf *imb_loadanim(int *iffmem, int flags);
-short imb_enc_anim(struct ImBuf *ibuf, int file);  
-void imb_convhamx(struct ImBuf *ibuf, unsigned char *coltab, short *deltab);
-
-#endif
-
diff --git a/source/blender/imbuf/intern/IMB_iff.h b/source/blender/imbuf/intern/IMB_iff.h
deleted file mode 100644 (file)
index 7d0a74d..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * IMB_iff.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_iff.h
- * \ingroup imbuf
- * \brief Function declarations for iff.c
- */
-
-#ifndef IMB_IFF_H
-#define IMB_IFF_H
-
-struct ImBuf;
-
-unsigned short imb_start_iff(struct ImBuf *ibuf, int file);
-unsigned short imb_update_iff(int file, int code);
-
-#endif
-
diff --git a/source/blender/imbuf/intern/IMB_iris.h b/source/blender/imbuf/intern/IMB_iris.h
deleted file mode 100644 (file)
index 3aa157c..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-/*
- * IMB_iris.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_iris.h
- * \ingroup imbuf
- * \brief Function declarations for iris.c
- */
-
-#ifndef IMB_IRIS_H
-#define IMB_IRIS_H
-
-struct ImBuf;
-
-struct ImBuf *imb_loadiris(unsigned char *mem, int flags);
-short imb_saveiris(struct ImBuf * ibuf, char *name, int flags);
-
-#endif
-
diff --git a/source/blender/imbuf/intern/IMB_jp2.h b/source/blender/imbuf/intern/IMB_jp2.h
deleted file mode 100644 (file)
index 66ff693..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * IMB_jp2.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_jp2.h
- * \ingroup imbuf
- * \brief Function declarations for jp2.c
- */
-
-#ifndef IMB_JP2_H
-#define IMB_JP2_H
-
-#ifdef WITH_OPENJPEG
-struct ImBuf;
-
-int imb_is_a_jp2(void *buf);
-struct ImBuf *imb_jp2_decode(unsigned char *mem, int size, int flags);
-short imb_savejp2(struct ImBuf *ibuf, char *name, int flags);
-#endif /* WITH_OPENJPEG */
-
-#endif
-
diff --git a/source/blender/imbuf/intern/IMB_jpeg.h b/source/blender/imbuf/intern/IMB_jpeg.h
deleted file mode 100644 (file)
index 8e0ba34..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-/*
- * IMB_jpeg.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_jpeg.h
- * \ingroup imbuf
- * \brief Function declarations for jpeg.c
- */
-
-#ifndef IMB_JPEG_H
-#define IMB_JPEG_H
-
-struct ImBuf;
-struct jpeg_compress_struct;
-
-int imb_is_a_jpeg(unsigned char *mem);
-int imb_savejpeg(struct ImBuf * ibuf, char * name, int flags);
-struct ImBuf * imb_ibJpegImageFromFilename (const char * filename, int flags);
-struct ImBuf * imb_ibJpegImageFromMemory (unsigned char * buffer, int size, int flags);
-
-#endif
-
similarity index 76%
rename from source/blender/imbuf/intern/IMB_imginfo.h
rename to source/blender/imbuf/intern/IMB_metadata.h
index 2884abc..751978a 100644 (file)
@@ -1,5 +1,5 @@
 /**
- * $Id$ 
+ * $Id: IMB_metadata.h 28607 2010-05-06 07:10:56Z campbellbarton 
  *
  * ***** BEGIN GPL LICENSE BLOCK *****
  *
 #ifndef _IMB_IMGINFO_H
 #define _IMB_IMGINFO_H
 
-#ifdef __cplusplus
-extern "C" {
-#endif
-
 struct ImBuf;
 
-typedef struct ImgInfo {
-       struct ImgInfo *next, *prev;
+typedef struct ImMetaData {
+       struct ImMetaData *next, *prev;
        char* key;
        char* value;
        int len;
-} ImgInfo;
+} ImMetaData;
 
-/** The imginfo is a list of key/value pairs (both char*) that can me 
+/** The metadata is a list of key/value pairs (both char*) that can me 
        saved in the header of several image formats.
        Apart from some common keys like 
        'Software' and 'Description' (png standard) we'll use keys within the 
@@ -52,8 +48,8 @@ typedef struct ImgInfo {
 */
 
 
-/* free blender ImgInfo struct */
-void IMB_imginfo_free(struct ImBuf* img);
+/* free blender ImMetaData struct */
+void IMB_metadata_free(struct ImBuf* img);
 
 /** read the field from the image info into the field 
  *  @param img - the ImBuf that contains the image data
@@ -63,23 +59,22 @@ void IMB_imginfo_free(struct ImBuf* img);
  *  @param len - length of value buffer allocated by user.
  *  @return    - 1 (true) if ImageInfo present and value for the key found, 0 (false) otherwise
  */
-int IMB_imginfo_get_field(struct ImBuf* img, const char* key, char* value, int len);
+int IMB_metadata_get_field(struct ImBuf* img, const char* key, char* value, int len);
 
-/** set user data in the ImgInfo struct, which has to be allocated with IMB_imginfo_create
+/** set user data in the ImMetaData struct, which has to be allocated with IMB_metadata_create
  *  before calling this function.
  *  @param img - the ImBuf that contains the image data
  *  @param key - the key of the field
  *  @param value - the data to be written to the field. zero terminated string
  *  @return    - 1 (true) if ImageInfo present, 0 (false) otherwise
  */
-int IMB_imginfo_add_field(struct ImBuf* img, const char* key, const char* field);
+int IMB_metadata_add_field(struct ImBuf* img, const char* key, const char* field);
 
-/** delete the key/field par in the ImgInfo struct.
+/** delete the key/field par in the ImMetaData struct.
  * @param img - the ImBuf that contains the image data
  * @param key - the key of the field
  * @return - 1 (true) if delete the key/field, 0 (false) otherwise
  */
-int IMB_imginfo_del_field(struct ImBuf *img, const char *key);
+int IMB_metadata_del_field(struct ImBuf *img, const char *key);
 
 #endif /* _IMB_IMGINFO_H */
-
diff --git a/source/blender/imbuf/intern/IMB_png.h b/source/blender/imbuf/intern/IMB_png.h
deleted file mode 100644 (file)
index 28e3adb..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * IMB_png.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_png.h
- * \ingroup imbuf
- * \brief Function declarations for png.c
- */
-
-#ifndef IMB_PNG_H
-#define IMB_PNG_H
-
-struct ImBuf;
-
-int imb_is_a_png(void *buf);
-struct ImBuf *imb_loadpng(unsigned char *mem, int size, int flags);
-
-short imb_savepng(struct ImBuf *ibuf, char *name, int flags);
-
-#endif
-
diff --git a/source/blender/imbuf/intern/IMB_radiance_hdr.h b/source/blender/imbuf/intern/IMB_radiance_hdr.h
deleted file mode 100644 (file)
index 3257159..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * IMB_radiance_hdr.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifndef IMB_RADIANCE_HDR_H
-#define IMB_RADIANCE_HDR_H
-
-struct ImBuf;
-
-int imb_is_a_hdr(void *buf);
-
-struct ImBuf *imb_loadhdr(unsigned char *mem, int size, int flags);
-short imb_savehdr(struct ImBuf * ibuf, char *name, int flags);
-
-#endif
diff --git a/source/blender/imbuf/intern/IMB_targa.h b/source/blender/imbuf/intern/IMB_targa.h
deleted file mode 100644 (file)
index a81801e..0000000
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * IMB_targa.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_targa.h
- * \ingroup imbuf
- * \brief Function declarations for targa.c
- */
-
-#ifndef IMB_TARGA_H
-#define IMB_TARGA_H
-
-struct ImBuf;
-
-int imb_is_a_targa(void *buf);
-
-struct ImBuf *imb_loadtarga(unsigned char *mem, int size, int flags);
-short imb_savetarga(struct ImBuf * ibuf, char *name, int flags);
-
-#endif
-
diff --git a/source/blender/imbuf/intern/IMB_tiff.h b/source/blender/imbuf/intern/IMB_tiff.h
deleted file mode 100644 (file)
index ccd993f..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-/*
- * IMB_tiff.h
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * Contributor(s): Jonathan Merritt.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-/**
- * \file IMB_tiff.h
- * \ingroup imbuf
- * \brief Function declarations for tiff.c
- */
-
-#ifndef IMB_TIFF_H
-#define IMB_TIFF_H
-
-/* Foward declaration of ImBuf structure. */
-struct ImBuf;
-
-/* Declarations for tiff.c */
-int           imb_is_a_tiff(void *buf);
-struct ImBuf *imb_loadtiff(unsigned char *mem, int size, int flags);
-short         imb_savetiff(struct ImBuf *ibuf, char *name, int flags);
-void*         libtiff_findsymbol(char *name);
-
-#endif /* IMB_TIFF_H */
-
index 056de9a..606913d 100644 (file)
 /* It's become a bit messy... Basically, only the IMB_ prefixed files
  * should remain. */
 
-#include "IMB_imbuf_types.h"
-
-#include "imbuf.h"
-#include "imbuf_patch.h"
 #include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
 
-#include "IMB_divers.h"
 #include "IMB_allocimbuf.h"
-#include "IMB_imginfo.h"
-#include "MEM_CacheLimiterC-Api.h"
+#include "IMB_filetype.h"
+#include "IMB_metadata.h"
 
-static unsigned int dfltcmap[16] = {
-       0x00000000, 0xffffffff, 0x777777ff, 0xccccccff, 
-       0xcc3344ff, 0xdd8844ff, 0xccdd44ff, 0x888833ff, 
-       0x338844ff, 0x44dd44ff, 0x44ddccff, 0x3388ccff, 
-       0x8888ddff, 0x4433ccff, 0xcc33ccff, 0xcc88ddff
-};
+#include "imbuf.h"
 
-void imb_freeplanesImBuf(struct ImBuf * ibuf)
-{
-       if (ibuf==NULL) return;
-       if (ibuf->planes){
-               if (ibuf->mall & IB_planes) MEM_freeN(ibuf->planes);
-       }
-       ibuf->planes = 0;
-       ibuf->mall &= ~IB_planes;
-}
+#include "MEM_CacheLimiterC-Api.h"
 
-void imb_freemipmapImBuf(struct ImBuf * ibuf)
+void imb_freemipmapImBuf(ImBuf *ibuf)
 {
        int a;
        
-       for(a=0; a<IB_MIPMAP_LEVELS; a++) {
-               if(ibuf->mipmap[a]) IMB_freeImBuf(ibuf->mipmap[a]);
-               ibuf->mipmap[a]= NULL;
+       for(a=1; a<ibuf->miptot; a++) {
+               if(ibuf->mipmap[a-1])
+                       IMB_freeImBuf(ibuf->mipmap[a-1]);
+               ibuf->mipmap[a-1]= NULL;
        }
+
+       ibuf->miptot= 0;
 }
 
 /* any free rect frees mipmaps to be sure, creation is in render on first request */
-void imb_freerectfloatImBuf(struct ImBuf * ibuf)
+void imb_freerectfloatImBuf(ImBuf *ibuf)
 {
-       if (ibuf==NULL) return;
+       if(ibuf==NULL) return;
        
-       if (ibuf->rect_float) {
-               if (ibuf->mall & IB_rectfloat) {
-                       MEM_freeN(ibuf->rect_float);
-                       ibuf->rect_float=NULL;
-               }
+       if(ibuf->rect_float && (ibuf->mall & IB_rectfloat)) {
+               MEM_freeN(ibuf->rect_float);
+               ibuf->rect_float=NULL;
        }
 
        imb_freemipmapImBuf(ibuf);
@@ -89,19 +73,15 @@ void imb_freerectfloatImBuf(struct ImBuf * ibuf)
 }
 
 /* any free rect frees mipmaps to be sure, creation is in render on first request */
-void imb_freerectImBuf(struct ImBuf * ibuf)
+void imb_freerectImBuf(ImBuf *ibuf)
 {
-       if (ibuf==NULL) return;
+       if(ibuf==NULL) return;
        
-       if (ibuf->crect && ibuf->crect != ibuf->rect) {
+       if(ibuf->crect && ibuf->crect != ibuf->rect)
                MEM_freeN(ibuf->crect);
-       }
 
-       if (ibuf->rect) {
-               if (ibuf->mall & IB_rect) {
-                       MEM_freeN(ibuf->rect);
-               }
-       }
+       if(ibuf->rect && (ibuf->mall & IB_rect))
+               MEM_freeN(ibuf->rect);
        
        imb_freemipmapImBuf(ibuf);
        
@@ -110,150 +90,166 @@ void imb_freerectImBuf(struct ImBuf * ibuf)
        ibuf->mall &= ~IB_rect;
 }
 
-static void freeencodedbufferImBuf(struct ImBuf * ibuf)
+void imb_freetilesImBuf(ImBuf *ibuf)
 {
-       if (ibuf==NULL) return;
-       if (ibuf->encodedbuffer){
-               if (ibuf->mall & IB_mem) MEM_freeN(ibuf->encodedbuffer);
+       int tx, ty;
+
+       if(ibuf==NULL) return;
+
+       if(ibuf->tiles && (ibuf->mall & IB_tiles)) {
+               for(ty=0; ty<ibuf->ytiles; ty++) {
+                       for(tx=0; tx<ibuf->xtiles; tx++) {
+                               if(ibuf->tiles[ibuf->xtiles*ty + tx]) {
+                                       imb_tile_cache_tile_free(ibuf, tx, ty);
+                                       MEM_freeN(ibuf->tiles[ibuf->xtiles*ty + tx]);
+                               }
+                       }
+               }
+
+               MEM_freeN(ibuf->tiles);
        }
+
+       ibuf->tiles= NULL;
+       ibuf->mall &= ~IB_tiles;
+}
+
+static void freeencodedbufferImBuf(ImBuf *ibuf)
+{
+       if(ibuf==NULL) return;
+
+       if(ibuf->encodedbuffer && (ibuf->mall & IB_mem))
+               MEM_freeN(ibuf->encodedbuffer);
+
        ibuf->encodedbuffer = 0;
        ibuf->encodedbuffersize = 0;
        ibuf->encodedsize = 0;
        ibuf->mall &= ~IB_mem;
 }
 
-void IMB_freezbufImBuf(struct ImBuf * ibuf)
+void IMB_freezbufImBuf(ImBuf *ibuf)
 {
-       if (ibuf==NULL) return;
-       if (ibuf->zbuf){
-               if (ibuf->mall & IB_zbuf) MEM_freeN(ibuf->zbuf);
-       }
+       if(ibuf==NULL) return;
+
+       if(ibuf->zbuf && (ibuf->mall & IB_zbuf))
+               MEM_freeN(ibuf->zbuf);
+
        ibuf->zbuf= NULL;
        ibuf->mall &= ~IB_zbuf;
 }
 
-void IMB_freezbuffloatImBuf(struct ImBuf * ibuf)
+void IMB_freezbuffloatImBuf(ImBuf *ibuf)
 {
-       if (ibuf==NULL) return;
-       if (ibuf->zbuf_float){
-               if (ibuf->mall & IB_zbuffloat) MEM_freeN(ibuf->zbuf_float);
-       }
+       if(ibuf==NULL) return;
+
+       if(ibuf->zbuf_float && (ibuf->mall & IB_zbuffloat))
+               MEM_freeN(ibuf->zbuf_float);
+
        ibuf->zbuf_float= NULL;
        ibuf->mall &= ~IB_zbuffloat;
 }
 
-void IMB_freecmapImBuf(struct ImBuf * ibuf)
-{
-       if (ibuf==NULL) return;
-       if (ibuf->cmap){
-               if (ibuf->mall & IB_cmap) MEM_freeN(ibuf->cmap);
-       }
-       ibuf->cmap = 0;
-       ibuf->mall &= ~IB_cmap;
-}
-
-void IMB_freeImBuf(struct ImBuf * ibuf)
+void IMB_freeImBuf(ImBuf *ibuf)
 {
-       if (ibuf){
-               if (ibuf->refcounter > 0) {
+       if(ibuf) {
+               if(ibuf->refcounter > 0) {
                        ibuf->refcounter--;
-               } else {
-                       imb_freeplanesImBuf(ibuf);
+               }
+               else {
                        imb_freerectImBuf(ibuf);
                        imb_freerectfloatImBuf(ibuf);
+                       imb_freetilesImBuf(ibuf);
                        IMB_freezbufImBuf(ibuf);
                        IMB_freezbuffloatImBuf(ibuf);
-                       IMB_freecmapImBuf(ibuf);
                        freeencodedbufferImBuf(ibuf);
                        IMB_cache_limiter_unmanage(ibuf);
-                       IMB_imginfo_free(ibuf);
+                       IMB_metadata_free(ibuf);
                        MEM_freeN(ibuf);
                }
        }
 }
 
-void IMB_refImBuf(struct ImBuf * ibuf)
+void IMB_refImBuf(ImBuf *ibuf)
 {
        ibuf->refcounter++;
 }
 
-short addzbufImBuf(struct ImBuf * ibuf)
+short addzbufImBuf(ImBuf *ibuf)
 {
        int size;
        
-       if (ibuf==NULL) return(FALSE);
+       if(ibuf==NULL) return FALSE;
        
        IMB_freezbufImBuf(ibuf);
        
-       size = ibuf->x * ibuf->y * sizeof(unsigned int);
-       if ( (ibuf->zbuf = MEM_mapallocN(size, "addzbufImBuf")) ){
+       size = ibuf->x *ibuf->y *sizeof(unsigned int);
+       if((ibuf->zbuf = MEM_mapallocN(size, "addzbufImBuf"))) {
                ibuf->mall |= IB_zbuf;
                ibuf->flags |= IB_zbuf;
-               return (TRUE);
+               return TRUE;
        }
        
-       return (FALSE);
+       return FALSE;
 }
 
-short addzbuffloatImBuf(struct ImBuf * ibuf)
+short addzbuffloatImBuf(ImBuf *ibuf)
 {
        int size;
        
-       if (ibuf==NULL) return(FALSE);
+       if(ibuf==NULL) return FALSE;
        
        IMB_freezbuffloatImBuf(ibuf);
        
-       size = ibuf->x * ibuf->y * sizeof(float);
-       if ( (ibuf->zbuf_float = MEM_mapallocN(size, "addzbuffloatImBuf")) ){
+       size = ibuf->x *ibuf->y *sizeof(float);
+       if((ibuf->zbuf_float = MEM_mapallocN(size, "addzbuffloatImBuf"))) {
                ibuf->mall |= IB_zbuffloat;
                ibuf->flags |= IB_zbuffloat;
-               return (TRUE);
+               return TRUE;
        }
        
-       return (FALSE);
+       return FALSE;
 }
 
 
-short imb_addencodedbufferImBuf(struct ImBuf * ibuf)
+short imb_addencodedbufferImBuf(ImBuf *ibuf)
 {
-       if (ibuf==NULL) return(FALSE);
+       if(ibuf==NULL) return FALSE;
 
        freeencodedbufferImBuf(ibuf);
 
-       if (ibuf->encodedbuffersize == 0) 
+       if(ibuf->encodedbuffersize == 0) 
                ibuf->encodedbuffersize = 10000;
 
        ibuf->encodedsize = 0;
 
-       if ( (ibuf->encodedbuffer = MEM_mallocN(ibuf->encodedbuffersize, "addencodedbufferImBuf") )){
+       if((ibuf->encodedbuffer = MEM_mallocN(ibuf->encodedbuffersize, "addencodedbufferImBuf"))) {
                ibuf->mall |= IB_mem;
                ibuf->flags |= IB_mem;
-               return (TRUE);
+               return TRUE;
        }
 
-       return (FALSE);
+       return FALSE;
 }
 
 
-short imb_enlargeencodedbufferImBuf(struct ImBuf * ibuf)
+short imb_enlargeencodedbufferImBuf(ImBuf *ibuf)
 {
        unsigned int newsize, encodedsize;
        void *newbuffer;
 
-       if (ibuf==NULL) return(FALSE);
+       if(ibuf==NULL) return FALSE;
 
-       if (ibuf->encodedbuffersize < ibuf->encodedsize) {
+       if(ibuf->encodedbuffersize < ibuf->encodedsize) {
                printf("imb_enlargeencodedbufferImBuf: error in parameters\n");
-               return(FALSE);
+               return FALSE;
        }
 
-       newsize = 2 * ibuf->encodedbuffersize;
-       if (newsize < 10000) newsize = 10000;
+       newsize = 2 *ibuf->encodedbuffersize;
+       if(newsize < 10000) newsize = 10000;
 
        newbuffer = MEM_mallocN(newsize, "enlargeencodedbufferImBuf");
-       if (newbuffer == NULL) return(FALSE);
+       if(newbuffer == NULL) return FALSE;
 
-       if (ibuf->encodedbuffer) {
+       if(ibuf->encodedbuffer) {
                memcpy(newbuffer, ibuf->encodedbuffer, ibuf->encodedsize);
        } else {
                ibuf->encodedsize = 0;
@@ -269,153 +265,98 @@ short imb_enlargeencodedbufferImBuf(struct ImBuf * ibuf)
        ibuf->mall |= IB_mem;
        ibuf->flags |= IB_mem;
 
-       return (TRUE);
+       return TRUE;
 }
 
-short imb_addrectfloatImBuf(struct ImBuf * ibuf)
+short imb_addrectfloatImBuf(ImBuf *ibuf)
 {
        int size;
        
-       if (ibuf==NULL) return(FALSE);
+       if(ibuf==NULL) return FALSE;
        
        imb_freerectfloatImBuf(ibuf);
        
-       size = ibuf->x * ibuf->y;
-       size = size * 4 * sizeof(float);
+       size = ibuf->x *ibuf->y;
+       size = size *4 *sizeof(float);
        ibuf->channels= 4;
        
-       if ( (ibuf->rect_float = MEM_mapallocN(size, "imb_addrectfloatImBuf")) ){
+       if((ibuf->rect_float = MEM_mapallocN(size, "imb_addrectfloatImBuf"))) {
                ibuf->mall |= IB_rectfloat;
                ibuf->flags |= IB_rectfloat;
-               return (TRUE);
+               return TRUE;
        }
        
-       return (FALSE);
+       return FALSE;
 }
 
 /* question; why also add zbuf? */
-short imb_addrectImBuf(struct ImBuf * ibuf)
+short imb_addrectImBuf(ImBuf *ibuf)
 {
        int size;
 
-       if (ibuf==NULL) return(FALSE);
+       if(ibuf==NULL) return FALSE;
        imb_freerectImBuf(ibuf);
 
-       size = ibuf->x * ibuf->y;
-       size = size * sizeof(unsigned int);
+       size = ibuf->x*ibuf->y;
+       size = size*sizeof(unsigned int);
 
-       if ( (ibuf->rect = MEM_mapallocN(size, "imb_addrectImBuf")) ){
+       if((ibuf->rect = MEM_mapallocN(size, "imb_addrectImBuf"))) {
                ibuf->mall |= IB_rect;
                ibuf->flags |= IB_rect;
-               if (ibuf->depth > 32) return (addzbufImBuf(ibuf));
-               else return (TRUE);
-       }
-
-       return (FALSE);
-}
-
-
-short imb_addcmapImBuf(struct ImBuf *ibuf)
-{
-       int min;
-       
-       if (ibuf==NULL) return(FALSE);
-       IMB_freecmapImBuf(ibuf);
-
-       imb_checkncols(ibuf);
-       if (ibuf->maxcol == 0) return (TRUE);
-
-       if ( (ibuf->cmap = MEM_callocN(sizeof(unsigned int) * ibuf->maxcol, "imb_addcmapImBuf") ) ){
-               min = ibuf->maxcol * sizeof(unsigned int);
-               if (min > sizeof(dfltcmap)) min = sizeof(dfltcmap);
-               memcpy(ibuf->cmap, dfltcmap, min);
-               ibuf->mall |= IB_cmap;
-               ibuf->flags |= IB_cmap;
-               return (TRUE);
+               if(ibuf->depth > 32) return (addzbufImBuf(ibuf));
+               else return TRUE;
        }
 
-       return (FALSE);
+       return FALSE;
 }
 
-
-short imb_addplanesImBuf(struct ImBuf *ibuf)
+short imb_addtilesImBuf(ImBuf *ibuf)
 {
-       int size;
-       short skipx,d,y;
-       unsigned int **planes;
-       unsigned int *point2;
-
-       if (ibuf==NULL) return(FALSE);
-       imb_freeplanesImBuf(ibuf);
+       if(ibuf==NULL) return FALSE;
 
-       skipx = ((ibuf->x+31) >> 5);
-       ibuf->skipx=skipx;
-       y=ibuf->y;
-       d=ibuf->depth;
-
-       planes = MEM_mallocN( (d*skipx*y)*sizeof(int) + d*sizeof(int *), "imb_addplanesImBuf");
-       
-       ibuf->planes = planes;
-       if (planes==0) return (FALSE);
+       if(!ibuf->tiles)
+               if((ibuf->tiles = MEM_callocN(sizeof(unsigned int*)*ibuf->xtiles*ibuf->ytiles, "imb_tiles")))
+                       ibuf->mall |= IB_tiles;
 
-       point2 = (unsigned int *)(planes+d);
-       size = skipx*y;
-
-       for (;d>0;d--){
-               *(planes++) = point2;
-               point2 += size;
-       }
-       ibuf->mall |= IB_planes;
-       ibuf->flags |= IB_planes;
-
-       return (TRUE);
+       return (ibuf->tiles != NULL);
 }
 
-
-struct ImBuf *IMB_allocImBuf(short x, short y, uchar d, unsigned int flags, uchar bitmap)
+ImBuf *IMB_allocImBuf(short x, short y, uchar d, unsigned int flags, uchar bitmap) /* XXX bitmap argument is deprecated */
 {
-       struct ImBuf *ibuf;
+       ImBuf *ibuf;
 
-       ibuf = MEM_callocN(sizeof(struct ImBuf), "ImBuf_struct");
-       if (bitmap) flags |= IB_planes;
+       ibuf = MEM_callocN(sizeof(ImBuf), "ImBuf_struct");
 
-       if (ibuf){
+       if(ibuf) {
                ibuf->x= x;
                ibuf->y= y;
                ibuf->depth= d;
                ibuf->ftype= TGA;
                ibuf->channels= 4;      /* float option, is set to other values when buffers get assigned */
                
-               if (flags & IB_rect){
-                       if (imb_addrectImBuf(ibuf)==FALSE){
+               if(flags & IB_rect) {
+                       if(imb_addrectImBuf(ibuf)==FALSE) {
                                IMB_freeImBuf(ibuf);
                                return NULL;
                        }
                }
                
-               if (flags & IB_rectfloat){
-                       if (imb_addrectfloatImBuf(ibuf)==FALSE){
+               if(flags & IB_rectfloat) {
+                       if(imb_addrectfloatImBuf(ibuf)==FALSE) {
                                IMB_freeImBuf(ibuf);
                                return NULL;
                        }
                }
                
-               if (flags & IB_zbuf){
-                       if (addzbufImBuf(ibuf)==FALSE){
+               if(flags & IB_zbuf) {
+                       if(addzbufImBuf(ibuf)==FALSE) {
                                IMB_freeImBuf(ibuf);
                                return NULL;
                        }
                }
                
-               if (flags & IB_zbuffloat){
-                       if (addzbuffloatImBuf(ibuf)==FALSE){
-                               IMB_freeImBuf(ibuf);
-                               return NULL;
-                       }
-               }
-               
-               if (flags & IB_planes){
-                       if (imb_addplanesImBuf(ibuf)==FALSE){
+               if(flags & IB_zbuffloat) {
+                       if(addzbuffloatImBuf(ibuf)==FALSE) {
                                IMB_freeImBuf(ibuf);
                                return NULL;
                        }
@@ -425,37 +366,33 @@ struct ImBuf *IMB_allocImBuf(short x, short y, uchar d, unsigned int flags, ucha
 }
 
 /* does no zbuffers? */
-struct ImBuf *IMB_dupImBuf(struct ImBuf *ibuf1)
+ImBuf *IMB_dupImBuf(ImBuf *ibuf1)
 {
-       struct ImBuf *ibuf2, tbuf;
+       ImBuf *ibuf2, tbuf;
        int flags = 0;
        int a, x, y;
        
-       if (ibuf1 == NULL) return NULL;
+       if(ibuf1 == NULL) return NULL;
 
-       if (ibuf1->rect) flags |= IB_rect;
-       if (ibuf1->rect_float) flags |= IB_rectfloat;
-       if (ibuf1->planes) flags |= IB_planes;
+       if(ibuf1->rect) flags |= IB_rect;
+       if(ibuf1->rect_float) flags |= IB_rectfloat;
 
        x = ibuf1->x;
        y = ibuf1->y;
-       if (ibuf1->flags & IB_fields) y *= 2;
+       if(ibuf1->flags & IB_fields) y *= 2;
        
        ibuf2 = IMB_allocImBuf(x, y, ibuf1->depth, flags, 0);
-       if (ibuf2 == NULL) return NULL;
+       if(ibuf2 == NULL) return NULL;
 
-       if (flags & IB_rect)
-               memcpy(ibuf2->rect, ibuf1->rect, x * y * sizeof(int));
+       if(flags & IB_rect)
+               memcpy(ibuf2->rect, ibuf1->rect, x *y *sizeof(int));
        
-       if (flags & IB_rectfloat)
-               memcpy(ibuf2->rect_float, ibuf1->rect_float, ibuf1->channels * x * y * sizeof(float));
+       if(flags & IB_rectfloat)
+               memcpy(ibuf2->rect_float, ibuf1->rect_float, ibuf1->channels *x *y *sizeof(float));
 
-       if (flags & IB_planes) 
-               memcpy(*(ibuf2->planes),*(ibuf1->planes),ibuf1->depth * ibuf1->skipx * y * sizeof(int));
-
-       if (ibuf1->encodedbuffer) {
+       if(ibuf1->encodedbuffer) {
                ibuf2->encodedbuffersize = ibuf1->encodedbuffersize;
-               if (imb_addencodedbufferImBuf(ibuf2) == FALSE) {
+               if(imb_addencodedbufferImBuf(ibuf2) == FALSE) {
                        IMB_freeImBuf(ibuf2);
                        return NULL;
                }
@@ -469,8 +406,6 @@ struct ImBuf *IMB_dupImBuf(struct ImBuf *ibuf1)
        // fix pointers 
        tbuf.rect               = ibuf2->rect;
        tbuf.rect_float = ibuf2->rect_float;
-       tbuf.planes             = ibuf2->planes;
-       tbuf.cmap               = ibuf2->cmap;
        tbuf.encodedbuffer = ibuf2->encodedbuffer;
        tbuf.zbuf= NULL;
        tbuf.zbuf_float= NULL;
@@ -482,42 +417,36 @@ struct ImBuf *IMB_dupImBuf(struct ImBuf *ibuf1)
        tbuf.c_handle           = 0;
        tbuf.refcounter         = 0;
 
-       // for now don't duplicate image info
-       tbuf.img_info = 0;
+       // for now don't duplicate metadata
+       tbuf.metadata = 0;
 
        *ibuf2 = tbuf;
        
-       if (ibuf1->cmap){
-               imb_addcmapImBuf(ibuf2);
-               if (ibuf2->cmap) memcpy(ibuf2->cmap,ibuf1->cmap,ibuf2->maxcol * sizeof(int));
-       }
-
        return(ibuf2);
 }
 
 /* support for cache limiting */
 
-static void imbuf_cache_destructor(void * data)
+static void imbuf_cache_destructor(void *data)
 {
-       struct ImBuf * ibuf = (struct ImBuf*) data;
+       ImBuf *ibuf = (ImBuf*) data;
 
-       imb_freeplanesImBuf(ibuf);
        imb_freerectImBuf(ibuf);
        imb_freerectfloatImBuf(ibuf);
        IMB_freezbufImBuf(ibuf);
        IMB_freezbuffloatImBuf(ibuf);
-       IMB_freecmapImBuf(ibuf);
        freeencodedbufferImBuf(ibuf);
 
        ibuf->c_handle = 0;
 }
 
-static MEM_CacheLimiterC ** get_imbuf_cache_limiter()
+static MEM_CacheLimiterC **get_imbuf_cache_limiter()
 {
-       static MEM_CacheLimiterC * c = 0;
-       if (!c) {
+       static MEM_CacheLimiterC *c = 0;
+
+       if(!c)
                c = new_MEM_CacheLimiter(imbuf_cache_destructor);
-       }
+
        return &c;
 }
 
@@ -527,9 +456,9 @@ void IMB_free_cache_limiter()
        *get_imbuf_cache_limiter() = 0;
 }
 
-void IMB_cache_limiter_insert(struct ImBuf * i)
+void IMB_cache_limiter_insert(ImBuf *i)
 {
-       if (!i->c_handle) {
+       if(!i->c_handle) {
                i->c_handle = MEM_CacheLimiter_insert(
                        *get_imbuf_cache_limiter(), i);
                MEM_CacheLimiter_ref(i->c_handle);
@@ -539,39 +468,37 @@ void IMB_cache_limiter_insert(struct ImBuf * i)
        }
 }
 
-void IMB_cache_limiter_unmanage(struct ImBuf * i)
+void IMB_cache_limiter_unmanage(ImBuf *i)
 {
-       if (i->c_handle) {
+       if(i->c_handle) {
                MEM_CacheLimiter_unmanage(i->c_handle);
                i->c_handle = 0;
        }
 }
 
-void IMB_cache_limiter_touch(struct ImBuf * i)
+void IMB_cache_limiter_touch(ImBuf *i)
 {
-       if (i->c_handle) {
+       if(i->c_handle)
                MEM_CacheLimiter_touch(i->c_handle);
-       }
 }
 
-void IMB_cache_limiter_ref(struct ImBuf * i)
+void IMB_cache_limiter_ref(ImBuf *i)
 {
-       if (i->c_handle) {
+       if(i->c_handle)
                MEM_CacheLimiter_ref(i->c_handle);
-       }
 }
 
-void IMB_cache_limiter_unref(struct ImBuf * i)
+void IMB_cache_limiter_unref(ImBuf *i)
 {
-       if (i->c_handle) {
+       if(i->c_handle)
                MEM_CacheLimiter_unref(i->c_handle);
-       }
 }
 
-int IMB_cache_limiter_get_refcount(struct ImBuf * i)
+int IMB_cache_limiter_get_refcount(ImBuf *i)
 {
-       if (i->c_handle) {
+       if(i->c_handle)
                return MEM_CacheLimiter_get_refcount(i->c_handle);
-       }
+
        return 0;
 }
+
diff --git a/source/blender/imbuf/intern/amiga.c b/source/blender/imbuf/intern/amiga.c
deleted file mode 100644 (file)
index 4b9e1d8..0000000
+++ /dev/null
@@ -1,540 +0,0 @@
-/**
- * amiga.c
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#ifdef _WIN32
-#include <io.h>
-#define open _open
-#define read _read
-#define close _close
-#define write _write
-#endif
-#include "imbuf.h"
-#include "imbuf_patch.h"
-
-#include "IMB_imbuf_types.h"
-#include "IMB_imbuf.h"
-
-#include "BKE_global.h"
-
-#include "IMB_cmap.h"
-#include "IMB_allocimbuf.h"
-#include "IMB_bitplanes.h"
-#include "IMB_amiga.h"
-
-/* actually hard coded endianness */
-#define GET_BIG_LONG(x) (((uchar *) (x))[0] << 24 | ((uchar *) (x))[1] << 16 | ((uchar *) (x))[2] << 8 | ((uchar *) (x))[3])
-#define GET_LITTLE_LONG(x) (((uchar *) (x))[3] << 24 | ((uchar *) (x))[2] << 16 | ((uchar *) (x))[1] << 8 | ((uchar *) (x))[0])
-#define SWAP_L(x) (((x << 24) & 0xff000000) | ((x << 8) & 0xff0000) | ((x >> 8) & 0xff00) | ((x >> 24) & 0xff))
-#define SWAP_S(x) (((x << 8) & 0xff00) | ((x >> 8) & 0xff))
-
-/* more endianness... should move to a separate file... */
-#if defined(__sgi) || defined (__sparc) || defined (__sparc__) || defined (__PPC__) || defined (__ppc__) || defined (__hppa__) || defined (__BIG_ENDIAN__)
-#define GET_ID GET_BIG_LONG
-#define LITTLE_LONG SWAP_LONG
-#else
-#define GET_ID GET_LITTLE_LONG
-#define LITTLE_LONG ENDIAN_NOP
-#endif
-
-static uchar *decodebodyscanl(uchar *body, short bytes, uchar **list, short d)
-{
-       for (;d>0;d--){
-               uchar *point;
-               short todo;
-               uchar i,j;
-
-               point = *(list++);
-               todo=bytes;
-               while (todo>0){
-                       i = *body++;
-
-                       if (i & 128){                   /* fill */
-                               if (i==128) continue;   /* nop  */
-
-                               i=257-i;
-                               todo-=i;
-                               j = *(body++);
-                               do{
-                                       *(point++) = j;
-                                       i--;
-                               }while (i);
-                       } else{                         /* copy */
-                               i++;
-                               todo-=i;
-
-                               do{
-                                       *(point++) = *(body++);
-                                       i--;
-                               }while (i);
-                       }
-               }
-               if (todo) return (0);
-       }
-       return(body);
-}
-
-
-static uchar *decodebodyh(struct ImBuf *ibuf, uchar *body)
-{
-       if (ibuf->y==1) {
-               body=decodebodyscanl(body, WIDTHB(ibuf->x), (uchar **)ibuf->planes, ibuf->depth);
-       }
-       else {
-               unsigned int **list;
-               short skipx,i,bytes,y;
-
-               list = imb_copyplanelist(ibuf);
-               if (list == 0) return (0);
-
-               y=ibuf->y;
-               bytes = WIDTHB(ibuf->x);
-               skipx = ibuf->skipx;
-
-               for (;y>0;y--){
-                       body=decodebodyscanl(body, bytes, (uchar **)list, ibuf->depth);
-                       if (body == 0) return (0);
-
-                       for (i=ibuf->depth-1;i>=0;i--){
-                               list[i] += skipx;
-                       }
-               }
-               free(list);
-       }
-       return(body);
-}
-
-
-static uchar *decodebodykolum(uchar *body, short bytes, uchar **list, short d, int next)
-{
-       for (;d>0;d--){
-               uchar *point;
-               short todo;
-               uchar i,j;
-
-               point = *(list++);
-               todo=bytes;
-               while (todo>0){
-                       i = *body++;
-
-                       if (i & 128){                   /* fill */
-                               if (i==128) continue;   /* nop  */
-
-                               i=257-i;
-                               todo-=i;
-                               j = *body++;
-                               do{
-                                       *point = j;
-                                       point += next;
-                                       i--;
-                               }while (i);
-                       }
-                       else{                           /* copy */
-                               i++;
-                               todo-=i;
-
-                               do{
-                                       *point = *body++;
-                                       point += next;
-                                       i--;
-                               }while (i);
-                       }
-               }
-               if (todo) return (0);
-       }
-       return(body);
-}
-
-
-static uchar *decodebodyv(struct ImBuf *ibuf, uchar *body)
-{
-       uchar **list;
-       int skipx, i, bytes, times;
-
-       list = (uchar **)imb_copyplanelist(ibuf);
-       if (list == 0) return (0);
-
-       bytes = ibuf->y;
-       times = WIDTHB(ibuf->x);
-       skipx = ibuf->skipx << 2;
-
-       for (;times>0;times--){
-               body=decodebodykolum(body,bytes,list,ibuf->depth,skipx);
-               if (body == 0) return (0);
-
-               for (i=ibuf->depth-1;i>=0;i--){
-                       list[i] += 1;
-               }
-       }
-       free(list);
-       return(body);
-}
-
-static uchar *makebody(uchar **planes, short bytes, short depth, uchar *buf)
-{
-       uchar *bitplstart,*temp;
-
-       register uchar last,this,*bitpl;
-       register short todo;
-       register int copy;
-
-       bytes--;
-       for (;depth>0;depth--){
-               bitpl = *(planes++);
-               bitplstart = bitpl;
-               todo = bytes;
-               last = *bitpl++;
-               this = *bitpl++;
-               copy = last^this;
-               while (todo>0){
-
-                       if (copy){
-                               do{
-                                       last = this;
-                                       this = *bitpl++;
-                                       if (last == this){
-                                               if (this == bitpl[-3]){         /* three identical ones? */
-                                                       todo -= 1;              /* set todo */
-                                                       break;
-                                               }
-                                       }
-                               }while (--todo != 0);
-
-                               copy=bitpl-bitplstart;
-                               copy -= 1;
-                               if (todo) copy -= 2;
-
-                               temp = bitpl;
-                               bitpl = bitplstart;
-
-                               while (copy){
-                                       last = copy;
-                                       if (copy>MAXDAT) last = MAXDAT;
-                                       copy -= last;
-                                       *buf++ = last-1;
-                                       do{
-                                               *buf++ = *bitpl++;
-                                       }while(--last != 0);
-                               }
-                               bitplstart = bitpl;
-                               bitpl = temp;
-                               last = this;
-
-                               copy = FALSE;
-                       }
-                       else{
-                               while (*bitpl++ == this){       /* search for first different bye */
-                                       if (--todo == 0) break; /* or end of line */
-                               }
-                               bitpl -= 1;
-                               copy = bitpl-bitplstart;
-                               bitplstart = bitpl;
-                               todo -= 1;
-                               this = *bitpl++;
-
-                               while (copy){
-                                       if (copy>MAXRUN){
-                                               *buf++ = -(MAXRUN-1);
-                                               *buf++ = last;
-                                               copy -= MAXRUN;
-                                       }
-                                       else{
-                                               *buf++ = -(copy-1);
-                                               *buf++ = last;
-                                               break;
-                                       }
-                               }
-                               copy=TRUE;
-                       }
-               }
-       }
-       return (buf);
-}
-
-
-short imb_encodebodyh(struct ImBuf *ibuf, int file)
-{
-       uchar *buf, *endbuf, *max;
-       int size, line, ok = TRUE;
-       unsigned int **list;
-       short skipx,i,y;
-
-       line = WIDTHB(ibuf->x) * ibuf->depth;
-       line += (line >> 6) + 10;
-       size = 16 * line;
-       if (size < 16384) size = 16384;
-       
-       buf = (uchar *) malloc(size);
-       if (buf == 0) return (0);
-
-       max = buf + size - line;
-       
-       list = imb_copyplanelist(ibuf);
-       if (list == 0){
-               free(buf);
-               return (0);
-       }
-
-       y=ibuf->y;
-       skipx = ibuf->skipx;
-       endbuf = buf;
-       
-       for (y=ibuf->y;y>0;y--){
-               endbuf = makebody((uchar **)list, WIDTHB(ibuf->x), ibuf->depth, endbuf);
-               if (endbuf==0){
-                       ok = -20;
-                       break;
-               }
-               if (endbuf >= max || y == 1){ 
-                       size = endbuf-buf;
-                       if (write(file,buf,size)!=size) ok = -19;
-                       endbuf = buf;
-               }
-               for (i=ibuf->depth-1;i>=0;i--){
-                       list[i] += skipx;
-               }
-               if (ok != TRUE) break;
-       }
-       free(list);
-
-       free(buf);
-       return(ok);
-}
-
-
-short imb_encodebodyv(struct ImBuf *ibuf, int file)
-{
-       struct ImBuf *ibufv;
-       uchar *buf,*endbuf;
-       short x,offset;
-
-       buf = (uchar *) malloc((ibuf->y + (ibuf->y >> 6) + 10) * ibuf->depth);
-       if (buf == 0) return (0);
-
-       ibufv=IMB_allocImBuf((ibuf->y)<<3,1, ibuf->depth, 0, 1);
-       if (ibufv == 0){
-               free(buf);
-               return (0);
-       }
-
-       offset=0;
-
-       for(x = WIDTHB(ibuf->x);x>0;x--){
-               register short i;
-
-               for(i = ibuf->depth-1 ;i>=0;i--){
-                       register uchar *p1,*p2;
-                       register int skipx;
-                       register short y;
-
-                       skipx = (ibuf->skipx)*sizeof(int *);
-                       p1=(uchar *)ibuf->planes[i];
-                       p2=(uchar *)ibufv->planes[i];
-                       p1 += offset;
-
-                       for (y=ibuf->y;y>0;y--){
-                               *(p2++) = *p1;
-                               p1 += skipx;
-                       }
-               }
-               offset += 1;
-
-               endbuf=makebody((uchar **)ibufv->planes, ibuf->y, ibuf->depth, buf);
-               if (endbuf==0) return (-20);
-               if (write(file,buf,endbuf-buf)!=endbuf-buf) return (-19);
-       }
-       free(buf);
-       IMB_freeImBuf(ibufv);
-       return (TRUE);
-}
-
-static uchar *readbody(struct ImBuf *ibuf, uchar *body)
-{
-       int skipbuf,skipbdy,depth,y,offset = 0;
-
-       skipbuf = ibuf->skipx;
-       skipbdy = WIDTHB(ibuf->x);
-
-       for (y = ibuf->y; y> 0; y--){
-               for( depth = 0; depth < ibuf->depth; depth ++){
-                       memcpy(ibuf->planes[depth] + offset, body, skipbdy);
-                       body += skipbdy;
-               }
-               offset += skipbuf;
-       }
-       return body;
-}
-
-struct ImBuf *imb_loadamiga(int *iffmem,int flags)
-{
-       int chunk,totlen,len,*cmap=0,cmaplen =0,*mem,ftype=0;
-       uchar *body=0;
-       struct BitMapHeader bmhd;
-       struct ImBuf *ibuf=0;
-
-       mem = iffmem;
-       bmhd.w = 0;
-
-       if (GET_ID(mem) != FORM) return (0);
-       if (GET_ID(mem+2) != ILBM) return (0);
-       totlen= (GET_BIG_LONG(mem+1) + 1) & ~1;
-       mem += 3;
-       totlen -= 4;
-
-
-       while(totlen > 0){
-               chunk = GET_ID(mem);
-               len= (GET_BIG_LONG(mem+1) + 1) & ~1;
-               mem += 2;
-
-               totlen -= len+8;
-
-               switch (chunk){
-               case BMHD:
-                       memcpy(&bmhd, mem, sizeof(struct BitMapHeader));
-
-                       bmhd.w = BIG_SHORT(bmhd.w);
-                       bmhd.h = BIG_SHORT(bmhd.h);
-                       bmhd.x = BIG_SHORT(bmhd.x);
-                       bmhd.y = BIG_SHORT(bmhd.y);
-                       bmhd.transparentColor = BIG_SHORT(bmhd.transparentColor);
-                       bmhd.pageWidth = BIG_SHORT(bmhd.pageWidth);
-                       bmhd.pageHeight = BIG_SHORT(bmhd.pageHeight);
-                       
-                       break;
-               case BODY:
-                       body = (uchar *)mem;
-                       break;
-               case CMAP:
-                       cmap = mem;
-                       cmaplen = len/3;
-                       break;
-               case CAMG:
-                       ftype = GET_BIG_LONG(mem);
-                       break;
-               }
-               mem = (int *)((uchar *)mem +len);
-               if (body) break;
-       }
-       if (bmhd.w == 0) return (0);
-       if (body == 0) return (0);
-       
-       if (flags & IB_test) ibuf = IMB_allocImBuf(bmhd.w, bmhd.h, bmhd.nPlanes, 0, 0);
-       else ibuf = IMB_allocImBuf(bmhd.w, bmhd.h, bmhd.nPlanes + (bmhd.masking & 1),0,1);
-
-       if (ibuf == 0) return (0);
-
-       ibuf->ftype = (ftype | AMI);
-       ibuf->profile = IB_PROFILE_SRGB;
-       
-       if (cmap){
-               ibuf->mincol = 0;
-               ibuf->maxcol = cmaplen;
-               imb_addcmapImBuf(ibuf);
-               imb_makecolarray(ibuf, (uchar *)cmap, 0);
-       }
-
-       if (flags & IB_test){
-               if (flags & IB_freem) free(iffmem);
-               return(ibuf);
-       }
-       
-       switch (bmhd.compression){
-       case 0:
-               body= readbody(ibuf, body);
-               break;
-       case 1:
-               body= decodebodyh(ibuf,body);
-               break;
-       case 2:
-               body= decodebodyv(ibuf,body);
-               ibuf->type |= IB_subdlta;
-               break;
-       }
-
-       if (flags & IB_freem) free(iffmem);
-
-       if (body == 0){
-               free (ibuf);
-               return(0);
-       }
-       
-       /* forget stencil */
-       ibuf->depth = bmhd.nPlanes;
-       
-       if (flags & IB_rect){
-               imb_addrectImBuf(ibuf);
-               imb_bptolong(ibuf);
-               imb_freeplanesImBuf(ibuf);
-               if (ibuf->cmap){
-                       if ((flags & IB_cmap) == 0) IMB_applycmap(ibuf);
-               } else if (ibuf->depth == 18){
-                       int i,col;
-                       unsigned int *rect;
-
-                       rect = ibuf->rect;
-                       for(i=ibuf->x * ibuf->y ; i>0 ; i--){
-                               col = *rect;
-                               col = ((col & 0x3f000) << 6) + ((col & 0xfc0) << 4) + ((col & 0x3f) << 2);
-                               col += (col & 0xc0c0c0) >> 6;
-                               *rect++ = col;
-                       }
-                       ibuf->depth = 24;
-               } else if (ibuf->depth <= 8) { /* no colormap and no 24 bits: b&w */
-                       uchar *rect;
-                       int size, shift;
-
-                       if (ibuf->depth < 8){
-                               rect = (uchar *) ibuf->rect;
-                               rect += 3;
-                               shift = 8 - ibuf->depth;
-                               for (size = ibuf->x * ibuf->y; size > 0; size --){
-                                       rect[0] <<= shift;
-                                       rect += 4;
-                               }
-                       }
-                       rect = (uchar *) ibuf->rect;
-                       for (size = ibuf->x * ibuf->y; size > 0; size --){
-                               rect[1] = rect[2] = rect[3];
-                               rect += 4;
-                       }
-                       ibuf->depth = 8;
-               }
-       }
-
-       if ((flags & IB_ttob) == 0) IMB_flipy(ibuf);
-
-       if (ibuf) {
-               if (ibuf->rect) 
-                       if (ENDIAN_ORDER == B_ENDIAN) IMB_convert_rgba_to_abgr(ibuf);
-       }
-       
-       return (ibuf);
-}
index 188f358..bc0f922 100644 (file)
@@ -64,7 +64,6 @@
 #include "BKE_global.h"
 
 #include "imbuf.h"
-#include "imbuf_patch.h"
 
 #include "AVI_avi.h"
 
@@ -78,9 +77,7 @@
 #include "IMB_imbuf.h"
 
 #include "IMB_allocimbuf.h"
-#include "IMB_bitplanes.h"
 #include "IMB_anim.h"
-#include "IMB_anim5.h"
 
 #ifdef WITH_FFMPEG
 #include <libavformat/avformat.h>
@@ -327,7 +324,6 @@ void IMB_free_anim(struct anim * anim) {
        }
 
        IMB_free_anim_ibuf(anim);
-       free_anim_anim5(anim);
        free_anim_movie(anim);
        free_anim_avi(anim);
 
@@ -341,7 +337,7 @@ void IMB_free_anim(struct anim * anim) {
        free_anim_redcode(anim);
 #endif
 
-       free(anim);
+       MEM_freeN(anim);
 }
 
 void IMB_close_anim(struct anim * anim) {
@@ -476,7 +472,7 @@ static ImBuf * avi_fetchibuf (struct anim *anim, int position) {
                if (anim->pgf) {
                        lpbi = AVIStreamGetFrame(anim->pgf, position + AVIStreamStart(anim->pavi[anim->firstvideo]));
                        if (lpbi) {
-                               ibuf = IMB_ibImageFromMemory((int *) lpbi, 100, IB_rect);
+                               ibuf = IMB_ibImageFromMemory((unsigned char *) lpbi, 100, IB_rect);
 //Oh brother...
                        }
                }
@@ -995,7 +991,6 @@ static struct ImBuf * anim_getnew(struct anim * anim) {
 
        if (anim == NULL) return(0);
 
-       free_anim_anim5(anim);
        free_anim_movie(anim);
        free_anim_avi(anim);
 #ifdef WITH_QUICKTIME
@@ -1013,10 +1008,6 @@ static struct ImBuf * anim_getnew(struct anim * anim) {
        anim->curtype = imb_get_anim_type(anim->name);  
 
        switch (anim->curtype) {
-       case ANIM_ANIM5:
-               if (startanim5(anim)) return (0);
-               ibuf = anim5_fetchibuf(anim);
-               break;
        case ANIM_SEQUENCE:
                ibuf = IMB_loadiffname(anim->name, anim->ib_flags);
                if (ibuf) {
@@ -1094,26 +1085,13 @@ struct ImBuf * IMB_anim_absolute(struct anim * anim, int position) {
        if (position >= anim->duration) return(0);
 
        switch(anim->curtype) {
-       case ANIM_ANIM5:
-               if (anim->curposition > position) rewindanim5(anim);
-               while (anim->curposition < position) {
-                       if (nextanim5(anim)) return (0);
-               }
-               ibuf = anim5_fetchibuf(anim);
-               ibuf->profile = IB_PROFILE_SRGB;
-               break;
        case ANIM_SEQUENCE:
                pic = an_stringdec(anim->first, head, tail, &digits);
                pic += position;
                an_stringenc(anim->name, head, tail, digits, pic);
-               ibuf = IMB_loadiffname(anim->name, LI_rect);
+               ibuf = IMB_loadiffname(anim->name, IB_rect);
                if (ibuf) {
                        anim->curposition = position;
-                       /* patch... by freeing the cmap you prevent a double apply cmap... */
-                       /* probably the IB_CMAP option isn't working proper
-                        * after the abgr->rgba reconstruction
-                        */
-                       IMB_freecmapImBuf(ibuf);
                }
                break;
        case ANIM_MOVIE:
@@ -1153,7 +1131,6 @@ struct ImBuf * IMB_anim_absolute(struct anim * anim, int position) {
        }
 
        if (ibuf) {
-               if (anim->ib_flags & IB_ttob) IMB_flipy(ibuf);
                if (filter_y) IMB_filtery(ibuf);
                sprintf(ibuf->name, "%s.%04d", anim->name, anim->curposition + 1);
                
@@ -1161,16 +1138,6 @@ struct ImBuf * IMB_anim_absolute(struct anim * anim, int position) {
        return(ibuf);
 }
 
-struct ImBuf * IMB_anim_nextpic(struct anim * anim) {
-       struct ImBuf * ibuf = 0;
-
-       if (anim == 0) return(0);
-
-       ibuf = IMB_anim_absolute(anim, anim->curposition + 1);
-
-       return(ibuf);
-}
-
 /***/
 
 int IMB_anim_get_duration(struct anim *anim) {
diff --git a/source/blender/imbuf/intern/anim5.c b/source/blender/imbuf/intern/anim5.c
deleted file mode 100644 (file)
index 41c4c2c..0000000
+++ /dev/null
@@ -1,539 +0,0 @@
-/**
- * anim5.c
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): phase, code torn apart from anim.c
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include "BLI_blenlib.h" /* BLI_remlink BLI_filesize BLI_addtail
-                                                       BLI_countlist BLI_stringdec */
-
-#include "imbuf.h"
-#include "imbuf_patch.h"
-
-#include "IMB_imbuf_types.h"
-#include "IMB_imbuf.h"
-
-#include "IMB_cmap.h"
-#include "IMB_allocimbuf.h"
-#include "IMB_bitplanes.h"
-#include "IMB_amiga.h"
-
-#include "IMB_anim.h"
-
-#include "IMB_anim5.h"
-
-#ifdef _WIN32
-#include <io.h>
-#include "BLI_winstuff.h"
-#endif
-
-typedef struct Anhd{
-       unsigned char type, mask;
-       unsigned short w, h;
-       unsigned short x, y;
-       unsigned short abs16, abs, reala6, real;
-       unsigned char interleave, pad0;
-       unsigned short bits16, bits;
-       unsigned char pad[16];
-}Anhd;
-
-typedef struct Anim5Delta {
-       struct Anim5Delta * next, * prev;
-       void * data;
-       int type;
-}Anim5Delta;
-
-
-/* om anim5's te kunnen lezen, moet een aantal gegevens bijgehouden worden:
- * Een lijst van pointers naar delta's, in geheugen of ge'mmap'ed
- * 
- * Mogelijk kan er ook een 'skiptab' aangelegd worden, om sneller
- * sprongen te kunnen maken.
- * 
- * Er moeten niet direct al plaatjes gegenereed worden, dit maakt de 
- * routines onbruikbaar om snel naar het goede plaatje te springen.
- * Een routine voert dus de delta's uit, een andere routine maakt van
- * voorgrondplaatje een ibuf;
- */
-
-
-/*
-   een aantal functie pointers moet geinporteerd worden, zodat er niet
-   nog meer library's / objects meegelinkt hoeven te worden.
-
-   Dezelfde structuur moet ook gebruikt kunnen worden voor het wegschrijven
-   van animaties. Hoe geef je dit aan ?
-   
-   Hoe snel kunnen 10 .dlta's gedecomprimeerd worden
-   (zonder omzetten naar rect).
-   
-   1 - zoek naar 1e plaatje, animatie die aan de eisen voldoet
-   2 - probeer volgende plaatje te vinden:
-               anim5 - decomprimeer
-               sequence - teller ophogen
-               directory - volgende entry
-   3 - geen succes ? ga naar 1.
-   
-   
-*/
-
-/*
-       1. Initialiseer routine met toegestane reeksen, en eerste naam
-               - series op naam (.0001)
-               - directories
-               - anim5 animaties
-               - TGA delta's
-               - iff 24bits delta's (.delta)
-       
-       2. haal volgende (vorige ?) plaatje op.
-       
-       3. vrijgeven
-*/
-
-/* selectie volgorde is:
-       1 - anim5()
-       2 - name
-       3 - dir
-*/
-
-void free_anim_anim5(struct anim * anim) {
-       ListBase * animbase;
-       Anim5Delta * delta, * next;
-
-       if (anim == NULL) return;
-
-       animbase = &anim->anim5base;
-       delta = animbase->first;
-
-       while (delta) {
-               next = delta->next;
-
-               if (delta->type == ANIM5_MALLOC) free(delta->data);
-               BLI_remlink(animbase, delta);
-               free(delta);
-
-               delta = next;
-       }
-
-       if (anim->anim5mmap && anim->anim5len) {
-               MEM_freeN(anim->anim5mmap);
-       }
-
-       anim->anim5mmap = NULL;
-       anim->anim5len = 0;
-       anim->anim5curdlta = 0;
-       anim->duration = 0;
-}
-
-static void planes_to_rect(struct ImBuf * ibuf, int flags) {
-       if (ibuf == 0) return;
-
-       /* dit komt regelrecht uit de amiga.c */
-
-       if (flags & IB_rect && ibuf->rect == 0) {
-               imb_addrectImBuf(ibuf);
-               imb_bptolong(ibuf);
-               IMB_flipy(ibuf);
-               imb_freeplanesImBuf(ibuf);
-
-               if (ibuf->cmap){
-                       if ((flags & IB_cmap) == 0) {
-                               IMB_applycmap(ibuf);
-                               IMB_convert_rgba_to_abgr(ibuf);
-                       }
-               } else if (ibuf->depth == 18){
-                       int i,col;
-                       unsigned int *rect;
-
-                       rect = ibuf->rect;
-                       for(i=ibuf->x * ibuf->y ; i>0 ; i--){
-                               col = *rect;
-                               col = ((col & 0x3f000) << 6) + ((col & 0xfc0) << 4)
-                                       + ((col & 0x3f) << 2);
-                               col += (col & 0xc0c0c0) >> 6;
-                               *rect++ = col;
-                       }
-                       ibuf->depth = 24;
-               } else if (ibuf->depth <= 8) {
-                       /* geen colormap en geen 24 bits: zwartwit */
-                       uchar *rect;
-                       int size, shift;
-
-                       if (ibuf->depth < 8){
-                               rect = (uchar *) ibuf->rect;
-                               rect += 3;
-                               shift = 8 - ibuf->depth;
-                               for (size = ibuf->x * ibuf->y; size > 0; size --){
-                                       rect[0] <<= shift;
-                                       rect += 4;
-                               }
-                       }
-                       rect = (uchar *) ibuf->rect;
-                       for (size = ibuf->x * ibuf->y; size > 0; size --){
-                               rect[1] = rect[2] = rect[3];
-                               rect += 4;
-                       }
-                       ibuf->depth = 8;
-               }
-       }
-}
-
-
-static void anim5decode(struct ImBuf * ibuf, uchar * dlta) {
-       uchar depth;
-       int skip;
-       int *ofspoint;
-       uchar **planes;
-
-       /*      composition delta:
-               list with ofsets for delta' s by bitplane (ofspoint)
-               by column in delta (point)
-                       number of operations (noops)
-                               code
-                                       associated data
-                               ...
-                       ...
-       */
-
-       dlta += 8;
-
-       ofspoint = (int *)dlta;
-       skip = ibuf->skipx * sizeof(int *);
-       planes = (uchar **)ibuf->planes;
-
-       for(depth=ibuf->depth ; depth>0 ; depth--){
-               if (GET_BIG_LONG(ofspoint)){
-                       uchar *planestart;
-                       uchar *point;
-                       uchar x;
-
-                       point = dlta + GET_BIG_LONG(ofspoint);
-                       planestart = planes[0];
-                       x = (ibuf->x + 7) >> 3;
-
-                       do{
-                               uchar noop;
-
-                               if ( (noop = *(point++)) ){
-                                       uchar *plane;
-                                       uchar code;
-
-                                       plane = planestart;
-                                       do{
-                                               if ((code = *(point++))==0){
-                                                       uchar val;
-
-                                                       code = *(point++);
-                                                       val = *(point++);
-                                                       do {
-                                                               plane[0] = val;
-                                                               plane += skip;
-                                                       } while(--code);
-
-                                               } else if (code & 128){
-
-                                                       code &= 0x7f;
-                                                       do{
-                                                               plane[0] = *(point++);
-                                                               plane += skip;
-                                                       } while(--code);
-
-                                               } else plane += code * skip;
-
-                                       } while(--noop);
-                               }
-                               planestart++;
-                       } while(--x);
-               }
-               ofspoint++;
-               planes++;
-       }
-}
-
-
-static void anim5xordecode(struct ImBuf * ibuf, uchar * dlta) {
-       uchar depth;
-       int skip;
-       int *ofspoint;
-       uchar **planes;
-
-       /*      samenstelling delta:
-               lijst met ofsets voor delta's per bitplane (ofspoint)
-               per kolom in delta (point)
-                       aantal handelingen (noops)
-                               code
-                                       bijbehorende data
-                               ...
-                       ...
-       */
-
-       dlta += 8;
-
-       ofspoint = (int *)dlta;
-       skip = ibuf->skipx * sizeof(int *);
-       planes = (uchar **)ibuf->planes;
-
-       for(depth=ibuf->depth ; depth>0 ; depth--){
-
-               if (GET_BIG_LONG(ofspoint)){
-                       uchar *planestart;
-                       uchar *point;
-                       uchar x;
-
-                       point = dlta + GET_BIG_LONG(ofspoint);
-                       planestart = planes[0];
-                       x = (ibuf->x + 7) >> 3;
-
-                       do{
-                               uchar noop;
-
-                               if ( (noop = *(point++)) ){
-                                       uchar *plane;
-                                       uchar code;
-
-                                       plane = planestart;
-                                       do{
-                                               if ((code = *(point++))==0){
-                                                       uchar val;
-
-                                                       code = *(point++);
-                                                       val = *(point++);
-                                                       do{
-                                                               plane[0] ^= val;
-                                                               plane += skip;
-                                                       }while(--code);
-
-                                               } else if (code & 128){
-
-                                                       code &= 0x7f;
-                                                       do{
-                                                               plane[0] ^= *(point++);
-                                                               plane += skip;
-                                                       }while(--code);
-
-                                               } else plane += code * skip;
-
-                                       }while(--noop);
-                               }
-                               planestart++;
-                       }while(--x);
-               }
-               ofspoint++;
-               planes++;
-       }
-}
-
-
-int nextanim5(struct anim * anim) {
-       Anim5Delta * delta;
-       struct ImBuf * ibuf;
-
-       if (anim == 0) return(-1);
-
-       delta = anim->anim5curdlta;
-
-       if (delta == 0) return (-1);
-
-       if (anim->anim5flags & ANIM5_SNGBUF) {
-               ibuf = anim->ibuf1;
-               if (ibuf == 0) return (0);
-               anim->anim5decode(ibuf, delta->data);
-       } else {
-               ibuf = anim->ibuf2;
-               if (ibuf == 0) return (0);
-               anim->anim5decode(ibuf, delta->data);
-               anim->ibuf2 = anim->ibuf1;
-               anim->ibuf1 = ibuf;
-       }
-
-       anim->anim5curdlta = anim->anim5curdlta->next;
-       anim->curposition++;
-
-       return(0);
-}
-
-int rewindanim5(struct anim * anim) {
-       Anim5Delta * delta;
-       struct ImBuf * ibuf;
-
-       if (anim == 0) return (-1);
-
-       IMB_free_anim_ibuf(anim);
-
-       delta = anim->anim5base.first;
-       if (delta == 0) return (-1);
-
-       ibuf = IMB_loadiffmem(delta->data, IB_planes);
-       if (ibuf == 0) return(-1);
-
-       anim->ibuf1 = ibuf;
-       if ((anim->anim5flags & ANIM5_SNGBUF) == 0) anim->ibuf2 = IMB_dupImBuf(ibuf);
-
-       anim->anim5curdlta = delta->next;
-       anim->curposition = 0;
-
-       return(0);
-}
-
-
-int startanim5(struct anim * anim) {
-       int file, buf[20], totlen;
-       unsigned int len;
-       short * mem;
-       ListBase * animbase;
-       Anim5Delta * delta;
-       Anhd anhd;
-
-       /* Controles */
-
-       if (anim == 0) return(-1);
-
-       file = open(anim->name,O_BINARY|O_RDONLY);
-       if (file < 0) return (-1);
-
-       if (read(file, buf, 24) != 24) {
-               close(file);
-               return(-1);
-       }
-
-       if ((GET_ID(buf) != FORM) || (GET_ID(buf + 2) != ANIM)
-               || (GET_ID(buf + 3) != FORM) || (GET_ID(buf + 5) != ILBM)){
-               printf("No anim5 file %s\n",anim->name);
-               close(file);
-               return (-1);
-       }
-
-       /* de hele file wordt in het geheugen gemapped */
-
-       totlen = BLI_filesize(file);
-       if (totlen>0 && file>=0) {
-               lseek(file, 0L, SEEK_SET);
-               
-               mem= MEM_mallocN(totlen, "mmap");
-               if (read(file, mem, totlen) != totlen) {
-                       MEM_freeN(mem);
-                       mem = NULL;
-               }
-       } else {
-               mem = NULL;
-       }
-       close (file);
-
-       if (!mem) return (-1);
-
-       anhd.interleave = 0;
-       anhd.bits = 0;
-       anhd.type = 5;
-
-       anim->anim5mmap = mem;
-       anim->anim5len = totlen;
-       anim->anim5flags = 0;
-       anim->duration = 0;
-
-       animbase = & anim->anim5base;
-       animbase->first = animbase->last = 0;
-
-       /* eerste plaatje inlezen */
-
-       mem = mem + 6;
-       totlen -= 12;
-
-       len = GET_BIG_LONG(mem + 2);
-       len = (len + 8 + 1) & ~1;
-       delta = NEW(Anim5Delta);
-
-       delta->data = mem;
-       delta->type = ANIM5_MMAP;
-
-       BLI_addtail(animbase, delta);
-
-       mem += (len >> 1);
-       totlen -= len;
-
-       while (totlen > 0) {
-               len = GET_BIG_LONG(mem + 2);
-               len = (len + 8 + 1) & ~1;
-
-               switch(GET_ID(mem)){
-               case FORM:
-                       len = 12;
-                       break;
-               case ANHD:
-                       memcpy(&anhd, mem + 4, sizeof(Anhd));
-                       break;
-               case DLTA:
-                       delta = NEW(Anim5Delta);
-                       delta->data = mem;
-                       delta->type = ANIM5_MMAP;
-                       BLI_addtail(animbase, delta);
-                       break;
-               }
-
-               mem += (len >> 1);
-               totlen -= len;
-       }
-
-       if (anhd.interleave == 1) anim->anim5flags |= ANIM5_SNGBUF;
-       if (BIG_SHORT(anhd.bits) & 2) anim->anim5decode = anim5xordecode;
-       else anim->anim5decode = anim5decode;
-
-       /* laatste twee delta's wissen */
-
-       delta = animbase->last;
-       if (delta) {
-               BLI_remlink(animbase, delta);
-               free(delta);
-       }
-
-       if ((anim->anim5flags & ANIM5_SNGBUF) == 0) {
-               delta = animbase->last;
-               if (delta) {
-                       BLI_remlink(animbase, delta);
-                       free(delta);
-               }
-       }
-
-       anim->duration = BLI_countlist(animbase);
-
-       return(rewindanim5(anim));
-}
-
-
-struct ImBuf * anim5_fetchibuf(struct anim * anim) {
-       struct ImBuf * ibuf;
-
-       if (anim == 0) return (0);
-
-       ibuf = IMB_dupImBuf(anim->ibuf1);
-       planes_to_rect(ibuf, anim->ib_flags);
-
-       ibuf->profile = IB_PROFILE_SRGB;
-       
-       return(ibuf);
-}
-
diff --git a/source/blender/imbuf/intern/antialias.c b/source/blender/imbuf/intern/antialias.c
deleted file mode 100644 (file)
index e3a878d..0000000
+++ /dev/null
@@ -1,466 +0,0 @@
-/**
- * antialias.c
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include "imbuf.h"
-
-#include "BLI_blenlib.h"
-#include "DNA_listBase.h"
-
-#include "imbuf_patch.h"
-#include "IMB_imbuf_types.h"
-#include "IMB_imbuf.h"
-#include "IMB_allocimbuf.h"
-
-/* how it works:
-
-1 - seek for a transistion in a collumn
-2 - check the relationship with left and right, 
-
-Is pixel above transition to the left or right equal to the top color, seek down
-
-Is pixel below transition to the left or right equal to the bottom color, seek up 
-               
-*/
-
-/* there should be a funcion * to indicate if two colors are
- * equal or not.
- * For now we use a define
- */
-
-
-static unsigned int anti_mask = 0xffffffff;
-static int anti_a, anti_b, anti_g, anti_r;
-
-#define compare(x, y) ((x ^ y) & anti_mask)
-
-typedef struct Edge
-{
-       struct Edge * next, * prev;
-       short position;
-       int col1, col2;
-}Edge;
-
-static void anti_free_listarray(int count, ListBase * listarray)
-{
-       int i;
-       
-       if (listarray == 0) return;
-       
-       for (i = 0; i < count; i++) BLI_freelistN(listarray + i);
-       MEM_freeN(listarray);   
-}
-
-static ListBase * scanimage(struct ImBuf * ibuf, int dir)
-{
-       int step, pixels, lines, nextline, x, y, col1, col2;
-       unsigned int * rect;
-       ListBase * listarray, * curlist;
-       Edge * edge;
-       int count;
-       
-       switch (dir) {
-       case 'h':
-               step = 1; nextline = ibuf->x;
-               pixels = ibuf->x; lines = ibuf->y;
-               break;
-/*     case 'v':  changed so assured values for step etc.. */
-       default:
-               step = ibuf->x; nextline = 1;
-               pixels = ibuf->y; lines = ibuf->x;
-       }
-       
-       listarray = (ListBase*)MEM_callocN((lines)* sizeof(ListBase), "listarray");
-       for (y = 0; y < lines; y++){
-               rect = ibuf->rect;
-               rect += y * nextline;
-               curlist = listarray + y;
-               
-               col1 = rect[0];
-               count = 0;
-               
-               for (x = 0; x < pixels; x++) {
-                       col2 = rect[0];
-                       if (compare(col1, col2)) {
-                               edge = NEW(Edge);
-
-                               if (edge == NULL) return(0);
-
-                               edge->position = x;
-                               edge->col1 = col1;
-                               edge->col2 = col2;
-                               BLI_addtail(curlist, edge);
-                               col1 = col2;
-                               count++;
-                               if (count > 100) {
-                                       printf("\n\n%s: Aborting antialias !\n", ibuf->name);
-                                       printf("To many transitions.\nIs this a natural image ?\n\n"), 
-                                       anti_free_listarray(lines, listarray);
-                                       return(0);
-                               }
-                       }
-                       rect += step;
-               }
-       }
-       
-       return(listarray);
-}
-
-
-static Edge * findmatch(Edge * first, Edge * edge)
-{
-       Edge * match = 0;
-       int in = 0, out = 65535;
-       
-       if (edge->prev) in = edge->prev->position;
-       if (edge->next) out = edge->next->position;
-       
-       while (first) {
-               if (first->position < edge->position) {
-                       if (first->col1 == edge->col1) {
-                               if (first->position >= in) match = first;
-                       } else if (first->col2 == edge->col2) {
-                               if (first->next == 0) match = first;
-                               else if (first->next->position >= edge->position) match = first;
-                       } else if (first->col2 == edge->col1) {
-                               match = 0; /* at 'sig saw' situations this one can be wrongly set */
-                       }
-               } else if (first->position == edge->position) {
-                       if (first->col1 == edge->col1 || first->col2 == edge->col2) match = first;
-               } else {
-                       if (match) break;       /* there is one */
-                       
-                       if (first->col1 == edge->col1) {
-                               if (first->prev == 0) match = first;
-                               else if (first->prev->position <= edge->position) match = first;
-                       } else if (first->col2 == edge->col2) {
-                               if (first->position <= out) match = first;
-                       }
-               }
-               
-               first = first->next;
-       }
-       
-       return(match);
-}
-
-
-static void filterdraw(unsigned int * ldest, unsigned int * lsrce, int zero, int half, int step)
-{
-       uchar * src, * dst;
-       int count;
-       double weight, add;
-       
-       /* we filter the pixels at ldest between in and out with pixels from lsrce
-        * weight values go from 0 to 1
-        */
-       
-
-       count = half - zero;
-       if (count < 0) count = -count;
-       if (count <= 1) return;
-       
-       if (zero < half) {
-               src = (uchar *) (lsrce + (step * zero));
-               dst = (uchar *) (ldest + (step * zero));
-       } else {
-               zero--;
-               src = (uchar *) (lsrce + (step * zero));
-               dst = (uchar *) (ldest + (step * zero));
-               step = -step;
-       }
-       
-       step = 4 * step;
-       
-       dst += step * (count >> 1);
-       src += step * (count >> 1);
-       
-       count = (count + 1) >> 1;
-       add = 0.5 / count;
-       weight = 0.5 * add;
-       
-       /* this of course gamma corrected */
-       
-       for(; count > 0; count --) {
-               if (anti_a) dst[0] += weight * (src[0] - dst[0]);
-               if (anti_b) dst[1] += weight * (src[1] - dst[1]);
-               if (anti_g) dst[2] += weight * (src[2] - dst[2]);
-               if (anti_r) dst[3] += weight * (src[3] - dst[3]);
-               dst += step;
-               src += step;
-               weight += add;
-       }
-}
-
-static void filterimage(struct ImBuf * ibuf, struct ImBuf * cbuf, ListBase * listarray, int dir)
-{
-       int step, pixels, lines, nextline, y, pos, drawboth;
-       unsigned int * irect, * crect;
-       Edge * left, * middle, * right, temp, * any;
-       
-       switch (dir) {
-       case 'h':
-               step = 1; nextline = ibuf->x;
-               pixels = ibuf->x; lines = ibuf->y;
-               break;
-/*     case 'v': changed so have values */
-       default:
-               step = ibuf->x; nextline = 1;
-               pixels = ibuf->y; lines = ibuf->x;
-       }
-       
-       for (y = 1; y < lines - 1; y++){
-               irect = ibuf->rect;
-               irect += y * nextline;
-               crect = cbuf->rect;
-               crect += y * nextline;
-               
-               middle = listarray[y].first;
-               while (middle) {
-                       left = findmatch(listarray[y - 1].first, middle);
-                       right = findmatch(listarray[y + 1].first, middle);
-                       drawboth = FALSE;
-                       
-                       if (left == 0 || right == 0) {
-                               /* edge */
-                               any = left;
-                               if (right) any = right;
-                               if (any) {
-                                       /* mirroring */
-                                       pos = 2 * middle->position - any->position;
-
-                                       if (any->position < middle->position) {
-                                               if (pos > pixels - 1) pos = pixels - 1;
-                                               if (middle->next) {
-                                                       if (pos > middle->next->position) pos = middle->next->position;
-                                               }
-/*                                             if (any->next) {
-                                                       if (pos > any->next->position) pos = any->next->position;
-                                               }
-*/                                     } else {
-                                               if (pos < 0) pos = 0;
-                                               if (middle->prev) {
-                                                       if (pos < middle->prev->position) pos = middle->prev->position;
-                                               }
-/*                                             if (any->prev) {
-                                                       if (pos < any->prev->position) pos = any->prev->position;
-                                               }
-*/                                     }
-                                       temp.position = pos;
-                                       if (left) right = &temp;
-                                       else left = &temp;
-                                       drawboth = TRUE;
-                               }
-                       } else if (left->position == middle->position || right->position == middle->position) {
-                               /* straight piece */
-                               /* small corner, with one of the two at distance 2 (the other is at dist 0) ? */
-                               
-                               if (abs(left->position - right->position) == 2) drawboth = TRUE;
-                       } else if (left->position < middle->position && right->position > middle->position){
-                               /* stair 1 */
-                               drawboth = TRUE;
-                       } else if (left->position > middle->position && right->position < middle->position){
-                               /* stair 2 */
-                               drawboth = TRUE;
-                       } else {
-                               /* a peek */
-                               drawboth = TRUE;
-                       }
-                       
-                       if (drawboth) {
-                               filterdraw(irect, crect - nextline, left->position, middle->position, step);
-                               filterdraw(irect, crect + nextline, right->position, middle->position, step);
-                       }
-
-                       middle = middle->next;
-               }
-       }
-}
-
-
-void IMB_antialias(struct ImBuf * ibuf)
-{
-       struct ImBuf * cbuf;
-       ListBase * listarray;
-       
-       if (ibuf == 0) return;
-       cbuf = IMB_dupImBuf(ibuf);
-       if (cbuf == 0) return;
-       
-       anti_a = (anti_mask >> 24) & 0xff;
-       anti_b = (anti_mask >> 16) & 0xff;
-       anti_g = (anti_mask >>  8) & 0xff;
-       anti_r = (anti_mask >>  0) & 0xff;
-       
-       listarray = scanimage(cbuf, 'h');
-       if (listarray) {
-               filterimage(ibuf, cbuf, listarray, 'h');
-               anti_free_listarray(ibuf->y, listarray);
-               
-               listarray = scanimage(cbuf, 'v');
-               if (listarray) {
-                       filterimage(ibuf, cbuf, listarray, 'v');
-                       anti_free_listarray(ibuf->x, listarray);
-               }
-       }
-                       
-       IMB_freeImBuf(cbuf);
-}
-
-
-/* intelligent scaling */
-
-static void _intel_scale(struct ImBuf * ibuf, ListBase * listarray, int dir)
-{
-       int step, lines, nextline, x, y, col;
-       unsigned int * irect, * trect;
-       int start, end;
-       Edge * left, * right;
-       struct ImBuf * tbuf;
-       
-       switch (dir) {
-       case 'h':
-               step = 1; nextline = ibuf->x;
-               lines = ibuf->y;
-               tbuf = IMB_double_fast_y(ibuf);
-               break;
-       case 'v':
-               step = 2 * ibuf->x; nextline = 1;
-               lines = ibuf->x;
-               tbuf = IMB_double_fast_x(ibuf);
-               break;
-       default:
-               return;
-       }
-       
-       if (tbuf == NULL) return;
-
-       imb_freerectImBuf(ibuf);
-
-       ibuf->rect = tbuf->rect;
-       ibuf->mall |= IB_rect;
-       
-       ibuf->x = tbuf->x;
-       ibuf->y = tbuf->y;
-       tbuf->rect = 0;
-       IMB_freeImBuf(tbuf);
-       
-       for (y = 0; y < lines - 2; y++){
-               irect = ibuf->rect;
-               irect += ((2 * y) + 1) * nextline;
-               
-               left = listarray[y].first;
-               while (left) {
-                       right = findmatch(listarray[y + 1].first, left);
-                       if (right) {
-                               if (left->col2 == right->col2) {
-                                       if (left->next && right->next) {
-                                               if (left->next->position >= right->position) {
-                                                       start = ((left->position + right->position) >> 1);
-                                                       end = ((left->next->position + right->next->position) >> 1);
-                                                       col = left->col2;
-                                                       trect = irect + (start * step);
-                                                       for (x = start; x < end; x++) {
-                                                               *trect = col;
-                                                               trect += step;
-                                                       }
-                                               }
-                                       }
-                               }
-
-                               if (left->col1 == right->col1) {
-                                       if (left->prev && right->prev) {
-                                               if (left->prev->position <= right->position) {
-                                                       end = ((left->position + right->position) >> 1);
-                                                       start = ((left->prev->position + right->prev->position) >> 1);
-                                                       col = left->col1;
-                                                       trect = irect + (start * step);
-                                                       for (x = start; x < end; x++) {
-                                                               *trect = col;
-                                                               trect += step;
-                                                       }
-                                               }
-                                       }
-                               }
-
-                       }
-                       left = left->next;
-               }
-       }
-}
-
-
-void IMB_clever_double(struct ImBuf * ibuf)
-{
-       ListBase * listarray, * curlist;
-       Edge * new;
-       int size;
-       int i;
-       
-       if (ibuf == 0) return;
-       
-       size = ibuf->x;
-       listarray = scanimage(ibuf, 'v');
-       if (listarray) {
-               for (i = 0; i < size; i++) {
-                       curlist = listarray + i;
-                       new = (Edge*)MEM_callocN(sizeof(Edge),"Edge");
-                       new->col2 = ibuf->rect[i]; /* upper pixel */
-                       new->col1 = new->col2 - 1;
-                       BLI_addhead(curlist, new);
-                       new = (Edge*)MEM_callocN(sizeof(Edge),"Edge");
-                       new->position = ibuf->y - 1;
-                       new->col1 = ibuf->rect[i + ((ibuf->y -1) * ibuf->x)]; /* bottom pixel */
-                       new->col2 = new->col1 - 1;
-                       BLI_addtail(curlist, new);
-               }
-               _intel_scale(ibuf, listarray, 'v');
-               anti_free_listarray(size, listarray);
-
-               size = ibuf->y;
-               listarray = scanimage(ibuf, 'h');
-               if (listarray) {
-                       for (i = 0; i < size; i++) {
-                               curlist = listarray + i;
-                               new =  (Edge*)MEM_callocN(sizeof(Edge),"Edge");
-                               new->col2 = ibuf->rect[i * ibuf->x]; /* left pixel */
-                               new->col1 = new->col2 - 1;
-                               BLI_addhead(curlist, new);
-                               new =  (Edge*)MEM_callocN(sizeof(Edge),"Edge");
-                               new->position = ibuf->x - 1;
-                               new->col1 = ibuf->rect[((i + 1) * ibuf->x) - 1]; /* right pixel */
-                               new->col2 = new->col1 - 1;
-                               BLI_addtail(curlist, new);
-                       }
-                       _intel_scale(ibuf, listarray, 'h');
-                       anti_free_listarray(size, listarray);
-               }
-       }
-}
diff --git a/source/blender/imbuf/intern/bitplanes.c b/source/blender/imbuf/intern/bitplanes.c
deleted file mode 100644 (file)
index 91fd2a0..0000000
+++ /dev/null
@@ -1,356 +0,0 @@
-/**
- * bitplanes.c
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include "imbuf.h"
-#include "BLI_blenlib.h"
-
-#include "imbuf_patch.h"
-
-#include "IMB_imbuf_types.h"
-#include "IMB_imbuf.h"
-#include "IMB_allocimbuf.h"
-#include "IMB_bitplanes.h"
-
-unsigned int **imb_copyplanelist(struct ImBuf *ibuf)
-{
-       int nobp,i;
-       unsigned int **listn,**listo;
-
-       nobp=ibuf->depth;
-       listn= malloc(nobp*sizeof(int *));                      /* make copy of bitmap */
-       if (listn==0) return (0);
-
-       listo=ibuf->planes;
-       for (i=nobp;i>0;i--){
-               *(listn++) = *(listo++);
-       }
-       listn -= nobp;
-
-       return (listn);
-}
-
-static void bptolscanl(unsigned int *buf, int size, unsigned int **list, int nobp, int offset)
-{
-       /*      converts bitplanes to a buffer with ints
-       by 4 dividiable amount of bitplanes,
-       the width of bitplanes is rounded at ints       */
-
-       list += nobp;
-
-       for (;nobp>0;)
-       {
-               int todo,i;
-               register int bp1, bp2, bp3, bp4, data;
-               register unsigned int *point;
-               int loffset;
-               /*register unsigned int bp1, bp2, bp3, bp4;*/
-
-               bp1 = bp2 = bp3 = bp4 = todo = 0;
-               point = buf;
-               loffset = offset;
-
-               if (nobp & 1){
-                       list -= 1;
-                       nobp -= 1;
-                       for(i=size;i>0;i--)
-                       {
-                               if (todo==0)
-                               {
-                                       bp1 = BIG_LONG((list[0])[loffset]);
-                                       loffset++;
-                                       todo=32;
-                               }
-
-                               data = *point;
-                               data<<=1;
-
-                               if (bp1<0) data+=1;
-                               bp1<<=1;
-
-                               /*              data += (bp1 >> 31);
-                                       bp1 <<= 1;
-                               */
-                               *(point++)=data;
-                               todo--;
-                       }
-               } else if (nobp & 2){
-                       list -= 2;
-                       nobp -= 2;
-                       for(i=size;i>0;i--)
-                       {
-                               if (todo==0)
-                               {
-                                       bp1 = BIG_LONG((list[0])[loffset]);
-                                       bp2 = BIG_LONG((list[1])[loffset]);
-                                       loffset++;
-                                       todo=32;
-                               }
-
-                               data = *point;
-                               data<<=2;
-
-                               if (bp1<0) data+=1;
-                               bp1<<=1;
-                               if (bp2<0) data+=2;
-                               bp2<<=1;
-
-                               /*              data += (bp1 >> 31) + ((bp2 & 0x80000000) >> 30);
-                               bp1 <<= 1; bp2 <<= 1;
-                               */
-                               *(point++)=data;
-                               todo--;
-                       }
-               } else{
-                       list -= 4;
-                       nobp -= 4;
-                       for(i=size;i>0;i--)
-                       {
-                               if (todo==0) {
-                                       bp1 = BIG_LONG((list[0])[loffset]);
-                                       bp2 = BIG_LONG((list[1])[loffset]);
-                                       bp3 = BIG_LONG((list[2])[loffset]);
-                                       bp4 = BIG_LONG((list[3])[loffset]);
-                                       loffset++;
-                                       todo=32;
-                               }
-
-                               data = *point;
-                               data<<=4;
-
-                               if (bp1<0) data+=1;
-                               bp1<<=1;
-                               if (bp2<0) data+=2;
-                               bp2<<=1;
-                               if (bp3<0) data+=4;
-                               bp3<<=1;
-                               if (bp4<0) data+=8;
-                               bp4<<=1;
-
-                               /*              data += (bp1 >> 31) \
-                               + ((bp2 & 0x80000000) >> 30) \
-                               + ((bp3 & 0x80000000) >> 29) \
-                               + ((bp4 & 0x80000000) >> 28);
-               
-                               bp1 <<= 1; bp2 <<= 1;
-                               bp3 <<= 1; bp4 <<= 1;
-                               */
-                               
-                               *(point++)=data;
-                               todo--;
-                       }
-               }
-       }
-}
-
-
-void imb_bptolong(struct ImBuf *ibuf)
-{
-       int nobp,i,x;
-       unsigned int *rect,offset;
-       float black[4] = {0.0,0.0,0.0,1.0};
-       float clear[4] = {0.0,0.0,0.0,0.0};
-
-       /* first clear all ints */
-
-       if (ibuf == 0) return;
-       if (ibuf->planes == 0) return;
-       if (ibuf->rect == 0) imb_addrectImBuf(ibuf);
-
-       nobp=ibuf->depth;
-       if (nobp != 32){
-               if (nobp == 24) IMB_rectfill(ibuf, black); /* set alpha */
-               else IMB_rectfill(ibuf, clear);
-       }
-
-       rect= ibuf->rect;
-       x= ibuf->x;
-       offset=0;
-
-       for (i= ibuf->y; i>0; i--){
-               bptolscanl(rect, x, ibuf->planes, nobp, offset);
-               rect += x;
-               offset += ibuf->skipx;
-       }
-}
-
-
-static void ltobpscanl(unsigned int *rect, int x, unsigned int **list, int nobp, int offset)
-{
-       /* converts a buffer with ints to bitplanes. Take care, buffer 
-               will be destroyed !*/
-
-       if (nobp != 32)
-       {
-               int *rect2;
-               int todo,j;
-
-               rect2 = (int*)rect;
-
-               todo = 32-nobp;
-               for (j = x;j>0;j--){
-                       *(rect2++) <<= todo;
-               }
-       }
-
-       list += nobp;
-       for (;nobp>0;){
-               register int bp1=0, bp2=0, bp3=0, data;
-               register unsigned int *point;
-               int i,todo;
-               int bp4=0,loffset;
-
-               point = rect;
-               todo=32;
-               loffset=offset;
-
-               if (nobp & 1){
-                       list -= 1;
-                       nobp -= 1;
-
-                       for(i=x;i>0;i--){
-                               data = *point;
-
-                               bp1 <<= 1;
-                               if (data<0) bp1 += 1;
-                               data <<= 1;
-
-                               *(point++) = data;
-
-                               todo--;
-                               if (todo == 0){
-                                       (list[0])[loffset] = bp1;
-                                       loffset++;
-                                       todo=32;
-                               }
-                       }
-                       if (todo != 32)
-                       {
-                               bp1 <<= todo;
-                               (list[0])[loffset] = bp1;
-                       }
-               } else if (nobp & 2){
-                       list -= 2;
-                       nobp -= 2;
-                       for(i=x;i>0;i--){
-                               data = *point;
-
-                               bp2 <<= 1;
-                               if (data<0) bp2 += 1;
-                               data <<= 1;
-                               bp1 <<= 1;
-                               if (data<0) bp1 += 1;
-                               data <<= 1;
-
-                               *(point++) = data;
-
-                               todo--;
-                               if (todo == 0){
-                                       (list[0])[loffset] = bp1;
-                                       (list[1])[loffset] = bp2;
-                                       loffset++;
-                                       todo=32;
-                               }
-                       }
-                       if (todo != 32){
-                               bp1 <<= todo;
-                               bp2 <<= todo;
-                               (list[0])[loffset] = bp1;
-                               (list[1])[loffset] = bp2;
-                       }
-               } else{
-                       list -= 4;
-                       nobp -= 4;
-                       for(i=x;i>0;i--){
-                               data = *point;
-
-                               bp4 <<= 1;
-                               if (data<0) bp4 += 1;
-                               data <<= 1;
-                               bp3 <<= 1;
-                               if (data<0) bp3 += 1;
-                               data <<= 1;
-                               bp2 <<= 1;
-                               if (data<0) bp2 += 1;
-                               data <<= 1;
-                               bp1 <<= 1;
-                               if (data<0) bp1 += 1;
-                               data <<= 1;
-
-                               *(point++) = data;
-
-                               todo--;
-                               if (todo == 0){
-                                       (list[0])[loffset] = bp1;
-                                       (list[1])[loffset] = bp2;
-                                       (list[2])[loffset] = bp3;
-                                       (list[3])[loffset] = bp4;
-                                       loffset++;
-                                       todo=32;
-                               }
-                       }
-                       if (todo != 32){
-                               bp1 <<= todo;
-                               bp2 <<= todo;
-                               bp3 <<= todo;
-                               bp4 <<= todo;
-                               (list[0])[loffset] = bp1;
-                               (list[1])[loffset] = bp2;
-                               (list[2])[loffset] = bp3;
-                               (list[3])[loffset] = bp4;
-                       }
-               }
-       }
-}
-
-
-void imb_longtobp(struct ImBuf *ibuf)
-{
-       /* converts a buffer with ints to bitplanes. Take care, buffer
-       will be destroyed !*/
-
-       int nobp,i,x;
-       unsigned int *rect,offset,*buf;
-       ;
-
-       nobp = ibuf->depth;
-       rect=ibuf->rect;
-       x=ibuf->x;
-       offset=0;
-       if ((buf=malloc(x*sizeof(int)))==0) return;
-
-       for (i=ibuf->y;i>0;i--){
-               memcpy(buf, rect, x*sizeof(int));
-               rect +=x ;
-               ltobpscanl(buf, x, ibuf->planes, nobp, offset);
-               offset += ibuf->skipx;
-       }
-       free(buf);
-}
index 606cce6..bdcf600 100644 (file)
 #include "BLI_blenlib.h"
 
 #include "imbuf.h"
-#include "imbuf_patch.h"
 
 #include "IMB_imbuf_types.h"
 #include "IMB_imbuf.h"
 #include "IMB_allocimbuf.h"
-#include "IMB_cmap.h"
-#include "IMB_bmp.h"
+#include "IMB_filetype.h"
 
 /* some code copied from article on microsoft.com, copied
   here for enhanced BMP support in the future
@@ -98,7 +96,7 @@ static int checkbmp(unsigned char *mem)
        return(ret_val);
 }
 
-int imb_is_a_bmp(void *buf) {
+int imb_is_a_bmp(unsigned char *buf) {
        
        return checkbmp(buf);
 }
@@ -195,7 +193,7 @@ static int putShortLSB(unsigned short us,FILE *ofile) {
 } 
 
 /* Found write info at http://users.ece.gatech.edu/~slabaugh/personal/c/bitmapUnix.c */
-short imb_savebmp(struct ImBuf *ibuf, char *name, int flags) {
+int imb_savebmp(struct ImBuf *ibuf, char *name, int flags) {
 
        BMPINFOHEADER infoheader;
        int bytesize, extrabytes, x, y, t, ptr;
diff --git a/source/blender/imbuf/intern/cache.c b/source/blender/imbuf/intern/cache.c
new file mode 100644 (file)
index 0000000..d15826d
--- /dev/null
@@ -0,0 +1,442 @@
+/*
+ * $Id$
+ *
+ * ***** BEGIN GPL LICENSE BLOCK *****
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software Foundation,
+ * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * ***** END GPL LICENSE BLOCK *****
+ */
+
+#include "BLI_ghash.h"
+#include "BLI_listbase.h"
+#include "BLI_memarena.h"
+#include "BLI_threads.h"
+
+#include "BKE_utildefines.h"
+
+#include "IMB_imbuf.h"
+#include "IMB_imbuf_types.h"
+#include "IMB_filetype.h"
+
+#include "imbuf.h"
+
+/* We use a two level cache here. A per-thread cache with limited number of
+   tiles. This can be accessed without locking and so is hoped to lead to most
+   tile access being lock-free. The global cache is shared between all threads
+   and requires slow locking to access, and contains all tiles.
+   
+   The per-thread cache should be big enough that one might hope to not fall
+   back to the global cache every pixel, but not to big to keep too many tiles
+   locked and using memory. */
+
+#define IB_THREAD_CACHE_SIZE   100
+
+typedef struct ImGlobalTile {
+       struct ImGlobalTile *next, *prev;
+
+       ImBuf *ibuf;
+       int tx, ty;
+       int refcount;
+       volatile int loading;
+} ImGlobalTile;
+
+typedef struct ImThreadTile {
+       struct ImThreadTile *next, *prev;
+
+       ImBuf *ibuf;
+       int tx, ty;
+
+       ImGlobalTile *global;
+} ImThreadTile;
+
+typedef struct ImThreadTileCache {
+       ListBase tiles;
+       ListBase unused;
+       GHash *tilehash;
+} ImThreadTileCache;
+
+typedef struct ImGlobalTileCache {
+       ListBase tiles;
+       ListBase unused;
+       GHash *tilehash;
+
+       MemArena *memarena;
+       uintptr_t totmem, maxmem;
+
+       ImThreadTileCache thread_cache[BLENDER_MAX_THREADS+1];
+       int totthread;
+
+       ThreadMutex mutex;
+} ImGlobalTileCache;
+
+static ImGlobalTileCache GLOBAL_CACHE;
+
+/***************************** Hash Functions ********************************/
+
+static unsigned int imb_global_tile_hash(void *gtile_p)
+{
+       ImGlobalTile *gtile= gtile_p;
+
+       return ((unsigned int)(intptr_t)gtile->ibuf)*769 + gtile->tx*53 + gtile->ty*97;
+}
+
+static int imb_global_tile_cmp(void *a_p, void *b_p)
+{
+       ImGlobalTile *a= a_p;
+       ImGlobalTile *b= b_p;
+
+       if(a->ibuf == b->ibuf && a->tx == b->tx && a->ty == b->ty) return 0;
+       else if(a->ibuf < b->ibuf || a->tx < b->tx || a->ty < b->ty) return -1;
+       else return 1;
+}
+
+static unsigned int imb_thread_tile_hash(void *ttile_p)
+{
+       ImThreadTile *ttile= ttile_p;
+
+       return ((unsigned int)(intptr_t)ttile->ibuf)*769 + ttile->tx*53 + ttile->ty*97;
+}
+
+static int imb_thread_tile_cmp(void *a_p, void *b_p)
+{
+       ImThreadTile *a= a_p;
+       ImThreadTile *b= b_p;
+
+       if(a->ibuf == b->ibuf && a->tx == b->tx && a->ty == b->ty) return 0;
+       else if(a->ibuf < b->ibuf || a->tx < b->tx || a->ty < b->ty) return -1;
+       else return 1;
+}
+
+/******************************** Load/Unload ********************************/
+
+static void imb_global_cache_tile_load(ImGlobalTile *gtile)
+{
+       ImBuf *ibuf= gtile->ibuf;
+       int toffs= ibuf->xtiles*gtile->ty + gtile->tx;
+       unsigned int *rect;
+
+       rect = MEM_callocN(sizeof(unsigned int)*ibuf->tilex*ibuf->tiley, "imb_tile");
+       imb_loadtile(ibuf, gtile->tx, gtile->ty, rect);
+       ibuf->tiles[toffs]= rect;
+}
+
+static void imb_global_cache_tile_unload(ImGlobalTile *gtile)
+{
+       ImBuf *ibuf= gtile->ibuf;
+       int toffs= ibuf->xtiles*gtile->ty + gtile->tx;
+
+       MEM_freeN(ibuf->tiles[toffs]);
+       ibuf->tiles[toffs]= NULL;
+
+       GLOBAL_CACHE.totmem -= sizeof(unsigned int)*ibuf->tilex*ibuf->tiley;
+}
+
+/* external free */
+void imb_tile_cache_tile_free(ImBuf *ibuf, int tx, int ty)
+{
+       ImGlobalTile *gtile, lookuptile;
+
+       BLI_mutex_lock(&GLOBAL_CACHE.mutex);
+
+       lookuptile.ibuf = ibuf;
+       lookuptile.tx = tx;
+       lookuptile.ty = ty;
+       gtile= BLI_ghash_lookup(GLOBAL_CACHE.tilehash, &lookuptile);
+
+       if(gtile) {
+               /* in case another thread is loading this */
+               while(gtile->loading)
+                       ;
+
+               BLI_ghash_remove(GLOBAL_CACHE.tilehash, gtile, NULL, NULL);
+               BLI_remlink(&GLOBAL_CACHE.tiles, gtile);
+               BLI_addtail(&GLOBAL_CACHE.unused, gtile);
+       }
+
+       BLI_mutex_unlock(&GLOBAL_CACHE.mutex);
+}
+
+/******************************* Init/Exit ***********************************/
+
+static void imb_thread_cache_init(ImThreadTileCache *cache)
+{
+       ImThreadTile *ttile;
+       int a;
+
+       memset(cache, 0, sizeof(ImThreadTileCache));
+
+       cache->tilehash= BLI_ghash_new(imb_thread_tile_hash, imb_thread_tile_cmp, "imb_thread_cache_init gh");
+
+       /* pre-allocate all thread local tiles in unused list */
+       for(a=0; a<IB_THREAD_CACHE_SIZE; a++) {
+               ttile= BLI_memarena_alloc(GLOBAL_CACHE.memarena, sizeof(ImThreadTile));
+               BLI_addtail(&cache->unused, ttile);
+       }
+}
+
+static void imb_thread_cache_exit(ImThreadTileCache *cache)
+{
+       BLI_ghash_free(cache->tilehash, NULL, NULL);
+}
+
+void imb_tile_cache_init(void)
+{
+       memset(&GLOBAL_CACHE, 0, sizeof(ImGlobalTileCache));
+
+       BLI_mutex_init(&GLOBAL_CACHE.mutex);
+
+       /* initialize for one thread, for places that access textures
+          outside of rendering (displace modifier, painting, ..) */
+       IMB_tile_cache_params(0, 0);
+}
+
+void imb_tile_cache_exit(void)
+{
+       ImGlobalTile *gtile;
+       int a;
+
+       for(gtile=GLOBAL_CACHE.tiles.first; gtile; gtile=gtile->next)
+               imb_global_cache_tile_unload(gtile);
+
+       for(a=0; a<GLOBAL_CACHE.totthread; a++)
+               imb_thread_cache_exit(&GLOBAL_CACHE.thread_cache[a]);
+
+       if(GLOBAL_CACHE.memarena)
+               BLI_memarena_free(GLOBAL_CACHE.memarena);
+
+       if(GLOBAL_CACHE.tilehash)
+               BLI_ghash_free(GLOBAL_CACHE.tilehash, NULL, NULL);
+
+       BLI_mutex_end(&GLOBAL_CACHE.mutex);
+}
+
+/* presumed to be called when no threads are running */
+void IMB_tile_cache_params(int totthread, int maxmem)
+{
+       int a;
+
+       /* always one cache for non-threaded access */
+       totthread++;
+
+       /* lazy initialize cache */
+       if(GLOBAL_CACHE.totthread == totthread && GLOBAL_CACHE.maxmem == maxmem)
+               return;
+
+       imb_tile_cache_exit();
+
+       memset(&GLOBAL_CACHE, 0, sizeof(ImGlobalTileCache));
+
+       GLOBAL_CACHE.tilehash= BLI_ghash_new(imb_global_tile_hash, imb_global_tile_cmp, "tile_cache_params gh");
+
+       GLOBAL_CACHE.memarena= BLI_memarena_new(BLI_MEMARENA_STD_BUFSIZE, "ImTileCache arena");
+       BLI_memarena_use_calloc(GLOBAL_CACHE.memarena);
+
+       GLOBAL_CACHE.maxmem= maxmem*1024*1024;
+
+       GLOBAL_CACHE.totthread= totthread;
+       for(a=0; a<totthread; a++)
+               imb_thread_cache_init(&GLOBAL_CACHE.thread_cache[a]);
+
+       BLI_mutex_init(&GLOBAL_CACHE.mutex);
+}
+
+/***************************** Global Cache **********************************/
+
+static ImGlobalTile *imb_global_cache_get_tile(ImBuf *ibuf, int tx, int ty, ImGlobalTile *replacetile)
+{
+       ImGlobalTile *gtile, lookuptile;
+
+       BLI_mutex_lock(&GLOBAL_CACHE.mutex);
+
+       if(replacetile)
+               replacetile->refcount--;
+
+       /* find tile in global cache */
+       lookuptile.ibuf = ibuf;
+       lookuptile.tx = tx;
+       lookuptile.ty = ty;
+       gtile= BLI_ghash_lookup(GLOBAL_CACHE.tilehash, &lookuptile);
+       
+       if(gtile) {
+               /* found tile. however it may be in the process of being loaded
+                  by another thread, in that case we do stupid busy loop waiting
+                  for the other thread to load the tile */
+               gtile->refcount++;
+
+               BLI_mutex_unlock(&GLOBAL_CACHE.mutex);
+
+               while(gtile->loading)
+                       ;
+       }
+       else {
+               /* not found, let's load it from disk */
+
+               /* first check if we hit the memory limit */
+               if(GLOBAL_CACHE.maxmem && GLOBAL_CACHE.totmem > GLOBAL_CACHE.maxmem) {
+                       /* find an existing tile to unload */
+                       for(gtile=GLOBAL_CACHE.tiles.last; gtile; gtile=gtile->prev)
+                               if(gtile->refcount == 0 && gtile->loading == 0)
+                                       break;
+               }
+
+               if(gtile) {
+                       /* found a tile to unload */
+                       imb_global_cache_tile_unload(gtile);
+                       BLI_ghash_remove(GLOBAL_CACHE.tilehash, gtile, NULL, NULL);
+                       BLI_remlink(&GLOBAL_CACHE.tiles, gtile);
+               }
+               else {
+                       /* allocate a new tile or reuse unused */
+                       if(GLOBAL_CACHE.unused.first) {
+                               gtile= GLOBAL_CACHE.unused.first;
+                               BLI_remlink(&GLOBAL_CACHE.unused, gtile);
+                       }
+                       else
+                               gtile= BLI_memarena_alloc(GLOBAL_CACHE.memarena, sizeof(ImGlobalTile));
+               }
+
+               /* setup new tile */
+               gtile->ibuf= ibuf;
+               gtile->tx= tx;
+               gtile->ty= ty;
+               gtile->refcount= 1;
+               gtile->loading= 1;
+
+               BLI_ghash_insert(GLOBAL_CACHE.tilehash, gtile, gtile);
+               BLI_addhead(&GLOBAL_CACHE.tiles, gtile);
+
+               /* mark as being loaded and unlock to allow other threads to load too */
+               GLOBAL_CACHE.totmem += sizeof(unsigned int)*ibuf->tilex*ibuf->tiley;
+
+               BLI_mutex_unlock(&GLOBAL_CACHE.mutex);
+
+               /* load from disk */
+               imb_global_cache_tile_load(gtile);
+
+               /* mark as done loading */
+               gtile->loading= 0;
+       }
+
+       return gtile;
+}
+
+/***************************** Per-Thread Cache ******************************/
+
+static unsigned int *imb_thread_cache_get_tile(ImThreadTileCache *cache, ImBuf *ibuf, int tx, int ty)
+{
+       ImThreadTile *ttile, lookuptile;
+       ImGlobalTile *gtile, *replacetile;
+       int toffs= ibuf->xtiles*ty + tx;
+
+       /* test if it is already in our thread local cache */
+       if((ttile=cache->tiles.first)) {
+               /* check last used tile before going to hash */
+               if(ttile->ibuf == ibuf && ttile->tx == tx && ttile->ty == ty)
+                       return ibuf->tiles[toffs];
+
+               /* find tile in hash */
+               lookuptile.ibuf = ibuf;
+               lookuptile.tx = tx;
+               lookuptile.ty = ty;
+
+               if((ttile=BLI_ghash_lookup(cache->tilehash, &lookuptile))) {
+                       BLI_remlink(&cache->tiles, ttile);
+                       BLI_addhead(&cache->tiles, ttile);
+
+                       return ibuf->tiles[toffs];
+               }
+       }
+
+       /* not found, have to do slow lookup in global cache */
+       if(cache->unused.first == NULL) {
+               ttile= cache->tiles.last;
+               replacetile= ttile->global;
+               BLI_remlink(&cache->tiles, ttile);
+               BLI_ghash_remove(cache->tilehash, ttile, NULL, NULL);
+       }
+       else {
+               ttile= cache->unused.first;
+               replacetile= NULL;
+               BLI_remlink(&cache->unused, ttile);
+       }
+
+       BLI_addhead(&cache->tiles, ttile);
+       BLI_ghash_insert(cache->tilehash, ttile, ttile);
+
+       gtile= imb_global_cache_get_tile(ibuf, tx, ty, replacetile);
+
+       ttile->ibuf= gtile->ibuf;
+       ttile->tx= gtile->tx;
+       ttile->ty= gtile->ty;
+       ttile->global= gtile;
+
+       return ibuf->tiles[toffs];
+}
+
+unsigned int *IMB_gettile(ImBuf *ibuf, int tx, int ty, int thread)
+{
+       return imb_thread_cache_get_tile(&GLOBAL_CACHE.thread_cache[thread+1], ibuf, tx, ty);
+}
+
+void IMB_tiles_to_rect(ImBuf *ibuf)
+{
+       ImBuf *mipbuf;
+       ImGlobalTile *gtile;
+       unsigned int *to, *from;
+       int a, tx, ty, y, w, h;
+
+       for(a=0; a<ibuf->miptot; a++) {
+               mipbuf= IMB_getmipmap(ibuf, a);
+
+               /* don't call imb_addrectImBuf, it frees all mipmaps */
+               if(!mipbuf->rect) {
+                       if((mipbuf->rect = MEM_mapallocN(ibuf->x*ibuf->y*sizeof(unsigned int), "imb_addrectImBuf"))) {
+                               mipbuf->mall |= IB_rect;
+                               mipbuf->flags |= IB_rect;
+                       }
+                       else
+                               break;
+               }
+
+               for(ty=0; ty<mipbuf->ytiles; ty++) {
+                       for(tx=0; tx<mipbuf->xtiles; tx++) {
+                               /* acquire tile through cache, this assumes cache is initialized,
+                                  which it is always now but it's a weak assumption ... */
+                               gtile= imb_global_cache_get_tile(mipbuf, tx, ty, NULL);
+
+                               /* setup pointers */
+                               from= mipbuf->tiles[mipbuf->xtiles*ty + tx];
+                               to= mipbuf->rect + mipbuf->x*ty*mipbuf->tiley + tx*mipbuf->tilex;
+
+                               /* exception in tile width/height for tiles at end of image */
+                               w= (tx == mipbuf->xtiles-1)? mipbuf->x - tx*mipbuf->tilex: mipbuf->tilex;
+                               h= (ty == mipbuf->ytiles-1)? mipbuf->y - ty*mipbuf->tiley: mipbuf->tiley;
+
+                               for(y=0; y<h; y++) {
+                                       memcpy(to, from, sizeof(unsigned int)*w);
+                                       from += mipbuf->tilex;
+                                       to += mipbuf->x;
+                               }
+
+                               /* decrease refcount for tile again */
+                               BLI_mutex_lock(&GLOBAL_CACHE.mutex);
+                               gtile->refcount--;
+                               BLI_mutex_unlock(&GLOBAL_CACHE.mutex);
+                       }
+               }
+       }
+}
+
index 2acd4df..aa1b8ca 100644 (file)
@@ -186,7 +186,7 @@ short imb_savecineon(struct ImBuf *buf, char *myfile, int flags)
 }
 
  
-int imb_is_cineon(void *buf)
+int imb_is_cineon(unsigned char *buf)
 {
        return cineonIsMemFileCineon(buf);
 }
@@ -203,7 +203,7 @@ short imb_save_dpx(struct ImBuf *buf, char *myfile, int flags)
        return imb_save_dpx_cineon(buf, myfile, 0, flags);
 }
 
-int imb_is_dpx(void *buf)
+int imb_is_dpx(unsigned char *buf)
 {
        return dpxIsMemFileCineon(buf);
 }
diff --git a/source/blender/imbuf/intern/cmap.c b/source/blender/imbuf/intern/cmap.c
deleted file mode 100644 (file)
index 49edc93..0000000
+++ /dev/null
@@ -1,580 +0,0 @@
-/**
- * cmap.c
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include <ctype.h>
-#include "BLI_blenlib.h"
-
-#include "imbuf.h"
-#include "imbuf_patch.h"
-#include "IMB_imbuf_types.h"
-#include "IMB_imbuf.h"
-
-#include "IMB_cmap.h"
-
-static short *lastcube = 0;
-static uchar *lastcoltab = 0;
-static short lastmaxcol;
-static short lastmincol;
-static short lastcbits;
-short alpha_col0 = FALSE;
-
-extern void IMB_free_cache_limiter();
-
-/*
- * there still is a bug here. If you want to convert an image to a 1 bit colormap you get
- * a black image. All conversion to less than 4 bits is too dark anyway.
- */
-
-void IMB_freeImBufdata(void)
-{
-       if (lastcube) free(lastcube);
-       lastcube= 0;
-       if (lastcoltab) free(lastcoltab);
-       lastcoltab= 0;
-       IMB_free_cache_limiter();
-}
-
-
-int IMB_alpha_to_col0(int value)
-{
-       int old;
-       
-       old = alpha_col0;
-       alpha_col0 = value;
-       return (old);
-}
-
-
-void imb_losecmapbits(struct ImBuf *ibuf, unsigned int *coltab)
-{
-       int i,bits;
-       unsigned int col, and1, and2, *rect;
-
-       if (ibuf == 0) return;
-       if (ibuf->rect == 0) return;
-       if (ibuf->cbits == 0) return;
-       if (ibuf->cbits >= 8) return;
-
-/*
-       bij cbits = 5:
-       and1 = 11100000;
-       bij cbits = 6:
-       and1 = 11000000;
-*/
-
-       bits = ibuf->cbits;
-       and1 = ((1 << (8-bits)) - 1) & 0xff;
-       and1 |= (and1 << 24) + (and1 << 16) + (and1 << 8);
-       and2 = ~and1;
-       and1 <<= bits;
-
-       rect = ibuf->rect;
-       for (i = ibuf->x * ibuf->y ; i > 0; i--) {
-               col = rect[0]; 
-               *rect++ = col - ((col & and1) >> bits);
-       }
-       
-       if (coltab){
-               for (i = 0 ; i < ibuf->maxcol ; i++) {
-                       col = coltab[i];
-                       coltab[i] = (col - ((col & and1) >> bits)) & and2;
-               }
-       }
-}
-
-
-static void addcmapbits(struct ImBuf *ibuf)
-{
-       int i,bits;
-       int div,mul;
-       uchar * cmap;
-       
-       if (ibuf == 0) return;
-       if (ibuf->cmap == 0) return;
-       if (ibuf->cbits == 0) return;
-       if (ibuf->cbits >= 8) return;
-
-       bits = ibuf->cbits;
-
-       /* bits = 4 -> div = 0xf0
-        * bits = 5 -> div = 0xf8
-        */
-        
-       div = ((1 << bits) - 1) << (8 - bits);
-       mul = 0xffff / div;
-       
-       if (ibuf->cmap){
-               cmap = (uchar *) ibuf->cmap;
-               for (i = 0 ; i < ibuf->maxcol ; i++){
-                       cmap[1] = (mul * cmap[1]) >> 8;
-                       cmap[2] = (mul * cmap[2]) >> 8;
-                       cmap[3] = (mul * cmap[3]) >> 8;
-                       cmap += 4;
-               }
-       }
-}
-
-
-static short addplanetocube(short *cube, short *plane, int minx, int miny, int sizep, int addcx, int addcy, int sizec, int col)
-{
-       short done = FALSE;
-       int x, numx, numy, skipc, skipp, temp;
-
-       /* clip first */
-
-       numx = numy = sizep;
-
-       temp = minx + sizep - 1;
-       if (temp > sizec) numx -= temp - sizec;
-
-       temp = miny + sizep - 1;
-       if (temp > sizec) numy -= temp - sizec;
-
-       if (minx < 0){
-               plane -= minx;
-               cube -= minx * addcx;
-               numx += minx;
-       }
-
-       if (miny < 0){
-               plane -= miny * sizep;
-               cube -= miny * addcy;
-               numy += miny;
-       }
-
-       skipc = addcy - (numx * addcx);
-       skipp = sizep - numx;
-
-       for (; numy > 0 ; numy--){
-               for (x = numx ; x > 0; x--) {
-                       
-                       if (plane[0] < cube[1]) {
-                       
-                               cube[0] = col;
-                               cube[1] = plane[0];
-                               done = TRUE;
-                       }
-                       plane ++;
-                       cube += addcx;
-               }
-               plane += skipp;
-               cube += skipc;
-       }
-
-       return (done);
-}
-
-
-
-short *imb_coldeltatab(unsigned char *coltab, short mincol, short maxcol, short cbits)
-{
-       short max, *quadr, *_quadr, *_cube, *cube, *_plane, done, nocol;
-       unsigned int addcb, addcg, addcr, sizep;
-       uchar *_colp, *colp, *col;
-       int i, j, k, addcube;
-       int r, g, b;
-
-       max = (1 << cbits) - 1;
-       nocol = maxcol - mincol;
-       coltab += 4 * mincol;
-       
-       /* reduce colors to the right amount of bits */
-
-       {
-               unsigned int * lctab, and;
-
-               lctab = (unsigned int *) coltab;
-               and = max << (8 - cbits);
-               and = and + (and << 8) + (and << 16) + (and << 24);
-               for (i=nocol-1 ; i >= 0 ; i--) lctab[i] = (lctab[i] & and) >> (8 - cbits);
-       }
-
-       /* is this data the same as previous ? */
-
-       if (lastcube){
-               if (mincol == lastmincol && maxcol == lastmaxcol && cbits == lastcbits){
-                       if (lastcoltab){
-                               if (memcmp(lastcoltab, coltab, 4 * nocol) == 0) return(lastcube);
-                       }
-               }
-       }
-       if (lastcube) free(lastcube);
-       if (lastcoltab) free(lastcoltab);
-
-       lastcube = 0; 
-       lastcoltab = 0;
-       _cube = malloc(2 * (1 << (3 * cbits)) * sizeof(short));
-       _plane = malloc((2 * max + 1) * (2 * max + 1) * sizeof(short));
-       _quadr = malloc((2 * max + 1) * sizeof(short));
-       _colp = malloc(6 * nocol);
-
-       if (_cube == 0 || _plane == 0 || _quadr == 0 || _colp == 0){
-               if (_cube) free(_cube);
-               if (_plane) free(_plane);
-               if (_quadr) free(_quadr);
-               if (_colp) free(_colp);
-               return(0);
-       }
-
-       lastcoltab = malloc(4 * nocol);
-       if (lastcoltab) memcpy(lastcoltab, coltab, 4 * nocol);
-       lastcube = _cube;
-       lastmincol = mincol;
-       lastmaxcol = maxcol;
-       lastcbits = cbits;
-
-       /* cube initialise */
-
-       cube = _cube;
-       for (i = (1 << (3 * cbits)); i > 0 ; i--){
-               cube[0] = 0;
-               cube[1] = 32767;
-               cube += 2;
-       }
-
-       /* mak error look up table */
-
-       {
-               unsigned int delta;
-
-               quadr = _quadr + max + 1;
-               quadr[0] = 0;
-               delta = 3;
-               for (i = 1 ; i <= max ; i++){
-                       quadr[i] = quadr[-i] = delta;
-                       delta += i + 3;
-               }
-       }
-
-       /* colorplane initialise */
-
-       for (i = 6 * nocol - 1; i >= 0; i--) _colp[i] = 1;
-
-       addcr = 2;
-       addcg = (addcr << cbits);
-       addcb = (addcg << cbits);
-
-       /* fill in first round */
-
-       {
-               unsigned int ofs;
-
-               col = coltab;
-               cube = _cube;
-
-               for (i = 0 ; i < nocol ; i++){
-                       ofs = (col[3] * addcr) + (col[2] * addcg) + (col[1] * addcb);
-                       /* color been filled in -> then skip */
-                       if (cube[ofs + 1]) cube[ofs] = i + mincol;
-                       cube[ofs + 1] = 0;
-                       col += 4;
-               }
-       }
-
-       for (i = 1; i <= max ; i++){
-               colp = _colp;
-               col = coltab;
-               done = FALSE;
-               sizep = 2*i +1;
-
-               /* plane initialise */
-               {
-                       unsigned int delta;
-                       short *plane;
-
-                       plane = _plane;
-                       for (j = -i ; j <= i; j++){
-                               delta = quadr[i] + quadr[j];
-                               for (k = -i; k <= i; k++){
-                                       *plane++ = delta + quadr[k];
-                               }
-                       }
-               }
-
-               for (j = mincol; j < maxcol; j++){
-                       b = col[1] - i;
-                       g = col[2] - i;
-                       r = col[3] - i;
-                       
-                       addcube= (addcr * r) + (addcg * g) + (addcb * b);
-                       /* PRINT4(d, d, d, d, addcube, r, g, b); */
-                       /* if(addcube >= 2 * (1 << (3 * cbits))) { */
-                       /*      printf("maxerror: %d %d\n", addcube, 2 * (1 << (3 * cbits))); */
-                               /* add_cube= 2 * (1 << (3 * cbits)) -1; */
-                       /* } */
-                       cube = _cube + addcube;
-
-                       if (colp[0]){
-                               if (b < 0) colp[0] = 0;
-                               else done |= colp[0] = addplanetocube(cube, _plane, r, g, sizep, addcr, addcg, max, j);
-                       }
-                       if (colp[1]){
-                               if (g < 0) colp[1] = 0;
-                               else done |= colp[1] = addplanetocube(cube, _plane, r, b, sizep, addcr, addcb, max, j);
-                       }
-                       if (colp[2]){
-                               if (r < 0) colp[2] = 0;
-                               else done |= colp[2] = addplanetocube(cube, _plane, b, g, sizep, addcb, addcg, max, j);
-                       }
-                       if (colp[3]){
-                               if ((b + sizep - 1) > max) colp[3] = 0;
-                               else done |= colp[3] = addplanetocube(cube + (sizep -1) * addcb, _plane, r, g, sizep, addcr,
-                                       addcg, max, j);
-                       }
-                       if (colp[4]){
-                               if ((g + sizep - 1) > max) colp[4] = 0;
-                               else done |= colp[4] = addplanetocube(cube + (sizep -1) * addcg, _plane, r, b, sizep, addcr,
-                                       addcb, max, j);
-                       }
-                       if (colp[5]){
-                               if ((r + sizep - 1) > max) colp[5] = 0;
-                               else done |= colp[5] = addplanetocube(cube + (sizep -1) * addcr, _plane, b, g, sizep, addcb,
-                                       addcg, max, j);
-                       }
-
-                       colp += 6;
-                       col += 4;
-               }
-               if (done == 0) break;
-       }
-
-       free(_quadr);
-       free(_plane);
-       free(_colp);
-       return(_cube);
-}
-
-
-static void convcmap(struct ImBuf* ibuf, short *deltab, short cbits)
-{
-       unsigned int *rect;
-       short x,y;
-       unsigned int col;
-       unsigned int bbits,gbits,rbits;
-       unsigned int bmask,gmask,rmask;
-
-       bbits = 24 - 3 * cbits - 1;
-       gbits = 16 - 2 * cbits - 1;
-       rbits = 8 - cbits - 1;
-
-       rmask = ((1 << cbits) - 1) << (8 - cbits);
-       gmask = rmask << 8;
-       bmask = gmask << 8;
-
-       rect =(unsigned int *)ibuf->rect;
-
-       for(y=ibuf->y;y>0;y--){
-               for(x=ibuf->x;x>0;x--){
-                       col = *rect;
-                       col = ((col & bmask) >> bbits) + ((col & gmask) >> gbits) + ((col & rmask) >> rbits);
-                       *rect++ = deltab[col];
-               }
-       }
-}
-
-short IMB_converttocmap(struct ImBuf *ibuf)
-{
-       unsigned int *coltab;
-       short *deltab=0, cbits;
-       int i;
-       int mincol, mask = 0;
-       struct ImBuf * abuf = 0;
-       unsigned int * rect, * arect;
-       
-       cbits = 5;
-       if (ibuf->cmap == 0) return(0);
-       
-       if ((ibuf->cbits > 0) && (ibuf->cbits <8)) cbits = ibuf->cbits;
-
-       coltab = calloc(ibuf->maxcol, sizeof(unsigned int));
-       if (coltab == 0) return(0);
-       memcpy(coltab, ibuf->cmap, ibuf->maxcol * sizeof(unsigned int));
-       
-       mincol = ibuf->mincol;  
-       if (alpha_col0) {
-               if (mincol == 0) mincol = 1;
-               abuf = IMB_dupImBuf(ibuf);
-       }
-       
-       imb_losecmapbits(ibuf, coltab);
-       deltab = imb_coldeltatab((uchar *) coltab, mincol ,ibuf->maxcol, cbits);
-       
-       if (deltab == 0) {
-               free(coltab);
-               if (abuf) IMB_freeImBuf(abuf);
-               return(0);
-       }
-
-
-       IMB_dit0(ibuf,1,cbits);
-       IMB_dit0(ibuf,2,cbits);
-       IMB_dit0(ibuf,3,cbits);
-       convcmap(ibuf, deltab, cbits);
-       
-       if (abuf) {
-               /* convert alpha to color 0 */
-               rect = ibuf->rect;
-               arect = abuf->rect;
-               
-               if (alpha_col0 == 1) mask = 0xff000000; /* alpha ==  0 -> 0 */
-               if (alpha_col0 == 2) mask = 0x80000000; /* alpha < 128 -> 0 */
-               
-               for (i = ibuf->x * ibuf->y; i > 0; i--) {
-                       if ((*arect++ & mask) == 0) rect[0] = 0;
-                       rect++;
-               }
-               
-               IMB_freeImBuf(abuf);
-       }
-
-       free(coltab);
-       
-       return (TRUE);
-}
-
-
-void imb_makecolarray(struct ImBuf *ibuf, unsigned char *mem, short nocols)
-{
-       short i,bits = 0;
-       uchar *cmap;
-
-       /* what's the theory behind this? */
-       
-       nocols = ibuf->maxcol;
-
-       if (ibuf->cmap){
-               cmap = (uchar *) ibuf->cmap;
-               for (i = 0; i < nocols; i++){
-                       cmap[3] = mem[0];
-                       cmap[2] = mem[1];
-                       cmap[1] = mem[2];
-                       cmap[0] = 0;
-                       
-                       bits |= mem[0] | mem[1] | mem[2];
-                       mem += 3;
-                       cmap += 4;
-               }
-
-               /* patch voor AdPro II */
-               if (IS_ham(ibuf)){
-                       i = ibuf->depth - 2;
-                       bits = ((1 << i) - 1) << (8 - i);
-                       for (i=0 ; i<nocols ; i++) ibuf->cmap[i] &= (bits << 24) + (bits << 16) + (bits << 8) + bits;
-               }
-
-               if ((bits & 0x1f) == 0){
-                       ibuf->cbits = 3;
-               } else if ((bits & 0x0f) == 0){
-                       ibuf->cbits = 4;
-               } else if ((bits & 0x07) == 0){
-                       ibuf->cbits = 5;
-               } else if ((bits & 0x03) == 0){
-                       ibuf->cbits = 6;
-               } else ibuf->cbits = 8;
-
-               addcmapbits(ibuf);
-
-               if (IS_hbrite(ibuf)){
-                       for (i=31;i>=0;i--){
-                               ibuf->cmap[i+32] =  (ibuf->cmap[i]  & 0xfefefefe) >> 1;
-                       }
-               }
-               
-               if (IS_amiga(ibuf)){
-                       cmap = (uchar * ) (ibuf->cmap + 1);
-                       for (i = 1; i < nocols; i++){
-                               cmap[0] = 0xff;
-                               cmap += 4;
-                       }
-               }
-       }
-}
-
-/* temporal... rects now are rgba, cmaps are abgr */
-#define SWITCH_INT(a)  {char s_i, *p_i; p_i= (char *)&(a); s_i= p_i[0]; p_i[0]= p_i[3]; p_i[3]= s_i; s_i= p_i[1]; p_i[1]= p_i[2]; p_i[2]= s_i; }
-
-void IMB_applycmap(struct ImBuf *ibuf)
-{
-       unsigned int *rect, *cmap;
-       int x, y, i, col, code;
-       int *mask = 0;
-       
-       if (ibuf == 0) return;
-       if (ibuf->rect == 0 || ibuf->cmap == 0) return;
-       
-       rect = ibuf->rect;
-       cmap = ibuf->cmap;
-
-       if (IS_ham(ibuf)){
-               
-               /* generate mask of max (8 + 2) bits */
-               mask = malloc(1024 * 2 * sizeof(int));
-
-               x = 1 << (ibuf->depth - 2);
-               y = 65535 / (x - 1);
-               
-               for (i = 0; i < x; i++){
-                       mask[i] = 0;
-                       mask[i + x]     = 0x00ffff;
-                       mask[i + x + x] = 0xffff00;
-                       mask[i + x + x + x] = 0xff00ff;
-
-                       col = (y * i) >> 8;
-                       
-                       mask[i + 1024] = 0xff000000 | ibuf->cmap[i];
-                       mask[i + x + 1024] = 0xff000000 | col << 16;
-                       mask[i + x + x + 1024] = 0xff000000 | col;
-                       mask[i + x + x + x + 1024] = 0xff000000 | col << 8;
-               }
-               
-               /* only color 0 transparant */
-               mask[0+1024] =ibuf->cmap[0];
-               
-               for (y = ibuf->y ; y>0 ; y--){
-                       col = cmap[0];
-                       for (x=ibuf->x ; x>0 ; x--){
-                               code = *rect;
-                               *rect++ = col = (col & mask[code]) | mask[code + 1024];
-                       }
-               }
-               free(mask);
-       } else {
-       
-               for(i = ibuf->x * ibuf->y; i>0; i--){
-                       col = *rect;
-                       if (col >= 0 && col < ibuf->maxcol) *rect = cmap[col];
-                       rect++;
-
-                       /* *(rect++) = cmap[*rect]; */
-               }
-       }
-}
-
diff --git a/source/blender/imbuf/intern/cspace.c b/source/blender/imbuf/intern/cspace.c
deleted file mode 100644 (file)
index 46017fe..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-/**
- *
- * $Id$
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- */
-
-#include "BLI_blenlib.h"
-
-#include "imbuf.h"
-#include "imbuf_patch.h"
-#include "IMB_imbuf_types.h"
-
-void IMB_cspace(struct ImBuf *ibuf, float mat[][4]);
-
-/************************************************************************/
-/*                             COLORSPACE                              */
-/************************************************************************/
-
-static void fillmattab(double val, unsigned short *mattab)
-{
-       int tot,ival;
-       int i;
-
-       val *= (1 << 22);
-       ival = val;
-       tot = 32767; /* een half */
-
-       for(i = 256; i > 0; i--){
-               *(mattab) = (tot >> 16);
-               mattab += 3;
-               tot += ival;
-       }
-}
-
-
-static void cspfill(short *buf, unsigned short *fill, int x)
-{
-       unsigned short r,g,b;
-
-       b = fill[0];
-       g = fill[1];
-       r = fill[2];
-       for (;x>0;x--){
-               buf[0] = b;
-               buf[1] = g;
-               buf[2] = r;
-               buf += 3;
-       }
-}
-
-
-static void cspadd(short *buf, unsigned short *cont, unsigned char *rect, int x)
-{
-       short i;
-       for (;x>0;x--){
-               i = *(rect);
-               rect += 4;
-               buf[0] += cont[i*3];
-               buf[1] += cont[i*3 + 1];
-               buf[2] += cont[i*3 + 2];
-               buf += 3;
-       }
-}
-
-
-static void cspret(short *buf, unsigned char *rect, int x)
-{
-       int r,g,b;
-       
-       for(; x > 0; x--){
-               b = buf[0];
-               g = buf[1];
-               r = buf[2];
-
-               if (b & 0x4000){
-                       if (b<0) rect[2]=0;
-                       else rect[2]=255;
-               } else rect[2] = b >> 6;
-
-               if (g & 0x4000){
-                       if (g<0) rect[1]=0;
-                       else rect[1]=255;
-               } else rect[1] = g >> 6;
-
-               if (r & 0x4000){
-                       if (r<0) rect[0]=0;
-                       else rect[0]=255;
-               } else rect[0] = r >> 6;
-
-               buf += 3;
-               rect += 4;
-       }
-}
-
-
-static void rotcspace(struct ImBuf *ibuf, unsigned short *cont_1, unsigned short *cont_2, unsigned short *cont_3, unsigned short *add)
-{
-       short x,y,*buf;
-       uchar *rect;
-
-       x=ibuf->x;
-       rect= (uchar *)ibuf->rect;
-
-       buf=(short *)malloc(x*3*sizeof(short));
-       if (buf){
-               for(y=ibuf->y;y>0;y--){
-                       cspfill(buf,add,x);
-                       cspadd(buf,cont_1,rect+0,x);
-                       cspadd(buf,cont_2,rect+1,x);
-                       cspadd(buf,cont_3,rect+2,x);
-                       cspret(buf,rect,x);
-                       rect += x<<2;
-               }
-               free(buf);
-       }
-}
-
-
-void IMB_cspace(struct ImBuf *ibuf, float mat[][4])
-{
-       unsigned short *cont_1,*cont_2,*cont_3,add[3];
-
-       cont_1=(unsigned short *)malloc(256*3*sizeof(short));
-       cont_2=(unsigned short *)malloc(256*3*sizeof(short));
-       cont_3=(unsigned short *)malloc(256*3*sizeof(short));
-
-       if (cont_1 && cont_2 && cont_3){
-
-               fillmattab(mat[0][0],cont_1);
-               fillmattab(mat[0][1],cont_1+1);
-               fillmattab(mat[0][2],cont_1+2);
-
-               fillmattab(mat[1][0],cont_2);
-               fillmattab(mat[1][1],cont_2+1);
-               fillmattab(mat[1][2],cont_2+2);
-
-               fillmattab(mat[2][0],cont_3);
-               fillmattab(mat[2][1],cont_3+1);
-               fillmattab(mat[2][2],cont_3+2);
-
-               add[0] = (mat[3][0] * 64.0) + .5;
-               add[1] = (mat[3][1] * 64.0) + .5;
-               add[2] = (mat[3][2] * 64.0) + .5;
-
-               rotcspace(ibuf, cont_1, cont_2, cont_3, add);
-       }
-
-       if (cont_1) free(cont_1);
-       if (cont_2) free(cont_2);
-       if (cont_3) free(cont_3);
-}
-
diff --git a/source/blender/imbuf/intern/data.c b/source/blender/imbuf/intern/data.c
deleted file mode 100644 (file)
index 3b1f303..0000000
+++ /dev/null
@@ -1,142 +0,0 @@
-/**
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- * data.c
- *
- * $Id$
- */
-
-#include "imbuf.h"
-#include "matrix.h"
-
-/*
-static short quadbase[31] = {
-       150,133,117,102,
-       88,75,63,52,
-       42,33,25,18,
-       12,7,3,0,
-       3,7,12,18,
-       25,33,42,52,
-       63,75,88,102,
-       117,133,150,
-};
-
-short *quadr = quadbase+15;
-*/
-/*
-main()
-{
-       ushort _quadr[511], *quadr;
-       int i, delta;
-       
-       quadr = _quadr + 255;
-
-       delta = 0;
-       for (i = 0 ; i <= 255 ; i++){
-               quadr[i] = quadr[-i] = delta;
-               delta += i + 3;
-       }
-       
-       delta = 0;
-       for (i = 0; i < 511; i++){
-               printf("%6d, ", _quadr[i]);
-               delta++;
-               if (delta == 8){
-                       delta = 0;
-                       printf("\n");
-               }
-       }
-}
-*/
-
-static unsigned short quadbase[511] = {
- 33150,  32893,  32637,  32382,  32128,  31875,  31623,  31372, 
- 31122,  30873,  30625,  30378,  30132,  29887,  29643,  29400, 
- 29158,  28917,  28677,  28438,  28200,  27963,  27727,  27492, 
- 27258,  27025,  26793,  26562,  26332,  26103,  25875,  25648, 
- 25422,  25197,  24973,  24750,  24528,  24307,  24087,  23868, 
- 23650,  23433,  23217,  23002,  22788,  22575,  22363,  22152, 
- 21942,  21733,  21525,  21318,  21112,  20907,  20703,  20500, 
- 20298,  20097,  19897,  19698,  19500,  19303,  19107,  18912, 
- 18718,  18525,  18333,  18142,  17952,  17763,  17575,  17388, 
- 17202,  17017,  16833,  16650,  16468,  16287,  16107,  15928, 
- 15750,  15573,  15397,  15222,  15048,  14875,  14703,  14532, 
- 14362,  14193,  14025,  13858,  13692,  13527,  13363,  13200, 
- 13038,  12877,  12717,  12558,  12400,  12243,  12087,  11932, 
- 11778,  11625,  11473,  11322,  11172,  11023,  10875,  10728, 
- 10582,  10437,  10293,  10150,  10008,   9867,   9727,   9588, 
-  9450,   9313,   9177,   9042,   8908,   8775,   8643,   8512, 
-  8382,   8253,   8125,   7998,   7872,   7747,   7623,   7500, 
-  7378,   7257,   7137,   7018,   6900,   6783,   6667,   6552, 
-  6438,   6325,   6213,   6102,   5992,   5883,   5775,   5668, 
-  5562,   5457,   5353,   5250,   5148,   5047,   4947,   4848, 
-  4750,   4653,   4557,   4462,   4368,   4275,   4183,   4092, 
-  4002,   3913,   3825,   3738,   3652,   3567,   3483,   3400, 
-  3318,   3237,   3157,   3078,   3000,   2923,   2847,   2772, 
-  2698,   2625,   2553,   2482,   2412,   2343,   2275,   2208, 
-  2142,   2077,   2013,   1950,   1888,   1827,   1767,   1708, 
-  1650,   1593,   1537,   1482,   1428,   1375,   1323,   1272, 
-  1222,   1173,   1125,   1078,   1032,    987,    943,    900, 
-   858,    817,    777,    738,    700,    663,    627,    592, 
-   558,    525,    493,    462,    432,    403,    375,    348, 
-   322,    297,    273,    250,    228,    207,    187,    168, 
-   150,    133,    117,    102,     88,     75,     63,     52, 
-       42,     33,     25,     18,     12,      7,      3,      0, 
-        3,      7,     12,     18,     25,     33,     42,     52, 
-       63,     75,     88,    102,    117,    133,    150,    168, 
-   187,    207,    228,    250,    273,    297,    322,    348, 
-   375,    403,    432,    462,    493,    525,    558,    592, 
-   627,    663,    700,    738,    777,    817,    858,    900, 
-   943,    987,   1032,   1078,   1125,   1173,   1222,   1272, 
-  1323,   1375,   1428,   1482,   1537,   1593,   1650,   1708, 
-  1767,   1827,   1888,   1950,   2013,   2077,   2142,   2208, 
-  2275,   2343,   2412,   2482,   2553,   2625,   2698,   2772, 
-  2847,   2923,   3000,   3078,   3157,   3237,   3318,   3400, 
-  3483,   3567,   3652,   3738,   3825,   3913,   4002,   4092, 
-  4183,   4275,   4368,   4462,   4557,   4653,   4750,   4848, 
-  4947,   5047,   5148,   5250,   5353,   5457,   5562,   5668, 
-  5775,   5883,   5992,   6102,   6213,   6325,   6438,   6552, 
-  6667,   6783,   6900,   7018,   7137,   7257,   7378,   7500, 
-  7623,   7747,   7872,   7998,   8125,   8253,   8382,   8512, 
-  8643,   8775,   8908,   9042,   9177,   9313,   9450,   9588, 
-  9727,   9867,  10008,  10150,  10293,  10437,  10582,  10728, 
- 10875,  11023,  11172,  11322,  11473,  11625,  11778,  11932, 
- 12087,  12243,  12400,  12558,  12717,  12877,  13038,  13200, 
- 13363,  13527,  13692,  13858,  14025,  14193,  14362,  14532, 
- 14703,  14875,  15048,  15222,  15397,  15573,  15750,  15928, 
- 16107,  16287,  16468,  16650,  16833,  17017,  17202,  17388, 
- 17575,  17763,  17952,  18142,  18333,  18525,  18718,  18912, 
- 19107,  19303,  19500,  19698,  19897,  20097,  20298,  20500, 
- 20703,  20907,  21112,  21318,  21525,  21733,  21942,  22152, 
- 22363,  22575,  22788,  23002,  23217,  23433,  23650,  23868, 
- 24087,  24307,  24528,  24750,  24973,  25197,  25422,  25648, 
- 25875,  26103,  26332,  26562,  26793,  27025,  27258,  27492, 
- 27727,  27963,  28200,  28438,  28677,  28917,  29158,  29400, 
- 29643,  29887,  30132,  30378,  30625,  30873,  31122,  31372, 
- 31623,  31875,  32128,  32382,  32637,  32893,  33150,
-};
-
-unsigned short *quadr = quadbase + 255;
index 56880c5..9a10625 100644 (file)
 extern "C" {
 
 #include "imbuf.h"
-#include "imbuf_patch.h"
 #include "IMB_imbuf_types.h"
 #include "IMB_imbuf.h"
 #include "IMB_allocimbuf.h"
 
 
-short imb_save_dds(struct ImBuf * ibuf, char *name, int flags)
+int imb_save_dds(struct ImBuf * ibuf, char *name, int flags)
 {
        return(0); /* todo: finish this function */
 
@@ -78,6 +77,9 @@ struct ImBuf *imb_load_dds(unsigned char *mem, int size, int flags)
        Color32 pixel;
        Color32 *pixels = 0;
 
+       if(!imb_is_a_dds(mem))
+               return (0);
+
        /* check if DDS is valid and supported */
        if (!dds.isValid()) {
                /* no need to print error here, just testing if it is a DDS */
index b8a61c6..6d9fa08 100644 (file)
@@ -29,7 +29,7 @@
 extern "C" {
 #endif
 
-short        imb_save_dds(struct ImBuf *ibuf, char *name, int flags);
+int          imb_save_dds(struct ImBuf *ibuf, char *name, int flags);
 int           imb_is_a_dds(unsigned char *mem); /* use only first 32 bytes of mem */
 struct ImBuf *imb_load_dds(unsigned char *mem, int size, int flags);
 
diff --git a/source/blender/imbuf/intern/dither.c b/source/blender/imbuf/intern/dither.c
deleted file mode 100644 (file)
index ccd7982..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-/**
- *
- * ***** BEGIN GPL LICENSE BLOCK *****
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
- *
- * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV.
- * All rights reserved.
- *
- * The Original Code is: all of this file.
- *
- * Contributor(s): none yet.
- *
- * ***** END GPL LICENSE BLOCK *****
- * dither.c
- *
- * $Id$
- */
-
-#include "BLI_blenlib.h"
-
-#include "imbuf.h"
-#include "imbuf_patch.h"
-#include "IMB_imbuf_types.h"
-#include "IMB_imbuf.h"
-
-void IMB_dit0(struct ImBuf * ibuf, short ofs, short bits)
-{
-       int x, y, and, add, pix;
-       uchar *rect;
-
-       rect= (uchar *)ibuf->rect;
-       rect +=ofs;
-
-       bits = 8 - bits;
-       and = ~((1 << bits)-1);
-       add = 1 << (bits - 1);
-       
-       for (y = ibuf->y; y > 0; y--){
-               for (x = ibuf->x; x > 0; x--) {
-                       pix = *rect + add;
-                       if (pix > 255) pix = 255; 
-                       *rect = pix & and;
-                       rect += 4;
-               }
-       }
-}
-
-void IMB_dit2(struct ImBuf * ibuf, short ofs, short bits)
-{
-       short x,y,pix,and,add1,add2;
-       uchar *rect;
-       uchar dit[4];
-
-       rect= (uchar *)ibuf->rect;
-       rect +=ofs;
-
-       bits = 8 - bits;
-       and = ~((1<<bits)-1);
-       bits -= 2;
-
-       ofs = 0;
-       
-       switch(ofs){
-       case 3:
-               break;
-       case 2:
-               dit[0]=0;
-               dit[1]=1;
-               dit[2]=2;
-               dit[3]=3;
-               break;
-       case 1:
-               dit[0]=3;
-               dit[1]=1;
-               dit[2]=0;
-               dit[3]=2;
-               break;
-       case 0:
-               dit[0]=0;
-               dit[1]=2;
-               dit[2]=3;
-               dit[3]=1;
-               break;
-       }
-       
-       if (bits < 0){
-               dit[0] >>= -bits;
-               dit[1] >>= -bits;
-               dit[2] >>= -bits;
-               dit[3] >>= -bits;
-       } else{
-               dit[0] <<= bits;
-               dit[1] <<= bits;
-               dit[2] <<= bits;
-               dit[3] <<= bits;
-       }
-
-       for(y=ibuf->y;y>0;y--){
-               if(y & 1){
-                       add1=dit[0];
-                       add2=dit[1];
-               }
-               else{
-                       add1=dit[2];
-                       add2=dit[3];
-               }
-               for(x=ibuf->x;x>0;x--){
-                       pix = *rect;
-                       if (x & 1) pix += add1;
-                       else pix += add2;
-
-                       if (pix>255) pix=255;
-                       *rect = pix & and;
-                       rect += 4;
-               }
-       }
-}