ezuikit-js 0.7.0 → 7.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (94) hide show
  1. package/demos/EZUIKitHD/EZUIKitHD.html +171 -0
  2. package/demos/EZUIKitHD/js/jsWebControl-1.0.0.min.js +80 -0
  3. package/demos/base-demo/base.html +116 -116
  4. package/demos/base-demo/ezuikit.js +29 -29
  5. package/demos/base-demo/ezuikit_static/v65/v1/js/SuperRender_10.js +394 -394
  6. package/demos/base-demo/ezuikit_static/v65/v1/js/playctrl/DecodeWorker.js +617 -617
  7. package/demos/base-demo/ezuikit_static/v65/v1/js/playctrl/JSPlaySDKInterface.js +2052 -2052
  8. package/demos/base-demo/ezuikit_static/v65/v1/js/playctrl/SuperRender_10.js +395 -395
  9. package/demos/base-demo/ezuikit_static/v65/v1/js/transform/SystemTransform.js +22 -22
  10. package/demos/base-demo/ezuikit_static/v65/v1/js/tts-v4.js +346 -346
  11. package/demos/base-demo/ezuikit_static/v65/v1/rec/jquery.min.js +1 -1
  12. package/demos/base-demo/ezuikit_static/v65/v1/talk/tts-v4.js +346 -346
  13. package/demos/base-demo/ezuikit_static/v65/v2/rec/jquery.min.js +1 -1
  14. package/demos/base-demo/ezuikit_static/v65/v2/talk/tts-v4.js +343 -343
  15. package/demos/base-demo/hls.html +23 -23
  16. package/demos/base-demo/index.html +116 -116
  17. package/demos/base-demo/localDecoder.html +117 -117
  18. package/demos/base-demo/mobileLive.html +116 -116
  19. package/demos/base-demo/mobileRec.html +115 -115
  20. package/demos/base-demo/multi.html +128 -128
  21. package/demos/base-demo/pcLive.html +116 -116
  22. package/demos/base-demo/pcRec.html +115 -115
  23. package/demos/base-demo/template.html +123 -123
  24. package/demos/base-demo/themeData.html +231 -231
  25. package/demos/nginx-demo/conf/fastcgi.conf +26 -26
  26. package/demos/nginx-demo/conf/fastcgi_params +25 -25
  27. package/demos/nginx-demo/conf/koi-utf +109 -109
  28. package/demos/nginx-demo/conf/koi-win +103 -103
  29. package/demos/nginx-demo/conf/mime.types +95 -95
  30. package/demos/nginx-demo/conf/nginx.conf +121 -121
  31. package/demos/nginx-demo/conf/scgi_params +17 -17
  32. package/demos/nginx-demo/conf/uwsgi_params +17 -17
  33. package/demos/nginx-demo/conf/win-utf +126 -126
  34. package/demos/nginx-demo/contrib/README +21 -21
  35. package/demos/nginx-demo/contrib/geo2nginx.pl +58 -58
  36. package/demos/nginx-demo/contrib/unicode2nginx/koi-utf +131 -131
  37. package/demos/nginx-demo/contrib/unicode2nginx/unicode-to-nginx.pl +48 -48
  38. package/demos/nginx-demo/contrib/unicode2nginx/win-utf +130 -130
  39. package/demos/nginx-demo/contrib/vim/ftdetect/nginx.vim +4 -4
  40. package/demos/nginx-demo/contrib/vim/ftplugin/nginx.vim +1 -1
  41. package/demos/nginx-demo/contrib/vim/indent/nginx.vim +11 -11
  42. package/demos/nginx-demo/contrib/vim/syntax/nginx.vim +2268 -2268
  43. package/demos/nginx-demo/docs/CHANGES +8115 -8115
  44. package/demos/nginx-demo/docs/CHANGES.ru +8252 -8252
  45. package/demos/nginx-demo/docs/LICENSE +26 -26
  46. package/demos/nginx-demo/docs/OpenSSL.LICENSE +127 -127
  47. package/demos/nginx-demo/docs/PCRE.LICENCE +93 -93
  48. package/demos/nginx-demo/docs/README +3 -3
  49. package/demos/nginx-demo/docs/zlib.LICENSE +20 -20
  50. package/demos/nginx-demo/html/50x.html +21 -21
  51. package/demos/nginx-demo/html/ezuikit5/ezuikit.js +29 -29
  52. package/demos/nginx-demo/html/ezuikit5/index.html +116 -116
  53. package/demos/nginx-demo/html/ezuikit5/server.js +67 -67
  54. package/demos/nginx-demo/html/index.html +16 -16
  55. package/demos/nginx-demo/html/js/adapeter.js +5496 -5496
  56. package/demos/nginx-demo/html/js/janus.js +3507 -3507
  57. package/demos/nginx-demo/html/js/jquery.min.js +1 -1
  58. package/demos/nginx-demo/html/js/sts.js +340 -340
  59. package/demos/nginx-demo/logs/access.log +109 -109
  60. package/demos/nginx-demo/logs/error.log +15 -15
  61. package/demos/nginx-demo/logs/nginx.pid +1 -1
  62. package/demos/react-demo/README.md +68 -68
  63. package/demos/react-demo/package.json +36 -36
  64. package/demos/react-demo/public/index.html +43 -43
  65. package/demos/react-demo/public/manifest.json +25 -25
  66. package/demos/react-demo/public/robots.txt +3 -3
  67. package/demos/react-demo/src/App.css +38 -38
  68. package/demos/react-demo/src/App.js +114 -114
  69. package/demos/react-demo/src/App.test.js +9 -9
  70. package/demos/react-demo/src/index.css +13 -13
  71. package/demos/react-demo/src/index.js +17 -17
  72. package/demos/react-demo/src/logo.svg +7 -7
  73. package/demos/react-demo/src/serviceWorker.js +141 -141
  74. package/demos/react-demo/src/setupTests.js +5 -5
  75. package/demos/vue-demo/README.md +24 -24
  76. package/demos/vue-demo/babel.config.js +5 -5
  77. package/demos/vue-demo/package.json +43 -43
  78. package/demos/vue-demo/public/index.html +17 -17
  79. package/demos/vue-demo/src/App.vue +27 -27
  80. package/demos/vue-demo/src/components/EZUIKitJs.vue +115 -115
  81. package/demos/vue-demo/src/main.js +8 -8
  82. package/ezuikit.js +9785 -681
  83. package/ezuikit_static/v65/v1/js/SuperRender_10.js +394 -394
  84. package/ezuikit_static/v65/v1/js/playctrl/DecodeWorker.js +617 -617
  85. package/ezuikit_static/v65/v1/js/playctrl/JSPlaySDKInterface.js +2052 -2052
  86. package/ezuikit_static/v65/v1/js/playctrl/SuperRender_10.js +395 -395
  87. package/ezuikit_static/v65/v1/js/transform/SystemTransform.js +22 -22
  88. package/ezuikit_static/v65/v1/js/tts-v4.js +346 -346
  89. package/ezuikit_static/v65/v1/rec/jquery.min.js +1 -1
  90. package/ezuikit_static/v65/v1/talk/tts-v4.js +346 -346
  91. package/ezuikit_static/v65/v2/js/jsPluginV2-2.0.1.min.js +74 -11
  92. package/ezuikit_static/v65/v2/rec/jquery.min.js +1 -1
  93. package/ezuikit_static/v65/v2/talk/tts-v4.js +343 -343
  94. package/package.json +1 -1
