[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [25520] trunk/blender/source: Reports: writing movies now uses the reports mechanism to throw errors.

Brecht Van Lommel brecht at blender.org
Tue Dec 22 13:01:32 CET 2009


Revision: 25520
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=25520
Author:   blendix
Date:     2009-12-22 13:01:32 +0100 (Tue, 22 Dec 2009)

Log Message:
-----------
Reports: writing movies now uses the reports mechanism to throw errors.

Also fixes bug #19463: screencast to xvid ffmpeg crash.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_writeavi.h
    trunk/blender/source/blender/blenkernel/BKE_writeffmpeg.h
    trunk/blender/source/blender/blenkernel/BKE_writeframeserver.h
    trunk/blender/source/blender/blenkernel/intern/writeavi.c
    trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
    trunk/blender/source/blender/blenkernel/intern/writeframeserver.c
    trunk/blender/source/blender/editors/screen/screen_ops.c
    trunk/blender/source/blender/editors/screen/screendump.c
    trunk/blender/source/blender/quicktime/apple/qtkit_export.m
    trunk/blender/source/blender/quicktime/apple/quicktime_export.c
    trunk/blender/source/blender/quicktime/quicktime_export.h
    trunk/blender/source/blender/render/extern/include/RE_pipeline.h
    trunk/blender/source/blender/render/intern/source/pipeline.c
    trunk/blender/source/blender/windowmanager/intern/wm_event_system.c
    trunk/blender/source/creator/creator.c

Modified: trunk/blender/source/blender/blenkernel/BKE_writeavi.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_writeavi.h	2009-12-22 11:59:30 UTC (rev 25519)
+++ trunk/blender/source/blender/blenkernel/BKE_writeavi.h	2009-12-22 12:01:32 UTC (rev 25520)
@@ -37,17 +37,19 @@
 /* generic blender movie support, could move to own module */
 
 struct RenderData;	
+struct ReportList;
 struct Scene;
-void start_avi(struct Scene *scene, struct RenderData *rd, int rectx, int recty);
+
+int start_avi(struct Scene *scene, struct RenderData *rd, int rectx, int recty, struct ReportList *reports);
 void end_avi(void);
-void append_avi(struct RenderData *rd, int frame, int *pixels, int rectx, int recty);
+int append_avi(struct RenderData *rd, int frame, int *pixels, int rectx, int recty, struct ReportList *reports);
 void makeavistring (struct RenderData *rd, char *string);
 
 typedef struct bMovieHandle {
-	void (*start_movie)(struct Scene *scene, struct RenderData *rd, int rectx, int recty);
-	void (*append_movie)(struct RenderData *rd, int frame, int *pixels, int rectx, int recty);
+	int (*start_movie)(struct Scene *scene, struct RenderData *rd, int rectx, int recty, struct ReportList *reports);
+	int (*append_movie)(struct RenderData *rd, int frame, int *pixels, int rectx, int recty, struct ReportList *reports);
 	void (*end_movie)(void);
-	int (*get_next_frame)(struct RenderData *rd); /* optional */
+	int (*get_next_frame)(struct RenderData *rd, struct ReportList *reports); /* optional */
 } bMovieHandle;
 
 bMovieHandle *BKE_get_movie_handle(int imtype);

Modified: trunk/blender/source/blender/blenkernel/BKE_writeffmpeg.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_writeffmpeg.h	2009-12-22 11:59:30 UTC (rev 25519)
+++ trunk/blender/source/blender/blenkernel/BKE_writeffmpeg.h	2009-12-22 12:01:32 UTC (rev 25520)
@@ -57,11 +57,12 @@
 
 struct IDProperty;
 struct RenderData;	
+struct ReportList;
 struct Scene;
 
-extern void start_ffmpeg(struct Scene *scene, struct RenderData *rd, int rectx, int recty);
+extern int start_ffmpeg(struct Scene *scene, struct RenderData *rd, int rectx, int recty, struct ReportList *reports);
 extern void end_ffmpeg(void);
-extern void append_ffmpeg(struct RenderData *rd, int frame, int *pixels, int rectx, int recty);
+extern int append_ffmpeg(struct RenderData *rd, int frame, int *pixels, int rectx, int recty, struct ReportList *reports);
 
 extern void ffmpeg_set_preset(struct RenderData *rd, int preset);
 extern void ffmpeg_verify_image_type(struct RenderData *rd);

Modified: trunk/blender/source/blender/blenkernel/BKE_writeframeserver.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_writeframeserver.h	2009-12-22 11:59:30 UTC (rev 25519)
+++ trunk/blender/source/blender/blenkernel/BKE_writeframeserver.h	2009-12-22 12:01:32 UTC (rev 25520)
@@ -33,12 +33,13 @@
 #endif
 
 struct RenderData;	
+struct ReportList;
 struct Scene;
 
-extern void start_frameserver(struct Scene *scene, struct RenderData *rd, int rectx, int recty);
+extern int start_frameserver(struct Scene *scene, struct RenderData *rd, int rectx, int recty, struct ReportList *reports);
 extern void end_frameserver(void);
-extern void append_frameserver(struct RenderData *rd, int frame, int *pixels, int rectx, int recty);
-extern int frameserver_loop(struct RenderData *rd);
+extern int append_frameserver(struct RenderData *rd, int frame, int *pixels, int rectx, int recty, struct ReportList *reports);
+extern int frameserver_loop(struct RenderData *rd, struct ReportList *reports);
 
 #ifdef __cplusplus
 }

