Welcome to mirror list, hosted at ThFree Co, Russian Federation.

git.blender.org/blender.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDamien Plisson <damien.plisson@yahoo.fr>2009-11-20 13:37:50 +0300
committerDamien Plisson <damien.plisson@yahoo.fr>2009-11-20 13:37:50 +0300
commit68eaae8e0e58c664634633536622cb60084341b0 (patch)
tree624a397841c450f88215126cf865a93dfcaa467d /source/blender/quicktime
parent9672993bc1330a48e50ebc0f2f9742679085ed22 (diff)
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
Diffstat (limited to 'source/blender/quicktime')
-rw-r--r--source/blender/quicktime/apple/qtkit_export.m134
-rw-r--r--source/blender/quicktime/apple/qtkit_import.m5
-rw-r--r--source/blender/quicktime/apple/quicktime_export.c18
-rw-r--r--source/blender/quicktime/quicktime_export.h18
4 files changed, 88 insertions, 87 deletions
diff --git a/source/blender/quicktime/apple/qtkit_export.m b/source/blender/quicktime/apple/qtkit_export.m
index 460b35a0592..9f2a97dee23 100644
--- a/source/blender/quicktime/apple/qtkit_export.m
+++ b/source/blender/quicktime/apple/qtkit_export.m
@@ -74,6 +74,37 @@ typedef struct QuicktimeExport {
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 @@ void start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty)
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 end_qt(void)
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
- qtdata->gSpatialSettings.codec = anyCodec;
- qtdata->gSpatialSettings.spatialQuality = codecMaxQuality;
- qtdata->gTemporalSettings.temporalQuality = codecMaxQuality;
- qtdata->gTemporalSettings.keyFrameRate = 25;
- qtdata->aDataRateSetting.dataRate = 90 * 1024;
-
- err = SCSetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
- CheckError(err, "SCSetInfo1 error");
- err = SCSetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
- CheckError(err, "SCSetInfo2 error");
- err = SCSetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
- CheckError(err, "SCSetInfo3 error");
- }
-
- check_renderbutton_framerate(rd);
-
- // put up the dialog box - it needs to be called from the main thread
- err = SCRequestSequenceSettings(qtdata->theComponent);
-
- if (err == scUserCancelled) {
- G.afbreek = 1;
- return 0;
- }
-
- // get user selected data
- SCGetInfo(qtdata->theComponent, scTemporalSettingsType, &qtdata->gTemporalSettings);
- SCGetInfo(qtdata->theComponent, scSpatialSettingsType, &qtdata->gSpatialSettings);
- SCGetInfo(qtdata->theComponent, scDataRateSettingsType, &qtdata->aDataRateSetting);
-
- QT_SaveCodecSettingsToScene(rd);
-
- // framerate jugglin'
- switch (qtexport->frameRate) {
- case 1571553: // 23.98 fps
- qtexport->frameDuration = QTMakeTime(1001, 24000);
- rd->frs_sec = 24;
- rd->frs_sec_base = 1.001;
- break;
- case 1964113: // 29.97 fps
- qtexport->frameDuration = QTMakeTime(1001, 30000);
- rd->frs_sec = 30;
- rd->frs_sec_base = 1.001;
- break;
- case 3928227: // 59.94 fps
- qtexport->frameDuration = QTMakeTime(1001, 60000);
- rd->frs_sec = 60;
- rd->frs_sec_base = 1.001;
- break;
- default:
- {
- double fps = qtexport->frameRate;
- qtexport->frameDuration = QTMakeTime(60000/(qtexport->frameRate / 65536), 60000);
+ if (rd->imtype == R_QUICKTIME) {
+ if ((rd->qtcodecsettings.codecType<= 0) ||
+ (rd->qtcodecsettings.codecSpatialQuality <0) ||
+ (rd->qtcodecsettings.codecSpatialQuality > 100)) {
- if ((qtexport->frameRate & 0xffff) == 0) {
- rd->frs_sec = fps / 65536;
- rd->frs_sec_base = 1;
- } else {
- // we do our very best...
- rd->frs_sec = (fps * 10000 / 65536);
- rd->frs_sec_base = 10000;
- }
+ rd->qtcodecsettings.codecType = QT_CODECTYPE_JPEG;
+ rd->qtcodecsettings.codecSpatialQuality = (codecHighQuality*100)/codecLosslessQuality;
}
- break;
}
-*/
- return 1;
}
#endif /* _WIN32 || __APPLE__ */
diff --git a/source/blender/quicktime/apple/qtkit_import.m b/source/blender/quicktime/apple/qtkit_import.m
index 980aa855822..500ee13330d 100644
--- a/source/blender/quicktime/apple/qtkit_import.m
+++ b/source/blender/quicktime/apple/qtkit_import.m
@@ -157,8 +157,9 @@ static ImBuf * nsImageToiBuf(NSImage *sourceImage, int width, int height)
}
}
- if (([bitmapImage bitmapFormat] & 0x5) == 0) {
- /* Try a fast copy if the image is a planar RGBA 32bit bitmap*/
+ if (([bitmapImage bitsPerPixel] == 32) && (([bitmapImage bitmapFormat] & 0x5) == 0)
+ && ![bitmapImage isPlanar]) {
+ /* Try a fast copy if the image is a meshed RGBA 32bit bitmap*/
toIBuf = (uchar*)ibuf->rect;
rasterRGB = (uchar*)[bitmapImage bitmapData];
for (y = 0; y < height; y++) {
diff --git a/source/blender/quicktime/apple/quicktime_export.c b/source/blender/quicktime/apple/quicktime_export.c
index bec26bbb207..851b3c5b245 100644
--- a/source/blender/quicktime/apple/quicktime_export.c
+++ b/source/blender/quicktime/apple/quicktime_export.c
@@ -165,8 +165,6 @@ static OSErr QT_SaveCodecSettingsToScene(RenderData *rd)
qcd->cdSize = mySize;
GetCodecInfo (&ci, qtdata->gSpatialSettings.codecType, 0);
- CopyPascalStringToC(ci.typeName, str);
- sprintf(qcd->qtcodecname, "Codec: %s", str);
} else {
printf("Quicktime: QT_SaveCodecSettingsToScene failed\n");
}
@@ -599,6 +597,18 @@ static void check_renderbutton_framerate(RenderData *rd)
}
}
+void quicktime_verify_image_type(RenderData *rd)
+{
+ if (rd->imtype == R_QUICKTIME) {
+ if ((rd->qtcodecsettings.codecType<= 0) ||
+ (rd->qtcodecsettings.codecSpatialQuality <0) ||
+ (rd->qtcodecsettings.codecSpatialQuality > 100)) {
+
+ rd->qtcodecsettings.codecType = QT_CODECTYPE_JPEG;
+ rd->qtcodecsettings.codecSpatialQuality = (codecHighQuality*100)/codecLosslessQuality;
+ }
+ }
+}
int get_qtcodec_settings(RenderData *rd)
{
@@ -623,8 +633,8 @@ int get_qtcodec_settings(RenderData *rd)
// set some default settings: codec=jpeg, quality = max
qtdata->gSpatialSettings.codecType = kJPEGCodecType;
qtdata->gSpatialSettings.codec = anyCodec;
- qtdata->gSpatialSettings.spatialQuality = codecMaxQuality;
- qtdata->gTemporalSettings.temporalQuality = codecMaxQuality;
+ qtdata->gSpatialSettings.spatialQuality = codecHighQuality;
+ qtdata->gTemporalSettings.temporalQuality = codecHighQuality;
qtdata->gTemporalSettings.keyFrameRate = 25;
qtdata->aDataRateSetting.dataRate = 5 * 1024 * 1024;
diff --git a/source/blender/quicktime/quicktime_export.h b/source/blender/quicktime/quicktime_export.h
index 4afcebab7bd..7972c826190 100644
--- a/source/blender/quicktime/quicktime_export.h
+++ b/source/blender/quicktime/quicktime_export.h
@@ -33,14 +33,30 @@
#define __AIFF__
+/* Quicktime codec types defines */
+#define QT_CODECTYPE_JPEG 1
+#define QT_CODECTYPE_MJPEGA 2
+#define QT_CODECTYPE_MJPEGB 3
+#define QT_CODECTYPE_DVCPAL 4
+#define QT_CODECTYPE_DVCNTSC 5
+#define QT_CODECTYPE_MPEG4 6
+#define QT_CODECTYPE_H263 7
+#define QT_CODECTYPE_H264 8
+#define QT_CODECTYPE_RAW 9
+#define QT_CODECTYPE_DVCPROHD720p 10
+#define QT_CODECTYPE_DVCPROHD1080i50 11
+#define QT_CODECTYPE_DVCPROHD1080i60 12
+
// quicktime movie output functions
struct RenderData;
+struct Scene;
void start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty); //for movie handle (BKE writeavi.c now)
void append_qt(struct RenderData *rd, int frame, int *pixels, int rectx, int recty);
void end_qt(void);
-int get_qtcodec_settings(struct RenderData *rd); //for buttons.c
+void quicktime_verify_image_type(struct RenderData *rd); //used by RNA for defaults values init, if needed
+
void free_qtcomponentdata(void);
void makeqtstring(struct RenderData *rd, char *string); //for playanim.c