@@ -1,395 +1,395 @@
1
- "use strict";
2
- //顶点着色器
3
- //attribute修饰符用于声明由浏览器(javascript)传输给顶点着色器的变量值;
4
- // vertexPos即我们定义的顶点坐标;
5
- // gl_Position是一个内建的传出变量。
6
- var vertexYUVShader = [
7
- 'attribute vec4 vertexPos;',
8
- 'attribute vec2 texturePos;',
9
- 'varying vec2 textureCoord;',
10
-
11
- 'void main()',
12
- '{',
13
- 'gl_Position = vertexPos;',
14
- 'textureCoord = texturePos;',
15
- '}'
16
- ].join('\n');
17
- //像素着色器(yuv->rgb)
18
- var fragmentYUVShader = [
19
- 'precision highp float;',
20
- 'varying highp vec2 textureCoord;',
21
- 'uniform sampler2D ySampler;',
22
- 'uniform sampler2D uSampler;',
23
- 'uniform sampler2D vSampler;',
24
- 'const mat4 YUV2RGB = mat4',
25
- '(',
26
- '1.1643828125, 0, 1.59602734375, -.87078515625,',
27
- '1.1643828125, -.39176171875, -.81296875, .52959375,',
28
- '1.1643828125, 2.017234375, 0, -1.081390625,',
29
- '0, 0, 0, 1',
30
- ');',
31
-
32
- 'void main(void) {',
33
- 'highp float y = texture2D(ySampler, textureCoord).r;',
34
- 'highp float u = texture2D(uSampler, textureCoord).r;',
35
- 'highp float v = texture2D(vSampler, textureCoord).r;',
36
- 'gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;',
37
- '}'
38
- ].join('\n');
39
-
40
- (function (root, factory) {
41
- root.SuperRender = factory();
42
- }(this, function () {
43
-
44
- function RenderManager(canvas) {
45
-
46
- this.canvasElement = document.getElementById(canvas);
47
-
48
- this.initContextGL();
49
-
50
- if(this.contextGL) {
51
- this.YUVProgram = this.initProgram(vertexYUVShader, fragmentYUVShader);
52
- this.initBuffers();
53
- this.initTextures();
54
- }
55
- };
56
-
57
- /**
58
- * 初始化WebGL上下文
59
- */
60
- RenderManager.prototype.initContextGL = function() {
61
-
62
- var canvas = this.canvasElement;
63
-
64
- var gl = null;
65
-
66
- try {
67
- gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
68
- } catch (e) {
69
- gl = null;
70
- }
71
-
72
- if(!gl || typeof gl.getParameter !== "function") {
73
- gl = null;
74
- }
75
-
76
- this.contextGL = gl;
77
-
78
- console.log("WebGL1.0");
79
- };
80
-
81
- /**
82
- * 初始化着色器程序
83
- * @param vertexShaderScript 顶点着色器脚本
84
- * @param fragmentShaderScript 片段着色器脚本
85
- */
86
- RenderManager.prototype.initProgram = function(vertexShaderScript, fragmentShaderScript) {
87
-
88
- var gl = this.contextGL;
89
-
90
- var vertexShader = gl.createShader(gl.VERTEX_SHADER); //创建定点着色器
91
- gl.shaderSource(vertexShader, vertexShaderScript);
92
- gl.compileShader(vertexShader);
93
- if(!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
94
- console.log('Vertex shader failed to compile: ' + gl.getShaderInfoLog(vertexShader));
95
- }
96
-
97
- var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
98
- gl.shaderSource(fragmentShader, fragmentShaderScript);
99
- gl.compileShader(fragmentShader);
100
- if(!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
101
- console.log('Fragment shader failed to compile: ' + gl.getShaderInfoLog(fragmentShader));
102
- }
103
-
104
- var program = gl.createProgram();
105
- gl.attachShader(program, vertexShader);
106
- gl.attachShader(program, fragmentShader);
107
- gl.linkProgram(program);
108
- if(!gl.getProgramParameter(program, gl.LINK_STATUS)) {
109
- console.log('Program failed to compile: ' + gl.getProgramInfoLog(program));
110
- }
111
-
112
- gl.deleteShader(vertexShader);
113
- gl.deleteShader(fragmentShader);
114
-
115
- return program;
116
- };
117
-
118
- /**
119
- * 初始化数据缓存
120
- */
121
- RenderManager.prototype.initBuffers = function() {
122
-
123
- var gl = this.contextGL;
124
-
125
- var vertexPosBuffer = gl.createBuffer();
126
- gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer);
127
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), gl.STATIC_DRAW);
128
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
129
-
130
- var texturePosBuffer = gl.createBuffer();
131
- gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer);
132
- gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]), gl.DYNAMIC_DRAW);
133
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
134
-
135
- this.vertexPosBuffer = vertexPosBuffer;
136
- this.texturePosBuffer = texturePosBuffer;
137
- };
138
-
139
- /**
140
- * 创建纹理
141
- */
142
- RenderManager.prototype.initTexture = function() {
143
-
144
- var gl = this.contextGL;
145
-
146
- var textureRef = gl.createTexture();
147
- gl.bindTexture(gl.TEXTURE_2D, textureRef);
148
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
149
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
150
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
151
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
152
- gl.bindTexture(gl.TEXTURE_2D, null);
153
-
154
- return textureRef;
155
- };
156
-
157
- /**
158
- * 初始化YUV纹理
159
- */
160
- RenderManager.prototype.initTextures = function() {
161
-
162
- var gl = this.contextGL;
163
-
164
- var program = this.YUVProgram;
165
- gl.useProgram(program);
166
-
167
- var yTextureRef = this.initTexture();
168
- var ySamplerRef = gl.getUniformLocation(program, 'ySampler');
169
- gl.uniform1i(ySamplerRef, 0);
170
- this.yTextureRef = yTextureRef;
171
-
172
- var uTextureRef = this.initTexture();
173
- var uSamplerRef = gl.getUniformLocation(program, 'uSampler');
174
- gl.uniform1i(uSamplerRef, 1);
175
- this.uTextureRef = uTextureRef;
176
-
177
- var vTextureRef = this.initTexture();
178
- var vSamplerRef = gl.getUniformLocation(program, 'vSampler');
179
- gl.uniform1i(vSamplerRef, 2);
180
- this.vTextureRef = vTextureRef;
181
-
182
- gl.useProgram(null);
183
- };
184
-
185
- /**
186
- * 显示帧数据
187
- * @param nWidth 宽度
188
- * @param nHeight 高度
189
- * @param nHeight 帧数据
190
- */
191
- RenderManager.prototype.SR_DisplayFrameData = function(nWidth, nHeight, pData,dWidth,dHeight) {
192
-
193
- if(nWidth <= 0 || nHeight <= 0)
194
- {
195
- return;
196
- }
197
-
198
- var gl = this.contextGL;
199
-
200
- if(null == pData)
201
- {
202
- gl.clearColor(0.0, 0.0, 0.0, 0.0);
203
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
204
- return;
205
- }
206
-
207
- var canvas = this.canvasElement;
208
-
209
- this.nWindowWidth = canvas.width;
210
- this.nWindowHeight = canvas.height;
211
-
212
- var nWindowWidth = this.nWindowWidth;
213
- var nWindowHeight = this.nWindowHeight;
214
-
215
- gl.clearColor(0.8, 0.8, 1.0, 1.0);
216
- gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
217
-
218
- gl.viewport(0, 0, nWindowWidth, nWindowHeight);
219
-
220
- this.updateFrameData(nWidth, nHeight, pData,dWidth,dHeight);
221
-
222
- var program = this.YUVProgram;
223
- gl.useProgram(program);
224
-
225
- var vertexPosBuffer = this.vertexPosBuffer;
226
- gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer);
227
- var vertexPosRef = gl.getAttribLocation(program, 'vertexPos');
228
- gl.enableVertexAttribArray(vertexPosRef);
229
- gl.vertexAttribPointer(vertexPosRef, 2, gl.FLOAT, false, 0, 0);
230
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
231
-
232
- var texturePosBuffer = this.texturePosBuffer;
233
- gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer);
234
- var texturePosRef = gl.getAttribLocation(program, 'texturePos');
235
- gl.enableVertexAttribArray(texturePosRef);
236
- gl.vertexAttribPointer(texturePosRef, 2, gl.FLOAT, false, 0, 0);
237
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
238
-
239
- gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
240
-
241
- gl.disableVertexAttribArray(vertexPosRef);
242
- gl.disableVertexAttribArray(texturePosRef);
243
-
244
- gl.useProgram(null);
245
- };
246
-
247
- /**
248
- * 上传YUV数据到纹理
249
- * @param nWidth 宽度
250
- * @param nHeight 高度
251
- * @param nHeight 帧数据
252
- */
253
- RenderManager.prototype.updateFrameData = function(width, height, data,dWidth,dHeight) {
254
-
255
- var gl = this.contextGL;
256
-
257
- var yTextureRef = this.yTextureRef;
258
- var uTextureRef = this.uTextureRef;
259
- var vTextureRef = this.vTextureRef;
260
-
261
- var i420Data = data;
262
- // debugger;
263
- if(width == dWidth && height == dHeight)
264
- {
265
- var yDataLength = width * height;
266
- var yData = i420Data.subarray(0, yDataLength);
267
- gl.activeTexture(gl.TEXTURE0);
268
- gl.bindTexture(gl.TEXTURE_2D, yTextureRef);
269
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width, height, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, yData);
270
-
271
- var cbDataLength = width/2 * height/2;
272
- var cbData = i420Data.subarray(width*height, width*height + cbDataLength);
273
- gl.activeTexture(gl.TEXTURE1);
274
- gl.bindTexture(gl.TEXTURE_2D, uTextureRef);
275
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width/2, height/2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, cbData);
276
-
277
- var crDataLength = cbDataLength;
278
- var crData = i420Data.subarray(width*height + width*height/4, width*height + width*height/4 + crDataLength);
279
- gl.activeTexture(gl.TEXTURE2);
280
- gl.bindTexture(gl.TEXTURE_2D, vTextureRef);
281
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width/2, height/2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, crData);
282
-
283
- }
284
- else
285
- {
286
- // //裁剪宽
287
- var yDataLength = dWidth * dHeight;
288
- var yData=new Uint8Array(yDataLength) ;
289
- for(var i=0;i<dHeight;i++)
290
- {
291
- //var ySonData=new Uint8Array(dWidth) ;
292
- var ySonData = i420Data.subarray(i*width, i*width+dWidth);
293
- for (var j = 0; j < dWidth; j++) {
294
- yData[i*dWidth + j] = ySonData[j];
295
- }
296
- }
297
- gl.activeTexture(gl.TEXTURE0);
298
- gl.bindTexture(gl.TEXTURE_2D, yTextureRef);
299
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, dWidth, dHeight, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, yData);
300
- yData=null;
301
- ySonData=null;
302
-
303
- var cbDataLength = dWidth/2 * dHeight/2;
304
- var cbData =new Uint8Array(cbDataLength);
305
- //var cbSonData=new Uint8Array(dWidth/2) ;
306
- for(var i=0;i<dHeight/2;i++)
307
- {
308
- var cbSonData = i420Data.subarray(width*height+i*width/2, width*height+i*width/2+dWidth/2);
309
- for (var j = 0; j < dWidth/2; j++) {
310
- cbData[i*dWidth/2 + j] = cbSonData[j];
311
- }
312
- }
313
- gl.activeTexture(gl.TEXTURE1);
314
- gl.bindTexture(gl.TEXTURE_2D, uTextureRef);
315
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, dWidth/2, dHeight/2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, cbData);
316
- cbData=null;
317
- cbSonData=null;
318
-
319
- var crDataLength = cbDataLength;
320
- var crData = new Uint8Array(crDataLength);
321
- for(var i=0;i<dHeight/2;i++)
322
- {
323
- var crSonData = i420Data.subarray(width*height*5/4+i*width/2, width*height*5/4+i*width/2+dWidth/2);
324
- for (var j = 0; j < dWidth/2; j++) {
325
- crData[i*dWidth/2 + j] = crSonData[j];
326
- }
327
- }
328
- gl.activeTexture(gl.TEXTURE2);
329
- gl.bindTexture(gl.TEXTURE_2D, vTextureRef);
330
- gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, dWidth/2, dHeight/2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, crData);
331
- crData=null;
332
- crSonData=null;
333
- }
334
-
335
- };
336
-
337
- /**
338
- * 设置显示区域
339
- * @param stDisplayRect 显示区域
340
- */
341
- RenderManager.prototype.SR_SetDisplayRect = function(stDisplayRect) {
342
-
343
- var gl = this.contextGL;
344
-
345
- var nWindowWidth = this.nWindowWidth;
346
- var nWindowHeight = this.nWindowHeight;
347
-
348
- var texturePosValues = null;
349
-
350
- if(stDisplayRect && nWindowWidth > 0 && nWindowHeight > 0) {
351
- var fLeft = stDisplayRect.left / nWindowWidth;
352
- var fTop = stDisplayRect.top / nWindowHeight;
353
- var fRight = stDisplayRect.right / nWindowWidth;
354
- var fBottom = stDisplayRect.bottom / nWindowHeight;
355
-
356
- texturePosValues = new Float32Array([fRight, fTop, fLeft, fTop, fRight, fBottom, fLeft, fBottom]);
357
- }
358
- else {
359
- texturePosValues = new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]);
360
- }
361
-
362
- var texturePosBuffer = this.texturePosBuffer;
363
-
364
- gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer);
365
- gl.bufferSubData(gl.ARRAY_BUFFER, 0, texturePosValues);
366
- gl.bindBuffer(gl.ARRAY_BUFFER, null);
367
- };
368
-
369
- /**
370
- * 释放显示资源
371
- */
372
- RenderManager.prototype.SR_Destroy = function() {
373
-
374
- var gl = this.contextGL;
375
-
376
- var YUVProgram = this.YUVProgram;
377
- gl.deleteProgram(YUVProgram);
378
-
379
- var vertexPosBuffer = this.vertexPosBuffer;
380
- var texturePosBuffer = this.texturePosBuffer;
381
-
382
- gl.deleteBuffer(vertexPosBuffer);
383
- gl.deleteBuffer(texturePosBuffer);
384
-
385
- var yTextureRef = this.yTextureRef;
386
- var uTextureRef = this.uTextureRef;
387
- var vTextureRef = this.vTextureRef;
388
- gl.deleteTexture(yTextureRef);
389
- gl.deleteTexture(uTextureRef);
390
- gl.deleteTexture(vTextureRef);
391
- };
392
-
393
- return RenderManager;
394
-
1
+ "use strict";
2
+ //顶点着色器
3
+ //attribute修饰符用于声明由浏览器(javascript)传输给顶点着色器的变量值;
4
+ // vertexPos即我们定义的顶点坐标;
5
+ // gl_Position是一个内建的传出变量。
6
+ var vertexYUVShader = [
7
+ 'attribute vec4 vertexPos;',
8
+ 'attribute vec2 texturePos;',
9
+ 'varying vec2 textureCoord;',
10
+
11
+ 'void main()',
12
+ '{',
13
+ 'gl_Position = vertexPos;',
14
+ 'textureCoord = texturePos;',
15
+ '}'
16
+ ].join('\n');
17
+ //像素着色器(yuv->rgb)
18
+ var fragmentYUVShader = [
19
+ 'precision highp float;',
20
+ 'varying highp vec2 textureCoord;',
21
+ 'uniform sampler2D ySampler;',
22
+ 'uniform sampler2D uSampler;',
23
+ 'uniform sampler2D vSampler;',
24
+ 'const mat4 YUV2RGB = mat4',
25
+ '(',
26
+ '1.1643828125, 0, 1.59602734375, -.87078515625,',
27
+ '1.1643828125, -.39176171875, -.81296875, .52959375,',
28
+ '1.1643828125, 2.017234375, 0, -1.081390625,',
29
+ '0, 0, 0, 1',
30
+ ');',
31
+
32
+ 'void main(void) {',
33
+ 'highp float y = texture2D(ySampler, textureCoord).r;',
34
+ 'highp float u = texture2D(uSampler, textureCoord).r;',
35
+ 'highp float v = texture2D(vSampler, textureCoord).r;',
36
+ 'gl_FragColor = vec4(y, u, v, 1) * YUV2RGB;',
37
+ '}'
38
+ ].join('\n');
39
+
40
+ (function (root, factory) {
41
+ root.SuperRender = factory();
42
+ }(this, function () {
43
+
44
+ function RenderManager(canvas) {
45
+
46
+ this.canvasElement = document.getElementById(canvas);
47
+
48
+ this.initContextGL();
49
+
50
+ if(this.contextGL) {
51
+ this.YUVProgram = this.initProgram(vertexYUVShader, fragmentYUVShader);
52
+ this.initBuffers();
53
+ this.initTextures();
54
+ }
55
+ };
56
+
57
+ /**
58
+ * 初始化WebGL上下文
59
+ */
60
+ RenderManager.prototype.initContextGL = function() {
61
+
62
+ var canvas = this.canvasElement;
63
+
64
+ var gl = null;
65
+
66
+ try {
67
+ gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl");
68
+ } catch (e) {
69
+ gl = null;
70
+ }
71
+
72
+ if(!gl || typeof gl.getParameter !== "function") {
73
+ gl = null;
74
+ }
75
+
76
+ this.contextGL = gl;
77
+
78
+ console.log("WebGL1.0");
79
+ };
80
+
81
+ /**
82
+ * 初始化着色器程序
83
+ * @param vertexShaderScript 顶点着色器脚本
84
+ * @param fragmentShaderScript 片段着色器脚本
85
+ */
86
+ RenderManager.prototype.initProgram = function(vertexShaderScript, fragmentShaderScript) {
87
+
88
+ var gl = this.contextGL;
89
+
90
+ var vertexShader = gl.createShader(gl.VERTEX_SHADER); //创建定点着色器
91
+ gl.shaderSource(vertexShader, vertexShaderScript);
92
+ gl.compileShader(vertexShader);
93
+ if(!gl.getShaderParameter(vertexShader, gl.COMPILE_STATUS)) {
94
+ console.log('Vertex shader failed to compile: ' + gl.getShaderInfoLog(vertexShader));
95
+ }
96
+
97
+ var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER);
98
+ gl.shaderSource(fragmentShader, fragmentShaderScript);
99
+ gl.compileShader(fragmentShader);
100
+ if(!gl.getShaderParameter(fragmentShader, gl.COMPILE_STATUS)) {
101
+ console.log('Fragment shader failed to compile: ' + gl.getShaderInfoLog(fragmentShader));
102
+ }
103
+
104
+ var program = gl.createProgram();
105
+ gl.attachShader(program, vertexShader);
106
+ gl.attachShader(program, fragmentShader);
107
+ gl.linkProgram(program);
108
+ if(!gl.getProgramParameter(program, gl.LINK_STATUS)) {
109
+ console.log('Program failed to compile: ' + gl.getProgramInfoLog(program));
110
+ }
111
+
112
+ gl.deleteShader(vertexShader);
113
+ gl.deleteShader(fragmentShader);
114
+
115
+ return program;
116
+ };
117
+
118
+ /**
119
+ * 初始化数据缓存
120
+ */
121
+ RenderManager.prototype.initBuffers = function() {
122
+
123
+ var gl = this.contextGL;
124
+
125
+ var vertexPosBuffer = gl.createBuffer();
126
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer);
127
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 1, -1, 1, 1, -1, -1, -1]), gl.STATIC_DRAW);
128
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
129
+
130
+ var texturePosBuffer = gl.createBuffer();
131
+ gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer);
132
+ gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]), gl.DYNAMIC_DRAW);
133
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
134
+
135
+ this.vertexPosBuffer = vertexPosBuffer;
136
+ this.texturePosBuffer = texturePosBuffer;
137
+ };
138
+
139
+ /**
140
+ * 创建纹理
141
+ */
142
+ RenderManager.prototype.initTexture = function() {
143
+
144
+ var gl = this.contextGL;
145
+
146
+ var textureRef = gl.createTexture();
147
+ gl.bindTexture(gl.TEXTURE_2D, textureRef);
148
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.LINEAR);
149
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.LINEAR);
150
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE);
151
+ gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE);
152
+ gl.bindTexture(gl.TEXTURE_2D, null);
153
+
154
+ return textureRef;
155
+ };
156
+
157
+ /**
158
+ * 初始化YUV纹理
159
+ */
160
+ RenderManager.prototype.initTextures = function() {
161
+
162
+ var gl = this.contextGL;
163
+
164
+ var program = this.YUVProgram;
165
+ gl.useProgram(program);
166
+
167
+ var yTextureRef = this.initTexture();
168
+ var ySamplerRef = gl.getUniformLocation(program, 'ySampler');
169
+ gl.uniform1i(ySamplerRef, 0);
170
+ this.yTextureRef = yTextureRef;
171
+
172
+ var uTextureRef = this.initTexture();
173
+ var uSamplerRef = gl.getUniformLocation(program, 'uSampler');
174
+ gl.uniform1i(uSamplerRef, 1);
175
+ this.uTextureRef = uTextureRef;
176
+
177
+ var vTextureRef = this.initTexture();
178
+ var vSamplerRef = gl.getUniformLocation(program, 'vSampler');
179
+ gl.uniform1i(vSamplerRef, 2);
180
+ this.vTextureRef = vTextureRef;
181
+
182
+ gl.useProgram(null);
183
+ };
184
+
185
+ /**
186
+ * 显示帧数据
187
+ * @param nWidth 宽度
188
+ * @param nHeight 高度
189
+ * @param nHeight 帧数据
190
+ */
191
+ RenderManager.prototype.SR_DisplayFrameData = function(nWidth, nHeight, pData,dWidth,dHeight) {
192
+
193
+ if(nWidth <= 0 || nHeight <= 0)
194
+ {
195
+ return;
196
+ }
197
+
198
+ var gl = this.contextGL;
199
+
200
+ if(null == pData)
201
+ {
202
+ gl.clearColor(0.0, 0.0, 0.0, 0.0);
203
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
204
+ return;
205
+ }
206
+
207
+ var canvas = this.canvasElement;
208
+
209
+ this.nWindowWidth = canvas.width;
210
+ this.nWindowHeight = canvas.height;
211
+
212
+ var nWindowWidth = this.nWindowWidth;
213
+ var nWindowHeight = this.nWindowHeight;
214
+
215
+ gl.clearColor(0.8, 0.8, 1.0, 1.0);
216
+ gl.clear(gl.COLOR_BUFFER_BIT | gl.DEPTH_BUFFER_BIT);
217
+
218
+ gl.viewport(0, 0, nWindowWidth, nWindowHeight);
219
+
220
+ this.updateFrameData(nWidth, nHeight, pData,dWidth,dHeight);
221
+
222
+ var program = this.YUVProgram;
223
+ gl.useProgram(program);
224
+
225
+ var vertexPosBuffer = this.vertexPosBuffer;
226
+ gl.bindBuffer(gl.ARRAY_BUFFER, vertexPosBuffer);
227
+ var vertexPosRef = gl.getAttribLocation(program, 'vertexPos');
228
+ gl.enableVertexAttribArray(vertexPosRef);
229
+ gl.vertexAttribPointer(vertexPosRef, 2, gl.FLOAT, false, 0, 0);
230
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
231
+
232
+ var texturePosBuffer = this.texturePosBuffer;
233
+ gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer);
234
+ var texturePosRef = gl.getAttribLocation(program, 'texturePos');
235
+ gl.enableVertexAttribArray(texturePosRef);
236
+ gl.vertexAttribPointer(texturePosRef, 2, gl.FLOAT, false, 0, 0);
237
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
238
+
239
+ gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4);
240
+
241
+ gl.disableVertexAttribArray(vertexPosRef);
242
+ gl.disableVertexAttribArray(texturePosRef);
243
+
244
+ gl.useProgram(null);
245
+ };
246
+
247
+ /**
248
+ * 上传YUV数据到纹理
249
+ * @param nWidth 宽度
250
+ * @param nHeight 高度
251
+ * @param nHeight 帧数据
252
+ */
253
+ RenderManager.prototype.updateFrameData = function(width, height, data,dWidth,dHeight) {
254
+
255
+ var gl = this.contextGL;
256
+
257
+ var yTextureRef = this.yTextureRef;
258
+ var uTextureRef = this.uTextureRef;
259
+ var vTextureRef = this.vTextureRef;
260
+
261
+ var i420Data = data;
262
+ // debugger;
263
+ if(width == dWidth && height == dHeight)
264
+ {
265
+ var yDataLength = width * height;
266
+ var yData = i420Data.subarray(0, yDataLength);
267
+ gl.activeTexture(gl.TEXTURE0);
268
+ gl.bindTexture(gl.TEXTURE_2D, yTextureRef);
269
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width, height, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, yData);
270
+
271
+ var cbDataLength = width/2 * height/2;
272
+ var cbData = i420Data.subarray(width*height, width*height + cbDataLength);
273
+ gl.activeTexture(gl.TEXTURE1);
274
+ gl.bindTexture(gl.TEXTURE_2D, uTextureRef);
275
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width/2, height/2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, cbData);
276
+
277
+ var crDataLength = cbDataLength;
278
+ var crData = i420Data.subarray(width*height + width*height/4, width*height + width*height/4 + crDataLength);
279
+ gl.activeTexture(gl.TEXTURE2);
280
+ gl.bindTexture(gl.TEXTURE_2D, vTextureRef);
281
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width/2, height/2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, crData);
282
+
283
+ }
284
+ else
285
+ {
286
+ // //裁剪宽
287
+ var yDataLength = dWidth * dHeight;
288
+ var yData=new Uint8Array(yDataLength) ;
289
+ for(var i=0;i<dHeight;i++)
290
+ {
291
+ //var ySonData=new Uint8Array(dWidth) ;
292
+ var ySonData = i420Data.subarray(i*width, i*width+dWidth);
293
+ for (var j = 0; j < dWidth; j++) {
294
+ yData[i*dWidth + j] = ySonData[j];
295
+ }
296
+ }
297
+ gl.activeTexture(gl.TEXTURE0);
298
+ gl.bindTexture(gl.TEXTURE_2D, yTextureRef);
299
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, dWidth, dHeight, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, yData);
300
+ yData=null;
301
+ ySonData=null;
302
+
303
+ var cbDataLength = dWidth/2 * dHeight/2;
304
+ var cbData =new Uint8Array(cbDataLength);
305
+ //var cbSonData=new Uint8Array(dWidth/2) ;
306
+ for(var i=0;i<dHeight/2;i++)
307
+ {
308
+ var cbSonData = i420Data.subarray(width*height+i*width/2, width*height+i*width/2+dWidth/2);
309
+ for (var j = 0; j < dWidth/2; j++) {
310
+ cbData[i*dWidth/2 + j] = cbSonData[j];
311
+ }
312
+ }
313
+ gl.activeTexture(gl.TEXTURE1);
314
+ gl.bindTexture(gl.TEXTURE_2D, uTextureRef);
315
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, dWidth/2, dHeight/2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, cbData);
316
+ cbData=null;
317
+ cbSonData=null;
318
+
319
+ var crDataLength = cbDataLength;
320
+ var crData = new Uint8Array(crDataLength);
321
+ for(var i=0;i<dHeight/2;i++)
322
+ {
323
+ var crSonData = i420Data.subarray(width*height*5/4+i*width/2, width*height*5/4+i*width/2+dWidth/2);
324
+ for (var j = 0; j < dWidth/2; j++) {
325
+ crData[i*dWidth/2 + j] = crSonData[j];
326
+ }
327
+ }
328
+ gl.activeTexture(gl.TEXTURE2);
329
+ gl.bindTexture(gl.TEXTURE_2D, vTextureRef);
330
+ gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, dWidth/2, dHeight/2, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, crData);
331
+ crData=null;
332
+ crSonData=null;
333
+ }
334
+
335
+ };
336
+
337
+ /**
338
+ * 设置显示区域
339
+ * @param stDisplayRect 显示区域
340
+ */
341
+ RenderManager.prototype.SR_SetDisplayRect = function(stDisplayRect) {
342
+
343
+ var gl = this.contextGL;
344
+
345
+ var nWindowWidth = this.nWindowWidth;
346
+ var nWindowHeight = this.nWindowHeight;
347
+
348
+ var texturePosValues = null;
349
+
350
+ if(stDisplayRect && nWindowWidth > 0 && nWindowHeight > 0) {
351
+ var fLeft = stDisplayRect.left / nWindowWidth;
352
+ var fTop = stDisplayRect.top / nWindowHeight;
353
+ var fRight = stDisplayRect.right / nWindowWidth;
354
+ var fBottom = stDisplayRect.bottom / nWindowHeight;
355
+
356
+ texturePosValues = new Float32Array([fRight, fTop, fLeft, fTop, fRight, fBottom, fLeft, fBottom]);
357
+ }
358
+ else {
359
+ texturePosValues = new Float32Array([1, 0, 0, 0, 1, 1, 0, 1]);
360
+ }
361
+
362
+ var texturePosBuffer = this.texturePosBuffer;
363
+
364
+ gl.bindBuffer(gl.ARRAY_BUFFER, texturePosBuffer);
365
+ gl.bufferSubData(gl.ARRAY_BUFFER, 0, texturePosValues);
366
+ gl.bindBuffer(gl.ARRAY_BUFFER, null);
367
+ };
368
+
369
+ /**
370
+ * 释放显示资源
371
+ */
372
+ RenderManager.prototype.SR_Destroy = function() {
373
+
374
+ var gl = this.contextGL;
375
+
376
+ var YUVProgram = this.YUVProgram;
377
+ gl.deleteProgram(YUVProgram);
378
+
379
+ var vertexPosBuffer = this.vertexPosBuffer;
380
+ var texturePosBuffer = this.texturePosBuffer;
381
+
382
+ gl.deleteBuffer(vertexPosBuffer);
383
+ gl.deleteBuffer(texturePosBuffer);
384
+
385
+ var yTextureRef = this.yTextureRef;
386
+ var uTextureRef = this.uTextureRef;
387
+ var vTextureRef = this.vTextureRef;
388
+ gl.deleteTexture(yTextureRef);
389
+ gl.deleteTexture(uTextureRef);
390
+ gl.deleteTexture(vTextureRef);
391
+ };
392
+
393
+ return RenderManager;
394
+
395
395
  }));