[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [44394] trunk/blender/source/blender: Changes in FFV1 codec settings

Sergey Sharybin sergey.vfx at gmail.com
Fri Feb 24 10:49:48 CET 2012


Revision: 44394
          http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=44394
Author:   nazgul
Date:     2012-02-24 09:49:44 +0000 (Fri, 24 Feb 2012)
Log Message:
-----------
Changes in FFV1 codec settings

Since FFmpeg 0.10 release FFV1 codec supports alpha channel which is getting
enabled when using PIX_FMT_RGB32 pixel format. This leads to incompatibility of
videos rendered in Blender with almost all external players (especially in OSX).

Seems that PIX_FMT_BGR0 is recommended to be used to make videos compatible with
older players which doesn't support alpha channel in FFV1.

Also added an option to switch to RGBA rendering if FFV1 codec is used and if RGBA
rendering is used FFV1 will be using PIX_FMT_RGB32 format which supports alpha channel.

Modified Paths:
--------------
    trunk/blender/source/blender/blenkernel/BKE_writeffmpeg.h
    trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
    trunk/blender/source/blender/makesrna/intern/rna_scene.c

Modified: trunk/blender/source/blender/blenkernel/BKE_writeffmpeg.h
===================================================================
--- trunk/blender/source/blender/blenkernel/BKE_writeffmpeg.h	2012-02-24 06:44:04 UTC (rev 44393)
+++ trunk/blender/source/blender/blenkernel/BKE_writeffmpeg.h	2012-02-24 09:49:44 UTC (rev 44394)
@@ -75,6 +75,7 @@
 extern void ffmpeg_set_preset(struct RenderData *rd, int preset);
 extern void ffmpeg_verify_image_type(struct RenderData *rd, struct ImageFormatData *imf);
 extern void ffmpeg_verify_codec_settings(struct RenderData *rd);
+extern int  ffmpeg_alpha_channel_supported(struct RenderData *rd);
 
 extern struct IDProperty *ffmpeg_property_add(struct RenderData *Rd, const char *type, int opt_index, int parent_index);
 extern int ffmpeg_property_add_string(struct RenderData *rd, const char *type, const char *str);

Modified: trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c
===================================================================
--- trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c	2012-02-24 06:44:04 UTC (rev 44393)
+++ trunk/blender/source/blender/blenkernel/intern/writeffmpeg.c	2012-02-24 09:49:44 UTC (rev 44394)
@@ -506,13 +506,22 @@
 	}
 	
 	// Keep lossless encodes in the RGB domain.
-	if (codec_id == CODEC_ID_HUFFYUV || codec_id == CODEC_ID_FFV1) {
+	if (codec_id == CODEC_ID_HUFFYUV) {
 		/* HUFFYUV was PIX_FMT_YUV422P before */
 		c->pix_fmt = PIX_FMT_RGB32;
 	}
 
-	if ( codec_id == CODEC_ID_QTRLE ) {
+	if (codec_id == CODEC_ID_FFV1) {
 		if (rd->im_format.planes ==  R_IMF_PLANES_RGBA) {
+			c->pix_fmt = PIX_FMT_RGB32;
+		}
+		else {
+			c->pix_fmt = PIX_FMT_BGR0;
+		}
+	}
+
+	if (codec_id == CODEC_ID_QTRLE ) {
+		if (rd->im_format.planes ==  R_IMF_PLANES_RGBA) {
 			c->pix_fmt = PIX_FMT_ARGB;
 		}
 	}
@@ -1422,4 +1431,11 @@
 	ffmpeg_set_expert_options(rd);
 }
 
+int ffmpeg_alpha_channel_supported(RenderData *rd)
+{
+	int codec = rd->ffcodecdata.codec;
+
+	return ELEM(codec, CODEC_ID_QTRLE, CODEC_ID_FFV1);
+}
+
 #endif

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2012-02-24 06:44:04 UTC (rev 44393)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2012-02-24 09:49:44 UTC (rev 44394)
@@ -722,7 +722,7 @@
 		Scene *scene = ptr->id.data;
 		RenderData *rd = &scene->r;
 
-		if (rd->ffcodecdata.codec == CODEC_ID_QTRLE)
+		if (ffmpeg_alpha_channel_supported(rd))
 			chan_flag |= IMA_CHAN_FLAG_ALPHA;
 	}
 #endif




More information about the Bf-blender-cvs mailing list