agora-electron-sdk 4.3.2 → 4.4.0-dev.1

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 (100) hide show
  1. package/gulpfile.js +3 -1
  2. package/js/AgoraSdk.js +4 -4
  3. package/js/Private/AgoraBase.js +367 -326
  4. package/js/Private/AgoraMediaBase.js +265 -76
  5. package/js/Private/AgoraMediaPlayerTypes.js +12 -30
  6. package/js/Private/IAgoraH265Transcoder.js +2 -5
  7. package/js/Private/IAgoraLog.js +2 -5
  8. package/js/Private/IAgoraMediaEngine.js +2 -5
  9. package/js/Private/IAgoraMediaPlayer.js +4 -10
  10. package/js/Private/IAgoraMediaRecorder.js +2 -5
  11. package/js/Private/IAgoraMediaStreamingSource.js +2 -5
  12. package/js/Private/IAgoraMusicContentCenter.js +21 -68
  13. package/js/Private/IAgoraRhythmPlayer.js +2 -5
  14. package/js/Private/IAgoraRtcEngine.js +76 -130
  15. package/js/Private/IAgoraRtcEngineEx.js +5 -28
  16. package/js/Private/IAgoraSpatialAudio.js +6 -15
  17. package/js/Private/IAudioDeviceManager.js +2 -5
  18. package/js/Private/impl/AgoraMediaBaseImpl.js +11 -14
  19. package/js/Private/impl/IAgoraH265TranscoderImpl.js +43 -46
  20. package/js/Private/impl/IAgoraMediaEngineImpl.js +155 -172
  21. package/js/Private/impl/IAgoraMediaPlayerImpl.js +534 -546
  22. package/js/Private/impl/IAgoraMediaRecorderImpl.js +26 -29
  23. package/js/Private/impl/IAgoraMusicContentCenterImpl.js +218 -251
  24. package/js/Private/impl/IAgoraRtcEngineExImpl.js +434 -436
  25. package/js/Private/impl/IAgoraRtcEngineImpl.js +2445 -2423
  26. package/js/Private/impl/IAgoraSpatialAudioImpl.js +167 -170
  27. package/js/Private/impl/IAudioDeviceManagerImpl.js +232 -235
  28. package/js/Private/internal/AgoraH265TranscoderInternal.js +33 -57
  29. package/js/Private/internal/AgoraMediaBaseInternal.js +9 -28
  30. package/js/Private/internal/AudioDeviceManagerInternal.js +24 -44
  31. package/js/Private/internal/IrisApiEngine.js +94 -145
  32. package/js/Private/internal/LocalSpatialAudioEngineInternal.js +3 -23
  33. package/js/Private/internal/MediaEngineInternal.js +69 -94
  34. package/js/Private/internal/MediaPlayerInternal.js +105 -125
  35. package/js/Private/internal/MediaRecorderInternal.js +37 -64
  36. package/js/Private/internal/MusicContentCenterInternal.js +92 -129
  37. package/js/Private/internal/RtcEngineExInternal.js +213 -243
  38. package/js/Private/ti/AgoraBase-ti.js +2 -2
  39. package/js/Private/ti/AgoraMediaBase-ti.js +2 -2
  40. package/js/Private/ti/AgoraMediaPlayerTypes-ti.js +1 -1
  41. package/js/Private/ti/IAgoraH265Transcoder-ti.js +2 -2
  42. package/js/Private/ti/IAgoraLog-ti.js +1 -1
  43. package/js/Private/ti/IAgoraMediaEngine-ti.js +1 -1
  44. package/js/Private/ti/IAgoraMediaPlayer-ti.js +2 -2
  45. package/js/Private/ti/IAgoraMediaPlayerSource-ti.js +2 -2
  46. package/js/Private/ti/IAgoraMediaRecorder-ti.js +1 -1
  47. package/js/Private/ti/IAgoraMediaStreamingSource-ti.js +1 -1
  48. package/js/Private/ti/IAgoraMusicContentCenter-ti.js +2 -2
  49. package/js/Private/ti/IAgoraRhythmPlayer-ti.js +1 -1
  50. package/js/Private/ti/IAgoraRtcEngine-ti.js +7 -7
  51. package/js/Private/ti/IAgoraRtcEngineEx-ti.js +1 -1
  52. package/js/Private/ti/IAgoraSpatialAudio-ti.js +1 -1
  53. package/js/Private/ti/IAudioDeviceManager-ti.js +1 -1
  54. package/js/Renderer/AgoraView.js +100 -145
  55. package/js/Renderer/IRenderer.js +43 -53
  56. package/js/Renderer/IRendererManager.js +106 -132
  57. package/js/Renderer/RendererCache.js +63 -96
  58. package/js/Renderer/RendererManager.js +35 -69
  59. package/js/Renderer/WebGLRenderer/index.js +77 -106
  60. package/js/Renderer/YUVCanvasRenderer/index.js +18 -40
  61. package/js/Utils.js +45 -64
  62. package/package.json +9 -7
  63. package/scripts/checkElectron.js +41 -0
  64. package/scripts/downloadPrebuild.js +56 -24
  65. package/scripts/synclib.js +6 -6
  66. package/ts/Private/AgoraBase.ts +269 -4
  67. package/ts/Private/AgoraMediaBase.ts +343 -1
  68. package/ts/Private/IAgoraMediaEngine.ts +3 -3
  69. package/ts/Private/IAgoraRtcEngine.ts +130 -119
  70. package/ts/Private/IAgoraRtcEngineEx.ts +14 -9
  71. package/ts/Private/impl/IAgoraRtcEngineExImpl.ts +30 -0
  72. package/ts/Private/impl/IAgoraRtcEngineImpl.ts +181 -61
  73. package/ts/Private/internal/IrisApiEngine.ts +3 -7
  74. package/ts/Private/internal/MediaEngineInternal.ts +0 -1
  75. package/ts/Private/internal/RtcEngineExInternal.ts +8 -4
  76. package/ts/Private/ti/IAgoraRtcEngine-ti.ts +5 -5
  77. package/ts/Renderer/IRenderer.ts +1 -2
  78. package/ts/Renderer/IRendererManager.ts +21 -12
  79. package/ts/Utils.ts +15 -0
  80. package/types/Private/AgoraBase.d.ts +264 -8
  81. package/types/Private/AgoraBase.d.ts.map +1 -1
  82. package/types/Private/AgoraMediaBase.d.ts +336 -1
  83. package/types/Private/AgoraMediaBase.d.ts.map +1 -1
  84. package/types/Private/IAgoraMediaEngine.d.ts +3 -3
  85. package/types/Private/IAgoraRtcEngine.d.ts +106 -116
  86. package/types/Private/IAgoraRtcEngine.d.ts.map +1 -1
  87. package/types/Private/IAgoraRtcEngineEx.d.ts +10 -10
  88. package/types/Private/IAgoraRtcEngineEx.d.ts.map +1 -1
  89. package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts +3 -1
  90. package/types/Private/impl/IAgoraRtcEngineExImpl.d.ts.map +1 -1
  91. package/types/Private/impl/IAgoraRtcEngineImpl.d.ts +13 -5
  92. package/types/Private/impl/IAgoraRtcEngineImpl.d.ts.map +1 -1
  93. package/types/Private/internal/IrisApiEngine.d.ts.map +1 -1
  94. package/types/Private/internal/MediaEngineInternal.d.ts.map +1 -1
  95. package/types/Private/internal/RtcEngineExInternal.d.ts +1 -0
  96. package/types/Private/internal/RtcEngineExInternal.d.ts.map +1 -1
  97. package/types/Renderer/IRenderer.d.ts.map +1 -1
  98. package/types/Renderer/IRendererManager.d.ts.map +1 -1
  99. package/types/Utils.d.ts +4 -0
  100. package/types/Utils.d.ts.map +1 -1
