It looks like there’s a huge memory leak in AVFoundationMBS. Even the example project (Extract video frames) shows this issue to me.
I tried with several formats of video files (.m4v, .mov, .mp4, .avi) and always get the same behaviour: while frames are being extracted, I can see the process VTDecoderXPCService’s memory growing in activity monitor. After only ten seconds, it uses 2 GB of RAM. After around a minute, it uses 25 GB of memory.
Memory pressure grows and finally Mac OS presents the dialog “Your computer has run out of available memory. Please force quit some applications below:” (translated in english by me here, but it’s a known dialog). At this stage, the debug app hangs.
I’m surprised it’s not an already-reported problem, as I can reproduce it trivially; only needed thing is a video file that’s not too short and the “Extract video frames” project in the MBS examples.
Mac OS ventura, latest Xojo.
My project is obviously severely impacted (not useable); I’m open to provide any information that would allow this problem to be fixed. I’m not sure which class leaks the memory.
Possibly. With so many channels to report a bug, it’s not trivial to choose the correct one.
Like I usually do, I’ll first wait some time here and, in case of no answer in one day, opt for another channel.
Thanks for the advice.
In fact, I already tried some hours ago, but there’s another memory leak in my code so I started tracking it before answering here. The example project now works fine with the change you made, but there’s another issue, apparently in NSImageMBS.
When processing frames, this code also produces big memory leaks:
//SourceImage is an NSImageMBS
Var x,y as integer
x=SourceImage.width
y=SourceImage.height
Var Pict As Picture=SourceImage.CopyPicture
//Use Pict for drawing
But this one does not:
//SourceImage is an NSImageMBS
Var Pict As Picture=SourceImage.CopyPicture
Var x,y as integer
x=SourceImage.width
y=SourceImage.height
//Use Pict for drawing
In other words, if I access the width or height of the NSImageMBS object before using CopyPicture, I’m getting huge leaks (similar to those I described in my initial post). If I use CopyPicture first (even doing nothing with the returned Xojo picture) and then access NSImageMBS.width or NSImageMBS.height, the leaks don’t happen.
The current issue has workarounds (use CopyPicture first), but I wanted to let you know about it.