Updated Quicktime code so settings can be stored in the blendfile.
This enables Blender to; - have scenes with different codec settings. (same as avicodec) - render directly without dialog. - batch/background render to Quicktime movies. Only tested on windows. ;)
This commit is contained in:
@@ -40,6 +40,7 @@ struct Base;
|
|||||||
struct AviCodecData;
|
struct AviCodecData;
|
||||||
|
|
||||||
void free_avicodecdata(struct AviCodecData *acd);
|
void free_avicodecdata(struct AviCodecData *acd);
|
||||||
|
void free_qtcodecdata(struct QuicktimeCodecData *acd);
|
||||||
void free_scene(struct Scene *me);
|
void free_scene(struct Scene *me);
|
||||||
struct Scene *add_scene(char *name);
|
struct Scene *add_scene(char *name);
|
||||||
int object_in_scene(struct Object *ob, struct Scene *sce);
|
int object_in_scene(struct Object *ob, struct Scene *sce);
|
||||||
|
@@ -1,4 +1,3 @@
|
|||||||
|
|
||||||
/* scene.c
|
/* scene.c
|
||||||
*
|
*
|
||||||
*
|
*
|
||||||
@@ -101,6 +100,17 @@ void free_avicodecdata(AviCodecData *acd)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void free_qtcodecdata(QuicktimeCodecData *qcd)
|
||||||
|
{
|
||||||
|
if (qcd) {
|
||||||
|
if (qcd->cdParms){
|
||||||
|
MEM_freeN(qcd->cdParms);
|
||||||
|
qcd->cdParms = NULL;
|
||||||
|
qcd->cdSize = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/* do not free scene itself */
|
/* do not free scene itself */
|
||||||
void free_scene(Scene *sce)
|
void free_scene(Scene *sce)
|
||||||
{
|
{
|
||||||
@@ -125,6 +135,11 @@ void free_scene(Scene *sce)
|
|||||||
MEM_freeN(sce->r.avicodecdata);
|
MEM_freeN(sce->r.avicodecdata);
|
||||||
sce->r.avicodecdata = NULL;
|
sce->r.avicodecdata = NULL;
|
||||||
}
|
}
|
||||||
|
if (sce->r.qtcodecdata) {
|
||||||
|
free_qtcodecdata(sce->r.qtcodecdata);
|
||||||
|
MEM_freeN(sce->r.qtcodecdata);
|
||||||
|
sce->r.qtcodecdata = NULL;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Scene *add_scene(char *name)
|
Scene *add_scene(char *name)
|
||||||
|
@@ -2291,6 +2291,11 @@ static void direct_link_scene(FileData *fd, Scene *sce)
|
|||||||
sce->r.avicodecdata->lpParms = newdataadr(fd, sce->r.avicodecdata->lpParms);
|
sce->r.avicodecdata->lpParms = newdataadr(fd, sce->r.avicodecdata->lpParms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
sce->r.qtcodecdata = newdataadr(fd, sce->r.qtcodecdata);
|
||||||
|
if (sce->r.qtcodecdata) {
|
||||||
|
sce->r.qtcodecdata->cdParms = newdataadr(fd, sce->r.qtcodecdata->cdParms);
|
||||||
|
}
|
||||||
|
|
||||||
if(sce->ed) {
|
if(sce->ed) {
|
||||||
ed= sce->ed= newdataadr(fd, sce->ed);
|
ed= sce->ed= newdataadr(fd, sce->ed);
|
||||||
|
|
||||||
|
@@ -1164,6 +1164,11 @@ static void write_scenes(WriteData *wd, ListBase *scebase)
|
|||||||
if (sce->r.avicodecdata->lpParms) writedata(wd, DATA, sce->r.avicodecdata->cbParms, sce->r.avicodecdata->lpParms);
|
if (sce->r.avicodecdata->lpParms) writedata(wd, DATA, sce->r.avicodecdata->cbParms, sce->r.avicodecdata->lpParms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (sce->r.qtcodecdata) {
|
||||||
|
writestruct(wd, DATA, "QuicktimeCodecData", 1, sce->r.qtcodecdata);
|
||||||
|
if (sce->r.qtcodecdata->cdParms) writedata(wd, DATA, sce->r.qtcodecdata->cdSize, sce->r.qtcodecdata->cdParms);
|
||||||
|
}
|
||||||
|
|
||||||
sce= sce->id.next;
|
sce= sce->id.next;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -81,8 +81,21 @@ typedef struct AviCodecData {
|
|||||||
char avicodecname[128];
|
char avicodecname[128];
|
||||||
} AviCodecData;
|
} AviCodecData;
|
||||||
|
|
||||||
|
typedef struct QuicktimeCodecData {
|
||||||
|
|
||||||
|
void *cdParms; /* codec/compressor options */
|
||||||
|
void *pad; /* padding */
|
||||||
|
|
||||||
|
unsigned int cdSize; /* size of cdParms buffer */
|
||||||
|
unsigned int pad2; /* padding */
|
||||||
|
|
||||||
|
char qtcodecname[128];
|
||||||
|
} QuicktimeCodecData;
|
||||||
|
|
||||||
|
|
||||||
typedef struct RenderData {
|
typedef struct RenderData {
|
||||||
struct AviCodecData *avicodecdata;
|
struct AviCodecData *avicodecdata;
|
||||||
|
struct QuicktimeCodecData *qtcodecdata;
|
||||||
|
|
||||||
short cfra, sfra, efra; /* fames as in 'images' */
|
short cfra, sfra, efra; /* fames as in 'images' */
|
||||||
short images, framapto, flag;
|
short images, framapto, flag;
|
||||||
|
@@ -31,22 +31,6 @@
|
|||||||
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
* ***** END GPL/BL DUAL LICENSE BLOCK *****
|
||||||
*/
|
*/
|
||||||
/*
|
/*
|
||||||
TODO:
|
|
||||||
|
|
||||||
- fix saving of compressionsettings
|
|
||||||
|
|
||||||
This should be fixed because:
|
|
||||||
|
|
||||||
- currently only one quicktime codec is used for all scenes
|
|
||||||
- this single codecsetting gets only initialised from the codec dialog
|
|
||||||
|
|
||||||
- the codecsettings have to get stored in the blendfile for background
|
|
||||||
rendering. blender -b crashes when it wants to popup the qt codec dialog
|
|
||||||
to retrieve a valid codec.
|
|
||||||
(quicktime isnt initialised yet when blender -b requests a rendering codec)
|
|
||||||
|
|
||||||
Some references to store the codec settings are placed at the end of this file.
|
|
||||||
|
|
||||||
DONE:
|
DONE:
|
||||||
|
|
||||||
* structurize file & compression data
|
* structurize file & compression data
|
||||||
@@ -58,6 +42,7 @@ DONE:
|
|||||||
* fix fallthrough to codecselector // buttons.c
|
* fix fallthrough to codecselector // buttons.c
|
||||||
* fix playback qt movie // playanim.c
|
* fix playback qt movie // playanim.c
|
||||||
* fix setting fps thru blenderbutton as well as codec dialog
|
* fix setting fps thru blenderbutton as well as codec dialog
|
||||||
|
* fix saving of compressionsettings
|
||||||
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
@@ -153,7 +138,8 @@ typedef struct _QuicktimeCodecDataExt {
|
|||||||
TimeValue duration;
|
TimeValue duration;
|
||||||
long kVideoTimeScale;
|
long kVideoTimeScale;
|
||||||
|
|
||||||
} QuicktimeCodecDataExt;
|
} QuicktimeCodecDataExt; //qtopts
|
||||||
|
|
||||||
|
|
||||||
struct _QuicktimeExport *qte;
|
struct _QuicktimeExport *qte;
|
||||||
struct _QuicktimeCodecDataExt *qcdx;
|
struct _QuicktimeCodecDataExt *qcdx;
|
||||||
@@ -169,10 +155,118 @@ struct _QuicktimeCodecDataExt *qcdx;
|
|||||||
#define kTrackStart 0
|
#define kTrackStart 0
|
||||||
#define kMediaStart 0
|
#define kMediaStart 0
|
||||||
|
|
||||||
static int sframe;
|
static int sframe;
|
||||||
|
static char qtcdname[128];
|
||||||
|
|
||||||
|
|
||||||
|
/************************************************************
|
||||||
|
* *
|
||||||
|
* SaveExporterSettingsToMem *
|
||||||
|
* *
|
||||||
|
*************************************************************/
|
||||||
|
|
||||||
|
OSErr SaveExporterSettingsToMem (QuicktimeCodecData *qcd)
|
||||||
|
{
|
||||||
|
QTAtomContainer myContainer = NULL;
|
||||||
|
ComponentResult myErr = noErr;
|
||||||
|
Ptr myPtr;
|
||||||
|
Handle myHandle;
|
||||||
|
long mySize = 0;
|
||||||
|
|
||||||
|
// check if current scene already has qtcodec settings, and erase them
|
||||||
|
if (qcd) {
|
||||||
|
free_qtcodecdata(qcd);
|
||||||
|
} else {
|
||||||
|
qcd = G.scene->r.qtcodecdata = MEM_callocN(sizeof(QuicktimeCodecData), "QuicktimeCodecData");
|
||||||
|
}
|
||||||
|
|
||||||
|
// obtain all current codec settings
|
||||||
|
SCSetInfo(qcdx->theComponent, scTemporalSettingsType, &qcdx->gTemporalSettings);
|
||||||
|
SCSetInfo(qcdx->theComponent, scSpatialSettingsType, &qcdx->gSpatialSettings);
|
||||||
|
SCSetInfo(qcdx->theComponent, scDataRateSettingsType, &qcdx->aDataRateSetting);
|
||||||
|
|
||||||
|
// retreive codecdata from quicktime in a atomcontainer
|
||||||
|
myErr = SCGetSettingsAsAtomContainer(qcdx->theComponent, &myContainer);
|
||||||
|
if (myErr != noErr) {
|
||||||
|
printf("Quicktime: SCGetSettingsAsAtomContainer failed\n");
|
||||||
|
goto bail;
|
||||||
|
}
|
||||||
|
|
||||||
|
// get the size of the atomcontainer
|
||||||
|
mySize = GetHandleSize((Handle)myContainer);
|
||||||
|
|
||||||
|
// lock and convert the atomcontainer to a *valid* pointer
|
||||||
|
QTLockContainer(myContainer);
|
||||||
|
myHandle = (Handle) myContainer;
|
||||||
|
HLockHi(myHandle);
|
||||||
|
myPtr = *myHandle;
|
||||||
|
|
||||||
|
// copy the Quicktime data into the blender qtcodecdata struct
|
||||||
|
if (myPtr) {
|
||||||
|
qcd->cdParms = MEM_mallocN(mySize, "qt.cdParms");
|
||||||
|
memcpy(qcd->cdParms, myPtr, mySize);
|
||||||
|
qcd->cdSize = mySize;
|
||||||
|
sprintf(qcd->qtcodecname, qtcdname);
|
||||||
|
} else {
|
||||||
|
printf("Quicktime: SaveExporterSettingsToMem failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
QTUnlockContainer(myContainer);
|
||||||
|
|
||||||
|
bail:
|
||||||
|
if (myHandle != NULL)
|
||||||
|
DisposeHandle(myHandle);
|
||||||
|
if (myContainer != NULL)
|
||||||
|
QTDisposeAtomContainer(myContainer);
|
||||||
|
|
||||||
|
return((OSErr)myErr);
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************************************************
|
||||||
|
* *
|
||||||
|
* GetExporterSettingsFromMem *
|
||||||
|
* *
|
||||||
|
*************************************************************/
|
||||||
|
|
||||||
|
OSErr GetExporterSettingsFromMem (QuicktimeCodecData *qcd)
|
||||||
|
{
|
||||||
|
Handle myHandle = NULL;
|
||||||
|
ComponentResult myErr = noErr;
|
||||||
|
// CodecInfo ci;
|
||||||
|
// char str[255];
|
||||||
|
|
||||||
|
// if there is codecdata in the blendfile, convert it to a Quicktime handle
|
||||||
|
if (qcd) {
|
||||||
|
myHandle = NewHandle(qcd->cdSize);
|
||||||
|
PtrToHand( qcd->cdParms, &myHandle, qcd->cdSize);
|
||||||
|
}
|
||||||
|
|
||||||
|
// restore codecsettings to the quicktime component
|
||||||
|
if(qcd->cdParms && qcd->cdSize) {
|
||||||
|
myErr = SCSetSettingsFromAtomContainer((GraphicsExportComponent)qcdx->theComponent, (QTAtomContainer)myHandle);
|
||||||
|
if (myErr != noErr) {
|
||||||
|
printf("Quicktime: SCSetSettingsFromAtomContainer failed\n");
|
||||||
|
goto bail;
|
||||||
|
}
|
||||||
|
|
||||||
|
// update runtime codecsettings for use with the codec dialog
|
||||||
|
SCGetInfo(qcdx->theComponent, scDataRateSettingsType, &qcdx->aDataRateSetting);
|
||||||
|
SCGetInfo(qcdx->theComponent, scSpatialSettingsType, &qcdx->gSpatialSettings);
|
||||||
|
SCGetInfo(qcdx->theComponent, scTemporalSettingsType, &qcdx->gTemporalSettings);
|
||||||
|
|
||||||
|
// GetCodecInfo (&ci, qcdx->gSpatialSettings.codecType, 0);
|
||||||
|
// CopyPascalStringToC(ci.typeName, str);
|
||||||
|
// printf("restored Codec: %s\n", str);
|
||||||
|
} else {
|
||||||
|
printf("Quicktime: GetExporterSettingsFromMem failed\n");
|
||||||
|
}
|
||||||
|
bail:
|
||||||
|
if (myHandle != NULL)
|
||||||
|
DisposeHandle(myHandle);
|
||||||
|
|
||||||
|
return((OSErr)myErr);
|
||||||
|
}
|
||||||
|
|
||||||
int have_qtcodec;
|
|
||||||
char qtcdname[64];
|
|
||||||
|
|
||||||
/************************************************************
|
/************************************************************
|
||||||
* *
|
* *
|
||||||
@@ -356,10 +450,8 @@ static void QT_EndAddVideoSamplesToMedia (void)
|
|||||||
|
|
||||||
UnlockPixels(qte->thePixMap);
|
UnlockPixels(qte->thePixMap);
|
||||||
if (qte->theGWorld) DisposeGWorld (qte->theGWorld);
|
if (qte->theGWorld) DisposeGWorld (qte->theGWorld);
|
||||||
if (qte->ibuf) IMB_freeImBuf(qte->ibuf);
|
if (qte->ibuf) IMB_freeImBuf(qte->ibuf);
|
||||||
if (qte->ibuf2) {
|
if (qte->ibuf2) IMB_freeImBuf(qte->ibuf2);
|
||||||
IMB_freeImBuf(qte->ibuf2);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@@ -410,7 +502,23 @@ void start_qt(void) {
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
if(qte == NULL) qte = MEM_callocN(sizeof(QuicktimeExport), "QuicktimeExport");
|
if(qte == NULL) qte = MEM_callocN(sizeof(QuicktimeExport), "QuicktimeExport");
|
||||||
if(qcdx == NULL || have_qtcodec == FALSE) get_qtcodec_settings();
|
|
||||||
|
if(qcdx) {
|
||||||
|
if(qcdx->theComponent) CloseComponent(qcdx->theComponent);
|
||||||
|
free_qtcodecdataExt();
|
||||||
|
}
|
||||||
|
|
||||||
|
qcdx = MEM_callocN(sizeof(QuicktimeCodecDataExt), "QuicktimeCodecDataExt");
|
||||||
|
|
||||||
|
if(G.scene->r.qtcodecdata == NULL && G.scene->r.qtcodecdata->cdParms == NULL) {
|
||||||
|
get_qtcodec_settings();
|
||||||
|
} else {
|
||||||
|
qcdx->theComponent = OpenDefaultComponent(StandardCompressionType, StandardCompressionSubType);
|
||||||
|
|
||||||
|
// printf("getting from blend\n");
|
||||||
|
GetExporterSettingsFromMem (G.scene->r.qtcodecdata);
|
||||||
|
check_renderbutton_framerate();
|
||||||
|
}
|
||||||
|
|
||||||
if (G.afbreek != 1) {
|
if (G.afbreek != 1) {
|
||||||
sframe = (G.scene->r.sfra);
|
sframe = (G.scene->r.sfra);
|
||||||
@@ -445,8 +553,6 @@ void start_qt(void) {
|
|||||||
|
|
||||||
printf("Created QuickTime movie: %s\n", name);
|
printf("Created QuickTime movie: %s\n", name);
|
||||||
|
|
||||||
check_renderbutton_framerate();
|
|
||||||
|
|
||||||
QT_CreateMyVideoTrack();
|
QT_CreateMyVideoTrack();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -489,6 +595,7 @@ void end_qt(void) {
|
|||||||
|
|
||||||
void free_qtcodecdataExt(void) {
|
void free_qtcodecdataExt(void) {
|
||||||
if(qcdx) {
|
if(qcdx) {
|
||||||
|
if(qcdx->theComponent) CloseComponent(qcdx->theComponent);
|
||||||
MEM_freeN(qcdx);
|
MEM_freeN(qcdx);
|
||||||
qcdx = NULL;
|
qcdx = NULL;
|
||||||
}
|
}
|
||||||
@@ -508,7 +615,7 @@ static void check_renderbutton_framerate(void) {
|
|||||||
OSErr err;
|
OSErr err;
|
||||||
|
|
||||||
err = SCGetInfo(qcdx->theComponent, scTemporalSettingsType, &qcdx->gTemporalSettings);
|
err = SCGetInfo(qcdx->theComponent, scTemporalSettingsType, &qcdx->gTemporalSettings);
|
||||||
CheckError(err, "SCGetInfo error");
|
CheckError(err, "SCGetInfo fr error");
|
||||||
|
|
||||||
if( (G.scene->r.frs_sec == 24 || G.scene->r.frs_sec == 30 || G.scene->r.frs_sec == 60) &&
|
if( (G.scene->r.frs_sec == 24 || G.scene->r.frs_sec == 30 || G.scene->r.frs_sec == 60) &&
|
||||||
(qcdx->gTemporalSettings.frameRate == 1571553 ||
|
(qcdx->gTemporalSettings.frameRate == 1571553 ||
|
||||||
@@ -533,6 +640,7 @@ static void check_renderbutton_framerate(void) {
|
|||||||
qcdx->duration = 100;
|
qcdx->duration = 100;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/********************************************************************
|
/********************************************************************
|
||||||
* *
|
* *
|
||||||
* get_qtcodec_settings() *
|
* get_qtcodec_settings() *
|
||||||
@@ -544,29 +652,28 @@ static void check_renderbutton_framerate(void) {
|
|||||||
int get_qtcodec_settings(void)
|
int get_qtcodec_settings(void)
|
||||||
{
|
{
|
||||||
OSErr err = noErr;
|
OSErr err = noErr;
|
||||||
// Component c = 0;
|
|
||||||
// ComponentDescription cd;
|
|
||||||
CodecInfo ci;
|
CodecInfo ci;
|
||||||
char str[255];
|
char str[255];
|
||||||
|
|
||||||
// cd.componentType = StandardCompressionType;
|
// erase any existing codecsetting
|
||||||
// cd.componentSubType = StandardCompressionSubType;
|
if(qcdx) {
|
||||||
// cd.componentManufacturer = 0;
|
if(qcdx->theComponent) CloseComponent(qcdx->theComponent);
|
||||||
// cd.componentFlags = 0;
|
free_qtcodecdataExt();
|
||||||
// cd.componentFlagsMask = 0;
|
|
||||||
|
|
||||||
if(qcdx == NULL) {
|
|
||||||
qcdx = MEM_callocN(sizeof(QuicktimeCodecDataExt), "QuicktimeCodecDataExt");
|
|
||||||
have_qtcodec = FALSE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// allocate new
|
||||||
|
qcdx = MEM_callocN(sizeof(QuicktimeCodecDataExt), "QuicktimeCodecDataExt");
|
||||||
|
qcdx->theComponent = OpenDefaultComponent(StandardCompressionType, StandardCompressionSubType);
|
||||||
|
|
||||||
|
// get previous selected codecsetting, if any
|
||||||
|
if(G.scene->r.qtcodecdata && G.scene->r.qtcodecdata->cdParms) {
|
||||||
|
// printf("getting from MEM\n");
|
||||||
|
GetExporterSettingsFromMem (G.scene->r.qtcodecdata);
|
||||||
|
check_renderbutton_framerate();
|
||||||
|
} else {
|
||||||
|
|
||||||
// configure the standard image compression dialog box
|
// configure the standard image compression dialog box
|
||||||
|
// set some default settings
|
||||||
if (qcdx->theComponent == NULL) {
|
|
||||||
qcdx->theComponent = OpenDefaultComponent(StandardCompressionType, StandardCompressionSubType);
|
|
||||||
// c = FindNextComponent(c, &cd);
|
|
||||||
// qcdx->theComponent = OpenComponent(c);
|
|
||||||
|
|
||||||
// qcdx->gSpatialSettings.codecType = nil;
|
// qcdx->gSpatialSettings.codecType = nil;
|
||||||
qcdx->gSpatialSettings.codec = anyCodec;
|
qcdx->gSpatialSettings.codec = anyCodec;
|
||||||
// qcdx->gSpatialSettings.depth;
|
// qcdx->gSpatialSettings.depth;
|
||||||
@@ -581,7 +688,6 @@ int get_qtcodec_settings(void)
|
|||||||
// qcdx->aDataRateSetting.minSpatialQuality;
|
// qcdx->aDataRateSetting.minSpatialQuality;
|
||||||
// qcdx->aDataRateSetting.minTemporalQuality;
|
// qcdx->aDataRateSetting.minTemporalQuality;
|
||||||
|
|
||||||
|
|
||||||
err = SCSetInfo(qcdx->theComponent, scTemporalSettingsType, &qcdx->gTemporalSettings);
|
err = SCSetInfo(qcdx->theComponent, scTemporalSettingsType, &qcdx->gTemporalSettings);
|
||||||
CheckError(err, "SCSetInfo1 error");
|
CheckError(err, "SCSetInfo1 error");
|
||||||
err = SCSetInfo(qcdx->theComponent, scSpatialSettingsType, &qcdx->gSpatialSettings);
|
err = SCSetInfo(qcdx->theComponent, scSpatialSettingsType, &qcdx->gSpatialSettings);
|
||||||
@@ -589,11 +695,7 @@ int get_qtcodec_settings(void)
|
|||||||
err = SCSetInfo(qcdx->theComponent, scDataRateSettingsType, &qcdx->aDataRateSetting);
|
err = SCSetInfo(qcdx->theComponent, scDataRateSettingsType, &qcdx->aDataRateSetting);
|
||||||
CheckError(err, "SCSetInfo3 error");
|
CheckError(err, "SCSetInfo3 error");
|
||||||
}
|
}
|
||||||
|
|
||||||
check_renderbutton_framerate();
|
|
||||||
|
|
||||||
// put up the dialog box
|
// put up the dialog box
|
||||||
|
|
||||||
err = SCRequestSequenceSettings(qcdx->theComponent);
|
err = SCRequestSequenceSettings(qcdx->theComponent);
|
||||||
|
|
||||||
if (err == scUserCancelled) {
|
if (err == scUserCancelled) {
|
||||||
@@ -601,10 +703,7 @@ int get_qtcodec_settings(void)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
have_qtcodec = TRUE;
|
|
||||||
|
|
||||||
// get user selected data
|
// get user selected data
|
||||||
|
|
||||||
SCGetInfo(qcdx->theComponent, scTemporalSettingsType, &qcdx->gTemporalSettings);
|
SCGetInfo(qcdx->theComponent, scTemporalSettingsType, &qcdx->gTemporalSettings);
|
||||||
SCGetInfo(qcdx->theComponent, scSpatialSettingsType, &qcdx->gSpatialSettings);
|
SCGetInfo(qcdx->theComponent, scSpatialSettingsType, &qcdx->gSpatialSettings);
|
||||||
SCGetInfo(qcdx->theComponent, scDataRateSettingsType, &qcdx->aDataRateSetting);
|
SCGetInfo(qcdx->theComponent, scDataRateSettingsType, &qcdx->aDataRateSetting);
|
||||||
@@ -613,8 +712,9 @@ int get_qtcodec_settings(void)
|
|||||||
CopyPascalStringToC(ci.typeName, str);
|
CopyPascalStringToC(ci.typeName, str);
|
||||||
sprintf(qtcdname,"Codec: %s", str);
|
sprintf(qtcdname,"Codec: %s", str);
|
||||||
|
|
||||||
// framerate jugglin'
|
SaveExporterSettingsToMem(G.scene->r.qtcodecdata);
|
||||||
|
|
||||||
|
// framerate jugglin'
|
||||||
if(qcdx->gTemporalSettings.frameRate == 1571553) { // 23.98 fps
|
if(qcdx->gTemporalSettings.frameRate == 1571553) { // 23.98 fps
|
||||||
qcdx->kVideoTimeScale = 2398;
|
qcdx->kVideoTimeScale = 2398;
|
||||||
qcdx->duration = 100;
|
qcdx->duration = 100;
|
||||||
@@ -644,102 +744,3 @@ int get_qtcodec_settings(void)
|
|||||||
|
|
||||||
#endif /* WITH_QUICKTIME */
|
#endif /* WITH_QUICKTIME */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#if 0
|
|
||||||
|
|
||||||
/************************************************************
|
|
||||||
* *
|
|
||||||
* References for future codec handling *
|
|
||||||
* *
|
|
||||||
*************************************************************/
|
|
||||||
|
|
||||||
these are from mplayer sourcecode:
|
|
||||||
|
|
||||||
struct ComponentRecord {
|
|
||||||
long data[1];
|
|
||||||
};
|
|
||||||
typedef struct ComponentRecord ComponentRecord;
|
|
||||||
typedef ComponentRecord * Component;
|
|
||||||
typedef long OSErr;
|
|
||||||
typedef int OSType;
|
|
||||||
typedef long ComponentResult;
|
|
||||||
typedef long Fixed;
|
|
||||||
|
|
||||||
|
|
||||||
these are from quicktime:
|
|
||||||
|
|
||||||
|
|
||||||
typedef Component CodecComponent;
|
|
||||||
typedef OSType CodecType;
|
|
||||||
typedef unsigned short CodecFlags;
|
|
||||||
typedef unsigned long CodecQ;
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
CodecType codecType; /* compressor type */
|
|
||||||
CodecComponent codec; /* compressor */
|
|
||||||
short depth; /* pixel depth */
|
|
||||||
CodecQ spatialQuality; /* desired quality */
|
|
||||||
} SCSpatialSettings;
|
|
||||||
|
|
||||||
/* temporal options structure with the temporal settings request */
|
|
||||||
typedef struct {
|
|
||||||
CodecQ temporalQuality; /* desired quality */
|
|
||||||
Fixed frameRate; /* frame rate */
|
|
||||||
long keyFrameRate; /* key frame rate */
|
|
||||||
} SCTemporalSettings;
|
|
||||||
|
|
||||||
/* data rate options with the data rate settings request */
|
|
||||||
typedef struct {
|
|
||||||
long dataRate; /* desired data rate */
|
|
||||||
long frameDuration; /* frame duration */
|
|
||||||
CodecQ minSpatialQuality; /* minimum value */
|
|
||||||
CodecQ minTemporalQuality; /* minimum value */
|
|
||||||
} SCDataRateSettings;
|
|
||||||
|
|
||||||
|
|
||||||
would look like this ???
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
int codecType; /* compressor type */
|
|
||||||
//here is the prob
|
|
||||||
long *codec; /* compressor */
|
|
||||||
short depth; /* pixel depth */
|
|
||||||
unsigned long spatialQuality; /* desired quality */
|
|
||||||
} SCSpatialSettings;
|
|
||||||
|
|
||||||
/* temporal options structure with the temporal settings request */
|
|
||||||
typedef struct {
|
|
||||||
unsigned long temporalQuality; /* desired quality */
|
|
||||||
long frameRate; /* frame rate */
|
|
||||||
long keyFrameRate; /* key frame rate */
|
|
||||||
} SCTemporalSettings;
|
|
||||||
|
|
||||||
/* data rate options with the data rate settings request */
|
|
||||||
typedef struct {
|
|
||||||
long dataRate; /* desired data rate */
|
|
||||||
long frameDuration; /* frame duration */
|
|
||||||
unsigned long minSpatialQuality; /* minimum value */
|
|
||||||
unsigned long minTemporalQuality; /* minimum value */
|
|
||||||
} SCDataRateSettings;
|
|
||||||
|
|
||||||
|
|
||||||
stuff to use quicktime Atoms (doesnt work) heh
|
|
||||||
|
|
||||||
long size;
|
|
||||||
Ptr thePtr;
|
|
||||||
QTAtomContainer myContainer = NULL;
|
|
||||||
QTAtom myAtom;
|
|
||||||
QTAtomContainer SettingsAtom;
|
|
||||||
|
|
||||||
atom -> component
|
|
||||||
SCSetSettingsFromAtomContainer(qcdx->theComponent, SettingsAtom);
|
|
||||||
|
|
||||||
component -> atom
|
|
||||||
SCGetSettingsAsAtomContainer(qcdx->theComponent, SettingsAtom);
|
|
||||||
|
|
||||||
QTCopyAtomDataToPtr(container, atom, 0, size, &targetPtr, &actualsize);
|
|
||||||
QTGetAtomDataPtr(container, atom, &size, &ptr);
|
|
||||||
|
|
||||||
kParentAtomIsContainer
|
|
||||||
#endif /* 0 */
|
|
||||||
|
@@ -45,9 +45,6 @@ void free_qtcodecdataExt(void); //usiblender.c
|
|||||||
|
|
||||||
void makeqtstring (char *string); //for playanim.c
|
void makeqtstring (char *string); //for playanim.c
|
||||||
|
|
||||||
extern int have_qtcodec;
|
|
||||||
extern char qtcdname[64];
|
|
||||||
|
|
||||||
#endif //(_WIN32) || (__APPLE__)
|
#endif //(_WIN32) || (__APPLE__)
|
||||||
|
|
||||||
#endif // __QUICKTIME_IMP_H__
|
#endif // __QUICKTIME_IMP_H__
|
||||||
|
@@ -6027,7 +6027,7 @@ void do_renderbuts(unsigned short event)
|
|||||||
if (((G.scene->r.imtype == R_AVICODEC)
|
if (((G.scene->r.imtype == R_AVICODEC)
|
||||||
&& (G.scene->r.avicodecdata == NULL)) ||
|
&& (G.scene->r.avicodecdata == NULL)) ||
|
||||||
((G.scene->r.imtype == R_QUICKTIME)
|
((G.scene->r.imtype == R_QUICKTIME)
|
||||||
&& (have_qtcodec == FALSE))) {
|
&& (G.scene->r.qtcodecdata == NULL))) {
|
||||||
} else {
|
} else {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
@@ -6589,10 +6589,10 @@ void renderbuts(void)
|
|||||||
#if defined (_WIN32) || defined (__APPLE__)
|
#if defined (_WIN32) || defined (__APPLE__)
|
||||||
glColor3f(0.65, 0.65, 0.7);
|
glColor3f(0.65, 0.65, 0.7);
|
||||||
glRecti(892,yofs+46,892+225,yofs+45+20);
|
glRecti(892,yofs+46,892+225,yofs+45+20);
|
||||||
if(!have_qtcodec)
|
if(G.scene->r.qtcodecdata == NULL)
|
||||||
uiDefBut(block, LABEL, 0, "Codec: not set", 892,yofs+44,225,20, 0, 0, 0, 0, 0, "");
|
uiDefBut(block, LABEL, 0, "Codec: not set", 892,yofs+44,225,20, 0, 0, 0, 0, 0, "");
|
||||||
else
|
else
|
||||||
uiDefBut(block, LABEL, 0, qtcdname, 892,yofs+44,225,20, 0, 0, 0, 0, 0, "");
|
uiDefBut(block, LABEL, 0, G.scene->r.qtcodecdata->qtcodecname, 892,yofs+44,225,20, 0, 0, 0, 0, 0, "");
|
||||||
uiDefBut(block, BUT,B_SELECTCODEC, "Set codec", 892,yofs,112,20, 0, 0, 0, 0, 0, "Set codec settings for Quicktime");
|
uiDefBut(block, BUT,B_SELECTCODEC, "Set codec", 892,yofs,112,20, 0, 0, 0, 0, 0, "Set codec settings for Quicktime");
|
||||||
#else /* libquicktime */
|
#else /* libquicktime */
|
||||||
if (!G.scene->r.qtcodecdata) G.scene->r.qtcodecdata = MEM_callocN(sizeof(QtCodecData), "QtCodecData");
|
if (!G.scene->r.qtcodecdata) G.scene->r.qtcodecdata = MEM_callocN(sizeof(QtCodecData), "QtCodecData");
|
||||||
|
@@ -2107,12 +2107,17 @@ Scene *copy_scene(Scene *sce, int level)
|
|||||||
if (sce->r.avicodecdata) {
|
if (sce->r.avicodecdata) {
|
||||||
|
|
||||||
scen->r.avicodecdata = MEM_dupallocN(sce->r.avicodecdata);
|
scen->r.avicodecdata = MEM_dupallocN(sce->r.avicodecdata);
|
||||||
|
|
||||||
scen->r.avicodecdata->lpFormat = MEM_dupallocN(scen->r.avicodecdata->lpFormat);
|
scen->r.avicodecdata->lpFormat = MEM_dupallocN(scen->r.avicodecdata->lpFormat);
|
||||||
|
|
||||||
scen->r.avicodecdata->lpParms = MEM_dupallocN(scen->r.avicodecdata->lpParms);
|
scen->r.avicodecdata->lpParms = MEM_dupallocN(scen->r.avicodecdata->lpParms);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// make a private copy of the qtcodecdata
|
||||||
|
|
||||||
|
if (sce->r.qtcodecdata) {
|
||||||
|
|
||||||
|
scen->r.qtcodecdata = MEM_dupallocN(sce->r.qtcodecdata);
|
||||||
|
scen->r.qtcodecdata->cdParms = MEM_dupallocN(scen->r.qtcodecdata->cdParms);
|
||||||
|
}
|
||||||
return scen;
|
return scen;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -2209,6 +2214,12 @@ void do_info_buttons(unsigned short event)
|
|||||||
sce->r.avicodecdata->lpFormat = MEM_dupallocN(G.scene->r.avicodecdata->lpFormat);
|
sce->r.avicodecdata->lpFormat = MEM_dupallocN(G.scene->r.avicodecdata->lpFormat);
|
||||||
sce->r.avicodecdata->lpParms = MEM_dupallocN(G.scene->r.avicodecdata->lpParms);
|
sce->r.avicodecdata->lpParms = MEM_dupallocN(G.scene->r.avicodecdata->lpParms);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
#ifdef WITH_QUICKTIME
|
||||||
|
if (sce->r.qtcodecdata) {
|
||||||
|
sce->r.qtcodecdata = MEM_dupallocN(G.scene->r.qtcodecdata);
|
||||||
|
sce->r.qtcodecdata->cdParms = MEM_dupallocN(G.scene->r.qtcodecdata->cdParms);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
else sce= copy_scene(G.scene, nr-2);
|
else sce= copy_scene(G.scene, nr-2);
|
||||||
|
Reference in New Issue
Block a user