From 170ee55bd1f0858fdbad3147a72c0f185d49a9a6 Mon Sep 17 00:00:00 2001
From: zhangzengfei <zhangzengfei@smartai.com>
Date: 星期四, 10 三月 2022 11:02:01 +0800
Subject: [PATCH] cameraPlayer 添加h265b播放功能

---
 src/components/wasmPlayer/wasm/webgl.js |  114 +++++++++++++++++++-------------------------------------
 1 files changed, 39 insertions(+), 75 deletions(-)

diff --git a/src/components/wasmPlayer/wasm/webgl.js b/src/components/wasmPlayer/wasm/webgl.js
index 7d2c0cf..820a6c9 100644
--- a/src/components/wasmPlayer/wasm/webgl.js
+++ b/src/components/wasmPlayer/wasm/webgl.js
@@ -20,29 +20,18 @@
 Texture.prototype.fill = function(width, height, data) {
   var gl = this.gl
   gl.bindTexture(gl.TEXTURE_2D, this.texture)
-  gl.texImage2D(
-    gl.TEXTURE_2D,
-    0,
-    gl.LUMINANCE,
-    width,
-    height,
-    0,
-    gl.LUMINANCE,
-    gl.UNSIGNED_BYTE,
-    data
-  )
+  gl.texImage2D(gl.TEXTURE_2D, 0, gl.LUMINANCE, width, height, 0, gl.LUMINANCE, gl.UNSIGNED_BYTE, data)
 }
 
 export function WebGLPlayer(canvas) {
   this.canvas = canvas
-  this.gl =
-    canvas.getContext('webgl') || canvas.getContext('experimental-webgl')
+  this.gl = canvas.getContext("webgl") || canvas.getContext("experimental-webgl")
   this.initGL()
 }
 
 WebGLPlayer.prototype.initGL = function() {
   if (!this.gl) {
-    console.log('[ER] WebGL not supported.')
+    console.log("[ER] WebGL not supported.")
     return
   }
 
@@ -50,34 +39,34 @@
   gl.pixelStorei(gl.UNPACK_ALIGNMENT, 1)
   var program = gl.createProgram()
   var vertexShaderSource = [
-    'attribute highp vec4 aVertexPosition;',
-    'attribute vec2 aTextureCoord;',
-    'varying highp vec2 vTextureCoord;',
-    'void main(void) {',
-    ' gl_Position = aVertexPosition;',
-    ' vTextureCoord = aTextureCoord;',
-    '}',
-  ].join('\n')
+    "attribute highp vec4 aVertexPosition;",
+    "attribute vec2 aTextureCoord;",
+    "varying highp vec2 vTextureCoord;",
+    "void main(void) {",
+    " gl_Position = aVertexPosition;",
+    " vTextureCoord = aTextureCoord;",
+    "}"
+  ].join("\n")
   var vertexShader = gl.createShader(gl.VERTEX_SHADER)
   gl.shaderSource(vertexShader, vertexShaderSource)
   gl.compileShader(vertexShader)
   var fragmentShaderSource = [
-    'precision highp float;',
-    'varying lowp vec2 vTextureCoord;',
-    'uniform sampler2D YTexture;',
-    'uniform sampler2D UTexture;',
-    'uniform sampler2D VTexture;',
-    'const mat4 YUV2RGB = mat4',
-    '(',
-    ' 1.1643828125, 0, 1.59602734375, -.87078515625,',
-    ' 1.1643828125, -.39176171875, -.81296875, .52959375,',
-    ' 1.1643828125, 2.017234375, 0, -1.081390625,',
-    ' 0, 0, 0, 1',
-    ');',
-    'void main(void) {',
-    ' gl_FragColor = vec4( texture2D(YTexture, vTextureCoord).x, texture2D(UTexture, vTextureCoord).x, texture2D(VTexture, vTextureCoord).x, 1) * YUV2RGB;',
-    '}',
-  ].join('\n')
+    "precision highp float;",
+    "varying lowp vec2 vTextureCoord;",
+    "uniform sampler2D YTexture;",
+    "uniform sampler2D UTexture;",
+    "uniform sampler2D VTexture;",
+    "const mat4 YUV2RGB = mat4",
+    "(",
+    " 1.1643828125, 0, 1.59602734375, -.87078515625,",
+    " 1.1643828125, -.39176171875, -.81296875, .52959375,",
+    " 1.1643828125, 2.017234375, 0, -1.081390625,",
+    " 0, 0, 0, 1",
+    ");",
+    "void main(void) {",
+    " gl_FragColor = vec4( texture2D(YTexture, vTextureCoord).x, texture2D(UTexture, vTextureCoord).x, texture2D(VTexture, vTextureCoord).x, 1) * YUV2RGB;",
+    "}"
+  ].join("\n")
 
   var fragmentShader = gl.createShader(gl.FRAGMENT_SHADER)
   gl.shaderSource(fragmentShader, fragmentShaderSource)
