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. @@

_______________________________________________
Bf-blender-cvs mailing list
Bf-blender-cvs@blender.org
http://lists.blender.org/mailman/listinfo/bf-blender-cvs

Reply via email to