[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [33104] trunk/blender/source/blender: option to write images to a files on single frame renders, this isn' t accessed by the UI at the moment, but could eventually be used for saving test-renders.

Campbell Barton ideasman42 at gmail.com
Tue Nov 16 15:40:51 CET 2010


Revision: 33104
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=33104
Author:   campbellbarton
Date:     2010-11-16 15:40:46 +0100 (Tue, 16 Nov 2010)

Log Message:
-----------
option to write images to a files on single frame renders, this isn't accessed by the UI at the moment, but could eventually be used for saving test-renders.

The main reason to have this is so renders can be scripted to write to a specific file without having to do annoying tricks like set a dummy start/end frame range, render an animation and work out the current frame image will be written to, then rename after rendering.

Also made some 'char *' args into 'const char *'

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_image.h
    trunk/blender/source/blender/blenkernel/intern/image.c
    trunk/blender/source/blender/blenkernel/intern/sequencer.c
    trunk/blender/source/blender/blenlib/BLI_fileops.h
    trunk/blender/source/blender/blenlib/BLI_path_util.h
    trunk/blender/source/blender/blenlib/intern/fileops.c
    trunk/blender/source/blender/blenlib/intern/path_util.c
    trunk/blender/source/blender/blenlib/intern/storage.c
    trunk/blender/source/blender/editors/render/render_internal.c
    trunk/blender/source/blender/editors/render/render_opengl.c
    trunk/blender/source/blender/editors/screen/screendump.c
    trunk/blender/source/blender/imbuf/IMB_imbuf.h
    trunk/blender/source/blender/imbuf/intern/openexr/openexr_api.cpp
    trunk/blender/source/blender/imbuf/intern/openexr/openexr_multi.h
    trunk/blender/source/blender/makesrna/intern/rna_scene_api.c
    trunk/blender/source/blender/nodes/intern/CMP_nodes/CMP_outputFile.c
    trunk/blender/source/blender/render/extern/include/RE_pipeline.h
    trunk/blender/source/blender/render/intern/source/pipeline.c

Modified: trunk/blender/source/blender/blenkernel/BKE_image.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_image.h	2010-11-16 13:41:39 UTC (rev 33103)
+++ trunk/blender/source/blender/blenkernel/BKE_image.h	2010-11-16 14:40:46 UTC (rev 33104)
@@ -47,7 +47,7 @@
 void	BKE_stamp_info(struct Scene *scene, struct ImBuf *ibuf);
 void	BKE_stamp_buf(struct Scene *scene, unsigned char *rect, float *rectf, int width, int height, int channels);
 int		BKE_write_ibuf(struct Scene *scene, struct ImBuf *ibuf, char *name, int imtype, int subimtype, int quality);
-void	BKE_makepicstring(char *string, char *base, int frame, int imtype, int use_ext);
+void	BKE_makepicstring(char *string, const char *base, int frame, int imtype, const short use_ext, const short use_frames);
 int		BKE_add_image_extension(char *string, int imtype);
 int		BKE_ftype_to_imtype(int ftype);
 int		BKE_imtype_to_ftype(int imtype);

Modified: trunk/blender/source/blender/blenkernel/intern/image.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/image.c	2010-11-16 13:41:39 UTC (rev 33103)
+++ trunk/blender/source/blender/blenkernel/intern/image.c	2010-11-16 14:40:46 UTC (rev 33104)
@@ -1310,13 +1310,15 @@
 }
 
 
