[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [24701] trunk/blender: Quicktime-qtkit : encoding settings now in blender ui (encoding panel)

Damien Plisson damien.plisson at yahoo.fr
Fri Nov 20 11:37:50 CET 2009


Revision: 24701
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=24701
Author:   damien78
Date:     2009-11-20 11:37:50 +0100 (Fri, 20 Nov 2009)

Log Message:
-----------
Quicktime-qtkit : encoding settings now in blender ui (encoding panel)

- added "QuicktimeCodecSettings" struct in DNA
- old "QuicktimeCodecData" opaque struct is  nowdeprecated (read only use when QuicktimeCodecSettings is not set)
- fixed small bug when importing deep color movies

Note that you may need Final Cut Pro installed to be able to use the DVCPRO HD codecs

Modified Paths:
--------------
    trunk/blender/release/scripts/ui/properties_render.py
    trunk/blender/source/blender/makesdna/DNA_scene_types.h
    trunk/blender/source/blender/makesrna/SConscript
    trunk/blender/source/blender/makesrna/intern/CMakeLists.txt
    trunk/blender/source/blender/makesrna/intern/SConscript
    trunk/blender/source/blender/makesrna/intern/rna_scene.c
    trunk/blender/source/blender/quicktime/apple/qtkit_export.m
    trunk/blender/source/blender/quicktime/apple/qtkit_import.m
    trunk/blender/source/blender/quicktime/apple/quicktime_export.c
    trunk/blender/source/blender/quicktime/quicktime_export.h

Modified: trunk/blender/release/scripts/ui/properties_render.py
===================================================================
--- trunk/blender/release/scripts/ui/properties_render.py	2009-11-20 10:34:31 UTC (rev 24700)
+++ trunk/blender/release/scripts/ui/properties_render.py	2009-11-20 10:37:50 UTC (rev 24701)
@@ -337,6 +337,31 @@
             split.itemR(rd, "tiff_bit")
 
 
+class RENDER_PT_QTencoding(RenderButtonsPanel):
+    bl_label = "Encoding"
+    bl_default_closed = True
+    COMPAT_ENGINES = set(['BLENDER_RENDER'])
+
+    def poll(self, context):
+        rd = context.scene.render_data
+        return rd.file_format in ('QUICKTIME_QTKIT') # QUICKTIME will be added later
+
+    def draw(self, context):
+        layout = self.layout
+
+        rd = context.scene.render_data
+        wide_ui = context.region.width > narrowui
+
+        split = layout.split()
+
+        split.itemR(rd, "quicktime_codec_type")
+
+        split = layout.split()
+
+        if rd.file_format == 'QUICKTIME_QTKIT':
+            split.itemR(rd, "quicktime_codec_spatial_quality", text="Quality")
+
+
 class RENDER_PT_encoding(RenderButtonsPanel):
     bl_label = "Encoding"
     bl_default_closed = True
@@ -516,6 +541,7 @@
 bpy.types.register(RENDER_PT_antialiasing)
 bpy.types.register(RENDER_PT_shading)
 bpy.types.register(RENDER_PT_output)
+bpy.types.register(RENDER_PT_QTencoding)
 bpy.types.register(RENDER_PT_encoding)
 bpy.types.register(RENDER_PT_performance)
 bpy.types.register(RENDER_PT_post_processing)

Modified: trunk/blender/source/blender/makesdna/DNA_scene_types.h
===================================================================
--- trunk/blender/source/blender/makesdna/DNA_scene_types.h	2009-11-20 10:34:31 UTC (rev 24700)
+++ trunk/blender/source/blender/makesdna/DNA_scene_types.h	2009-11-20 10:37:50 UTC (rev 24701)
@@ -77,7 +77,7 @@
 } AviCodecData;
 
 typedef struct QuicktimeCodecData {
-
+	/*Old quicktime implementation compatibility fields, read only in 2.5 - deprecated*/
 	void			*cdParms;   /* codec/compressor options */
 	void			*pad;	    /* padding */
 
@@ -86,7 +86,23 @@
 
 	char			qtcodecname[128];
 } QuicktimeCodecData;
