[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [52368] trunk/blender/source/blender: Improved FFmpeg error reports when audio stream failed to be allocated

Sergey Sharybin sergey.vfx at gmail.com
Mon Nov 19 18:22:42 CET 2012


Revision: 52368
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=52368
Author:   nazgul
Date:     2012-11-19 17:22:40 +0000 (Mon, 19 Nov 2012)
Log Message:
-----------
Improved FFmpeg error reports when audio stream failed to be allocated

Also fixed crash using --debug-ffmpeg caused by BLI_vsnprintf modifies
va_list -- need to create copy of list if this list is gonna to be reused.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
    trunk/blender/source/blender/imbuf/intern/util.c

Modified: trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c	2012-11-19 17:15:33 UTC (rev 52367)
+++ trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c	2012-11-19 17:22:40 UTC (rev 52368)
@@ -599,12 +599,14 @@
 
 /* Prepare an audio stream for the output file */
 
-static AVStream *alloc_audio_stream(RenderData *rd, int codec_id, AVFormatContext *of)
+static AVStream *alloc_audio_stream(RenderData *rd, int codec_id, AVFormatContext *of, char *error, int error_size)
 {
 	AVStream *st;
 	AVCodecContext *c;
 	AVCodec *codec;
 
+	error[0] = '\0';
+
 	st = av_new_stream(of, 1);
 	if (!st) return NULL;
 
@@ -626,6 +628,7 @@
 
 	if (avcodec_open(c, codec) < 0) {
 		//XXX error("Couldn't initialize audio codec");
+		BLI_strncpy(error, IMB_ffmpeg_last_error(), error_size);
 		return NULL;
 	}
 
@@ -801,9 +804,12 @@
 	}
 
 	if (ffmpeg_audio_codec != CODEC_ID_NONE) {
-		audio_stream = alloc_audio_stream(rd, fmt->audio_codec, of);
+		audio_stream = alloc_audio_stream(rd, fmt->audio_codec, of, error, sizeof(error));
 		if (!audio_stream) {
-			BKE_report(reports, RPT_ERROR, "Error initializing audio stream");
+			if (error[0])
+				BKE_report(reports, RPT_ERROR, error);
+			else
+				BKE_report(reports, RPT_ERROR, "Error initializing audio stream");
 			av_dict_free(&opts);
 			return 0;
 		}

Modified: trunk/blender/source/blender/imbuf/intern/util.c
===================================================================
--- trunk/blender/source/blender/imbuf/intern/util.c	2012-11-19 17:15:33 UTC (rev 52367)
+++ trunk/blender/source/blender/imbuf/intern/util.c	2012-11-19 17:22:40 UTC (rev 52368)
@@ -228,6 +228,10 @@
 
 #ifdef WITH_FFMPEG
 
+#ifdef _MS_VER
+#define va_copy(dst, src) ((dst) = (src))
+#endif
+
 /* BLI_vsnprintf in ffmpeg_log_callback() causes invalid warning */
 #pragma GCC diagnostic push
 #pragma GCC diagnostic ignored "-Wmissing-format-attribute"
@@ -237,8 +241,13 @@
 static void ffmpeg_log_callback(void *ptr, int level, const char *format, va_list arg)
 {
 	if (ELEM(level, AV_LOG_FATAL, AV_LOG_ERROR)) {
-		size_t n = BLI_vsnprintf(ffmpeg_last_error, sizeof(ffmpeg_last_error), format, arg);
+		size_t n;
+		va_list arg2;
 
+		va_copy(arg2, arg);
+
+		n = BLI_vsnprintf(ffmpeg_last_error, sizeof(ffmpeg_last_error), format, arg2);
+
 		/* strip trailing \n */
 		ffmpeg_last_error[n - 1] = '\0';
 	}




More information about the Bf-blender-cvs mailing list