-void BKE_makepicstring(char *string, char *base, int frame, int imtype, int use_ext)
+void BKE_makepicstring(char *string, const char *base, int frame, int imtype, const short use_ext, const short use_frames)
 {
 	if (string==NULL) return;
 	BLI_strncpy(string, base, FILE_MAX - 10);	/* weak assumption */
 	BLI_path_abs(string, G.main->name);
-	BLI_path_frame(string, frame, 4);
 
+	if(use_frames)
+		BLI_path_frame(string, frame, 4);
+
 	if(use_ext)
 		BKE_add_image_extension(string, imtype);
 		

Modified: trunk/blender/source/blender/blenkernel/intern/sequencer.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-11-16 13:41:39 UTC (rev 33103)
+++ trunk/blender/source/blender/blenkernel/intern/sequencer.c	2010-11-16 14:40:46 UTC (rev 33104)
@@ -1828,7 +1828,7 @@
 			if(re==NULL)
 				re= RE_NewRender(sce->id.name);
 			
-			RE_BlenderFrame(re, bmain, sce, NULL, sce->lay, frame);
+			RE_BlenderFrame(re, bmain, sce, NULL, sce->lay, frame, FALSE);
 
 			/* restore previous state after it was toggled on & off by RE_BlenderFrame */
 			G.rendering = rendering;

Modified: trunk/blender/source/blender/blenlib/BLI_fileops.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_fileops.h	2010-11-16 13:41:39 UTC (rev 33103)
+++ trunk/blender/source/blender/blenlib/BLI_fileops.h	2010-11-16 14:40:46 UTC (rev 33104)
@@ -47,7 +47,7 @@
 /**
  * @attention Do not confuse with BLI_exist
  */
-int   BLI_exists(char *file);
+int   BLI_exists(const char *file);
 int   BLI_copy_fileops(char *file, char *to);
 int   BLI_rename(char *from, char *to);
 int   BLI_gzip(char *from, char *to);

Modified: trunk/blender/source/blender/blenlib/BLI_path_util.h
===================================================================
--- trunk/blender/source/blender/blenlib/BLI_path_util.h	2010-11-16 13:41:39 UTC (rev 33103)
+++ trunk/blender/source/blender/blenlib/BLI_path_util.h	2010-11-16 14:40:46 UTC (rev 33104)
@@ -42,9 +42,9 @@
 
 char *BLI_getDefaultDocumentFolder(void);
 
-char *BLI_get_folder(int folder_id, char *subfolder);
-char *BLI_get_folder_create(int folder_id, char *subfolder);
-char *BLI_get_user_folder_notest(int folder_id, char *subfolder);
+char *BLI_get_folder(int folder_id, const char *subfolder);
+char *BLI_get_folder_create(int folder_id, const char *subfolder);
+char *BLI_get_user_folder_notest(int folder_id, const char *subfolder);
 
 /* folder_id */
 
@@ -101,7 +101,7 @@
 
 void BLI_make_file_string(const char *relabase, char *string,  const char *dir, const char *file);
 void BLI_make_exist(char *dir);
-void BLI_make_existing_file(char *name);
+void BLI_make_existing_file(const char *name);
 void BLI_split_dirfile(const char *string, char *dir, char *file);
 void BLI_join_dirfile(char *string, const char *dir, const char *file);
 char *BLI_path_basename(char *path);

Modified: trunk/blender/source/blender/blenlib/intern/fileops.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/fileops.c	2010-11-16 13:41:39 UTC (rev 33103)
+++ trunk/blender/source/blender/blenlib/intern/fileops.c	2010-11-16 14:40:46 UTC (rev 33104)
@@ -143,7 +143,7 @@
 	return 0;
 }
 
-int BLI_exists(char *file) {
+int BLI_exists(const char *file) {
 	return BLI_exist(file);
 }
 

Modified: trunk/blender/source/blender/blenlib/intern/path_util.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/path_util.c	2010-11-16 13:41:39 UTC (rev 33103)
+++ trunk/blender/source/blender/blenlib/intern/path_util.c	2010-11-16 14:40:46 UTC (rev 33104)
@@ -854,7 +854,7 @@
 	return version_str;
 }
 
-static int test_path(char *targetpath, char *path_base, char *path_sep, char *folder_name)
+static int test_path(char *targetpath, const char *path_base, const char *path_sep, const char *folder_name)
 {
 	char tmppath[FILE_MAX];
 	
@@ -878,7 +878,7 @@
 	}
 }
 
-static int test_env_path(char *path, char *envvar)
+static int test_env_path(char *path, const char *envvar)
 {
 	char *env = envvar?getenv(envvar):NULL;
 	if (!env) return 0;
@@ -892,7 +892,7 @@
 	}
 }
 
-static int get_path_local(char *targetpath, char *folder_name, char *subfolder_name)
+static int get_path_local(char *targetpath, const char *folder_name, const char *subfolder_name)
 {
 	extern char bprogname[]; /* argv[0] from creator.c */
 	char bprogdir[FILE_MAX];
@@ -918,7 +918,7 @@
 	return 0;
 }
 
-static int get_path_user(char *targetpath, char *folder_name, char *subfolder_name, char *envvar)
+static int get_path_user(char *targetpath, const char *folder_name, const char *subfolder_name, const char *envvar)
 {
 	char user_path[FILE_MAX];
 	const char *user_base_path;
@@ -955,7 +955,7 @@
 	}
 }
 
-static int get_path_system(char *targetpath, char *folder_name, char *subfolder_name, char *envvar)
+static int get_path_system(char *targetpath, const char *folder_name, const char *subfolder_name, const char *envvar)
 {
 	char system_path[FILE_MAX];
 	const char *system_base_path;
@@ -1022,7 +1022,7 @@
 
 /* get a folder out of the 'folder_id' presets for paths */
 /* returns the path if found, NULL string if not */
-char *BLI_get_folder(int folder_id, char *subfolder)
+char *BLI_get_folder(int folder_id, const char *subfolder)
 {
 	static char path[FILE_MAX] = "";
 	
@@ -1094,7 +1094,7 @@
 	return path;
 }
 
-char *BLI_get_user_folder_notest(int folder_id, char *subfolder)
+char *BLI_get_user_folder_notest(int folder_id, const char *subfolder)
 {
 	static char path[FILE_MAX] = "";
 
@@ -1118,7 +1118,7 @@
 	return path;
 }
 
-char *BLI_get_folder_create(int folder_id, char *subfolder)
+char *BLI_get_folder_create(int folder_id, const char *subfolder)
 {
 	char *path;
 
@@ -1226,7 +1226,7 @@
 	}
 }
 