+	
+typedef struct QuicktimeCodecSettings {
+	/* Codec settings detailed for 2.5 implementation*/
+	int codecType; /* Types defined in quicktime_export.h */
+	int	codecSpatialQuality; /* in 0-100 scale, to be translated in 0-1024 for qt use */
 
+	/* Settings not available in current QTKit API */
+	int	codec;
+	int	codecFlags;
+	int	colorDepth;
+	int	codecTemporalQuality; /* in 0-100 scale, to be translated in 0-1024 for qt use */
+	int	minSpatialQuality; /* in 0-100 scale, to be translated in 0-1024 for qt use */
+	int	minTemporalQuality; /* in 0-100 scale, to be translated in 0-1024 for qt use */
+	int	keyFrameRate;
+	int	bitRate;	/* bitrate in bps */
+} QuicktimeCodecSettings;
+
 typedef struct FFMpegCodecData {
 	int type;
 	int codec;
@@ -176,6 +192,7 @@
 	
 	struct AviCodecData *avicodecdata;
 	struct QuicktimeCodecData *qtcodecdata;
+	struct QuicktimeCodecSettings qtcodecsettings;
 	struct FFMpegCodecData ffcodecdata;
 	
 	int cfra, sfra, efra;	/* frames as in 'images' */

Modified: trunk/blender/source/blender/makesrna/SConscript
===================================================================
--- trunk/blender/source/blender/makesrna/SConscript	2009-11-20 10:34:31 UTC (rev 24700)
+++ trunk/blender/source/blender/makesrna/SConscript	2009-11-20 10:37:50 UTC (rev 24701)
@@ -30,6 +30,7 @@
 
 if env['WITH_BF_QUICKTIME']:
 	defs.append('WITH_QUICKTIME')
+	incs += ' ../quicktime'
 
 if env['WITH_BF_LCMS']:
 	defs.append('WITH_LCMS')

Modified: trunk/blender/source/blender/makesrna/intern/CMakeLists.txt
===================================================================
--- trunk/blender/source/blender/makesrna/intern/CMakeLists.txt	2009-11-20 10:34:31 UTC (rev 24700)
+++ trunk/blender/source/blender/makesrna/intern/CMakeLists.txt	2009-11-20 10:37:50 UTC (rev 24701)
@@ -63,6 +63,7 @@
 ENDIF(WITH_DDS)
 
 IF(WITH_QUICKTIME)
+	SET(INC "${INC} ../../quicktime")
 	ADD_DEFINITIONS(-DWITH_QUICKTIME)
 ENDIF(WITH_QUICKTIME)
 

Modified: trunk/blender/source/blender/makesrna/intern/SConscript
===================================================================
--- trunk/blender/source/blender/makesrna/intern/SConscript	2009-11-20 10:34:31 UTC (rev 24700)
+++ trunk/blender/source/blender/makesrna/intern/SConscript	2009-11-20 10:37:50 UTC (rev 24701)
@@ -52,6 +52,7 @@
 
 if env['WITH_BF_QUICKTIME']:
 	defs.append('WITH_QUICKTIME')
+	incs += ' ../../quicktime'
 
 if env['WITH_BF_LCMS']:
 	defs.append('WITH_LCMS')

Modified: trunk/blender/source/blender/makesrna/intern/rna_scene.c
===================================================================
--- trunk/blender/source/blender/makesrna/intern/rna_scene.c	2009-11-20 10:34:31 UTC (rev 24700)
+++ trunk/blender/source/blender/makesrna/intern/rna_scene.c	2009-11-20 10:37:50 UTC (rev 24701)
@@ -35,6 +35,10 @@
 /* Include for Bake Options */
 #include "RE_pipeline.h"
 
+#ifdef WITH_QUICKTIME
+#include "quicktime_export.h"
+#endif
+
 #ifdef WITH_FFMPEG
 #include "BKE_writeffmpeg.h"
 #include <libavcodec/avcodec.h> 
@@ -349,6 +353,9 @@
 #ifdef WITH_FFMPEG
 	ffmpeg_verify_image_type(rd);
 #endif
+#ifdef WITH_QUICKTIME
+	quicktime_verify_image_type(rd);
+#endif
 }
 
 void rna_SceneRenderData_jpeg2k_preset_update(RenderData *rd)
