PageSourceSearch

https://signalsmedia.github.io/webcam.js

js signalsmedia.github.io collected 2026-10-03 09:57:07 UTC 2,742 bytes, 86 lines download raw bytes

1var WebcamView = (function() {
2	
3	// private interface
4	var videoReady;
5	var video;
6	var circleMask;
7	
8	var centerCut;
9	var resolution;
10	
11	function setVideoReady()
12	{
13		videoReady = true;
14		resolution = min(video.width,video.height);
15		centerCut = createVector((video.width-resolution)/2,(video.height-resolution)/2)
16		circleMask = createGraphics(video.width,video.height);
17		circleMask.fill(0,0,0,255);
18		circleMask.circle(video.width/2, video.height/2, resolution);
19		
20		streamRefreshMillis = (1/video.elt.srcObject.getVideoTracks()[0].getSettings().frameRate)*1000;
21		
22		//streamRefreshMillis = 2000
23		
24		if(!streamRefreshMillis) streamRefreshMillis = 1000/30;
25		
26		print("video ready")
27	}
28
29	return  { 
30		// public interface setters
31		// public interface getters
32		isReady: ()=> videoReady,
33		// getBoundSize: ()=> mainRegion.size,
34		// getBoundOrigin: ()=> mainRegion.origin,
35		// getPortSize: ()=> mainRegion.innerSize,
36		// getPortOrigin: ()=> mainRegion.innerOrigin,
37		getCenterCut: ()=> centerCut,
38		getResolution: ()=> resolution,
39		getRefreshRate: ()=> refreshRate,
40		// public interface methods
41		updateDimensions: ()=>{
42			// mainRegion.size = createVector(windowWidth/2,windowWidth/2);
43			// mainRegion.origin = createVector(width/2 - mainRegion.size.x/2,-mainRegion.size.y/16);
44			
45			// mainRegion.innerSize = createVector(2*mainRegion.size.x/3,2*mainRegion.size.y/3);
46			// mainRegion.innerOrigin = createVector(mainRegion.origin.x+mainRegion.innerSize.x/4,mainRegion.origin.y+mainRegion.innerSize.y/4);
47		},
48		//debugImage: undefined,
49		preload: ()=> {
50			let constraints = {
51				video: {
52					width: { ideal: displayWidth/2 },
53					height: { ideal: displayWidth/2 },
54					// width: { ideal: 640 },
55					// height: { ideal: 480 },
56					frameRate: {min: 15}
57				},
58				audio: false
59				
60			};
61			video = createCapture(constraints);
62			//video.size(640, 480);
63			video.hide();
64			video.elt.onloadeddata = setVideoReady;
65			//circleMask = loadImage('assets/circleMask.png');
66			//WebcamView.debugImage = createImg('debug.png','whatever').elt
67			//video.mask(circleMask);
68		},
69		init: ()=> {
70			WebcamView.updateDimensions();
71		},
72		draw: ()=> {
73			if(drawStage!='flip') throw "WebcamView must be drawn within 'flip' drawing stage"
74			if(!videoReady) return;
75			video.mask(circleMask);
76			// image(video,0,0,480,480,80,0,480,480);
77			image(video,mainRegion.innerOrigin.x,mainRegion.innerOrigin.y,mainRegion.innerSize.x,mainRegion.innerSize.y,centerCut.x,centerCut.y,resolution,resolution);
78		},
79		getVideo: ()=> {
80			return video.elt;
81		},
82		createMouseVector: ()=>{
83			return createVector(((flip ? width - mouseX : mouseX)-mainRegion.origin.x)/mainRegion.size.x, (mouseY-mainRegion.origin.y)/mainRegion.size.y);
84		},		
85	};
86})();

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.