problem to stop a video capture
2 次查看(过去 30 天)
显示 更早的评论
Hi.
I'm using Matlab 2014a with IImage Acquisition Toolbox Version 4.7 (R2014a) 27-Dec-2013. I want to record video from 4 cameras, using a frame grabber (The Imagin Source DFG/MC4/PCIe).
My code is:
1.
vid1=videoentrada(1);
vid2=videoentrada(2);
vid3=videoentrada(3);
vid4=videoentrada(4);
function vid = videoentrada( n )
k=imaqhwinfo('tisimaq_r2013');
ans=k.DeviceInfo.SupportedFormats;
vid=videoinput('tisimaq_r2013',n,ans{1,127});
end
2.
inicia_video(vid1,mi_dir,1)
inicia_video(vid2,mi_dir,2)
inicia_video(vid3,mi_dir,3)
inicia_video(vid4,mi_dir,4)
function inicia_video(vid,nombre_dir,n)%,handle)
vid.FramesPerTrigger = Inf
vid.LoggingMode = 'disk';
mi_archivo=[nombre_dir '/' 'video' num2str(n) '.avi'];
writerObj = VideoWriter(mi_archivo);
vid.LoggingMode='Disk';
vid.DiskLogger = writerObj;
triggerconfig(vid,'manual');
start(vid);
end
3.
trigger(vid1);
trigger(vid2);
trigger(vid3);
trigger(vid4);
4. (by pressing a button)
stop(vid1);
stop(vid2);
stop(vid3);
stop(vid4);
The program "hangs" when executing stop(vid1).
There is no problem when using only two cameras. When using three cameras, the program hangs for some seconds, and then finishes well.
Any hint? Thanks a lot.
0 个评论
回答(1 个)
Rohit Kudva
2015-10-19
Hi Benigno,
One possible issue may be memory limitations as you are trying to grab frames from multiple camera's at the same time. You can try increasing the Java heap space for MATLAB. Following is the link which will guide you on how to increase heap space:
Another possible reason can be that when logging large amounts of data to disk, disk writing occasionally lags behind the acquisition. So when the 'stop' command is issued, the image acquisition stops by setting the 'Running' property of the video input object to 'Off' but the 'Logging' property is set to 'Off' only once all the frames have been logged to disk. To determine whether all frames are written to disk, you can optionally use the DiskLoggerFrameCount property.
while (vidobj.FramesAcquired ~= vidobj.DiskLoggerFrameCount)
pause(.1)
end
So Ideally you may want to to execute
>> stop(vidobj);
Only after the above 'while' loop is exited.
I hope this resolves your issue
Regards,
Rohit
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 National Instruments Frame Grabbers 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!