@@ -1439,7 +1446,11 @@
 		{R_AVICODEC, "AVICODEC", ICON_FILE_MOVIE, "AVI Codec", ""},
 #endif
 #ifdef WITH_QUICKTIME
+#	ifdef USE_QTKIT
+		{R_QUICKTIME, "QUICKTIME_QTKIT", ICON_FILE_MOVIE, "QuickTime", ""},
+#	else
 		{R_QUICKTIME, "QUICKTIME", ICON_FILE_MOVIE, "QuickTime", ""},
+#	endif
 #endif
 #ifdef __sgi
 		{R_MOVIE, "MOVIE", ICON_FILE_MOVIE, "Movie", ""},
@@ -1486,6 +1497,23 @@
 		{16, "16", 0, "16", "16 bit color channels"},
 		{0, NULL, 0, NULL, NULL}};
 #endif
+	
+#ifdef	WITH_QUICKTIME
+	static EnumPropertyItem quicktime_codec_type_items[] = {
+		{QT_CODECTYPE_RAW, "RAW", 0, "Uncompressed", ""},
+		{QT_CODECTYPE_JPEG, "JPEG", 0, "JPEG", ""},
+		{QT_CODECTYPE_MJPEGA, "MJPEG_A", 0, "M-JPEG A", ""},
+		{QT_CODECTYPE_MJPEGB, "MJPEG_B", 0, "M-JPEG B", ""},
+		{QT_CODECTYPE_DVCPAL, "DVCPAL", 0, "DV PAL", ""},
+		{QT_CODECTYPE_DVCNTSC, "DVCNTSC", 0, "DV/DVCPRO NTSC", ""},
+		{QT_CODECTYPE_DVCPROHD720p, "DVCPROHD720P", 0, "DVCPRO HD 720p"},
+		{QT_CODECTYPE_DVCPROHD1080i50, "DVCPROHD1080I50", 0, "DVCPRO HD 1080i50"},
+		{QT_CODECTYPE_DVCPROHD1080i60, "DVCPROHD1080I60", 0, "DVCPRO HD 1080i60"},
+		{QT_CODECTYPE_MPEG4, "MPEG4", 0, "MPEG4", ""},
+		{QT_CODECTYPE_H263, "H263", 0, "H.263", ""},
+		{QT_CODECTYPE_H264, "H264", 0, "H.264", ""},
+		{0, NULL, 0, NULL, NULL}};
+#endif
 
 #ifdef WITH_FFMPEG
 	static EnumPropertyItem ffmpeg_format_items[] = {
@@ -1676,6 +1704,22 @@
 	RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
 #endif
 
+#ifdef WITH_QUICKTIME
+	/* QuickTime */
+	
+	prop= RNA_def_property(srna, "quicktime_codec_type", PROP_ENUM, PROP_NONE);
+	RNA_def_property_enum_bitflag_sdna(prop, NULL, "qtcodecsettings.codecType");
+	RNA_def_property_enum_items(prop, quicktime_codec_type_items);
+	RNA_def_property_ui_text(prop, "Codec", "QuickTime codec type");
+	RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);
+	
+	prop= RNA_def_property(srna, "quicktime_codec_spatial_quality", PROP_INT, PROP_NONE);
+	RNA_def_property_int_sdna(prop, NULL, "qtcodecsettings.codecSpatialQuality");
+	RNA_def_property_range(prop, 0, 100);
+	RNA_def_property_ui_text(prop, "Spatial quality", "Intra-frame spatial quality level");
+	RNA_def_property_update(prop, NC_SCENE|ND_RENDER_OPTIONS, NULL);	
+#endif
+	
 #ifdef WITH_FFMPEG
 	/* FFMPEG Video*/
 	