@@ -87,54 +76,37 @@
   gl.linkProgram(program)
   gl.useProgram(program)
   if (!gl.getProgramParameter(program, gl.LINK_STATUS)) {
-    console.log('[ER] Shader link failed.')
+    console.log("[ER] Shader link failed.")
   }
-  var vertexPositionAttribute = gl.getAttribLocation(program, 'aVertexPosition')
+  var vertexPositionAttribute = gl.getAttribLocation(program, "aVertexPosition")
   gl.enableVertexAttribArray(vertexPositionAttribute)
-  var textureCoordAttribute = gl.getAttribLocation(program, 'aTextureCoord')
+  var textureCoordAttribute = gl.getAttribLocation(program, "aTextureCoord")
   gl.enableVertexAttribArray(textureCoordAttribute)
 
   var verticesBuffer = gl.createBuffer()
   gl.bindBuffer(gl.ARRAY_BUFFER, verticesBuffer)
   gl.bufferData(
     gl.ARRAY_BUFFER,
-    new Float32Array([
-      1.0,
-      1.0,
-      0.0,
-      -1.0,
-      1.0,
-      0.0,
-      1.0,
-      -1.0,
-      0.0,
-      -1.0,
-      -1.0,
-      0.0,
-    ]),
+    new Float32Array([1.0, 1.0, 0.0, -1.0, 1.0, 0.0, 1.0, -1.0, 0.0, -1.0, -1.0, 0.0]),
     gl.STATIC_DRAW
   )
   gl.vertexAttribPointer(vertexPositionAttribute, 3, gl.FLOAT, false, 0, 0)
   var texCoordBuffer = gl.createBuffer()
   gl.bindBuffer(gl.ARRAY_BUFFER, texCoordBuffer)
-  gl.bufferData(
-    gl.ARRAY_BUFFER,
-    new Float32Array([1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0]),
-    gl.STATIC_DRAW
-  )
+  gl.bufferData(gl.ARRAY_BUFFER, new Float32Array([1.0, 0.0, 0.0, 0.0, 1.0, 1.0, 0.0, 1.0]), gl.STATIC_DRAW)
   gl.vertexAttribPointer(textureCoordAttribute, 2, gl.FLOAT, false, 0, 0)
 
   gl.y = new Texture(gl)
   gl.u = new Texture(gl)
   gl.v = new Texture(gl)
-  gl.y.bind(0, program, 'YTexture')
-  gl.u.bind(1, program, 'UTexture')
-  gl.v.bind(2, program, 'VTexture')
+  gl.y.bind(0, program, "YTexture")
+  gl.u.bind(1, program, "UTexture")
+  gl.v.bind(2, program, "VTexture")
 }
 
 WebGLPlayer.prototype.renderFrame = function(videoFrame, width, height) {
   if (!this.gl) {
-    console.log('[ER] Render frame failed due to WebGL not supported.')
+    console.log("[ER] Render frame failed due to WebGL not supported.")
     return
   }
 
@@ -144,22 +116,14 @@
   gl.clear(gl.COLOR_BUFFER_BIT)
 
   gl.y.fill(width, height, videoFrame.subarray(0, width * height))
-  gl.u.fill(
-    width >> 1,
-    height >> 1,
-    videoFrame.subarray(width * height, (width * height * 5) / 4)
-  )
-  gl.v.fill(
-    width >> 1,
-    height >> 1,
-    videoFrame.subarray((width * height * 5) / 4, (width * height * 3) / 2)
-  )
+  gl.u.fill(width >> 1, height >> 1, videoFrame.subarray(width * height, (width * height * 5) / 4))
+  gl.v.fill(width >> 1, height >> 1, videoFrame.subarray((width * height * 5) / 4, (width * height * 3) / 2))
 
   gl.drawArrays(gl.TRIANGLE_STRIP, 0, 4)
 }
 
 WebGLPlayer.prototype.fullscreen = function() {
-  var canvas = this.canvas
+  let canvas = this.canvas.parentNode.parentNode.parentNode
   if (canvas.RequestFullScreen) {
     canvas.RequestFullScreen()
   } else if (canvas.webkitRequestFullScreen) {

--
Gitblit v1.8.0