-void BLI_make_existing_file(char *name)
+void BLI_make_existing_file(const char *name)
 {
 	char di[FILE_MAXDIR+FILE_MAXFILE], fi[FILE_MAXFILE];
 

Modified: trunk/blender/source/blender/blenlib/intern/storage.c
===================================================================
--- trunk/blender/source/blender/blenlib/intern/storage.c	2010-11-16 13:41:39 UTC (rev 33103)
+++ trunk/blender/source/blender/blenlib/intern/storage.c	2010-11-16 14:40:46 UTC (rev 33104)
@@ -474,7 +474,7 @@
 }
 
 /* would be better in fileops.c except that it needs stat.h so add here */
-int BLI_is_dir(char *file) {
+int BLI_is_dir(const char *file) {
 	return S_ISDIR(BLI_exist(file));
 }
 

Modified: trunk/blender/source/blender/editors/render/render_internal.c
===================================================================
--- trunk/blender/source/blender/editors/render/render_internal.c	2010-11-16 13:41:39 UTC (rev 33103)
+++ trunk/blender/source/blender/editors/render/render_internal.c	2010-11-16 14:40:46 UTC (rev 33104)
@@ -402,7 +402,14 @@
 	View3D *v3d= CTX_wm_view3d(C);
 	Main *mainp= CTX_data_main(C);
 	unsigned int lay= (v3d)? v3d->lay: scene->lay;
+	const short is_animation= RNA_boolean_get(op->ptr, "animation");
+	const short is_write_still= RNA_boolean_get(op->ptr, "write_still");
 
+	if(!is_animation && is_write_still && BKE_imtype_is_movie(scene->r.imtype)) {
+		BKE_report(op->reports, RPT_ERROR, "Can't write a single file with an animation format selected.");
+		return OPERATOR_CANCELLED;
+	}
+
 	if(re==NULL) {
 		re= RE_NewRender(scene->id.name);
 	}
@@ -421,10 +428,10 @@
 	   since sequence rendering can call that recursively... (peter) */
 	seq_stripelem_cache_cleanup();
 
-	if(RNA_boolean_get(op->ptr, "animation"))
+	if(is_animation)
 		RE_BlenderAnim(re, mainp, scene, lay, scene->r.sfra, scene->r.efra, scene->r.frame_step, op->reports);
 	else
-		RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra);
+		RE_BlenderFrame(re, mainp, scene, NULL, lay, scene->r.cfra, is_write_still);
 
 	// no redraw needed, we leave state as we entered it
 	ED_update_for_newframe(mainp, scene, CTX_wm_screen(C), 1);
@@ -441,7 +448,7 @@
 	wmWindow *win;
 	SceneRenderLayer *srl;
 	int lay;
-	int anim;
+	short anim, write_still;
 	Image *image;
 	ImageUser iuser;
 	short *stop;
@@ -568,7 +575,7 @@
 	if(rj->anim)
 		RE_BlenderAnim(rj->re, rj->main, rj->scene, rj->lay, rj->scene->r.sfra, rj->scene->r.efra, rj->scene->r.frame_step, rj->reports);
 	else
-		RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra);
+		RE_BlenderFrame(rj->re, rj->main, rj->scene, rj->srl, rj->lay, rj->scene->r.cfra, rj->write_still);
 }
 
 static void render_endjob(void *rjv)
@@ -632,7 +639,9 @@
 	wmJob *steve;
 	RenderJob *rj;
 	Image *ima;
-
+	const short is_animation= RNA_boolean_get(op->ptr, "animation");
+	const short is_write_still= RNA_boolean_get(op->ptr, "write_still");
+	
 	/* only one render job at a time */
 	if(WM_jobs_test(CTX_wm_manager(C), scene))
 		return OPERATOR_CANCELLED;
@@ -641,6 +650,11 @@
 		return OPERATOR_CANCELLED;
 	}
 
+	if(!is_animation && is_write_still && BKE_imtype_is_movie(scene->r.imtype)) {
+		BKE_report(op->reports, RPT_ERROR, "Can't write a single file with an animation format selected.");
+		return OPERATOR_CANCELLED;
+	}	
+	

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list