Revision: 28651
          
http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=28651
Author:   blendix
Date:     2010-05-07 17:18:04 +0200 (Fri, 07 May 2010)

Log Message:
-----------
Merge image related changes from the render branch. This includes the image
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

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_image.h
    trunk/blender/source/blender/blenkernel/intern/blender.c
    trunk/blender/source/blender/blenkernel/intern/bmfont.c
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/blenkernel/intern/multires.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/blenkernel/intern/writeavi.c
    trunk/blender/source/blender/blenlib/BLI_math_vector.h
    trunk/blender/source/blender/blenlib/BLI_path_util.h
    trunk/blender/source/blender/blenlib/BLI_storage.h
    trunk/blender/source/blender/blenlib/intern/math_vector_inline.c
    trunk/blender/source/blender/blenlib/intern/path_util.c
    trunk/blender/source/blender/blenlib/intern/storage.c
    trunk/blender/source/blender/blenloader/intern/readfile.c
    trunk/blender/source/blender/blenpluginapi/iff.h
    trunk/blender/source/blender/blenpluginapi/intern/pluginapi.c
    trunk/blender/source/blender/editors/interface/interface_draw.c
    trunk/blender/source/blender/editors/interface/interface_icons.c
    trunk/blender/source/blender/editors/screen/screendump.c
    trunk/blender/source/blender/editors/space_file/filelist.c
    trunk/blender/source/blender/editors/space_file/writeimage.c
    trunk/blender/source/blender/editors/space_image/image_buttons.c
    trunk/blender/source/blender/imbuf/IMB_imbuf.h
    trunk/blender/source/blender/imbuf/IMB_imbuf_types.h
    trunk/blender/source/blender/imbuf/IMB_thumbs.h
    trunk/blender/source/blender/imbuf/SConscript
    trunk/blender/source/blender/imbuf/intern/IMB_anim.h
    trunk/blender/source/blender/imbuf/intern/IMB_filter.h
    trunk/blender/source/blender/imbuf/intern/allocimbuf.c
    trunk/blender/source/blender/imbuf/intern/anim.c
    trunk/blender/source/blender/imbuf/intern/bmp.c
    trunk/blender/source/blender/imbuf/intern/cineon/cineon_dpx.c
    trunk/blender/source/blender/imbuf/intern/dds/dds_api.cpp
    trunk/blender/source/blender/imbuf/intern/dds/dds_api.h
    trunk/blender/source/blender/imbuf/intern/divers.c
    trunk/blender/source/blender/imbuf/intern/dynlibtiff.c
    trunk/blender/source/blender/imbuf/intern/dynlibtiff.h
    trunk/blender/source/blender/imbuf/intern/filter.c
    trunk/blender/source/blender/imbuf/intern/imageprocess.c
    trunk/blender/source/blender/imbuf/intern/imbuf.h
    trunk/blender/source/blender/imbuf/intern/imbuf_cocoa.m
    trunk/blender/source/blender/imbuf/intern/iris.c
    trunk/blender/source/blender/imbuf/intern/jp2.c
    trunk/blender/source/blender/imbuf/intern/jpeg.c
    trunk/blender/source/blender/imbuf/intern/openexr/openexr_api.cpp
    trunk/blender/source/blender/imbuf/intern/openexr/openexr_api.h
    trunk/blender/source/blender/imbuf/intern/png.c
    trunk/blender/source/blender/imbuf/intern/radiance_hdr.c
    trunk/blender/source/blender/imbuf/intern/readimage.c
    trunk/blender/source/blender/imbuf/intern/rectop.c
    trunk/blender/source/blender/imbuf/intern/rotate.c
    trunk/blender/source/blender/imbuf/intern/scaling.c
    trunk/blender/source/blender/imbuf/intern/targa.c
    trunk/blender/source/blender/imbuf/intern/thumbs.c
    trunk/blender/source/blender/imbuf/intern/tiff.c
    trunk/blender/source/blender/imbuf/intern/util.c
    trunk/blender/source/blender/imbuf/intern/writeimage.c
    trunk/blender/source/blender/makesdna/DNA_image_types.h
    trunk/blender/source/blender/makesrna/intern/rna_image.c
    trunk/blender/source/blender/quicktime/apple/qtkit_import.m
    trunk/blender/source/blender/quicktime/apple/quicktime_import.c
    trunk/blender/source/blender/windowmanager/intern/wm_init_exit.c
    trunk/blender/source/creator/creator.c
    trunk/blender/source/gameengine/GamePlayer/ghost/GPG_Application.cpp
    trunk/blender/source/gameengine/GamePlayer/ghost/GPG_ghost.cpp

Added Paths:
-----------
    trunk/blender/source/blender/imbuf/intern/IMB_filetype.h
    trunk/blender/source/blender/imbuf/intern/IMB_metadata.h
    trunk/blender/source/blender/imbuf/intern/cache.c
    trunk/blender/source/blender/imbuf/intern/filetype.c
    trunk/blender/source/blender/imbuf/intern/metadata.c
    trunk/blender/source/blender/imbuf/intern/module.c

