diff options
Diffstat (limited to 'source/blender/quicktime/apple/qtkit_export.m')
-rw-r--r-- | source/blender/quicktime/apple/qtkit_export.m | 43 |
1 files changed, 27 insertions, 16 deletions
diff --git a/source/blender/quicktime/apple/qtkit_export.m b/source/blender/quicktime/apple/qtkit_export.m index 4214fa9ac32..db2d4e72dc5 100644 --- a/source/blender/quicktime/apple/qtkit_export.m +++ b/source/blender/quicktime/apple/qtkit_export.m @@ -98,8 +98,6 @@ typedef struct QuicktimeExport { } QuicktimeExport; -static struct QuicktimeExport *qtexport; - #define AUDIOOUTPUTBUFFERSIZE 65536 #pragma mark rna helper functions @@ -245,7 +243,7 @@ void makeqtstring(RenderData *rd, char *string, bool preview) } } -void filepath_qt(char *string, RenderData *rd, bool preview) +void filepath_qt(char *string, RenderData *rd, bool preview, const char *suffix) { int sfra, efra; @@ -276,8 +274,23 @@ void filepath_qt(char *string, RenderData *rd, bool preview) BLI_path_frame_range(string, sfra, efra, 4); } } + + BLI_path_suffix(string, FILE_MAX, suffix, ""); } +void *context_create_qt(void) +{ + QuicktimeExport *qtexport = MEM_callocN(sizeof(QuicktimeExport), "QuicktimeExport"); + return qtexport; +} + +void context_free_qt(void *context_v) +{ + QuicktimeExport *qtexport = context_v; + if (qtexport) { + MEM_freeN(qtexport); + } +} #pragma mark audio export functions @@ -302,12 +315,13 @@ static OSStatus write_cookie(AudioConverterRef converter, AudioFileID outfile) } /* AudioConverter input stream callback */ -static OSStatus AudioConverterInputCallback(AudioConverterRef inAudioConverter, +static OSStatus AudioConverterInputCallback(AudioConverterRef inAudioConverter, UInt32* ioNumberDataPackets, AudioBufferList* ioData, AudioStreamPacketDescription** outDataPacketDescription, void* inUserData) -{ +{ + QuicktimeExport *qtexport = inUserData; if (qtexport->audioTotalExportedFrames >= qtexport->audioLastFrame) { /* EOF */ *ioNumberDataPackets = 0; return noErr; @@ -334,7 +348,7 @@ static OSStatus AudioConverterInputCallback(AudioConverterRef inAudioConverter, #pragma mark export functions -int start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty, ReportList *reports, bool preview) +int start_qt(void *context_v, struct Scene *scene, struct RenderData *rd, int rectx, int recty, ReportList *reports, bool preview, const char *UNUSED(suffix)) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSError *error; @@ -342,9 +356,8 @@ int start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty, R int success = 1; OSStatus err = noErr; int sfra, efra; + QuicktimeExport *qtexport = context_v; - if (qtexport == NULL) qtexport = MEM_callocN(sizeof(QuicktimeExport), "QuicktimeExport"); - if (preview) { sfra = rd->psfra; efra = rd->pefra; @@ -639,7 +652,7 @@ int start_qt(struct Scene *scene, struct RenderData *rd, int rectx, int recty, R return success; } -int append_qt(struct RenderData *rd, int start_frame, int frame, int *pixels, int rectx, int recty, ReportList *reports) +int append_qt(void *context_v, struct RenderData *rd, int start_frame, int frame, int *pixels, int rectx, int recty, const char *UNUSED(suffix), ReportList *reports) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; NSBitmapImageRep *blBitmapFormatImage; @@ -647,6 +660,7 @@ int append_qt(struct RenderData *rd, int start_frame, int frame, int *pixels, in OSStatus err = noErr; unsigned char *from_Ptr,*to_Ptr; int y,from_i,to_i; + QuicktimeExport *qtexport = context_v; /* Create bitmap image rep in blender format (32bit RGBA) */ blBitmapFormatImage = [[NSBitmapImageRep alloc] initWithBitmapDataPlanes:NULL @@ -704,7 +718,7 @@ int append_qt(struct RenderData *rd, int start_frame, int frame, int *pixels, in audioPacketsConverted = 1; err = AudioConverterFillComplexBuffer(qtexport->audioConverter, AudioConverterInputCallback, - NULL, &audioPacketsConverted, &qtexport->audioBufferList, qtexport->audioOutputPktDesc); + qtexport, &audioPacketsConverted, &qtexport->audioBufferList, qtexport->audioOutputPktDesc); if (audioPacketsConverted) { AudioFileWritePackets(qtexport->audioFile, false, qtexport->audioBufferList.mBuffers[0].mDataByteSize, qtexport->audioOutputPktDesc, qtexport->audioOutputPktPos, &audioPacketsConverted, qtexport->audioOutputBuffer); @@ -737,9 +751,11 @@ int append_qt(struct RenderData *rd, int start_frame, int frame, int *pixels, in } -void end_qt(void) +void end_qt(void *context_v) { NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init]; + QuicktimeExport *qtexport = context_v; + if (qtexport->movie) { if (qtexport->audioFile) @@ -830,11 +846,6 @@ void end_qt(void) } [QTMovie exitQTKitOnThread]; - - if (qtexport) { - MEM_freeN(qtexport); - qtexport = NULL; - } [pool drain]; } |