Modified: trunk/blender/source/blender/blenkernel/intern/writeavi.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/writeavi.c	2009-12-22 11:59:30 UTC (rev 25519)
+++ trunk/blender/source/blender/blenkernel/intern/writeavi.c	2009-12-22 12:01:32 UTC (rev 25520)
@@ -40,6 +40,7 @@
 #include "BLI_blenlib.h"
 
 #include "BKE_global.h"
+#include "BKE_report.h"
 #include "BKE_utildefines.h"
 #include "BKE_writeavi.h"
 #include "AVI_avi.h"
@@ -127,7 +128,7 @@
 	}
 }
 
-void start_avi(struct Scene *scene, RenderData *rd, int rectx, int recty)
+int start_avi(Scene *scene, RenderData *rd, int rectx, int recty, ReportList *reports)
 {
 	int x, y;
 	char name[256];
@@ -153,10 +154,10 @@
 	else format = AVI_FORMAT_MJPEG;
 
 	if (AVI_open_compress (name, avi, 1, format) != AVI_ERROR_NONE) {
-		printf("cannot open or start AVI movie file");
+		BKE_report(reports, RPT_ERROR, "Cannot open or start AVI movie file.");
 		MEM_freeN (avi);
 		avi = NULL;
-		return;
+		return 0;
 	}
 			
 	AVI_set_compress_option (avi, AVI_OPTION_TYPE_MAIN, 0, AVI_OPTION_WIDTH, &x);
@@ -170,18 +171,17 @@
 /* 	avi->odd_fields= (rd->mode & R_ODDFIELD)?1:0; */
 	
 	printf("Created avi: %s\n", name);
+	return 1;
 }
 
-void append_avi(RenderData *rd, int frame, int *pixels, int rectx, int recty)
+int append_avi(RenderData *rd, int frame, int *pixels, int rectx, int recty, ReportList *reports)
 {
 	unsigned int *rt1, *rt2, *rectot;
 	int x, y;
 	char *cp, rt;
 	
-	if (avi == NULL) {
-		G.afbreek = 1;
-		return;
-	}
+	if (avi == NULL)
+		return 0;
 
 	/* note that libavi free's the buffer... stupid interface - zr */
 	rectot= MEM_mallocN(rectx*recty*sizeof(int), "rectot");
@@ -205,6 +205,8 @@
 	
 	AVI_write_frame (avi, (frame-sframe), AVI_FORMAT_RGB32, rectot, rectx*recty*4);
 //	printf ("added frame %3d (frame %3d in avi): ", frame, frame-sframe);
+
+	return 1;
 }
 
 void end_avi(void)
@@ -215,3 +217,4 @@
 	MEM_freeN (avi);
 	avi= NULL;
 }
+

Modified: trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c	2009-12-22 11:59:30 UTC (rev 25519)
+++ trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c	2009-12-22 12:01:32 UTC (rev 25520)
@@ -52,23 +52,24 @@
 #define snprintf _snprintf
 #endif
 
-#include "BKE_writeffmpeg.h"
+#include "MEM_guardedalloc.h"
 
-#include "MEM_guardedalloc.h"
+#include "DNA_scene_types.h"
+
 #include "BLI_blenlib.h"
 
+#include "AUD_C-API.h" /* must be before BKE_sound.h for define */
+
 #include "BKE_global.h"
 #include "BKE_idprop.h"
+#include "BKE_main.h"
+#include "BKE_report.h"
+#include "BKE_sound.h"
+#include "BKE_writeffmpeg.h"
 
 #include "IMB_imbuf_types.h"
 #include "IMB_imbuf.h"
 
-#include "DNA_scene_types.h"
-
-#include "AUD_C-API.h"
-#include "BKE_sound.h"
-#include "BKE_main.h"
-
 #ifdef HAVE_CONFIG_H
 #include <config.h>
 #endif
@@ -239,10 +240,10 @@
 }
 
 /* Write a frame to the output file */