@@ -1,15 +1,13 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RendererCache = exports.generateRendererCacheKey = void 0;
4
- var Utils_1 = require("../Utils");
5
- function generateRendererCacheKey(_a) {
6
- var channelId = _a.channelId, uid = _a.uid, sourceType = _a.sourceType;
7
- return "".concat(channelId, "_").concat(uid, "_").concat(sourceType);
4
+ const Utils_1 = require("../Utils");
5
+ function generateRendererCacheKey({ channelId, uid, sourceType, }) {
6
+ return `${channelId}_${uid}_${sourceType}`;
8
7
  }
9
8
  exports.generateRendererCacheKey = generateRendererCacheKey;
10
- var RendererCache = /** @class */ (function () {
11
- function RendererCache(_a) {
12
- var channelId = _a.channelId, uid = _a.uid, sourceType = _a.sourceType;
9
+ class RendererCache {
10
+ constructor({ channelId, uid, sourceType }) {
13
11
  this._renderers = [];
14
12
  this._videoFrame = {
15
13
  yBuffer: Buffer.alloc(0),
@@ -22,97 +20,68 @@ var RendererCache = /** @class */ (function () {
22
20
  vStride: 0,
23
21
  rotation: 0,
24
22
  };
25
- this._context = { channelId: channelId, uid: uid, sourceType: sourceType };
23
+ this._context = { channelId, uid, sourceType };
26
24
  this._enabled = false;
27
25
  }
28
- Object.defineProperty(RendererCache.prototype, "key", {
29
- get: function () {
30
- return generateRendererCacheKey(this._context);
31
- },
32
- enumerable: false,
33
- configurable: true
34
- });
35
- Object.defineProperty(RendererCache.prototype, "renderers", {
36
- get: function () {
37
- return this._renderers;
38
- },
39
- enumerable: false,
40
- configurable: true
41
- });
42
- Object.defineProperty(RendererCache.prototype, "videoFrame", {
43
- get: function () {
44
- return this._videoFrame;
45
- },
46
- enumerable: false,
47
- configurable: true
48
- });
49
- Object.defineProperty(RendererCache.prototype, "context", {
50
- get: function () {
51
- return this._context;
52
- },
53
- enumerable: false,
54
- configurable: true
55
- });
56
- Object.defineProperty(RendererCache.prototype, "renders", {
57
- /**
58
- * @deprecated Use renderers instead
59
- */
60
- get: function () {
61
- return this.renderers;
62
- },
63
- enumerable: false,
64
- configurable: true
65
- });
66
- Object.defineProperty(RendererCache.prototype, "shareVideoFrame", {
67
- /**
68
- * @deprecated Use videoFrame instead
69
- */
70
- get: function () {
71
- return this.videoFrame;
72
- },
73
- enumerable: false,
74
- configurable: true
75
- });
76
- Object.defineProperty(RendererCache.prototype, "bridge", {
77
- get: function () {
78
- return Utils_1.AgoraEnv.AgoraElectronBridge;
79
- },
80
- enumerable: false,
81
- configurable: true
82
- });
83
- RendererCache.prototype.enable = function () {
26
+ get key() {
27
+ return generateRendererCacheKey(this._context);
28
+ }
29
+ get renderers() {
30
+ return this._renderers;
31
+ }
32
+ get videoFrame() {
33
+ return this._videoFrame;
34
+ }
35
+ get context() {
36
+ return this._context;
37
+ }
38
+ /**
39
+ * @deprecated Use renderers instead
40
+ */
41
+ get renders() {
42
+ return this.renderers;
43
+ }
44
+ /**
45
+ * @deprecated Use videoFrame instead
46
+ */
47
+ get shareVideoFrame() {
48
+ return this.videoFrame;
49
+ }
50
+ get bridge() {
51
+ return Utils_1.AgoraEnv.AgoraElectronBridge;
52
+ }
53
+ enable() {
84
54
  if (this._enabled)
85
55
  return;
86
56
  this.bridge.EnableVideoFrameCache(this._context);
87
57
  this._enabled = true;
88
- };
89
- RendererCache.prototype.disable = function () {
58
+ }
59
+ disable() {
90
60
  if (!this._enabled)
91
61
  return;
92
62
  this.bridge.DisableVideoFrameCache(this._context);
93
63
  this._enabled = false;
94
- };
95
- RendererCache.prototype.shouldEnable = function () {
64
+ }
65
+ shouldEnable() {
96
66
  if (this.renderers.length > 0) {
97
67
  this.enable();
98
68
  }
99
69
  else {
100
70
  this.disable();
101
71
  }
102
- };
103
- RendererCache.prototype.draw = function () {
104
- var _this = this;
105
- var _a = this.bridge.GetVideoFrame(this.context, this.videoFrame), ret = _a.ret, isNewFrame = _a.isNewFrame;
72
+ }
73
+ draw() {
74
+ let { ret, isNewFrame } = this.bridge.GetVideoFrame(this.context, this.videoFrame);
106
75
  switch (ret) {
107
76
  case 0: // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::OK = 0
108
77
  //
109
78
  break;
110
79
  case 1: // GET_VIDEO_FRAME_CACHE_RETURN_TYPE::RESIZED = 1
111
- var _b = this.videoFrame, yStride = _b.yStride, uStride = _b.uStride, vStride = _b.vStride, height = _b.height;
80
+ const { yStride, uStride, vStride, height } = this.videoFrame;
112
81
  this.videoFrame.yBuffer = Buffer.alloc(yStride * height);
113
82
  this.videoFrame.uBuffer = Buffer.alloc(uStride * height);
114
83
  this.videoFrame.vBuffer = Buffer.alloc(vStride * height);
115
- var result = this.bridge.GetVideoFrame(this.context, this.videoFrame);
84
+ const result = this.bridge.GetVideoFrame(this.context, this.videoFrame);
116
85
  ret = result.ret;
117
86
  isNewFrame = result.isNewFrame;
118
87
  break;
@@ -121,50 +90,48 @@ var RendererCache = /** @class */ (function () {
121
90
  return;
122
91
  }
123
92
  if (isNewFrame) {
124
- this.renderers.forEach(function (renderer) {
125
- renderer.drawFrame(_this.videoFrame);
93
+ this.renderers.forEach((renderer) => {
94
+ renderer.drawFrame(this.videoFrame);
126
95
  });
127
96
  }
128
- };
129
- RendererCache.prototype.findRenderer = function (view) {
130
- return this._renderers.find(function (renderer) { return renderer.parentElement === view; });
131
- };
132
- RendererCache.prototype.addRenderer = function (renderer) {
97
+ }
98
+ findRenderer(view) {
99
+ return this._renderers.find((renderer) => renderer.parentElement === view);
100
+ }
101
+ addRenderer(renderer) {
133
102
  this._renderers.push(renderer);
134
103
  this.shouldEnable();
135
- };
104
+ }
136
105
  /**
137
106
  * Remove the specified renderer if it is specified, otherwise remove all renderers
138
107
  */
139
- RendererCache.prototype.removeRenderer = function (renderer) {
140
- var start = 0;
141
- var deleteCount = this._renderers.length;
108
+ removeRenderer(renderer) {
109
+ let start = 0;
110
+ let deleteCount = this._renderers.length;
142
111
  if (renderer) {
143
112
  start = this._renderers.indexOf(renderer);
144
113
  if (start < 0)
145
114
  return;
146
115
  deleteCount = 1;
147
116
  }
148
- this._renderers.splice(start, deleteCount).forEach(function (it) { return it.unbind(); });
117
+ this._renderers.splice(start, deleteCount).forEach((it) => it.unbind());
149
118
  this.shouldEnable();
150
- };
151
- RendererCache.prototype.setRendererContext = function (_a) {
152
- var view = _a.view, renderMode = _a.renderMode, mirrorMode = _a.mirrorMode;
119
+ }
120
+ setRendererContext({ view, renderMode, mirrorMode, }) {
153
121
  if (view) {
154
- var renderer = this.findRenderer(view);
122
+ const renderer = this.findRenderer(view);
155
123
  if (renderer) {
156
- renderer.context = { renderMode: renderMode, mirrorMode: mirrorMode };
124
+ renderer.context = { renderMode, mirrorMode };
157
125
  return true;
158
126
  }
159
127
  return false;
160
128
  }
161
129
  else {
162
- this._renderers.forEach(function (it) {
163
- it.context = { renderMode: renderMode, mirrorMode: mirrorMode };
130
+ this._renderers.forEach((it) => {
131
+ it.context = { renderMode, mirrorMode };
164
132
  });
165
133
  return this._renderers.length > 0;
166
134
  }
167
- };
168
- return RendererCache;
169
- }());
135
+ }
136
+ }
170
137
  exports.RendererCache = RendererCache;
@@ -1,84 +1,52 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
- var __assign = (this && this.__assign) || function () {
18
- __assign = Object.assign || function(t) {
19
- for (var s, i = 1, n = arguments.length; i < n; i++) {
20
- s = arguments[i];
21
- for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
22
- t[p] = s[p];
23
- }
24
- return t;
25
- };
26
- return __assign.apply(this, arguments);
27
- };
28
2
  Object.defineProperty(exports, "__esModule", { value: true });
29
3
  exports.RendererManager = void 0;
30
- var Types_1 = require("../Types");
31
- var Utils_1 = require("../Utils");
32
- var IRendererManager_1 = require("./IRendererManager");
33
- var WebGLRenderer_1 = require("./WebGLRenderer");
34
- var YUVCanvasRenderer_1 = require("./YUVCanvasRenderer");
4
+ const Types_1 = require("../Types");
5
+ const Utils_1 = require("../Utils");
6
+ const IRendererManager_1 = require("./IRendererManager");
7
+ const WebGLRenderer_1 = require("./WebGLRenderer");
8
+ const YUVCanvasRenderer_1 = require("./YUVCanvasRenderer");
35
9
  /**
36
10
  * @ignore
37
11
  */
38
- var RendererManager = /** @class */ (function (_super) {
39
- __extends(RendererManager, _super);
40
- function RendererManager() {
41
- var _this = _super.call(this) || this;
42
- _this._rendererType = (0, Utils_1.isSupportWebGL)()
12
+ class RendererManager extends IRendererManager_1.IRendererManager {
13
+ set rendererType(rendererType) {
14
+ if (this._rendererType !== rendererType) {
15
+ this._rendererType = rendererType;
16
+ }
17
+ }
18
+ get rendererType() {
19
+ return this._rendererType;
20
+ }
21
+ constructor() {
22
+ super();
23
+ this._rendererType = (0, Utils_1.isSupportWebGL)()
43
24
  ? Types_1.RendererType.WEBGL
44
25
  : Types_1.RendererType.SOFTWARE;
45
- return _this;
46
26
  }
47
- Object.defineProperty(RendererManager.prototype, "rendererType", {
48
- get: function () {
49
- return this._rendererType;
50
- },
51
- set: function (rendererType) {
52
- if (this._rendererType !== rendererType) {
53
- this._rendererType = rendererType;
54
- }
55
- },
56
- enumerable: false,
57
- configurable: true
58
- });
59
27
  /**
60
28
  * @deprecated Use rendererType instead
61
29
  */
62
- RendererManager.prototype.setRenderMode = function (mode) {
30
+ setRenderMode(mode) {
63
31
  this.rendererType = mode;
64
- };
32
+ }
65
33
  /**
66
34
  * @deprecated Use renderingFps instead
67
35
  */
68
- RendererManager.prototype.setFPS = function (fps) {
36
+ setFPS(fps) {
69
37
  this.renderingFps = fps;
70
- };
38
+ }
71
39
  /**
72
40
  * @deprecated Use getRendererCache instead
73
41
  */
74
- RendererManager.prototype.getRender = function (context) {
42
+ getRender(context) {
75
43
  return this.getRendererCache(context);
76
- };
77
- RendererManager.prototype.createRenderer = function (context, rendererType) {
44
+ }
45
+ createRenderer(context, rendererType) {
78
46
  if (rendererType === undefined) {
79
47
  rendererType = this.rendererType;
80
48
  }
81
- var renderer;
49
+ let renderer;
82
50
  switch (rendererType) {
83
51
  case Types_1.RendererType.WEBGL:
84
52
  renderer = new WebGLRenderer_1.WebGLRenderer(this.handleWebGLFallback(context).bind(this));
@@ -95,20 +63,18 @@ var RendererManager = /** @class */ (function (_super) {
95
63
  mirrorMode: context.mirrorMode,
96
64
  };
97
65
  return renderer;
98
- };
99
- RendererManager.prototype.doRendering = function (rendererCache) {
66
+ }
67
+ doRendering(rendererCache) {
100
68
  rendererCache.draw();
101
- };
102
- RendererManager.prototype.handleWebGLFallback = function (context) {
103
- var _this = this;
104
- return function (renderer) {
105
- var _a = renderer.context, renderMode = _a.renderMode, mirrorMode = _a.mirrorMode;
106
- var renderers = _this.getRenderers(context);
69
+ }
70
+ handleWebGLFallback(context) {
71
+ return (renderer) => {
72
+ const { context: { renderMode, mirrorMode }, } = renderer;
73
+ const renderers = this.getRenderers(context);
107
74
  renderer.unbind();
108
- var newRenderer = _this.createRenderer(__assign(__assign({}, context), { renderMode: renderMode, mirrorMode: mirrorMode }), Types_1.RendererType.SOFTWARE);
75
+ const newRenderer = this.createRenderer({ ...context, renderMode, mirrorMode }, Types_1.RendererType.SOFTWARE);
109
76
  renderers.splice(renderers.indexOf(renderer), 1, newRenderer);
110
77
  };
111
- };
112
- return RendererManager;
113
- }(IRendererManager_1.IRendererManager));
78
+ }
79
+ }
114
80
  exports.RendererManager = RendererManager;
@@ -1,25 +1,10 @@
1
1
  "use strict";
2
- var __extends = (this && this.__extends) || (function () {
3
- var extendStatics = function (d, b) {
4
- extendStatics = Object.setPrototypeOf ||
5
- ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
6
- function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
7
- return extendStatics(d, b);
8
- };
9
- return function (d, b) {
10
- if (typeof b !== "function" && b !== null)
11
- throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
12
- extendStatics(d, b);
13
- function __() { this.constructor = d; }
14
- d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
15
- };
16
- })();
17
2
  Object.defineProperty(exports, "__esModule", { value: true });
18
3
  exports.WebGLRenderer = void 0;
19
- var Utils_1 = require("../../Utils");
20
- var IRenderer_1 = require("../IRenderer");
21
- var createProgramFromSources = require('./webgl-utils').createProgramFromSources;
22
- var vertexShaderSource = 'attribute vec2 a_position;' +
4
+ const Utils_1 = require("../../Utils");
5
+ const IRenderer_1 = require("../IRenderer");
6
+ const createProgramFromSources = require('./webgl-utils').createProgramFromSources;
7
+ const vertexShaderSource = 'attribute vec2 a_position;' +
23
8
  'attribute vec2 a_texCoord;' +
24
9
  'uniform vec2 u_resolution;' +
25
10
  'varying vec2 v_texCoord;' +
@@ -30,7 +15,7 @@ var vertexShaderSource = 'attribute vec2 a_position;' +
30
15
  ' gl_Position = vec4(clipSpace * vec2(1, -1), 0, 1);' +
31
16
  'v_texCoord = a_texCoord;' +
32
17
  '}';
33
- var yuvShaderSource = 'precision mediump float;' +
18
+ const yuvShaderSource = 'precision mediump float;' +
34
19
  'uniform sampler2D Ytex;' +
35
20
  'uniform sampler2D Utex;' +
36
21
  'uniform sampler2D Vtex;' +
@@ -51,50 +36,42 @@ var yuvShaderSource = 'precision mediump float;' +
51
36
  ' b=y+2.017*u;' +
52
37
  ' gl_FragColor=vec4(r,g,b,1.0);' +
53
38
  '}';
54
- var WebGLRenderer = /** @class */ (function (_super) {
55
- __extends(WebGLRenderer, _super);
56
- function WebGLRenderer(fallback) {
57
- var _this = _super.call(this) || this;
58
- _this.handleContextLost = function (event) {
59
- var _a;
39
+ class WebGLRenderer extends IRenderer_1.IRenderer {
40
+ constructor(fallback) {
41
+ super();
42
+ this.handleContextLost = (event) => {
60
43
  event.preventDefault();
61
44
  (0, Utils_1.logWarn)('webglcontextlost', event);
62
- _this.releaseTextures();
63
- (_a = _this.fallback) === null || _a === void 0 ? void 0 : _a.call(null, _this, new Error('Browser not support! No WebGL detected.'));
45
+ this.releaseTextures();
46
+ this.fallback?.call(null, this, new Error('Browser not support! No WebGL detected.'));
64
47
  };
65
- _this.handleContextRestored = function (event) {
66
- var _a;
48
+ this.handleContextRestored = (event) => {
67
49
  event.preventDefault();
68
50
  (0, Utils_1.logWarn)('webglcontextrestored', event);
69
51
  // Setup GLSL program
70
- _this.program = createProgramFromSources(_this.gl, [
52
+ this.program = createProgramFromSources(this.gl, [
71
53
  vertexShaderSource,
72
54
  yuvShaderSource,
73
55
  ]);
74
- (_a = _this.gl) === null || _a === void 0 ? void 0 : _a.useProgram(_this.program);
75
- _this.initTextures();
56
+ this.gl?.useProgram(this.program);
57
+ this.initTextures();
76
58
  };
77
- _this.gl = undefined;
78
- _this.yTexture = null;
79
- _this.uTexture = null;
80
- _this.vTexture = null;
81
- _this.texCoordBuffer = null;
82
- _this.surfaceBuffer = null;
83
- _this.fallback = fallback;
84
- return _this;
59
+ this.gl = undefined;
60
+ this.yTexture = null;
61
+ this.uTexture = null;
62
+ this.vTexture = null;
63
+ this.texCoordBuffer = null;
64
+ this.surfaceBuffer = null;
65
+ this.fallback = fallback;
85
66
  }
86
- WebGLRenderer.prototype.bind = function (view) {
87
- var _this = this;
88
- var _a, _b, _c, _d;
89
- _super.prototype.bind.call(this, view);
90
- (_a = this.canvas) === null || _a === void 0 ? void 0 : _a.addEventListener('webglcontextlost', this.handleContextLost, false);
91
- (_b = this.canvas) === null || _b === void 0 ? void 0 : _b.addEventListener('webglcontextrestored', this.handleContextRestored, false);
92
- var getContext = function (contextNames) {
93
- var _a;
94
- if (contextNames === void 0) { contextNames = ['webgl2', 'webgl', 'experimental-webgl']; }
95
- for (var i = 0; i < contextNames.length; i++) {
96
- var contextName = contextNames[i];
97
- var context = (_a = _this.canvas) === null || _a === void 0 ? void 0 : _a.getContext(contextName, {
67
+ bind(view) {
68
+ super.bind(view);
69
+ this.canvas?.addEventListener('webglcontextlost', this.handleContextLost, false);
70
+ this.canvas?.addEventListener('webglcontextrestored', this.handleContextRestored, false);
71
+ const getContext = (contextNames = ['webgl2', 'webgl', 'experimental-webgl']) => {
72
+ for (let i = 0; i < contextNames.length; i++) {
73
+ const contextName = contextNames[i];
74
+ const context = this.canvas?.getContext(contextName, {
98
75
  depth: true,
99
76
  stencil: true,
100
77
  alpha: false,
@@ -110,9 +87,9 @@ var WebGLRenderer = /** @class */ (function (_super) {
110
87
  }
111
88
  return null;
112
89
  };
113
- (_c = this.gl) !== null && _c !== void 0 ? _c : (this.gl = getContext());
90
+ this.gl ?? (this.gl = getContext());
114
91
  if (!this.gl) {
115
- (_d = this.fallback) === null || _d === void 0 ? void 0 : _d.call(null, this, new Error('Browser not support! No WebGL detected.'));
92
+ this.fallback?.call(null, this, new Error('Browser not support! No WebGL detected.'));
116
93
  return;
117
94
  }
118
95
  // Set clear color to black, fully opaque
@@ -132,25 +109,23 @@ var WebGLRenderer = /** @class */ (function (_super) {
132
109
  ]);
133
110
  this.gl.useProgram(this.program);
134
111
  this.initTextures();
135
- };
136
- WebGLRenderer.prototype.unbind = function () {
137
- var _a, _b;
138
- (_a = this.canvas) === null || _a === void 0 ? void 0 : _a.removeEventListener('webglcontextlost', this.handleContextLost, false);
139
- (_b = this.canvas) === null || _b === void 0 ? void 0 : _b.removeEventListener('webglcontextrestored', this.handleContextRestored, false);
112
+ }
113
+ unbind() {
114
+ this.canvas?.removeEventListener('webglcontextlost', this.handleContextLost, false);
115
+ this.canvas?.removeEventListener('webglcontextrestored', this.handleContextRestored, false);
140
116
  this.releaseTextures();
141
117
  this.gl = undefined;
142
- _super.prototype.unbind.call(this);
143
- };
144
- WebGLRenderer.prototype.drawFrame = function (_a) {
145
- var width = _a.width, height = _a.height, yStride = _a.yStride, uStride = _a.uStride, vStride = _a.vStride, yBuffer = _a.yBuffer, uBuffer = _a.uBuffer, vBuffer = _a.vBuffer, rotation = _a.rotation;
146
- this.rotateCanvas({ width: width, height: height, rotation: rotation });
118
+ super.unbind();
119
+ }
120
+ drawFrame({ width, height, yStride, uStride, vStride, yBuffer, uBuffer, vBuffer, rotation, }) {
121
+ this.rotateCanvas({ width, height, rotation });
147
122
  this.updateRenderMode();
148
123
  if (!this.gl || !this.program)
149
124
  return;
150
- var left = 0, top = 0, right = yStride - width, bottom = 0;
125
+ const left = 0, top = 0, right = yStride - width, bottom = 0;
151
126
  this.gl.bindBuffer(this.gl.ARRAY_BUFFER, this.texCoordBuffer);
152
- var xWidth = width + left + right;
153
- var xHeight = height + top + bottom;
127
+ const xWidth = width + left + right;
128
+ const xHeight = height + top + bottom;
154
129
  this.gl.bufferData(this.gl.ARRAY_BUFFER, new Float32Array([
155
130
  left / xWidth,
156
131
  bottom / xHeight,
@@ -180,11 +155,10 @@ var WebGLRenderer = /** @class */ (function (_super) {
180
155
  this.gl.bindTexture(this.gl.TEXTURE_2D, this.vTexture);
181
156
  this.gl.texImage2D(this.gl.TEXTURE_2D, 0, this.gl.LUMINANCE, vStride, height / 2, 0, this.gl.LUMINANCE, this.gl.UNSIGNED_BYTE, vBuffer);
182
157
  this.gl.drawArrays(this.gl.TRIANGLES, 0, 6);
183
- _super.prototype.drawFrame.call(this);
184
- };
185
- WebGLRenderer.prototype.rotateCanvas = function (_a) {
186
- var width = _a.width, height = _a.height, rotation = _a.rotation;
187
- _super.prototype.rotateCanvas.call(this, { width: width, height: height, rotation: rotation });
158
+ super.drawFrame();
159
+ }
160
+ rotateCanvas({ width, height, rotation }) {
161
+ super.rotateCanvas({ width, height, rotation });
188
162
  if (!this.gl)
189
163
  return;
190
164
  this.gl.viewport(0, 0, width, height);
@@ -196,11 +170,11 @@ var WebGLRenderer = /** @class */ (function (_super) {
196
170
  // 90: 2,3,1/1,3,4
197
171
  // 180: 3,4,2/2,4,1
198
172
  // 270: 4,1,3/3,1,2
199
- var p1 = { x: 0, y: 0 };
200
- var p2 = { x: width, y: 0 };
201
- var p3 = { x: width, y: height };
202
- var p4 = { x: 0, y: height };
203
- var pp1 = p1, pp2 = p2, pp3 = p3, pp4 = p4;
173
+ const p1 = { x: 0, y: 0 };
174
+ const p2 = { x: width, y: 0 };
175
+ const p3 = { x: width, y: height };
176
+ const p4 = { x: 0, y: height };
177
+ let pp1 = p1, pp2 = p2, pp3 = p3, pp4 = p4;
204
178
  switch (rotation) {
205
179
  case 0:
206
180
  break;
@@ -238,58 +212,55 @@ var WebGLRenderer = /** @class */ (function (_super) {
238
212
  pp3.x,
239
213
  pp3.y,
240
214
  ]), this.gl.STATIC_DRAW);
241
- var resolutionLocation = this.gl.getUniformLocation(this.program, 'u_resolution');
215
+ const resolutionLocation = this.gl.getUniformLocation(this.program, 'u_resolution');
242
216
  this.gl.uniform2f(resolutionLocation, width, height);
243
- };
244
- WebGLRenderer.prototype.initTextures = function () {
245
- var _this = this;
217
+ }
218
+ initTextures() {
246
219
  if (!this.gl)
247
220
  return;
248
221
  this.positionLocation = this.gl.getAttribLocation(this.program, 'a_position');
249
222
  this.texCoordLocation = this.gl.getAttribLocation(this.program, 'a_texCoord');
250
223
  this.surfaceBuffer = this.gl.createBuffer();
251
224
  this.texCoordBuffer = this.gl.createBuffer();
252
- var createTexture = function (textureIndex) {
253
- if (!_this.gl)
225
+ const createTexture = (textureIndex) => {
226
+ if (!this.gl)
254
227
  return null;
255
228
  // Create a texture.
256
- _this.gl.activeTexture(textureIndex);
257
- var texture = _this.gl.createTexture();
258
- _this.gl.bindTexture(_this.gl.TEXTURE_2D, texture);
229
+ this.gl.activeTexture(textureIndex);
230
+ const texture = this.gl.createTexture();
231
+ this.gl.bindTexture(this.gl.TEXTURE_2D, texture);
259
232
  // Set the parameters so we can render any size
260
- _this.gl.texParameteri(_this.gl.TEXTURE_2D, _this.gl.TEXTURE_WRAP_S, _this.gl.CLAMP_TO_EDGE);
261
- _this.gl.texParameteri(_this.gl.TEXTURE_2D, _this.gl.TEXTURE_WRAP_T, _this.gl.CLAMP_TO_EDGE);
262
- _this.gl.texParameteri(_this.gl.TEXTURE_2D, _this.gl.TEXTURE_MIN_FILTER, _this.gl.NEAREST);
263
- _this.gl.texParameteri(_this.gl.TEXTURE_2D, _this.gl.TEXTURE_MAG_FILTER, _this.gl.NEAREST);
233
+ this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_S, this.gl.CLAMP_TO_EDGE);
234
+ this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_WRAP_T, this.gl.CLAMP_TO_EDGE);
235
+ this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MIN_FILTER, this.gl.NEAREST);
236
+ this.gl.texParameteri(this.gl.TEXTURE_2D, this.gl.TEXTURE_MAG_FILTER, this.gl.NEAREST);
264
237
  return texture;
265
238
  };
266
239
  this.yTexture = createTexture(this.gl.TEXTURE0);
267
240
  this.uTexture = createTexture(this.gl.TEXTURE1);
268
241
  this.vTexture = createTexture(this.gl.TEXTURE2);
269
- var y = this.gl.getUniformLocation(this.program, 'Ytex');
242
+ const y = this.gl.getUniformLocation(this.program, 'Ytex');
270
243
  this.gl.uniform1i(y, 0); /* Bind Ytex to texture unit 0 */
271
- var u = this.gl.getUniformLocation(this.program, 'Utex');
244
+ const u = this.gl.getUniformLocation(this.program, 'Utex');
272
245
  this.gl.uniform1i(u, 1); /* Bind Utex to texture unit 1 */
273
- var v = this.gl.getUniformLocation(this.program, 'Vtex');
246
+ const v = this.gl.getUniformLocation(this.program, 'Vtex');
274
247
  this.gl.uniform1i(v, 2); /* Bind Vtex to texture unit 2 */
275
- };
276
- WebGLRenderer.prototype.releaseTextures = function () {
277
- var _a, _b, _c, _d, _e, _f;
278
- (_a = this.gl) === null || _a === void 0 ? void 0 : _a.deleteProgram(this.program);
248
+ }
249
+ releaseTextures() {
250
+ this.gl?.deleteProgram(this.program);
279
251
  this.program = undefined;
280
252
  this.positionLocation = undefined;
281
253
  this.texCoordLocation = undefined;
282
- (_b = this.gl) === null || _b === void 0 ? void 0 : _b.deleteTexture(this.yTexture);
283
- (_c = this.gl) === null || _c === void 0 ? void 0 : _c.deleteTexture(this.uTexture);
284
- (_d = this.gl) === null || _d === void 0 ? void 0 : _d.deleteTexture(this.vTexture);
254
+ this.gl?.deleteTexture(this.yTexture);
255
+ this.gl?.deleteTexture(this.uTexture);
256
+ this.gl?.deleteTexture(this.vTexture);
285
257
  this.yTexture = null;
286
258
  this.uTexture = null;
287
259
  this.vTexture = null;
288
- (_e = this.gl) === null || _e === void 0 ? void 0 : _e.deleteBuffer(this.texCoordBuffer);
289
- (_f = this.gl) === null || _f === void 0 ? void 0 : _f.deleteBuffer(this.surfaceBuffer);
260
+ this.gl?.deleteBuffer(this.texCoordBuffer);
261
+ this.gl?.deleteBuffer(this.surfaceBuffer);
290
262
  this.texCoordBuffer = null;
291
263
  this.surfaceBuffer = null;
292
- };
293
- return WebGLRenderer;
294
- }(IRenderer_1.IRenderer));
264
+ }
265
+ }
295
266
  exports.WebGLRenderer = WebGLRenderer;