| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023 |
- const userAgentKey = {
- Opera: 'Opera',
- Chrome: 'Chrome',
- Firefox: 'Firefox',
- Edge: 'Edge',
- Edg: 'Edg',
- IE: 'IE',
- Safari: 'Safari',
- }
- //Get platform type
- function getPlatformType() {
- const { platform } = navigator
- return platform
- }
- function getBrowserType() {
- const { userAgent } = navigator
- // Determine if it is an Edge browser
- if (userAgent.includes('Edge')) {
- return userAgentKey.Edge
- }
- // Determine if it is an Edge browser
- if (userAgent.includes('Edg')) {
- return userAgentKey.Edg
- }
- // Determine if it is a Firefox browser
- if (userAgent.includes('Firefox')) {
- return userAgentKey.Firefox
- }
- // Determine if it is a Chrome browser
- if (userAgent.includes('Chrome')) {
- return userAgentKey.Chrome
- }
- // Determine if it is a Safari browser
- if (userAgent.includes('Safari')) {
- return userAgentKey.Safari
- }
- // Determine if it is a ie browser
- if (
- userAgent.includes('compatible') &&
- userAgent.includes('MSIE') &&
- userAgent.includes('Opera')
- ) {
- return userAgentKey.IE
- }
- // Determine if it is a Opera browser
- if (userAgent.includes('Opera')) {
- return userAgentKey.Opera
- }
- return ''
- }
- function getBrowserVersion(browserType) {
- const { userAgent } = navigator
- return userAgent.split(browserType)[1].split('.')[0].slice(1)
- }
- function checkBrowser() {
- const browserType = getBrowserType()
- const browserVersion = getBrowserVersion(browserType)
- let bSupportMultiThread = false
- let errorCode = 0
- if (typeof SharedArrayBuffer == 'undefined') {
- bSupportMultiThread = false
- } else {
- switch (browserType) {
- case userAgentKey.Chrome:
- bSupportMultiThread = browserVersion >= 91
- errorCode = 701
- break
- case userAgentKey.Firefox:
- bSupportMultiThread = browserVersion >= 97
- errorCode = 702
- break
- case userAgentKey.Edge:
- bSupportMultiThread = browserVersion >= 91
- errorCode = 703
- break
- case userAgentKey.Edg:
- bSupportMultiThread = browserVersion >= 91
- errorCode = 703
- break
- default:
- bSupportMultiThread = false
- }
- }
- return { bSupportMultiThread, browserType, errorCode }
- }
- function checkSupportH265MSE() {
- const browserType = getBrowserType()
- const browserVersion = getBrowserVersion(browserType)
- var bSupportH265MSE = false
- switch (browserType) {
- case userAgentKey.Chrome:
- bSupportH265MSE = browserVersion >= 104
- break
- default:
- bSupportH265MSE = 0
- }
- return bSupportH265MSE
- }
- function Uint8ArrayToString(dataArray) {
- var dataString = ''
- for (var i = 0; i < dataArray.length; i++) {
- var szCode = String.fromCharCode(dataArray[i])
- dataString += szCode
- if (szCode == '\0') {
- break
- }
- }
- return dataString
- }
- var isDebug = false
- var debug = (function (flag) {
- if (flag) {
- return {
- log: function (message) {
- console.log(message)
- },
- error: function (message) {
- console.error(message)
- },
- count: function (message) {
- console.count(message)
- },
- info: function (message) {
- console.info(message)
- },
- trace: function (message) {
- console.trace(message)
- },
- }
- } else {
- return {
- log: function () {},
- error: function () {},
- count: function () {},
- info: function () {},
- }
- }
- })(isDebug)
- function BrowserDetect() {
- var agent = navigator.userAgent.toLowerCase(),
- name = navigator.appName,
- browser = null
- if (
- name === 'Microsoft Internet Explorer' ||
- agent.indexOf('trident') > -1 ||
- agent.indexOf('edge/') > -1
- ) {
- browser = 'ie'
- if (name === 'Microsoft Internet Explorer') {
- agent = /msie ([0-9]{1,}[\.0-9]{0,})/.exec(agent)
- browser += parseInt(agent[1])
- } else {
- if (agent.indexOf('trident') > -1) {
- browser += 11
- } else if (agent.indexOf('edge/') > -1) {
- browser = 'edge'
- }
- }
- } else if (agent.indexOf('safari') > -1) {
- if (agent.indexOf('chrome') > -1) {
- browser = 'chrome'
- } else {
- browser = 'safari'
- }
- } else if (agent.indexOf('firefox') > -1) {
- browser = 'firefox'
- }
- return browser
- }
- var Script = (function script() {
- function Constructor() {}
- Constructor.createFromElementId = function (id) {
- var script = document.getElementById(id)
- //assert(script, "Could not find shader with ID: " + id);
- var source = ''
- var currentChild = script.firstChild
- while (currentChild) {
- if (currentChild.nodeType === 3) {
- source += currentChild.textContent
- }
- currentChild = currentChild.nextSibling
- }
- var res = new Constructor()
- res.type = script.type
- res.source = source
- return res
- }
- Constructor.createFromSource = function (type, source) {
- var res = new Constructor()
- res.type = type
- res.source = source
- return res
- }
- return Constructor
- })()
- var Shader = (function shader() {
- function Constructor(gl, script) {
- if (script.type === 'x-shader/x-fragment') {
- this.shader = gl.createShader(gl.FRAGMENT_SHADER)
- } else if (script.type === 'x-shader/x-vertex') {
- this.shader = gl.createShader(gl.VERTEX_SHADER)
- } else {
- error('Unknown shader type: ' + script.type)
- return
- }
- gl.shaderSource(this.shader, script.source)
- gl.compileShader(this.shader)
- if (!gl.getShaderParameter(this.shader, gl.COMPILE_STATUS)) {
- error('An error occurred compiling the shaders: ' + gl.getShaderInfoLog(this.shader))
- return
- }
- }
- return Constructor
- })()
- var Program = (function () {
- function Constructor(gl) {
- this.gl = gl
- this.program = this.gl.createProgram()
- }
- Constructor.prototype = {
- attach: function (shader) {
- this.gl.attachShader(this.program, shader.shader)
- },
- link: function () {
- this.gl.linkProgram(this.program)
- //assert(this.gl.getProgramParameter(this.program, this.gl.LINK_STATUS), "Unable to initialize the shader program.")
- },
- use: function () {
- this.gl.useProgram(this.program)
- },
- getAttributeLocation: function (name) {
- return this.gl.getAttribLocation(this.program, name)
- },
- setMatrixUniform: function (name, array) {
- var uniform = this.gl.getUniformLocation(this.program, name)
- this.gl.uniformMatrix4fv(uniform, false, array)
- },
- }
- return Constructor
- })()
- var Texture = (function texture() {
- var textureIDs = null
- function Constructor(gl, size, format) {
- this.gl = gl
- this.size = size
- this.texture = gl.createTexture()
- gl.bindTexture(gl.TEXTURE_2D, this.texture)
- this.format = format ? format : gl.LUMINANCE
- gl.texImage2D(
- gl.TEXTURE_2D,
- 0,
- this.format,
- size.w,
- size.h,
- 0,
- this.format,
- gl.UNSIGNED_BYTE,
- null,
- )
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST)
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST)
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_S, gl.CLAMP_TO_EDGE)
- gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_WRAP_T, gl.CLAMP_TO_EDGE)
- }
- Constructor.prototype = {
- fill: function (textureData, useTexSubImage2D) {
- var gl = this.gl
- //assert(textureData.length >= this.size.w * this.size.h, "Texture size mismatch, data:" + textureData.length + ", texture: " + this.size.w * this.size.h);
- gl.bindTexture(gl.TEXTURE_2D, this.texture)
- if (useTexSubImage2D) {
- gl.texSubImage2D(
- gl.TEXTURE_2D,
- 0,
- 0,
- 0,
- this.size.w,
- this.size.h,
- this.format,
- gl.UNSIGNED_BYTE,
- textureData,
- )
- } else {
- gl.texImage2D(
- gl.TEXTURE_2D,
- 0,
- this.format,
- this.size.w,
- this.size.h,
- 0,
- this.format,
- gl.UNSIGNED_BYTE,
- textureData,
- )
- }
- },
- bind: function (num, program, name) {
- var gl = this.gl
- if (!textureIDs) {
- textureIDs = [gl.TEXTURE0, gl.TEXTURE1, gl.TEXTURE2]
- }
- gl.activeTexture(textureIDs[num])
- gl.bindTexture(gl.TEXTURE_2D, this.texture)
- gl.uniform1i(gl.getUniformLocation(program.program, name), num)
- },
- }
- return Constructor
- })()
- /**
- * Created by 33596 on 2018/5/8.
- */
- var base64ArrayBuffer = function (arrayBuffer) {
- var base64 = ''
- var encodings = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'
- var bytes = new Uint8Array(arrayBuffer)
- var byteLength = bytes.byteLength
- var byteRemainder = byteLength % 3
- var mainLength = byteLength - byteRemainder
- var a = 0,
- b = 0,
- c = 0,
- d = 0
- var chunk = 0
- // Main loop deals with bytes in chunks of 3
- for (var i = 0; i < mainLength; i = i + 3) {
- // Combine the three bytes into a single integer
- chunk = (bytes[i] << 16) | (bytes[i + 1] << 8) | bytes[i + 2]
- // Use bitmasks to extract 6-bit segments from the triplet
- a = (chunk & 16515072) >> 18 // 16515072 = (2^6 - 1) << 18
- b = (chunk & 258048) >> 12 // 258048 = (2^6 - 1) << 12
- c = (chunk & 4032) >> 6 // 4032 = (2^6 - 1) << 6
- d = chunk & 63 // 63 = 2^6 - 1
- // Convert the raw binary segments to the appropriate ASCII encoding
- base64 += encodings[a] + encodings[b] + encodings[c] + encodings[d]
- }
- // Deal with the remaining bytes and padding
- if (byteRemainder === 1) {
- chunk = bytes[mainLength]
- a = (chunk & 252) >> 2 // 252 = (2^6 - 1) << 2
- // Set the 4 least significant bits to zero
- b = (chunk & 3) << 4 // 3 = 2^2 - 1
- base64 += encodings[a] + encodings[b] + '=='
- } else if (byteRemainder === 2) {
- chunk = (bytes[mainLength] << 8) | bytes[mainLength + 1]
- a = (chunk & 64512) >> 10 // 64512 = (2^6 - 1) << 10
- b = (chunk & 1008) >> 4 // 1008 = (2^6 - 1) << 4
- // Set the 2 least significant bits to zero
- c = (chunk & 15) << 2 // 15 = 2^4 - 1
- base64 += encodings[a] + encodings[b] + encodings[c] + '='
- }
- return base64
- }
- function CommonAudioUtil() {
- var power2 = [
- 1, 2, 4, 8, 0x10, 0x20, 0x40, 0x80, 0x100, 0x200, 0x400, 0x800, 0x1000, 0x2000, 0x4000,
- ]
- /*
- * quan()
- *
- * quantizes the input val against the table of size short integers.
- * It returns i if table[i - 1] <= val < table[i].
- *
- * Using linear search for simple coding.
- */
- var quan = function (val, table, size) {
- //int, *int, int
- var i = 0 //int
- var j = 0
- for (i = 0; i < size; i++) {
- if (val < table[j]) {
- break
- } else {
- j++
- }
- }
- return i
- }
- /*
- * fmult()
- *
- * returns the integer product of the 14-bit integer "an" and
- * "floating point" representation (4-bit exponent, 6-bit mantessa) "srn".
- */
- var fmult = function (an, srn) {
- // int, int
- var anmag = 0 //int
- var anexp = 0 //int
- var anmant = 0 //int
- var wanexp = 0 //int
- var wanmant = 0 //int
- var retval = 0 //int
- anmag = an > 0 ? an : -an & 0x1fff
- anexp = quan(anmag, power2, 15) - 6
- if (anmag === 0) {
- anmant = 32
- } else {
- anmant = anexp >= 0 ? anmag >> anexp : anmag << -anexp
- }
- wanexp = anexp + ((srn >> 6) & 0xf) - 13
- wanmant = (anmant * (srn & parseInt('077', 8)) + 0x30) >> 4
- retval = wanexp >= 0 ? (wanmant << wanexp) & 0x7fff : wanmant >> -wanexp
- return (an ^ srn) < 0 ? -retval : retval
- }
- /*
- * g72x_init_state()
- *
- * This routine initializes and/or resets the g72x_state structure
- * pointed to by 'statePtr'.
- * All the initial state values are specified in the CCITT G.721 document.
- */
- this.g726InitState = function () {
- // var a[2];//int /* Coefficients of pole portion of prediction filter. */
- // var b[6];//int /* Coefficients of zero portion of prediction filter. */
- // var pk[2];//int /* Signs of previous two samples of a partially reconstructed signal. */
- // var dq[6];//short /* int here fails in newupdate on encode!
- // // Previous 6 samples of the quantized difference
- // // signal represented in an internal floating point
- // // format.
- // var sr[2];//int /* Previous 2 samples of the quantized difference
- var statePtr = {}
- var cnta = 0 //int
- statePtr.pp = new Array(2)
- statePtr.zp = new Array(6)
- statePtr.pk = new Array(2)
- statePtr.dq = new Array(6)
- statePtr.sr = new Array(2)
- statePtr.yl = 34816
- statePtr.yu = 544
- statePtr.dms = 0
- statePtr.dml = 0
- statePtr.ppp = 0
- for (cnta = 0; cnta < 2; cnta++) {
- statePtr.pp[cnta] = 0
- statePtr.pk[cnta] = 0
- statePtr.sr[cnta] = 32
- }
- for (cnta = 0; cnta < 6; cnta++) {
- statePtr.zp[cnta] = 0
- statePtr.dq[cnta] = 32
- }
- statePtr.td = 0
- // g726_state = statePtr;
- return statePtr
- }
- /*
- * predictorZero()
- *
- * computes the estimated signal from 6-zero predictor.
- *
- */
- this.predictorZero = function (statePtr) {
- var i = 0 //int
- var sezi = 0 //int
- sezi = fmult(statePtr.zp[0] >> 2, statePtr.dq[0])
- for (i = 1; i < 6; i++) {
- /* ACCUM */
- sezi += fmult(statePtr.zp[i] >> 2, statePtr.dq[i])
- }
- return sezi
- }
- /*
- * predictorPole()
- *
- * computes the estimated signal from 2-pole predictor.
- *
- */
- this.predictorPole = function (statePtr) {
- return fmult(statePtr.pp[1] >> 2, statePtr.sr[1]) + fmult(statePtr.pp[0] >> 2, statePtr.sr[0])
- }
- /*
- * stepSize()
- *
- * computes the quantization step size of the adaptive quantizer.
- *
- */
- this.stepSize = function (statePtr) {
- var y = 0 //int
- var dif = 0 //int
- var al = 0 //int
- if (statePtr.ppp >= 256) {
- return statePtr.yu
- } else {
- y = statePtr.yl >> 6
- dif = statePtr.yu - y
- al = statePtr.ppp >> 2
- if (dif > 0) {
- y += (dif * al) >> 6
- } else if (dif < 0) {
- y += (dif * al + 0x3f) >> 6
- }
- return y
- }
- }
- /*
- * quantize()
- *
- * Given a raw sample, 'd', of the difference signal and a
- * quantization step size scale factor, 'y', this routine returns the
- * ADPCM codeword to which that sample gets quantized. The step
- * size scale factor division operation is done in the log base 2 domain
- * as a subtraction.
- */
- this.quantize = function (
- rd /* Raw difference signal sample */,
- y /* Step size multiplier */,
- table /* quantization table */, //wjuncho
- size,
- ) /* table size of integers */ {
- var dqm = 0 //int /* Magnitude of 'd' */
- var exp = 0 //int /* Integer part of base 2 log of 'd' */
- var mant = 0 //int /* Fractional part of base 2 log */
- var dl = 0 //int /* Log of magnitude of 'd' */
- var dln = 0 //int /* Step size scale factor normalized log */
- var i = 0 //int
- /*
- * LOG
- *
- * Compute base 2 log of 'd', and store in 'dl'.
- */
- dqm = Math.abs(rd)
- exp = quan(dqm >> 1, power2, 15)
- mant = ((dqm << 7) >> exp) & 0x7f
- /* Fractional portion. */
- dl = (exp << 7) + mant
- /*
- * SUBTB
- *
- * "Divide" by step size multiplier.
- */
- dln = dl - (y >> 2)
- /*
- * QUAN
- *
- * Obtain codword i for 'd'.
- */
- i = quan(dln, table, size)
- if (rd < 0) {
- /* take 1's complement of i */
- return (size << 1) + 1 - i
- } else if (i === 0) {
- /* take 1's complement of 0 */
- return (size << 1) + 1
- /* new in 1988 */
- } else {
- return i
- }
- }
- /*
- * reconstruct()
- *
- * Returns reconstructed difference signal 'dq' obtained from
- * codeword 'i' and quantization step size scale factor 'y'.
- * Multiplication is performed in log base 2 domain as addition.
- */
- this.reconstruct = function (
- sign /* 0 for non-negative value */,
- dqln /* G.72x codeword */,
- y,
- ) /* Step size multiplier */ {
- var dql = 0 //int /* Log of 'dq' magnitude */
- var dex = 0 //int /* Integer part of log */
- var dqt = 0 //int
- var dq = 0 //int /* Reconstructed difference signal sample */
- dql = dqln + (y >> 2)
- /* ADDA */
- if (dql < 0) {
- return sign ? -0x8000 : 0
- } else {
- /* ANTILOG */
- dex = (dql >> 7) & 15
- dqt = 128 + (dql & 127)
- dq = (dqt << 7) >> (14 - dex) //wjuncho convert it to (short) :: dq = (short)((dqt << 7) >> (14 - dex));
- return sign ? dq - 0x8000 : dq
- }
- }
- /*
- * update()
- *
- * updates the state variables for each output code
- */
- this.update = function (
- codeSize, //int /* distinguish 723_40 with others */
- y, //int /* quantizer step size */
- wi, //int /* scale factor multiplier */
- fi, //int /* for long/short term energies */
- dq, //int /* quantized prediction difference */
- sr, //int /* reconstructed signal */
- dqsez, //int /* difference from 2-pole predictor */
- statePtr,
- ) /* coder state pointer */ {
- var cnt = 0 //int
- var mag = 0,
- exp = 0 //int /* Adaptive predictor, FLOAT A */
- var a2p = 0 //int /* LIMC */
- var a1ul = 0 //int /* UPA1 */
- var pks1 = 0 //int /* UPA2 */
- var fa1 = 0 //int
- var tr = 0 //int /* tone/transition detector */
- var ylint = 0,
- thr2 = 0,
- dqthr = 0 //int
- var ylfrac = 0,
- thr1 = 0 //int
- var pk0 = 0 //int
- pk0 = dqsez < 0 ? 1 : 0
- /* needed in updating predictor poles */
- mag = dq & 0x7fff
- /* prediction difference magnitude */
- /* TRANS */
- ylint = statePtr.yl >> 15
- /* exponent part of yl */
- ylfrac = (statePtr.yl >> 10) & 0x1f
- /* fractional part of yl */
- thr1 = (32 + ylfrac) << ylint
- /* threshold */
- thr2 = ylint > 9 ? 31 << 10 : thr1
- /* limit thr2 to 31 << 10 */
- dqthr = (thr2 + (thr2 >> 1)) >> 1
- /* dqthr = 0.75 * thr2 */
- if (statePtr.td === 0) {
- /* signal supposed voice */
- tr = 0
- } else if (mag <= dqthr) {
- /* supposed data, but small mag */
- tr = 0
- /* treated as voice */
- } else {
- /* signal is data (modem) */
- tr = 1
- }
- /*
- * Quantizer scale factor adaptation.
- */
- /* FUNCTW & FILTD & DELAY */
- /* update non-steady state step size multiplier */
- statePtr.yu = y + ((wi - y) >> 5)
- /* LIMB */
- if (statePtr.yu < 544) {
- /* 544 <= yu <= 5120 */
- statePtr.yu = 544
- } else if (statePtr.yu > 5120) {
- statePtr.yu = 5120
- }
- /* FILTE & DELAY */
- /* update steady state step size multiplier */
- statePtr.yl += statePtr.yu + (-statePtr.yl >> 6)
- /*
- * Adaptive predictor coefficients.
- */
- if (tr === 1) {
- /* reset a's and b's for modem signal */
- statePtr.pp[0] = 0
- statePtr.pp[1] = 0
- statePtr.zp[0] = 0
- statePtr.zp[1] = 0
- statePtr.zp[2] = 0
- statePtr.zp[3] = 0
- statePtr.zp[4] = 0
- statePtr.zp[5] = 0
- a2p = 0
- } else {
- /* update a's and b's */
- pks1 = pk0 ^ statePtr.pk[0]
- /* UPA2 */
- /* update predictor pole a[1] */
- a2p = statePtr.pp[1] - (statePtr.pp[1] >> 7)
- if (dqsez !== 0) {
- fa1 = pks1 ? statePtr.pp[0] : -statePtr.pp[0]
- if (fa1 < -8191) {
- /* a2p = function of fa1 */
- a2p -= 0x100
- } else if (fa1 > 8191) {
- a2p += 0xff
- } else {
- a2p += fa1 >> 5
- }
- if (pk0 ^ statePtr.pk[1]) {
- /* LIMC */
- if (a2p <= -12160) {
- a2p = -12288
- } else if (a2p >= 12416) {
- a2p = 12288
- } else {
- a2p -= 0x80
- }
- } else if (a2p <= -12416) {
- a2p = -12288
- } else if (a2p >= 12160) {
- a2p = 12288
- } else {
- a2p += 0x80
- }
- }
- /* TRIGB & DELAY */
- statePtr.pp[1] = a2p
- /* UPA1 */
- /* update predictor pole a[0] */
- statePtr.pp[0] -= statePtr.pp[0] >> 8
- if (dqsez !== 0) {
- if (pks1 === 0) {
- statePtr.pp[0] += 192
- } else {
- statePtr.pp[0] -= 192
- }
- }
- /* LIMD */
- a1ul = 15360 - a2p
- if (statePtr.pp[0] < -a1ul) {
- statePtr.pp[0] = -a1ul
- } else if (statePtr.pp[0] > a1ul) {
- statePtr.pp[0] = a1ul
- }
- /* UPB : update predictor zeros b[6] */
- for (cnt = 0; cnt < 6; cnt++) {
- if (codeSize === 5) {
- /* for 40Kbps G.723 */
- statePtr.zp[cnt] -= statePtr.zp[cnt] >> 9
- } else {
- /* for G.721 and 24Kbps G.723 */
- statePtr.zp[cnt] -= statePtr.zp[cnt] >> 8
- }
- if (dq & 0x7fff) {
- /* XOR */
- if ((dq ^ statePtr.dq[cnt]) >= 0) {
- statePtr.zp[cnt] += 128
- } else {
- statePtr.zp[cnt] -= 128
- }
- }
- }
- }
- for (cnt = 5; cnt > 0; cnt--) {
- statePtr.dq[cnt] = statePtr.dq[cnt - 1]
- }
- /* FLOAT A : convert dq[0] to 4-bit exp, 6-bit mantissa f.p. */
- if (mag === 0) {
- statePtr.dq[0] = dq >= 0 ? 0x20 : 0xfc20
- } else {
- exp = quan(mag, power2, 15)
- statePtr.dq[0] =
- dq >= 0 //wjuncho statePtr.dq[0] = (short)((dq >= 0) ?
- ? (exp << 6) + ((mag << 6) >> exp)
- : (exp << 6) + ((mag << 6) >> exp) - 0x400
- }
- statePtr.sr[1] = statePtr.sr[0]
- /* FLOAT B : convert sr to 4-bit exp., 6-bit mantissa f.p. */
- if (sr === 0) {
- statePtr.sr[0] = 0x20
- } else if (sr > 0) {
- exp = quan(sr, power2, 15)
- statePtr.sr[0] = (exp << 6) + ((sr << 6) >> exp)
- } else if (sr > -32768) {
- mag = -sr
- exp = quan(mag, power2, 15)
- statePtr.sr[0] = (exp << 6) + ((mag << 6) >> exp) - 0x400
- } else {
- statePtr.sr[0] = 0xfc20
- }
- /* DELAY A */
- statePtr.pk[1] = statePtr.pk[0]
- statePtr.pk[0] = pk0
- /* TONE */
- if (tr === 1) {
- /* this sample has been treated as data */
- statePtr.td = 0
- /* next one will be treated as voice */
- } else if (a2p < -11776) {
- /* small sample-to-sample correlation */
- statePtr.td = 1
- /* signal may be data */
- } else {
- /* signal is voice */
- statePtr.td = 0
- }
- /*
- * Adaptation speed control.
- */
- statePtr.dms += (fi - statePtr.dms) >> 5
- /* FILTA */
- statePtr.dml += ((fi << 2) - statePtr.dml) >> 7
- /* FILTB */
- if (tr === 1) {
- statePtr.ppp = 256
- } else if (y < 1536) {
- /* SUBTC */
- statePtr.ppp += (0x200 - statePtr.ppp) >> 4
- } else if (statePtr.td === 1) {
- statePtr.ppp += (0x200 - statePtr.ppp) >> 4
- } else if (Math.abs((statePtr.dms << 2) - statePtr.dml) >= statePtr.dml >> 3) {
- statePtr.ppp += (0x200 - statePtr.ppp) >> 4
- } else {
- statePtr.ppp += -statePtr.ppp >> 4
- }
- return statePtr
- }
- /*
- * tandem_adjust(sr, se, y, i, sign)
- *
- * At the end of ADPCM decoding, it simulates an encoder which may be receiving
- * the output of this decoder as a tandem process. If the output of the
- * simulated encoder differs from the input to this decoder, the decoder output
- * is adjusted by one level of A-law or u-law codes.
- *
- * Input:
- * sr decoder output linear PCM sample,
- * se predictor estimate sample,
- * y quantizer step size,
- * i decoder input code,
- * sign sign bit of code i
- *
- * Return:
- * adjusted A-law or u-law compressed sample.
- */
- // var tandem_adjust_alaw = function(
- // sr, /* decoder output linear PCM sample */ //int
- // se, /* predictor estimate sample */ //int
- // y, /* quantizer step size */ //int
- // i, /* decoder input code */ //int
- // sign, //int
- // qtab) //*int
- // {
- // var sp; /* A-law compressed 8-bit code */
- // var dx; /* prediction error */
- // var id; /* quantized prediction error */
- // var sd; /* adjusted A-law decoded sample value */
- // var im; /* biased magnitude of i */
- // var imx; /* biased magnitude of id */
- // if (sr <= -32768)
- // sr = -1;
- // sp = linear2alaw((sr >> 1) << 3); /* short to A-law compression */
- // dx = (alaw2linear(sp) >> 2) - se; /* 16-bit prediction error */
- // id = quantize(dx, y, qtab, sign - 1);
- // if (id === i) { no adjustment on sp
- // return (sp);
- // } else { /* sp adjustment needed */
- // /* ADPCM codes : 8, 9, ... F, 0, 1, ... , 6, 7 */
- // im = i ^ sign; /* 2's complement to biased unsigned */
- // imx = id ^ sign;
- // if (imx > im) { /* sp adjusted to next lower value */
- // if (sp & 0x80) {
- // sd = (sp === 0xD5) ? 0x55 :
- // ((sp ^ 0x55) - 1) ^ 0x55;
- // } else {
- // sd = (sp === 0x2A) ? 0x2A :
- // ((sp ^ 0x55) + 1) ^ 0x55;
- // }
- // } else { /* sp adjusted to next higher value */
- // if (sp & 0x80)
- // sd = (sp === 0xAA) ? 0xAA :
- // ((sp ^ 0x55) + 1) ^ 0x55;
- // else
- // sd = (sp === 0x55) ? 0xD5 :
- // ((sp ^ 0x55) - 1) ^ 0x55;
- // }
- // return (sd);
- // }
- // };
- // var tandem_adjust_ulaw = function(
- // sr, /* decoder output linear PCM sample */ // int
- // se, /* predictor estimate sample */ // int
- // y, /* quantizer step size */ // int
- // i, /* decoder input code */ // int
- // sign, // int
- // qtab) // *int
- // {
- // var sp; /* u-law compressed 8-bit code */
- // var dx; /* prediction error */
- // var id; /* quantized prediction error */
- // var sd; /* adjusted u-law decoded sample value */
- // var im; /* biased magnitude of i */
- // var imx; /* biased magnitude of id */
- // if (sr <= -32768){
- // sr = 0;
- // }
- // sp = linear2ulaw(sr << 2); /* short to u-law compression */
- // dx = (ulaw2linear(sp) >> 2) - se; 16-bit prediction error
- // id = quantize(dx, y, qtab, sign - 1);
- // if (id === i) {
- // return (sp);
- // } else {
- // /* ADPCM codes : 8, 9, ... F, 0, 1, ... , 6, 7 */
- // im = i ^ sign; /* 2's complement to biased unsigned */
- // imx = id ^ sign;
- // if (imx > im) { /* sp adjusted to next lower value */
- // if (sp & 0x80)
- // sd = (sp === 0xFF) ? 0x7E : sp + 1;
- // else
- // sd = (sp === 0) ? 0 : sp - 1;
- // } else { /* sp adjusted to next higher value */
- // if (sp & 0x80)
- // sd = (sp === 0x80) ? 0x80 : sp - 1;
- // else
- // sd = (sp === 0x7F) ? 0xFE : sp + 1;
- // }
- // return (sd);
- // }
- // };
- // constructor.prototype = {
- // quan: function(val, table, size) {
- // return quan(val, table, size);
- // },
- // fmult: function(an, srn) {
- // return fmult(an, srn);
- // },
- // g726InitState: function() {
- // return g726InitState();
- // },
- // predictorZero: function(statePtr) {
- // return predictorZero(statePtr);
- // },
- // predictorPole: function(statePtr) {
- // return predictorPole(statePtr);
- // },
- // stepSize: function(statePtr) {
- // return stepSize(statePtr);
- // },
- // quantize: function(d, y, table, size) {
- // return quantize(d, y, table, size);
- // },
- // reconstruct: function(sign, dqln, y) {
- // return reconstruct(sign, dqln, y);
- // },
- // update: function(codeSize, y, wi, fi, dq, sr, dqsez, statePtr) {
- // return update(codeSize, y, wi, fi, dq, sr, dqsez, statePtr);
- // },
- // // tandem_adjust_alaw: function(sr, se, y, i, sign, qtab) {
- // // return tandem_adjust_alaw(sr, se, y, i, sign, qtab);
- // // },
- // // tandem_adjust_ulaw: function(sr, se, y, i, sign, qtab) {
- // // return tandem_adjust_ulaw(sr, se, y, i, sign, qtab);
- // // }
- // };
- // return new constructor();
- }
- export {
- debug,
- BrowserDetect,
- checkBrowser,
- checkSupportH265MSE,
- Texture,
- Script,
- Program,
- Shader,
- CommonAudioUtil,
- Uint8ArrayToString,
- getPlatformType,
- getBrowserType,
- }
|