/usr/share/psychtoolbox-3/PsychDemos/VideoCaptureDemo.m is in psychtoolbox-3-common 3.0.9+svn2579.dfsg1-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 | function VideoCaptureDemo(fullscreen, fullsize, roi, depth, deviceId)
% Demonstrate simple use of built-in video capture engine.
%
% VideoCaptureDemo([fullscreen=0][, fullsize=0][, roi=[0 0 640 480]][, depth][,deviceId=0])
%
% VideoCaptureDemo initializes the first attached and supported camera on
% your computer (e.g, the built-in iSight of Apple Macintosh computers),
% then shows its video image in a Psychtoolbox window.
%
% By default, a capture rate of 30 frames per second is requested, and the
% timecode and interframe interval of each captured image is displayed in
% the top-left corner of the display. A press of the ESCape key ends the
% demo.
%
% See also ImagingVideoCaptureDemo, VideoDelayloopMiniDemo and a few other
% nice demos.
%
% Optional parameters:
%
% 'fullscreen' If set to non-zero value, the image is displayed in a
% fullscreen window, as usual, otherwise a normal GUI window is used.
%
% 'fullsize' If set to 1, the cameras image is scaled up to full screen
% resolution, ie. so it fills the maximum amount of display area, but
% preserving the original aspect ratio.
%
% 'roi' Selects a rectangular subregion of the camera for display. By
% default, it selects a [0 0 640 480] rectangle, ie. the full are of a
% camera with 640 x 480 pixels resolution. This parameter may need tweaking
% for some cameras, as some drivers have bugs and don't work well with all
% settings.
%
% 'deviceId' Device index of video capture device. Defaults to system default.
%
% History:
% Written sometimes 2006 by MK.
AssertOpenGL;
if nargin < 1
fullscreen=[];
end
if isempty(fullscreen)
fullscreen=0;
end;
if nargin < 2
fullsize=[];
end
if isempty(fullsize)
fullsize=0;
end
if nargin < 3
roi = [];
end
if nargin < 4
depth = [];
end
if nargin < 5 || isempty(deviceId)
deviceId = [];
end
screenid=max(Screen('Screens'));
try
if fullscreen<1
win=Screen('OpenWindow', screenid, 0, [0 0 800 600]);
else
win=Screen('OpenWindow', screenid, 0);
end;
% Initial flip to a blank screen:
Screen('Flip',win);
% Set text size for info text. 24 pixels is also good for Linux.
Screen('TextSize', win, 24);
grabber = Screen('OpenVideoCapture', win, deviceId, roi, depth, [], [], []);
% brightness = Screen('SetVideoCaptureParameter', grabber, 'Brightness',383)
% exposure = Screen('SetVideoCaptureParameter', grabber, 'Exposure',130)
% gain = Screen('SetVideoCaptureParameter', grabber, 'Gain')
% gamma = Screen('SetVideoCaptureParameter', grabber, 'Gamma')
% shutter = Screen('SetVideoCaptureParameter', grabber, 'Shutter',7)
% Screen('SetVideoCaptureParameter', grabber, 'PrintParameters')
% vendor = Screen('SetVideoCaptureParameter', grabber, 'GetVendorname')
% model = Screen('SetVideoCaptureParameter', grabber, 'GetModelname')
% fps = Screen('SetVideoCaptureParameter', grabber, 'GetFramerate')
% roi = Screen('SetVideoCaptureParameter', grabber, 'GetROI')
for repcount=1:1
Screen('StartVideoCapture', grabber, 30, 1);
dstRect = [];
oldpts = 0;
count = 0;
t=GetSecs;
while (GetSecs - t) < 600
if KbCheck
break;
end;
[tex pts nrdropped]=Screen('GetCapturedImage', win, grabber, 1); %#ok<NASGU>
% fprintf('tex = %i pts = %f nrdropped = %i\n', tex, pts, nrdropped);
if (tex>0)
% Perform first-time setup of transformations, if needed:
if fullsize & (count == 0) %#ok<AND2>
texrect = Screen('Rect', tex);
winrect = Screen('Rect', win);
sf = min([RectWidth(winrect) / RectWidth(texrect) , RectHeight(winrect) / RectHeight(texrect)]);
dstRect = CenterRect(ScaleRect(texrect, sf, sf) , winrect);
end
% Setup mirror transformation for horizontal flipping:
% xc, yc is the geometric center of the text.
%[xc, yc] = RectCenter(Screen('Rect', win));
% Make a backup copy of the current transformation matrix for later
% use/restoration of default state:
%Screen('glPushMatrix', win);
% Translate origin into the geometric center of text:
%Screen('glTranslate', win, xc, 0, 0);
% Apple a scaling transform which flips the direction of x-Axis,
% thereby mirroring the drawn text horizontally:
%Screen('glScale', win, -1, 1, 1);
% We need to undo the translations...
%Screen('glTranslate', win, -xc, 0, 0);
% The transformation is ready for mirrored drawing:
% Draw new texture from framegrabber.
Screen('DrawTexture', win, tex, [], dstRect);
%Screen('glPopMatrix', win);
% Print pts:
Screen('DrawText', win, sprintf('%.4f', pts - t), 0, 0, 255);
if count>0
% Compute delta:
delta = (pts - oldpts) * 1000;
oldpts = pts;
Screen('DrawText', win, sprintf('%.4f', delta), 0, 20, 255);
end;
% Show it.
Screen('Flip', win);
Screen('Close', tex);
tex=0; %#ok<NASGU>
end;
count = count + 1;
end;
telapsed = GetSecs - t %#ok<NOPRT>
Screen('StopVideoCapture', grabber);
end
Screen('CloseVideoCapture', grabber);
Screen('CloseAll');
avgfps = count / telapsed %#ok<NOPRT,NASGU>
catch
Screen('CloseAll');
end;
|