I have written a GUI to show four live video streams from HD webcams (Logitech C920). When I run my GUI in MATLAB, it functions flawlessly, press the "Preview" pushbutton and it detects if there are 1-4 cameras and displays their live images in axes in the GUI. After compiling to a standalone executable using the Compiler Application, when the "Preview" pushbutton is pressed, it shows 1 fewer cameras then the number selected, and it doesn't show a live stream, just a still of the first frame they see. The rest of the code seems to function properly (all cameras continue to record after I hit the "Begin" pushbutton. Below is the code for the "Preview" pushbutton (please disregard the sad nested if loop in the for loop, that was a bit of a workaround for an issue I was seeing earlier).
function Preview_Callback(hObject, ~, handles)% hObject handle to Preview (see GCBO)
% eventdata reserved - to be defined in a future version of MATLAB
% handles structure with handles and user data (see GUIDATA)
handles.TLI = ceil(handles.expLengthMin/300); %Time between images (timelapse interval)
handles.fileName = [date,'_',handles.Manufacturer,'_',handles.Bandage];for i=1:handles.numCamera handles.vid(i) = videoinput('winvideo', i, 'RGB24_1920x1080'); %Video Format
handles.src(i) = getselectedsource(handles.vid(i)); handles.src(i).FrameRate = '5.0000'; %Frame rate
handles.src(i).FocusMode = 'manual'; %Focus mode
handles.src(i).Focus = 50;% Focus length for glass cylinder
handles.frameRate = str2double(handles.src(i).FrameRate); handles.vid(i).FramesPerTrigger = handles.expLengthMin/handles.TLI; handles.vid(i).FrameGrabInterval = (handles.frameRate*60)*handles.TLI; handles.vid(i).LoggingMode = 'disk'; docname = [handles.fileName,'_#',num2str(i),'.avi']; handles.diskLogger = VideoWriter(docname, 'Uncompressed AVI'); handles.diskLogger.FrameRate = 60/handles.TLI; handles.vid(i).DiskLogger = handles.diskLogger;endvidRes = handles.vid(1).VideoResolution;nBands = handles.vid(1).NumberOfBands;for i=1:handles.numCamera if i == 1; h(1) = image(zeros(vidRes(2),vidRes(1),nBands),'Parent',handles.axes1); preview(handles.vid(1),h(1)) elseif i == 2; h(2) = image(zeros(vidRes(2),vidRes(1),nBands),'Parent',handles.axes2); preview(handles.vid(2),h(2)) elseif i == 3; h(3) = image(zeros(vidRes(2),vidRes(1),nBands),'Parent',handles.axes3); preview(handles.vid(3),h(3)) elseif i == 4; h(4) = image(zeros(vidRes(2),vidRes(1),nBands),'Parent',handles.axes4); preview(handles.vid(4),h(4)) endendguidata(hObject,handles);
Best Answer