[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [32132] trunk/blender/source/blender/ quicktime/apple/qtkit_export.m: Fix for [#23912]: Replace by integer comparison a float comparison whose precision errors was causing an infinite loop during last frame audio conversion

Damien Plisson damien.plisson at yahoo.fr
Sun Sep 26 18:11:53 CEST 2010


Revision: 32132
          http://projects.blender.org/plugins/scmsvn/viewcvs.php?view=rev&root=bf-blender&revision=32132
Author:   damien78
Date:     2010-09-26 18:11:53 +0200 (Sun, 26 Sep 2010)

Log Message:
-----------
Fix for [#23912]: Replace by integer comparison a float comparison whose  precision errors was causing an infinite loop during last frame audio conversion

Modified Paths:
--------------
    trunk/blender/source/blender/quicktime/apple/qtkit_export.m

Modified: trunk/blender/source/blender/quicktime/apple/qtkit_export.m
===================================================================
--- trunk/blender/source/blender/quicktime/apple/qtkit_export.m	2010-09-26 13:53:32 UTC (rev 32131)
+++ trunk/blender/source/blender/quicktime/apple/qtkit_export.m	2010-09-26 16:11:53 UTC (rev 32132)
@@ -587,6 +587,7 @@
 	NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
 	NSBitmapImageRep *blBitmapFormatImage;
 	NSImage *frameImage;
+	OSStatus err = noErr;
 	unsigned char *from_Ptr,*to_Ptr;
 	int y,from_i,to_i;
 	
@@ -628,8 +629,7 @@
 	if (qtexport->audioFile) {
 		UInt32 audioPacketsConverted;
 		/* Append audio */
-		while (((double)qtexport->audioTotalExportedFrames / (double) qtexport->audioInputFormat.mSampleRate)
-			   < ((double)(frame - rd->sfra)) / (((double)rd->frs_sec) / rd->frs_sec_base)) {	
+		while (qtexport->audioTotalExportedFrames < qtexport->audioLastFrame) {	
 
 			qtexport->audioBufferList.mNumberBuffers = 1;
 			qtexport->audioBufferList.mBuffers[0].mNumberChannels = qtexport->audioOutputFormat.mChannelsPerFrame;
@@ -637,7 +637,7 @@
 			qtexport->audioBufferList.mBuffers[0].mData = qtexport->audioOutputBuffer;
 			audioPacketsConverted = AUDIOOUTPUTBUFFERSIZE / qtexport->audioCodecMaxOutputPacketSize;
 			
-			AudioConverterFillComplexBuffer(qtexport->audioConverter, AudioConverterInputCallback,
+			err = AudioConverterFillComplexBuffer(qtexport->audioConverter, AudioConverterInputCallback,
 											NULL, &audioPacketsConverted, &qtexport->audioBufferList, qtexport->audioOutputPktDesc);
 			if (audioPacketsConverted) {
 				AudioFileWritePackets(qtexport->audioFile, false, qtexport->audioBufferList.mBuffers[0].mDataByteSize,
@@ -656,6 +656,12 @@
 				
 				
 			}
+			else {
+				//Error getting audio packets
+				BKE_reportf(reports, RPT_ERROR, "Unable to get further audio packets from frame %i, error = 0x%x",qtexport->audioTotalExportedFrames,err);
+				break;
+			}
+
 		}
 	}
 	[pool drain];	





More information about the Bf-blender-cvs mailing list