The University of Sheffield
Neil Lawrence ML@SITraN
Problem in MATLAB 7.4 JIT Optimizer?

Update

Richard Southern has found that if you set the rotInd variable twice in a row, then the bug disappears. He was using MATLAB 7.3. I've made his modification available here.

Problem in MATLAB 7.4 JIT Optimizer?

Yi Li pointed out a problem with my MOCAP toolbox 0.135 when used with Matlab 7.4. A little investigation revealed an unusual bug in MATLAB.

To recreate this you need to download the MOCAP toolbox vrs 0.135 and the NDLUTIL toolbox vrs 0.16. They are available from here and here. I used MATLAB Version 7.4.0.336. I couldn't recreate the bug in vrs 7.0.1.24704. The bug occurred regardless of whether I was using the JVM.

		>> version
		
		ans =
		
		7.4.0.336 (R2007a)
		
		>> [skel, channels, frameLength] = bvhReadFile('examples/Swagger.bvh'); 
		>> skel.tree(1).rotInd
		
		ans =
		
		5     6     0
		
		>>
	      

In MATLAB 7.0, the same commands produce this:

		>> version
		
		ans =
		
		7.0.1.24704 (R14) Service Pack 1
		
		>> [skel, channels, frameLength] = bvhReadFile('examples/Swagger.bvh');
		>> skel.tree(1).rotInd
		
		ans =
		
		5     6     4
		
		>>
	      

The difference is that the last element of the vector is zero in 7.4 and four in 7.0. So I thought I'd do a little debugging in 7.4 to see if the format of some functions had changed. So I ran

		>> version
		
		ans =
		
		7.4.0.336 (R2007a)
		
		>> dbstop at 120 in bvhReadFile
		>> [skel, channels, frameLength] = bvhReadFile('examples/Swagger.bvh'); 
		120         skel.tree(jointNo).posInd(1, 3) = channelNo + i;
		K>> dbcont
		>> skel.tree(1).rotInd
		
		ans =
		
		5     6     4
		
		>>
	      

and the problem disappeared. One possible explanation is that there is a problem with the JIT optimizer in MATLAB 7.4, and the optimizer is switched off when you debug. It seems like a pretty major bug.

This document last modified Friday, 24-Jan-2014 07:29:11 UTC.