-static void write_video_frame(RenderData *rd, AVFrame* frame) 
+static int write_video_frame(RenderData *rd, AVFrame* frame, ReportList *reports)
 {
 	int outsize = 0;
-	int ret;
+	int ret, success= 1;
 	AVCodecContext* c = get_codec_from_stream(video_stream);
 #ifdef FFMPEG_CODEC_TIME_BASE
 	frame->pts = rd->cfra - rd->sfra;
@@ -276,14 +277,17 @@
 		packet.size = outsize;
 		ret = av_interleaved_write_frame(outfile, &packet);
 	} else ret = 0;
+
 	if (ret != 0) {
-		G.afbreek = 1;
-		//XXX error("Error writing frame");
+		success= 0;
+		BKE_report(reports, RPT_ERROR, "Error writing frame.");
 	}
+
+	return success;
 }
 
 /* read and encode a frame of audio from the buffer */
-static AVFrame* generate_video_frame(uint8_t* pixels) 
+static AVFrame* generate_video_frame(uint8_t* pixels, ReportList *reports) 
 {
 	uint8_t* rendered_frame;
 
@@ -295,8 +299,7 @@
 	if (c->pix_fmt != PIX_FMT_BGR32) {
 		rgb_frame = alloc_picture(PIX_FMT_BGR32, width, height);
 		if (!rgb_frame) {
-			G.afbreek=1;
-			//XXX error("Couldn't allocate temporary frame");
+			BKE_report(reports, RPT_ERROR, "Couldn't allocate temporary frame.");
 			return NULL;
 		}
 	} else {
@@ -613,7 +616,7 @@
 }
 /* essential functions -- start, append, end */
 
-static void start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty)
+static int start_ffmpeg_impl(struct RenderData *rd, int rectx, int recty, ReportList *reports)
 {
 	/* Handle to the output file */
 	AVFormatContext* of;
@@ -648,22 +651,19 @@
 	
 	exts = get_file_extensions(ffmpeg_type);
 	if (!exts) {
-		G.afbreek = 1; /* Abort render */
-		//XXX error("No valid formats found");
-		return;
+		BKE_report(reports, RPT_ERROR, "No valid formats found.");
+		return 0;
 	}
 	fmt = guess_format(NULL, exts[0], NULL);
 	if (!fmt) {
-		G.afbreek = 1; /* Abort render */
-		//XXX error("No valid formats found");
-		return;
+		BKE_report(reports, RPT_ERROR, "No valid formats found.");
+		return 0;
 	}
 
 	of = av_alloc_format_context();
 	if (!of) {
-		G.afbreek = 1;
-		//XXX error("Error opening output file");
-		return;
+		BKE_report(reports, RPT_ERROR, "Error opening output file");
+		return 0;
 	}
 	
 	of->oformat = fmt;
@@ -711,22 +711,16 @@
 	}
 	if (fmt->video_codec == CODEC_ID_DVVIDEO) {
 		if (rectx != 720) {
-			G.afbreek = 1;
-			//XXX error("Render width has to be 720 pixels for DV!");
-			return;
+			BKE_report(reports, RPT_ERROR, "Render width has to be 720 pixels for DV!");
+			return 0;
 		}
 		if (rd->frs_sec != 25 && recty != 480) {
-			G.afbreek = 1;
-			//XXX error("Render height has to be 480 pixels "
-			//      "for DV-NTSC!");
-			return;
-			
+			BKE_report(reports, RPT_ERROR, "Render height has to be 480 pixels for DV-NTSC!");
+			return 0;
 		}
 		if (rd->frs_sec == 25 && recty != 576) {
-			G.afbreek = 1;
-			//XXX error("Render height has to be 576 pixels "
-			//      "for DV-PAL!");
-			return;
+			BKE_report(reports, RPT_ERROR, "Render height has to be 576 pixels for DV-PAL!");
+			return 0;
 		}
 	}
 	
@@ -735,46 +729,42 @@
 	if (ffmpeg_type == FFMPEG_DV) {
 		fmt->audio_codec = CODEC_ID_PCM_S16LE;
 		if (ffmpeg_multiplex_audio && rd->ffcodecdata.audio_mixrate != 48000) {
-			G.afbreek = 1;
-			//XXX error("FFMPEG only supports 48khz / stereo "
-			//      "audio for DV!");
-			return;
+			BKE_report(reports, RPT_ERROR, "FFMPEG only supports 48khz / stereo audio for DV!");
+			return 0;
 		}
 	}
 	
 	video_stream = alloc_video_stream(rd, fmt->video_codec, of, rectx, recty);
+	printf("alloc video stream %p\n", video_stream);
 	if (!video_stream) {
-		G.afbreek = 1;
-		//XXX error("Error initializing video stream");
-		return;
+		BKE_report(reports, RPT_ERROR, "Error initializing video stream.");
+		return 0;
 	}
 	

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list