1
1
< title > getUserMedia with canvas effects</ title >
2
2
< style >
3
- # source { -webkit-transform : rotateY (180deg ) rotate3d (1 , 0 , 0 , 0deg ); display : block; margin : 20px 0 ; max-width : 100% ; }
4
- # strip { display : block; }
3
+ # gum {
4
+ background : # c00 ;
5
+ color : # fff ;
6
+ padding : 10px ;
7
+ }
8
+
9
+ /* I'm using CSS3 to translate the video on the X axis to give it a mirror effect */
10
+ # source {
11
+ display : block;
12
+ margin : 20px 0 ;
13
+ max-width : 100% ;
14
+ }
15
+
16
+ .supported # source { -webkit-transform : rotateY (180deg ) rotate3d (1 , 0 , 0 , 0deg );
17
+ -o-transform : rotateY (180deg ) rotate3d (1 , 0 , 0 , 0deg );
18
+ -moz-transform : rotateY (180deg ) rotate3d (1 , 0 , 0 , 0deg );
19
+ -ms-transform : rotateY (180deg ) rotate3d (1 , 0 , 0 , 0deg );
20
+ transform : rotateY (180deg ) rotate3d (1 , 0 , 0 , 0deg );
21
+ }
5
22
video , canvas { display : none; }
6
- input { width : 360px ;}
7
- output { display : inline-block; width : 16px ; height : 16px ; background : red; padding : 0 ; margin : 0 ;}
23
+ input { width : 360px ; }
8
24
</ style >
9
25
< article >
10
26
< label for ="hue "> Colour < input type ="range " min ="0 " max ="360 " value ="0 " id ="hue "> </ label > < output id ="target "> </ output >
11
- < video autoplay > </ video >
27
+ < video id ="video " muted loop autoplay >
28
+ < source src ="/assets/remy-and-ellis2.mp4 "> </ source >
29
+ < source src ="/assets/remy-and-ellis2.webm "> </ source >
30
+ </ video >
12
31
< canvas id ="source "> </ canvas >
32
+ < p id ="gum "> getUserMeda either not supported or not allowed - so instead here's me and my son headbanging.</ p >
13
33
</ article >
14
34
< script >
15
35
var video = document . querySelector ( 'video' ) ,
63
83
tr = rgb [ 0 ] ;
64
84
tg = rgb [ 1 ] ;
65
85
tb = rgb [ 2 ] ;
66
- // console.log(brightness / 256);
67
86
} ;
68
87
69
88
70
89
function init ( ) {
90
+ // from HTML5 Doctor article: http://html5doctor.com/getusermedia/
71
91
navigator . getUserMedia = navigator . getUserMedia || navigator . webkitGetUserMedia ;
72
92
if ( navigator . getUserMedia ) {
73
93
navigator . getUserMedia ( 'video' , successCallback , errorCallback ) ;
89
109
}
90
110
91
111
video . addEventListener ( 'loadedmetadata' , function ( ) {
92
- // output.canvas.width = ;
93
112
source . canvas . width = video . videoWidth ;
94
- // output.canvas.height =
95
113
source . canvas . height = video . videoHeight ;
96
- // source.canvas.height = height;
97
- // source.canvas.width = width;
98
114
draw ( ) ;
99
115
} ) ;
100
116
107
123
brightness ;
108
124
109
125
for ( ; i < pixels . data . length ; i += 4 ) {
110
- // grey = r*.3 + g*.59 + b*.11;
126
+ // brightness code from Tab Atkins' canvas demos
111
127
brightness = ( ( 3 * pixels . data [ i ] + 4 * pixels . data [ i + 1 ] + pixels . data [ i + 2 ] ) >>> 3 ) / 256 ;
112
128
113
129
pixels . data [ i ] = ( ( tr * brightness ) + 0.5 ) >> 0 ;
114
130
pixels . data [ i + 1 ] = ( ( tg * brightness ) + 0.5 ) >> 0
115
131
pixels . data [ i + 2 ] = ( ( tb * brightness ) + 0.5 ) >> 0
116
- // pixels.data[i+2] = 0;
117
132
}
118
133
output . putImageData ( pixels , 0 , 0 ) ;
119
134
}
120
135
121
- // shim layer with setTimeout fallback
136
+ // shim layer with setTimeout fallback - from Paul Irish
122
137
window . requestAnimFrame = ( function ( ) {
123
138
return window . requestAnimationFrame ||
124
139
window . webkitRequestAnimationFrame ||
130
145
} ;
131
146
} ) ( ) ;
132
147
148
+ var article = video . parentNode ,
149
+ gum = document . getElementById ( 'gum' ) ;
150
+
151
+ if ( navigator . getUserMedia || navigator . webkitGetUserMedia ) {
152
+ article . removeChild ( gum ) ;
153
+ article . className = 'supported' ;
154
+ init ( ) ;
155
+ }
133
156
134
- init ( ) ;
135
157
</ script >
136
158
</ body>
137
159
</ html>
0 commit comments