Modified: trunk/blender/source/blender/quicktime/apple/qtkit_export.m
===================================================================
--- trunk/blender/source/blender/quicktime/apple/qtkit_export.m	2009-11-20 10:34:31 UTC (rev 24700)
+++ trunk/blender/source/blender/quicktime/apple/qtkit_export.m	2009-11-20 10:37:50 UTC (rev 24701)
@@ -74,6 +74,37 @@
 static struct QuicktimeExport *qtexport;
 
 
+static NSString *stringWithCodecType(int codecType) {
+	switch (codecType) {
+		case QT_CODECTYPE_RAW:
+			return @"raw ";
+		case QT_CODECTYPE_MJPEGA:
+			return @"mjpa";
+		case QT_CODECTYPE_MJPEGB:
+			return @"mjpb";
+		case QT_CODECTYPE_DVCPAL:
+			return @"dvcp";
+		case QT_CODECTYPE_DVCNTSC:
+			return @"dvc ";
+		case QT_CODECTYPE_MPEG4:
+			return @"mp4v";
+		case QT_CODECTYPE_H263:
+			return @"h263";
+		case QT_CODECTYPE_H264:
+			return @"avc1";
+		case QT_CODECTYPE_DVCPROHD720p:
+			return @"dvhp";
+		case QT_CODECTYPE_DVCPROHD1080i50:
+			return @"dvh5";
+		case QT_CODECTYPE_DVCPROHD1080i60:
+			return @"dvh6";
+			
+		case QT_CODECTYPE_JPEG:
+		default:
+			return @"jpeg";	
+	}
+}
+
 void makeqtstring (RenderData *rd, char *string) {
 	char txt[64];
 
@@ -121,13 +152,22 @@
 				
 				qtexport->frameDuration = QTMakeTime(rd->frs_sec_base*1000, rd->frs_sec*1000);
 				
-				/* specifying the codec attributes
-				TODO: get these values from RenderData/scene*/
-				qtexport->frameAttributes = [NSDictionary dictionaryWithObjectsAndKeys:@"jpeg",
-											 QTAddImageCodecType,
-											 [NSNumber numberWithLong:codecHighQuality],
-											 QTAddImageCodecQuality,
-											 nil];
+				/* specifying the codec attributes : try to retrieve them from render data first*/
+				if (rd->qtcodecsettings.codecType) {
+					qtexport->frameAttributes = [NSDictionary dictionaryWithObjectsAndKeys:
+												 stringWithCodecType(rd->qtcodecsettings.codecType),
+												 QTAddImageCodecType,
+												 [NSNumber numberWithLong:((rd->qtcodecsettings.codecSpatialQuality)*codecLosslessQuality)/100],
+												 QTAddImageCodecQuality,
+												 nil];
+				}
+				else {
+					qtexport->frameAttributes = [NSDictionary dictionaryWithObjectsAndKeys:@"jpeg",
+												 QTAddImageCodecType,
+												 [NSNumber numberWithLong:codecHighQuality],
+												 QTAddImageCodecQuality,
+												 nil];
+				}
 				[qtexport->frameAttributes retain];
 			}
 		}
@@ -206,83 +246,17 @@
 void free_qtcomponentdata(void) {
 }
 
-
-int get_qtcodec_settings(RenderData *rd) 
+void quicktime_verify_image_type(RenderData *rd)
 {
-/*
-	// get previous selected codecsetting, if any 
-	if(rd->qtcodecdata && rd->qtcodecdata->cdParms) {
-		QT_GetCodecSettingsFromScene(rd);
-		check_renderbutton_framerate(rd);
-	} else {
-		// configure the standard image compression dialog box
-		// set some default settings

@@ Diff output truncated at 10240 characters. @@




More information about the Bf-blender-cvs mailing list