[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