[Bf-blender-cvs] [9eeae54] temp_imbuf_types_refactor: Imbuf types refactor

Antony Riakiotakis noreply at git.blender.org
Mon Jul 13 12:05:48 CEST 2015


Commit: 9eeae5487b0b77d41ddd8853756fa394f39e0c44
Author: Antony Riakiotakis
Date:   Mon Jul 13 12:05:23 2015 +0200
Branches: temp_imbuf_types_refactor
https://developer.blender.org/rB9eeae5487b0b77d41ddd8853756fa394f39e0c44

Imbuf types refactor

Clearly separate flags from quality in imbuf struct.
Quality stands for PNG compression or jpeg quality.

Also fixed a wrong compression instance in dynamic painting
and commpression setting not propagated when copying
ImBuf to ImageFormatData

===================================================================

M	source/blender/blenkernel/BKE_image.h
M	source/blender/blenkernel/intern/dynamicpaint.c
M	source/blender/blenkernel/intern/image.c
M	source/blender/blenkernel/intern/movieclip.c
M	source/blender/blenkernel/intern/sequencer.c
M	source/blender/editors/space_image/image_buttons.c
M	source/blender/editors/space_image/image_ops.c
M	source/blender/imbuf/IMB_imbuf_types.h
M	source/blender/imbuf/intern/allocimbuf.c
M	source/blender/imbuf/intern/cineon/cineon_dpx.c
M	source/blender/imbuf/intern/jp2.c
M	source/blender/imbuf/intern/jpeg.c
M	source/blender/imbuf/intern/openexr/openexr_api.cpp
M	source/blender/imbuf/intern/png.c
M	source/blender/imbuf/intern/targa.c
M	source/blender/imbuf/intern/tiff.c
M	source/blender/makesrna/intern/rna_image.c

===================================================================