Removed Paths:
-------------
    trunk/blender/source/blender/imbuf/intern/IMB_amiga.h
    trunk/blender/source/blender/imbuf/intern/IMB_anim5.h
    trunk/blender/source/blender/imbuf/intern/IMB_bitplanes.h
    trunk/blender/source/blender/imbuf/intern/IMB_bmp.h
    trunk/blender/source/blender/imbuf/intern/IMB_cmap.h
    trunk/blender/source/blender/imbuf/intern/IMB_cocoa.h
    trunk/blender/source/blender/imbuf/intern/IMB_divers.h
    trunk/blender/source/blender/imbuf/intern/IMB_dpxcineon.h
    trunk/blender/source/blender/imbuf/intern/IMB_ham.h
    trunk/blender/source/blender/imbuf/intern/IMB_hamx.h
    trunk/blender/source/blender/imbuf/intern/IMB_iff.h
    trunk/blender/source/blender/imbuf/intern/IMB_imginfo.h
    trunk/blender/source/blender/imbuf/intern/IMB_iris.h
    trunk/blender/source/blender/imbuf/intern/IMB_jp2.h
    trunk/blender/source/blender/imbuf/intern/IMB_jpeg.h
    trunk/blender/source/blender/imbuf/intern/IMB_png.h
    trunk/blender/source/blender/imbuf/intern/IMB_radiance_hdr.h
    trunk/blender/source/blender/imbuf/intern/IMB_targa.h
    trunk/blender/source/blender/imbuf/intern/IMB_tiff.h
    trunk/blender/source/blender/imbuf/intern/amiga.c
    trunk/blender/source/blender/imbuf/intern/anim5.c
    trunk/blender/source/blender/imbuf/intern/antialias.c
    trunk/blender/source/blender/imbuf/intern/bitplanes.c
    trunk/blender/source/blender/imbuf/intern/cmap.c
    trunk/blender/source/blender/imbuf/intern/cspace.c
    trunk/blender/source/blender/imbuf/intern/data.c
    trunk/blender/source/blender/imbuf/intern/dither.c
    trunk/blender/source/blender/imbuf/intern/gen_dynlibtiff.py
    trunk/blender/source/blender/imbuf/intern/ham.c
    trunk/blender/source/blender/imbuf/intern/hamx.c
    trunk/blender/source/blender/imbuf/intern/iff.c
    trunk/blender/source/blender/imbuf/intern/imbuf_patch.h
    trunk/blender/source/blender/imbuf/intern/imginfo.c
    trunk/blender/source/blender/imbuf/intern/matrix.h

Modified: trunk/blender/source/blender/blenkernel/BKE_image.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_image.h 2010-05-07 15:08:45 UTC 
(rev 28650)
+++ trunk/blender/source/blender/blenkernel/BKE_image.h 2010-05-07 15:18:04 UTC 
(rev 28651)
@@ -55,7 +55,6 @@
 
 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);

Modified: trunk/blender/source/blender/blenkernel/intern/blender.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/blender.c    2010-05-07 
15:08:45 UTC (rev 28650)
+++ trunk/blender/source/blender/blenkernel/intern/blender.c    2010-05-07 
15:18:04 UTC (rev 28651)
@@ -100,7 +100,7 @@
 
        BKE_spacetypes_free();          /* after free main, it uses space 
callbacks */
        
-       IMB_freeImBufdata();            /* imbuf lib */
+       IMB_exit();
        
        free_nodesystem();      
 }

Modified: trunk/blender/source/blender/blenkernel/intern/bmfont.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/bmfont.c     2010-05-07 
15:08:45 UTC (rev 28650)
+++ trunk/blender/source/blender/blenkernel/intern/bmfont.c     2010-05-07 
15:18:04 UTC (rev 28651)
@@ -174,7 +174,7 @@
        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)));

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c      2010-05-07 
15:08:45 UTC (rev 28650)
+++ trunk/blender/source/blender/blenkernel/intern/image.c      2010-05-07 
15:18:04 UTC (rev 28651)
@@ -92,58 +92,6 @@
 
 /* ******** 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 @@
                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 @@
                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_imtype_is_movie(int imtype)
 {
        switch(imtype) {
-       case R_MOVIE:
        case R_AVIRAW:
        case R_AVIJPEG:
        case R_AVICODEC:
@@ -864,7 +807,7 @@
                        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 @@
        /* 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 @@
        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 @@
        }
 #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 @@
        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 @@
        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 @@
                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 @@
                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 @@
        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 @@
                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 @@
                        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;

Modified: trunk/blender/source/blender/blenkernel/intern/multires.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/multires.c   2010-05-07 
15:08:45 UTC (rev 28650)
+++ trunk/blender/source/blender/blenkernel/intern/multires.c   2010-05-07 
15:18:04 UTC (rev 28651)
@@ -264,39 +264,7 @@
        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])
 {
        copy_v3_v3(mat[0], v1);
@@ -352,7 +320,6 @@
        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 @@
        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) {

@@ Diff output truncated at 10240 characters. @@

_______________________________________________
Bf-blender-cvs mailing list
[email protected]
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to