diff --git a/source/blender/blenkernel/BKE_image.h b/source/blender/blenkernel/BKE_image.h
index 4192b38..94afc8a 100644
--- a/source/blender/blenkernel/BKE_image.h
+++ b/source/blender/blenkernel/BKE_image.h
@@ -39,6 +39,7 @@ extern "C" {
 
 struct Image;
 struct ImBuf;
+struct ImbFormatOptions;
 struct anim;
 struct Scene;
 struct Object;
@@ -80,8 +81,8 @@ void    BKE_image_path_from_imtype(
         const char imtype, const bool use_ext, const bool use_frames, const char *suffix);
 int     BKE_image_path_ensure_ext_from_imformat(char *string, const struct ImageFormatData *im_format);
 int     BKE_image_path_ensure_ext_from_imtype(char *string, const char imtype);
-char    BKE_image_ftype_to_imtype(const int ftype, const int options);
-int     BKE_image_imtype_to_ftype(const char imtype, int *r_options);
+char    BKE_image_ftype_to_imtype(const int ftype, const struct ImbFormatOptions *options);
+int     BKE_image_imtype_to_ftype(const char imtype, struct ImbFormatOptions *r_options);
 
 bool    BKE_imtype_is_movie(const char imtype);
 int     BKE_imtype_supports_zbuf(const char imtype);
@@ -270,7 +271,7 @@ bool BKE_image_has_anim(struct Image *image);
 bool BKE_image_has_packedfile(struct Image *image);
 bool BKE_image_is_animated(struct Image *image);
 bool BKE_image_is_dirty(struct Image *image);
-void BKE_image_file_format_set(struct Image *image, int ftype, int options);
+void BKE_image_file_format_set(struct Image *image, int ftype, const struct ImbFormatOptions *options);
 bool BKE_image_has_loaded_ibuf(struct Image *image);
 struct ImBuf *BKE_image_get_ibuf_with_name(struct Image *image, const char *name);
 struct ImBuf *BKE_image_get_first_ibuf(struct Image *image);
diff --git a/source/blender/blenkernel/intern/dynamicpaint.c b/source/blender/blenkernel/intern/dynamicpaint.c
index 47ecbf7..d743e51 100644
--- a/source/blender/blenkernel/intern/dynamicpaint.c
+++ b/source/blender/blenkernel/intern/dynamicpaint.c
@@ -2786,12 +2786,12 @@ void dynamicPaint_outputSurfaceImage(DynamicPaintSurface *surface, char *filenam
 
 	/* Set output format, png in case exr isn't supported */
 	ibuf->ftype = PNG;
-	ibuf->foptions = 95;
+	ibuf->foptions.quality = 15;
 
 #ifdef WITH_OPENEXR
 	if (format == R_IMF_IMTYPE_OPENEXR) {   /* OpenEXR 32-bit float */
 		ibuf->ftype = OPENEXR;
-		ibuf->foptions = OPENEXR_COMPRESS;
+		ibuf->foptions.flag = OPENEXR_COMPRESS;
 	}
 #endif
 
diff --git a/source/blender/blenkernel/intern/image.c b/source/blender/blenkernel/intern/image.c
index 93c4732..fdb93f9 100644
--- a/source/blender/blenkernel/intern/image.c
+++ b/source/blender/blenkernel/intern/image.c
@@ -1208,12 +1208,12 @@ void BKE_image_all_free_anim_ibufs(int cfra)
 
 /* *********** READ AND WRITE ************** */
 
-int BKE_image_imtype_to_ftype(const char imtype, int *r_options)
+int BKE_image_imtype_to_ftype(const char imtype, ImbFormatOptions *r_options)
 {
 	if (imtype == R_IMF_IMTYPE_TARGA)
 		return TGA;
 	else if (imtype == R_IMF_IMTYPE_RAWTGA) {
-		*r_options = RAWTGA;
+		r_options->flag = RAWTGA;
 		return TGA;
 	}
 	else if (imtype == R_IMF_IMTYPE_IRIS)
@@ -1223,7 +1223,7 @@ int BKE_image_imtype_to_ftype(const char imtype, int *r_options)
 		return RADHDR;
 #endif
 	else if (imtype == R_IMF_IMTYPE_PNG) {
-		*r_options = 15;
+		r_options->quality = 15;
 		return PNG;
 	}
 #ifdef WITH_DDS
@@ -1249,12 +1249,12 @@ int BKE_image_imtype_to_ftype(const char imtype, int *r_options)
 		return JP2;
 #endif
 	else {
-		*r_options = 90;
+		r_options->quality = 90;
 		return JPG;
 	}
 }
 
-char BKE_image_ftype_to_imtype(const int ftype, const int options)
+char BKE_image_ftype_to_imtype(const int ftype, const ImbFormatOptions *options)
 {
 	if (ftype == 0)
 		return R_IMF_IMTYPE_TARGA;
@@ -1285,7 +1285,7 @@ char BKE_image_ftype_to_imtype(const int ftype, const int options)
 		return R_IMF_IMTYPE_DPX;
 #endif
 	else if (ftype == TGA) {
-		if (options & RAWTGA)
+		if (options && (options->flag & RAWTGA))
 			return R_IMF_IMTYPE_RAWTGA;
 		else
 			return R_IMF_IMTYPE_TARGA;
@@ -1599,7 +1599,8 @@ void BKE_imformat_defaults(ImageFormatData *im_format)
 void BKE_imbuf_to_image_format(struct ImageFormatData *im_format, const ImBuf *imbuf)
 {
 	int ftype        = imbuf->ftype;
-	int custom_flags = imbuf->foptions;
+	int custom_flags = imbuf->foptions.flag;
+	char quality     = imbuf->foptions.quality;
 
 	BKE_imformat_defaults(im_format);
 
@@ -1618,6 +1619,8 @@ void BKE_imbuf_to_image_format(struct ImageFormatData *im_format, const ImBuf *i
 
 		if (custom_flags & PNG_16BIT)
 			im_format->depth = R_IMF_CHAN_DEPTH_16;
+
+		im_format->compress = quality;
 	}
 
 #ifdef WITH_DDS
@@ -1664,7 +1667,7 @@ void BKE_imbuf_to_image_format(struct ImageFormatData *im_format, const ImBuf *i
 #ifdef WITH_OPENJPEG
 	else if (ftype == JP2) {
 		im_format->imtype = R_IMF_IMTYPE_JP2;
-		im_format->quality = custom_flags & ~JPG_MSK;
+		im_format->quality = quality;
 
 		if (custom_flags & JP2_16BIT)
 			im_format->depth = R_IMF_CHAN_DEPTH_16;
@@ -1691,7 +1694,7 @@ void BKE_imbuf_to_image_format(struct ImageFormatData *im_format, const ImBuf *i
 
 	else {
 		im_format->imtype = R_IMF_IMTYPE_JPEG90;
-		im_format->quality = custom_flags & ~JPG_MSK;
+		im_format->quality = quality;
 	}
 
 	/* planes */
@@ -2181,9 +2184,9 @@ void BKE_imbuf_write_prepare(ImBuf *ibuf, ImageFormatData *imf)
 
 		if (imtype == R_IMF_IMTYPE_PNG) {
 			if (imf->depth == R_IMF_CHAN_DEPTH_16)
-				ibuf->foptions |= PNG_16BIT;
+				ibuf->foptions.flag |= PNG_16BIT;
 
-			ibuf->foptions |= compress;
+			ibuf->foptions.quality = compress;
 		}
 
 	}
@@ -2200,15 +2203,15 @@ void BKE_imbuf_write_prepare(ImBuf *ibuf, ImageFormatData *imf)
 		ibuf->ftype = TIF;
 
 		if (imf->depth == R_IMF_CHAN_DEPTH_16)
-			ibuf->foptions |= TIF_16BIT;
+			ibuf->foptions.flag |= TIF_16BIT;
 	}
 #endif
 #ifdef WITH_OPENEXR
 	else if (ELEM(imtype, R_IMF_IMTYPE_OPENEXR, R_IMF_IMTYPE_MULTILAYER)) {
 		ibuf->ftype = OPENEXR;
 		if (imf->depth == R_IMF_CHAN_DEPTH_16)
-			ibuf->foptions |= OPENEXR_HALF;
-		ibuf->foptions |= (imf->exr_codec & OPENEXR_COMPRESS);
+			ibuf->foptions.flag |= OPENEXR_HALF;
+		ibuf->foptions.flag |= (imf->exr_codec & OPENEXR_COMPRESS);
 
 		if (!(imf->flag & R_IMF_FLAG_ZBUF))
 			ibuf->zbuf_float = NULL;    /* signal for exr saving */
@@ -2219,31 +2222,31 @@ void BKE_imbuf_write_prepare(ImBuf *ibuf, ImageFormatData *imf)
 	else if (imtype == R_IMF_IMTYPE_CINEON) {
 		ibuf->ftype = CINEON;
 		if (imf->cineon_flag & R_IMF_CINEON_FLAG_LOG) {
-			ibuf->foptions |= CINEON_LOG;
+			ibuf->foptions.flag |= CINEON_LOG;
 		}
 		if (imf->depth == R_IMF_CHAN_DEPTH_16) {
-			ibuf->foptions |= CINEON_16BIT;
+			ibuf->foptions.flag |= CINEON_16BIT;
 		}
 		else if (imf->depth == R_IMF_CHAN_DEPTH_12) {
-			ibuf->foptions |= CINEON_12BIT;
+			ibuf->foptions.flag |= CINEON_12BIT;
 		}
 		else if (imf->depth == R_IMF_CHAN_DEPTH_10) {
-			ibuf->foptions |= CINEON_10BIT;
+			ibuf->foptions.flag |= CINEON_10BIT;
 		}
 	}
 	else if (imtype == R_IMF_IMTYPE_DPX) {
 		ibuf->ftype = DPX;
 		if (imf->cineon_flag & R_IMF_CINEON_FLAG_LOG) {
-			ibuf->foptions |= CINEON_LOG;
+			ibuf->foptions.flag |= CINEON_LOG;
 		}
 		if (imf->depth == R_IMF_CHAN_DEPTH_16) {
-			ibuf->foptions |= CINEON_16BIT;
+			ibuf->foptions.flag |= CINEON_16BIT;
 		}
 		else if (imf->depth == R_IMF_CHAN_DEPTH_12) {
-			ibuf->foptions |= CINEON_12BIT;
+			ibuf->foptions.flag |= CINEON_12BIT;
 		}
 		else if (imf->depth == R_IMF_CHAN_DEPTH_10) {
-			ibuf->foptions |= CINEON_10BIT;
+			ibuf->foptions.flag |= CINEON_10BIT;
 		}
 	}
 #endif
@@ -2252,35 +2255,35 @@ void BKE_imbuf_write_prepare(ImBuf *ibuf, ImageFormatData *imf)
 	}
 	else if (imtype == R_IMF_IMTYPE_RAWTGA) {
 		ibuf->ftype = TGA;
-		ibuf->foptions = RAWTGA;
+		ibuf->foptions.flag = RAWTGA;
 	}
 #ifdef WITH_OPENJPEG
 	else if (imtype == R_IMF_IMTYPE_JP2) {
 		if (quality < 10) quality = 90;
 		ibuf->ftype = JP2;
-		ibuf->foptions = quality;
+		ibuf->foptions.quality = quality;
 
 		if (imf->depth == R_IMF_CHAN_DEPTH_16) {
-			ibuf->foptions |= JP2_16BIT;
+			ibuf->foptions.flag |= JP2_16BIT;
 		}
 		else if (imf->depth == R_IMF_CHAN_DEPTH_12) {
-			ibuf->foptions |= JP2_12BIT;
+			ibuf->foptions.flag |= JP2_12BIT;
 		}
 
 		if (imf->jp2_flag & R_IMF_JP2_FLAG_YCC) {
-			ibuf->foptions |= JP2_YCC;
+			ibuf->foptions.flag |= JP2_YCC;
 		}
 
 		if (imf->jp2_flag & R_IMF_JP2_FLAG_CINE_PRESET) {
-			ibuf->foptions |= JP2_CINE;
+			ibuf->foptions.flag |= JP2_CINE;
 			if (imf->jp2_flag & R_IMF_JP2_FLAG_CINE_48)
-				ibuf->foptions |= JP2_CINE_48FPS;
+				ibuf->foptions.flag |= JP2_CINE_48FPS;
 		}
 
 		if (imf->jp2_codec == R_IMF_JP2_CODEC_JP2)
-			ibuf->foptions |= JP2_JP2;
+			ibuf->foptions.flag |= JP2_JP2;
 		else if (imf->jp2_codec == R_IMF_JP2_CODEC_J2K)
-			ibuf->foptions |= JP2_J2K;
+			ibuf->foptions.flag |= JP2_J2K;
 		else
 			BLI_assert(!"Unsupported jp2 codec was specified in im_format->jp2_codec");
 	}
@@ -2289,7 +2292,7 @@ void BKE_imbuf_write_prepare(ImBuf *ibuf, ImageFormatData *imf)
 		/* R_IMF_IMTYPE_JPEG90, etc. default we save jpegs */
 		if (quality < 10) quality = 90;
 		ibuf->ftype = JPG;
-		ibuf->foptions = quality;
+		ibuf->foptions.quality = quality;
 	}
 }
 
@@ -4490,7 +4493,7 @@ bool BKE_image_is_dirty(Image *image)
 	return is_dirty;
 }
 
-void BKE_image_file_format_set(Image *image, int ftype, int options)
+void BKE_image_file_format_set(Image *image, int ftype, const ImbFormatOptions *options)
 {
 #if 0
 	ImBuf *ibuf = BKE_image_acquire_ibuf(image, NULL, NULL);
@@ -4508,7 +4511,7 @@ void BKE_image_file_format_set(Image *image, int ftype, int options)
 		while (!IMB_moviecacheIter_done(iter)) {
 			ImBuf *ibuf = IMB_moviecacheIter_getImBuf(iter);
 			ibuf->ftype = ftype;
-			ibuf->foptions = options;
+			ibuf->foptions = *options;
 			IMB_moviecacheIter_step(iter);
 		}
 		IMB_moviecacheIter_free(iter);
diff --git a/source/blender/blenkernel/intern/movieclip.c b/source/blender/blenkernel/intern/movieclip.c
index 42af920..c08d406 100644
--- a/source/blender/blenkernel/intern/movieclip.c
+++ b/source/blender/blenkernel/intern/movieclip.c
@@ -1323,7 +1323,7 @@ static void movieclip_build_proxy_ibuf(MovieClip *clip, ImBuf *ibuf, int cfra, i
 
 	quality = clip->proxy.quality;
 	scaleibuf->ftype 

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list