12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001100210031004100510061007100810091010101110121013101410151016101710181019102010211022102310241025102610271028102910301031103210331034103510361037103810391040104110421043104410451046104710481049105010511052105310541055105610571058105910601061106210631064106510661067106810691070107110721073107410751076107710781079108010811082108310841085108610871088108910901091109210931094109510961097109810991100110111021103110411051106110711081109111011111112111311141115111611171118111911201121112211231124112511261127112811291130113111321133113411351136113711381139114011411142114311441145114611471148114911501151115211531154115511561157115811591160116111621163116411651166116711681169117011711172117311741175117611771178117911801181118211831184118511861187118811891190119111921193119411951196119711981199120012011202120312041205120612071208120912101211121212131214121512161217121812191220122112221223122412251226122712281229123012311232123312341235123612371238123912401241124212431244124512461247124812491250125112521253125412551256125712581259126012611262126312641265126612671268126912701271127212731274127512761277127812791280128112821283128412851286128712881289129012911292129312941295129612971298129913001301130213031304130513061307130813091310131113121313131413151316131713181319132013211322132313241325132613271328132913301331133213331334133513361337133813391340134113421343134413451346134713481349135013511352135313541355135613571358135913601361136213631364136513661367136813691370137113721373137413751376137713781379138013811382138313841385138613871388138913901391139213931394139513961397139813991400140114021403140414051406140714081409141014111412141314141415141614171418141914201421142214231424142514261427142814291430143114321433143414351436143714381439144014411442144314441445144614471448144914501451145214531454145514561457145814591460146114621463146414651466146714681469147014711472147314741475147614771478147914801481148214831484148514861487148814891490149114921493149414951496149714981499150015011502150315041505150615071508150915101511151215131514151515161517151815191520152115221523152415251526152715281529153015311532153315341535153615371538153915401541154215431544154515461547154815491550155115521553155415551556155715581559156015611562156315641565156615671568156915701571157215731574157515761577157815791580158115821583158415851586158715881589159015911592159315941595159615971598159916001601160216031604160516061607160816091610161116121613161416151616161716181619162016211622162316241625162616271628162916301631163216331634163516361637163816391640164116421643164416451646164716481649165016511652165316541655165616571658165916601661166216631664166516661667166816691670167116721673167416751676167716781679168016811682168316841685168616871688168916901691169216931694169516961697169816991700170117021703170417051706170717081709171017111712171317141715171617171718171917201721172217231724172517261727172817291730173117321733173417351736173717381739174017411742174317441745174617471748174917501751175217531754175517561757175817591760 |
- //云游戏解码
- //了解当前模块请搜索关键字 》》》TDDE《《《 了解注意注释
- (function(root, factory) {
- if(typeof define === 'function' && define.amd) {
- define([], factory);
- } else if(typeof exports === 'object') {
- module.exports = factory();
- } else {
- root.Decoder = factory();
- }
- }(this, function() {
- var global;
- function initglobal() {
- global = this;
- if(!global) {
- if(typeof window != "undefined") {
- global = window;
- } else if(typeof self != "undefined") {
- global = self;
- };
- };
- };
- initglobal();
- function error(message) {
- console.error(message);
- console.trace();
- };
- function assert(condition, message) {
- if(!condition) {
- error(message);
- };
- };
- var getModule = function(par_broadwayOnHeadersDecoded, par_broadwayOnPictureDecoded) {
- /*var ModuleX = {
- 'print': function(text) { console.log('stdout: ' + text); },
- 'printErr': function(text) { console.log('stderr: ' + text); }
- };*/
- /*
-
- 所有这些都打包到一个文件中的原因是,该文件也可以作为辅助文件使用。
- 您可以将该文件集成到构建系统中,并提供要加载到辅助进程中的原始文件。
-
- */
- //var Module = (function(){
- var Module = typeof Module !== "undefined" ? Module : {};
- var moduleOverrides = {};
- var key;
- for(key in Module) {
- if(Module.hasOwnProperty(key)) {
- moduleOverrides[key] = Module[key]
- }
- }
- Module["arguments"] = [];
- Module["thisProgram"] = "./this.program";
- Module["quit"] = (function(status, toThrow) {
- throw toThrow
- });
- Module["preRun"] = [];
- Module["postRun"] = [];
- var ENVIRONMENT_IS_WEB = false;
- var ENVIRONMENT_IS_WORKER = false;
- var ENVIRONMENT_IS_NODE = false;
- var ENVIRONMENT_IS_SHELL = false;
- if(Module["ENVIRONMENT"]) {
- if(Module["ENVIRONMENT"] === "WEB") {
- ENVIRONMENT_IS_WEB = true
- } else if(Module["ENVIRONMENT"] === "WORKER") {
- ENVIRONMENT_IS_WORKER = true
- } else if(Module["ENVIRONMENT"] === "NODE") {
- ENVIRONMENT_IS_NODE = true
- } else if(Module["ENVIRONMENT"] === "SHELL") {
- ENVIRONMENT_IS_SHELL = true
- } else {
- throw new Error("Module['ENVIRONMENT'] value is not valid. must be one of: WEB|WORKER|NODE|SHELL.")
- }
- } else {
- ENVIRONMENT_IS_WEB = typeof window === "object";
- ENVIRONMENT_IS_WORKER = typeof importScripts === "function";
- ENVIRONMENT_IS_NODE = typeof process === "object" && typeof null === "function" && !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_WORKER;
- ENVIRONMENT_IS_SHELL = !ENVIRONMENT_IS_WEB && !ENVIRONMENT_IS_NODE && !ENVIRONMENT_IS_WORKER
- }
- if(ENVIRONMENT_IS_NODE) {
- var nodeFS;
- var nodePath;
- Module["read"] = function shell_read(filename, binary) {
- var ret;
- if(!nodeFS) nodeFS = (null)("fs");
- if(!nodePath) nodePath = (null)("path");
- filename = nodePath["normalize"](filename);
- ret = nodeFS["readFileSync"](filename);
- return binary ? ret : ret.toString()
- };
- Module["readBinary"] = function readBinary(filename) {
- var ret = Module["read"](filename, true);
- if(!ret.buffer) {
- ret = new Uint8Array(ret)
- }
- assert(ret.buffer);
- return ret
- };
- if(process["argv"].length > 1) {
- Module["thisProgram"] = process["argv"][1].replace(/\\/g, "/")
- }
- Module["arguments"] = process["argv"].slice(2);
- if(typeof module !== "undefined") {
- module["exports"] = Module
- }
- process["on"]("uncaughtException", (function(ex) {
- if(!(ex instanceof ExitStatus)) {
- throw ex
- }
- }));
- process["on"]("unhandledRejection", (function(reason, p) {
- process["exit"](1)
- }));
- Module["inspect"] = (function() {
- return "[Emscripten Module object]"
- })
- } else if(ENVIRONMENT_IS_SHELL) {
- if(typeof read != "undefined") {
- Module["read"] = function shell_read(f) {
- return read(f)
- }
- }
- Module["readBinary"] = function readBinary(f) {
- var data;
- if(typeof readbuffer === "function") {
- return new Uint8Array(readbuffer(f))
- }
- data = read(f, "binary");
- assert(typeof data === "object");
- return data
- };
- if(typeof scriptArgs != "undefined") {
- Module["arguments"] = scriptArgs
- } else if(typeof arguments != "undefined") {
- Module["arguments"] = arguments
- }
- if(typeof quit === "function") {
- Module["quit"] = (function(status, toThrow) {
- quit(status)
- })
- }
- } else if(ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) {
- Module["read"] = function shell_read(url) {
- var xhr = new XMLHttpRequest;
- xhr.open("GET", url, false);
- xhr.send(null);
- return xhr.responseText
- };
- if(ENVIRONMENT_IS_WORKER) {
- Module["readBinary"] = function readBinary(url) {
- var xhr = new XMLHttpRequest;
- xhr.open("GET", url, false);
- xhr.responseType = "arraybuffer";
- xhr.send(null);
- return new Uint8Array(xhr.response)
- }
- }
- Module["readAsync"] = function readAsync(url, onload, onerror) {
- var xhr = new XMLHttpRequest;
- xhr.open("GET", url, true);
- xhr.responseType = "arraybuffer";
- xhr.onload = function xhr_onload() {
- if(xhr.status == 200 || xhr.status == 0 && xhr.response) {
- onload(xhr.response);
- return
- }
- onerror()
- };
- xhr.onerror = onerror;
- xhr.send(null)
- };
- Module["setWindowTitle"] = (function(title) {
- document.title = title
- })
- } else {
- throw new Error("not compiled for this environment")
- }
- Module["print"] = typeof console !== "undefined" ? console.log.bind(console) : typeof print !== "undefined" ? print : null;
- Module["printErr"] = typeof printErr !== "undefined" ? printErr : typeof console !== "undefined" && console.warn.bind(console) || Module["print"];
- Module.print = Module["print"];
- Module.printErr = Module["printErr"];
- for(key in moduleOverrides) {
- if(moduleOverrides.hasOwnProperty(key)) {
- Module[key] = moduleOverrides[key]
- }
- }
- moduleOverrides = undefined;
- var STACK_ALIGN = 16;
- function staticAlloc(size) {
- assert(!staticSealed);
- var ret = STATICTOP;
- STATICTOP = STATICTOP + size + 15 & -16;
- return ret
- }
- function alignMemory(size, factor) {
- if(!factor) factor = STACK_ALIGN;
- var ret = size = Math.ceil(size / factor) * factor;
- return ret
- }
- var asm2wasmImports = {
- "f64-rem": (function(x, y) {
- return x % y
- }),
- "debugger": (function() {
- debugger
- })
- };
- var functionPointers = new Array(0);
- var GLOBAL_BASE = 1024;
- var ABORT = 0;
- var EXITSTATUS = 0;
- function assert(condition, text) {
- if(!condition) {
- abort("Assertion failed: " + text)
- }
- }
- function Pointer_stringify(ptr, length) {
- if(length === 0 || !ptr) return "";
- var hasUtf = 0;
- var t;
- var i = 0;
- while(1) {
- t = HEAPU8[ptr + i >> 0];
- hasUtf |= t;
- if(t == 0 && !length) break;
- i++;
- if(length && i == length) break
- }
- if(!length) length = i;
- var ret = "";
- if(hasUtf < 128) {
- var MAX_CHUNK = 1024;
- var curr;
- while(length > 0) {
- curr = String.fromCharCode.apply(String, HEAPU8.subarray(ptr, ptr + Math.min(length, MAX_CHUNK)));
- ret = ret ? ret + curr : curr;
- ptr += MAX_CHUNK;
- length -= MAX_CHUNK
- }
- return ret
- }
- return UTF8ToString(ptr)
- }
- var UTF8Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf8") : undefined;
- // 头部协议UTF-8 0001 === 224 TDDE UTF8阵列字符串
- function UTF8ArrayToString(u8Array, idx) {
- var endPtr = idx;
- while(u8Array[endPtr]) ++endPtr;
- if(endPtr - idx > 16 && u8Array.subarray && UTF8Decoder) {
- return UTF8Decoder.decode(u8Array.subarray(idx, endPtr))
- } else {
- var u0, u1, u2, u3, u4, u5;
- var str = "";
- //UTF8阵列字符串 请了解 UTF8的排序 计算 huangfei
- while(1) {
- u0 = u8Array[idx++];
- if(!u0) return str;
- if(!(u0 & 128)) {
- str += String.fromCharCode(u0);//来自char code,
- continue
- }
- u1 = u8Array[idx++] & 63;
- if((u0 & 224) == 192) {
- str += String.fromCharCode((u0 & 31) << 6 | u1);
- continue
- }
- u2 = u8Array[idx++] & 63;
- if((u0 & 240) == 224) {
- u0 = (u0 & 15) << 12 | u1 << 6 | u2
- } else {
- u3 = u8Array[idx++] & 63;
- if((u0 & 248) == 240) {
- u0 = (u0 & 7) << 18 | u1 << 12 | u2 << 6 | u3
- } else {
- u4 = u8Array[idx++] & 63;
- if((u0 & 252) == 248) {
- u0 = (u0 & 3) << 24 | u1 << 18 | u2 << 12 | u3 << 6 | u4
- } else {
- u5 = u8Array[idx++] & 63;
- u0 = (u0 & 1) << 30 | u1 << 24 | u2 << 18 | u3 << 12 | u4 << 6 | u5
- }
- }
- }
- if(u0 < 65536) {
- str += String.fromCharCode(u0)
- } else {
- var ch = u0 - 65536;
- str += String.fromCharCode(55296 | ch >> 10, 56320 | ch & 1023)
- }
- }
- }
- }
- function UTF8ToString(ptr) {
- return UTF8ArrayToString(HEAPU8, ptr)
- }
- var UTF16Decoder = typeof TextDecoder !== "undefined" ? new TextDecoder("utf-16le") : undefined;
- var WASM_PAGE_SIZE = 65536;
- var ASMJS_PAGE_SIZE = 16777216;
- function alignUp(x, multiple) {
- if(x % multiple > 0) {
- x += multiple - x % multiple
- }
- return x
- }
- var buffer, HEAP8, HEAPU8, HEAP16, HEAPU16, HEAP32, HEAPU32, HEAPF32, HEAPF64;
- function updateGlobalBuffer(buf) {
- Module["buffer"] = buffer = buf
- }
- // 每一帧if 最小堆 最大堆 TDDE STM32堆(stack)和栈(heap)的理解 TDDE
- function updateGlobalBufferViews() {
- Module["HEAP8"] = HEAP8 = new Int8Array(buffer);
- Module["HEAP16"] = HEAP16 = new Int16Array(buffer);
- Module["HEAP32"] = HEAP32 = new Int32Array(buffer);
- Module["HEAPU8"] = HEAPU8 = new Uint8Array(buffer);
- Module["HEAPU16"] = HEAPU16 = new Uint16Array(buffer);
- Module["HEAPU32"] = HEAPU32 = new Uint32Array(buffer);
- Module["HEAPF32"] = HEAPF32 = new Float32Array(buffer);
- Module["HEAPF64"] = HEAPF64 = new Float64Array(buffer)
- }
- var STATIC_BASE, STATICTOP, staticSealed;
- var STACK_BASE, STACKTOP, STACK_MAX;
- var DYNAMIC_BASE, DYNAMICTOP_PTR;
- STATIC_BASE = STATICTOP = STACK_BASE = STACKTOP = STACK_MAX = DYNAMIC_BASE = DYNAMICTOP_PTR = 0;
- staticSealed = false;
- function abortOnCannotGrowMemory() {
- abort("Cannot enlarge memory arrays. Either (1) compile with -s TOTAL_MEMORY=X with X higher than the current value " + TOTAL_MEMORY + ", (2) compile with -s ALLOW_MEMORY_GROWTH=1 which allows increasing the size at runtime, or (3) if you want malloc to return NULL (0) instead of this abort, compile with -s ABORTING_MALLOC=0 ")
- }
- // abortOn无法增长内存
- function enlargeMemory() {
- abortOnCannotGrowMemory()
- }
- var TOTAL_STACK = Module["TOTAL_STACK"] || 5242880;
- var TOTAL_MEMORY = Module["TOTAL_MEMORY"] || 52428800;
- if(TOTAL_MEMORY < TOTAL_STACK) Module.printErr("TOTAL_MEMORY should be larger than TOTAL_STACK, was " + TOTAL_MEMORY + "! (TOTAL_STACK=" + TOTAL_STACK + ")");
- if(Module["buffer"]) {
- buffer = Module["buffer"]
- } else {
- if(typeof WebAssembly === "object" && typeof WebAssembly.Memory === "function") {
- Module["wasmMemory"] = new WebAssembly.Memory({
- "initial": TOTAL_MEMORY / WASM_PAGE_SIZE,
- "maximum": TOTAL_MEMORY / WASM_PAGE_SIZE
- });
- buffer = Module["wasmMemory"].buffer
- } else {
- buffer = new ArrayBuffer(TOTAL_MEMORY)
- }
- Module["buffer"] = buffer
- }
- updateGlobalBufferViews();
- function getTotalMemory() {
- return TOTAL_MEMORY
- }
- HEAP32[0] = 1668509029;
- HEAP16[1] = 25459;
- if(HEAPU8[2] !== 115 || HEAPU8[3] !== 99) throw "Runtime error: expected the system to be little-endian!";
- function callRuntimeCallbacks(callbacks) {
- while(callbacks.length > 0) {
- var callback = callbacks.shift();
- if(typeof callback == "function") {
- callback();
- continue
- }
- var func = callback.func;
- if(typeof func === "number") {
- if(callback.arg === undefined) {
- Module["dynCall_v"](func)
- } else {
- Module["dynCall_vi"](func, callback.arg)
- }
- } else {
- func(callback.arg === undefined ? null : callback.arg)
- }
- }
- }
- var __ATPRERUN__ = [];
- var __ATINIT__ = [];
- var __ATMAIN__ = [];
- var __ATEXIT__ = [];
- var __ATPOSTRUN__ = [];
- var runtimeInitialized = false;
- var runtimeExited = false;
- function preRun() {
- if(Module["preRun"]) {
- if(typeof Module["preRun"] == "function") Module["preRun"] = [Module["preRun"]];
- while(Module["preRun"].length) {
- addOnPreRun(Module["preRun"].shift())
- }
- }
- callRuntimeCallbacks(__ATPRERUN__)
- }
- function ensureInitRuntime() {
- if(runtimeInitialized) return;
- runtimeInitialized = true;
- callRuntimeCallbacks(__ATINIT__)
- }
- // 主要前
- function preMain() {
- callRuntimeCallbacks(__ATMAIN__)
- }
- //退出运行时的处理
- function exitRuntime() {
- callRuntimeCallbacks(__ATEXIT__);
- runtimeExited = true
- }
- //运行后的回调
- function postRun() {
- if(Module["postRun"]) {
- if(typeof Module["postRun"] == "function") Module["postRun"] = [Module["postRun"]];
- while(Module["postRun"].length) {
- addOnPostRun(Module["postRun"].shift())
- }
- }
- callRuntimeCallbacks(__ATPOSTRUN__)
- }
- //加载项预运行帧
- function addOnPreRun(cb) {
- __ATPRERUN__.unshift(cb)
- }
- //加载项运行后
- function addOnPostRun(cb) {
- __ATPOSTRUN__.unshift(cb)
- }
- //对应的赋值
- var Math_abs = Math.abs;
- var Math_cos = Math.cos;
- var Math_sin = Math.sin;
- var Math_tan = Math.tan;
- var Math_acos = Math.acos;
- var Math_asin = Math.asin;
- var Math_atan = Math.atan;
- var Math_atan2 = Math.atan2;
- var Math_exp = Math.exp;
- var Math_log = Math.log;
- var Math_sqrt = Math.sqrt;
- var Math_ceil = Math.ceil;
- var Math_floor = Math.floor;
- var Math_pow = Math.pow;
- var Math_imul = Math.imul;
- var Math_fround = Math.fround;
- var Math_round = Math.round;
- var Math_min = Math.min;
- var Math_max = Math.max;
- var Math_clz32 = Math.clz32;
- var Math_trunc = Math.trunc;
- var runDependencies = 0;
- var runDependencyWatcher = null;
- var dependenciesFulfilled = null;
- //添加运行依赖项
- function addRunDependency(id) {
- runDependencies++;
- if(Module["monitorRunDependencies"]) {
- Module["monitorRunDependencies"](runDependencies)
- }
- }
- //删除运行依赖项
- function removeRunDependency(id) {
- runDependencies--;
- if(Module["monitorRunDependencies"]) {
- Module["monitorRunDependencies"](runDependencies)
- }
- if(runDependencies == 0) {
- if(runDependencyWatcher !== null) {
- clearInterval(runDependencyWatcher);
- runDependencyWatcher = null
- }
- if(dependenciesFulfilled) {
- var callback = dependenciesFulfilled;
- dependenciesFulfilled = null;
- callback()
- }
- }
- }
- Module["preloadedImages"] = {};
- Module["preloadedAudios"] = {};
- var dataURIPrefix = "data:application/octet-stream;base64,";
- // return 数据URI
- function isDataURI(filename) {
- return String.prototype.startsWith ? filename.startsWith(dataURIPrefix) : filename.indexOf(dataURIPrefix) === 0
- }
- //整合WasmJS 可用wasm依赖 不然会导致卡 TDDE
- function integrateWasmJS() {
- var wasmTextFile = "avc.wast";
- var wasmBinaryFile ="../static/avc.wasm";
- var asmjsCodeFile = "avc.temp.asm.js";
- if(typeof Module["locateFile"] === "function") {
- if(!isDataURI(wasmTextFile)) {
- wasmTextFile = Module["locateFile"](wasmTextFile)
- }
- if(!isDataURI(wasmBinaryFile)) {
- wasmBinaryFile = Module["locateFile"](wasmBinaryFile)
- }
- if(!isDataURI(asmjsCodeFile)) {
- asmjsCodeFile = Module["locateFile"](asmjsCodeFile)
- }
- }
- var wasmPageSize = 64 * 1024;
- var info = {
- "global": null,
- "env": null,
- "asm2wasm": asm2wasmImports,
- "parent": Module
- };
- var exports = null;
- function mergeMemory(newBuffer) {
- var oldBuffer = Module["buffer"];
- if(newBuffer.byteLength < oldBuffer.byteLength) {
- Module["printErr"]("the new buffer in mergeMemory is smaller than the previous one. in native wasm, we should grow memory here")
- }
- var oldView = new Int8Array(oldBuffer);
- var newView = new Int8Array(newBuffer);
- newView.set(oldView);
- updateGlobalBuffer(newBuffer);
- updateGlobalBufferViews()
- }
- function fixImports(imports) {
- return imports
- }
- function getBinary() {
- try {
- if(Module["wasmBinary"]) {
- return new Uint8Array(Module["wasmBinary"])
- }
- if(Module["readBinary"]) {
- return Module["readBinary"](wasmBinaryFile)
- } else {
- throw "on the web, we need the wasm binary to be preloaded and set on Module['wasmBinary']. emcc.py will do that for you when generating HTML (but not JS)"
- }
- } catch(err) {
- abort(err)
- }
- }
- function getBinaryPromise() {
- if(!Module["wasmBinary"] && (ENVIRONMENT_IS_WEB || ENVIRONMENT_IS_WORKER) && typeof fetch === "function") {
- return fetch(wasmBinaryFile, {
- credentials: "same-origin"
- }).then((function(response) {
- if(!response["ok"]) {
- throw "failed to load wasm binary file at '" + wasmBinaryFile + "'"
- }
- return response["arrayBuffer"]()
- })).catch((function() {
- return getBinary()
- }))
- }
- return new Promise((function(resolve, reject) {
- resolve(getBinary())
- }))
- }
- function doNativeWasm(global, env, providedBuffer) {
- if(typeof WebAssembly !== "object") {
- Module["printErr"]("no native wasm support detected");
- return false
- }
- if(!(Module["wasmMemory"] instanceof WebAssembly.Memory)) {
- Module["printErr"]("no native wasm Memory in use");
- return false
- }
- env["memory"] = Module["wasmMemory"];
- info["global"] = {
- "NaN": NaN,
- "Infinity": Infinity
- };
- info["global.Math"] = Math;
- info["env"] = env;
- function receiveInstance(instance, module) {
- exports = instance.exports;
- if(exports.memory) mergeMemory(exports.memory);
- Module["asm"] = exports;
- Module["usingWasm"] = true;
- removeRunDependency("wasm-instantiate")
- }
- addRunDependency("wasm-instantiate");
- if(Module["instantiateWasm"]) {
- try {
- return Module["instantiateWasm"](info, receiveInstance)
- } catch(e) {
- Module["printErr"]("Module.instantiateWasm callback failed with error: " + e);
- return false
- }
- }
- function receiveInstantiatedSource(output) {
- receiveInstance(output["instance"], output["module"])
- }
- function instantiateArrayBuffer(receiver) {
- getBinaryPromise().then((function(binary) {
- return WebAssembly.instantiate(binary, info)
- })).then(receiver).catch((function(reason) {
- Module["printErr"]("failed to asynchronously prepare wasm: " + reason);
- abort(reason)
- }))
- }
- if(!Module["wasmBinary"] && typeof WebAssembly.instantiateStreaming === "function" && !isDataURI(wasmBinaryFile) && typeof fetch === "function") {
- WebAssembly.instantiateStreaming(fetch(wasmBinaryFile, {
- credentials: "same-origin"
- }), info).then(receiveInstantiatedSource).catch((function(reason) {
- Module["printErr"]("wasm streaming compile failed: " + reason);
- Module["printErr"]("falling back to ArrayBuffer instantiation");
- instantiateArrayBuffer(receiveInstantiatedSource)
- }))
- } else {
- instantiateArrayBuffer(receiveInstantiatedSource)
- }
- return {}
- }
- Module["asmPreload"] = Module["asm"];
- var asmjsReallocBuffer = Module["reallocBuffer"];
- var wasmReallocBuffer = (function(size) {
- var PAGE_MULTIPLE = Module["usingWasm"] ? WASM_PAGE_SIZE : ASMJS_PAGE_SIZE;
- size = alignUp(size, PAGE_MULTIPLE);
- var old = Module["buffer"];
- var oldSize = old.byteLength;
- if(Module["usingWasm"]) {
- try {
- var result = Module["wasmMemory"].grow((size - oldSize) / wasmPageSize);
- if(result !== (-1 | 0)) {
- return Module["buffer"] = Module["wasmMemory"].buffer
- } else {
- return null
- }
- } catch(e) {
- return null
- }
- }
- });
- Module["reallocBuffer"] = (function(size) {
- if(finalMethod === "asmjs") {
- return asmjsReallocBuffer(size)
- } else {
- return wasmReallocBuffer(size)
- }
- });
- var finalMethod = "";
- Module["asm"] = (function(global, env, providedBuffer) {
- env = fixImports(env);
- if(!env["table"]) {
- var TABLE_SIZE = Module["wasmTableSize"];
- if(TABLE_SIZE === undefined) TABLE_SIZE = 1024;
- var MAX_TABLE_SIZE = Module["wasmMaxTableSize"];
- if(typeof WebAssembly === "object" && typeof WebAssembly.Table === "function") {
- if(MAX_TABLE_SIZE !== undefined) {
- env["table"] = new WebAssembly.Table({
- "initial": TABLE_SIZE,
- "maximum": MAX_TABLE_SIZE,
- "element": "anyfunc"
- })
- } else {
- env["table"] = new WebAssembly.Table({
- "initial": TABLE_SIZE,
- element: "anyfunc"
- })
- }
- } else {
- env["table"] = new Array(TABLE_SIZE)
- }
- Module["wasmTable"] = env["table"]
- }
- if(!env["memoryBase"]) {
- env["memoryBase"] = Module["STATIC_BASE"]
- }
- if(!env["tableBase"]) {
- env["tableBase"] = 0
- }
- var exports;
- exports = doNativeWasm(global, env, providedBuffer);
- assert(exports, "no binaryen method succeeded.");
- return exports
- })
- }
- integrateWasmJS();
- STATIC_BASE = GLOBAL_BASE;
- STATICTOP = STATIC_BASE + 9888;
- __ATINIT__.push();
- var STATIC_BUMP = 9888;
- Module["STATIC_BASE"] = STATIC_BASE;
- Module["STATIC_BUMP"] = STATIC_BUMP;
- STATICTOP += 16;
- var SYSCALLS = {
- varargs: 0,
- get: (function(varargs) {
- SYSCALLS.varargs += 4;
- var ret = HEAP32[SYSCALLS.varargs - 4 >> 2];
- return ret
- }),
- getStr: (function() {
- var ret = Pointer_stringify(SYSCALLS.get());
- return ret
- }),
- get64: (function() {
- var low = SYSCALLS.get(),
- high = SYSCALLS.get();
- if(low >= 0) assert(high === 0);
- else assert(high === -1);
- return low
- }),
- getZero: (function() {
- assert(SYSCALLS.get() === 0)
- })
- };
- // 系统调用140
- function ___syscall140(which, varargs) {
- SYSCALLS.varargs = varargs;
- try {
- var stream = SYSCALLS.getStreamFromFD(),
- offset_high = SYSCALLS.get(),
- offset_low = SYSCALLS.get(),
- result = SYSCALLS.get(),
- whence = SYSCALLS.get();
- var offset = offset_low;
- FS.llseek(stream, offset, whence);
- HEAP32[result >> 2] = stream.position;
- if(stream.getdents && offset === 0 && whence === 0) stream.getdents = null;
- return 0
- } catch(e) {
- if(typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
- return -e.errno
- }
- }
- // STM32堆(stack)和栈(heap)的理解 TDDE HUANGFEI
- function ___syscall146(which, varargs) {
- SYSCALLS.varargs = varargs;
- try {
- var stream = SYSCALLS.get(),
- iov = SYSCALLS.get(),
- iovcnt = SYSCALLS.get();
- var ret = 0;
- if(!___syscall146.buffers) {
- ___syscall146.buffers = [null, [],
- []
- ];
- ___syscall146.printChar = (function(stream, curr) {
- var buffer = ___syscall146.buffers[stream];
- assert(buffer);
- if(curr === 0 || curr === 10) {
- (stream === 1 ? Module["print"] : Module["printErr"])(UTF8ArrayToString(buffer, 0));
- buffer.length = 0
- } else {
- buffer.push(curr)
- }
- })
- }
- for(var i = 0; i < iovcnt; i++) {
- var ptr = HEAP32[iov + i * 8 >> 2];
- var len = HEAP32[iov + (i * 8 + 4) >> 2];
- for(var j = 0; j < len; j++) {
- ___syscall146.printChar(stream, HEAPU8[ptr + j])
- }
- ret += len
- }
- return ret
- } catch(e) {
- if(typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
- return -e.errno
- }
- }
- function ___syscall54(which, varargs) {
- SYSCALLS.varargs = varargs;
- try {
- return 0
- } catch(e) {
- if(typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
- return -e.errno
- }
- }
- function ___syscall6(which, varargs) {
- SYSCALLS.varargs = varargs;
- try {
- var stream = SYSCALLS.getStreamFromFD();
- FS.close(stream);
- return 0
- } catch(e) {
- if(typeof FS === "undefined" || !(e instanceof FS.ErrnoError)) abort(e);
- return -e.errno
- }
- }
- // 头条解码 TDDE
- function _broadwayOnHeadersDecoded() {
- par_broadwayOnHeadersDecoded()
- }
- Module["_broadwayOnHeadersDecoded"] = _broadwayOnHeadersDecoded;
- // 解码根据 回调那到当前的画质的 $buffer = width ,height
- function _broadwayOnPictureDecoded($buffer, width, height) {
- par_broadwayOnPictureDecoded($buffer, width, height)
- }
- Module["_broadwayOnPictureDecoded"] = _broadwayOnPictureDecoded;
- //喂入 最大块的 可以理解成为帧
- function _emscripten_memcpy_big(dest, src, num) {
- HEAPU8.set(HEAPU8.subarray(src, src + num), dest);
- return dest
- }
- // 输出设置错误
- function ___setErrNo(value) {
- if(Module["___errno_location"]) HEAP32[Module["___errno_location"]() >> 2] = value;
- return value
- }
- DYNAMICTOP_PTR = staticAlloc(4);//PTR
- STACK_BASE = STACKTOP = alignMemory(STATICTOP);//STACK_BASE
- STACK_MAX = STACK_BASE + TOTAL_STACK; //堆栈最大值
- DYNAMIC_BASE = alignMemory(STACK_MAX);//动态库
- HEAP32[DYNAMICTOP_PTR >> 2] = DYNAMIC_BASE;
- staticSealed = true;
- Module["wasmTableSize"] = 10;
- Module["wasmMaxTableSize"] = 10;
- Module.asmGlobalArg = {};
- Module.asmLibraryArg = {
- "abort": abort,
- "enlargeMemory": enlargeMemory,
- "getTotalMemory": getTotalMemory,
- "abortOnCannotGrowMemory": abortOnCannotGrowMemory,
- "___setErrNo": ___setErrNo,
- "___syscall140": ___syscall140,
- "___syscall146": ___syscall146,
- "___syscall54": ___syscall54,
- "___syscall6": ___syscall6,
- "_broadwayOnHeadersDecoded": _broadwayOnHeadersDecoded,
- "_broadwayOnPictureDecoded": _broadwayOnPictureDecoded,
- "_emscripten_memcpy_big": _emscripten_memcpy_big,
- "DYNAMICTOP_PTR": DYNAMICTOP_PTR,
- "STACKTOP": STACKTOP
- };
- var asm = Module["asm"](Module.asmGlobalArg, Module.asmLibraryArg, buffer);
- Module["asm"] = asm;
- var _broadwayCreateStream = Module["_broadwayCreateStream"] = (function() {
- return Module["asm"]["_broadwayCreateStream"].apply(null, arguments)
- });
- var _broadwayExit = Module["_broadwayExit"] = (function() {
- return Module["asm"]["_broadwayExit"].apply(null, arguments)
- });
- var _broadwayGetMajorVersion = Module["_broadwayGetMajorVersion"] = (function() {
- return Module["asm"]["_broadwayGetMajorVersion"].apply(null, arguments)
- });
- var _broadwayGetMinorVersion = Module["_broadwayGetMinorVersion"] = (function() {
- return Module["asm"]["_broadwayGetMinorVersion"].apply(null, arguments)
- });
- var _broadwayInit = Module["_broadwayInit"] = (function() {
- return Module["asm"]["_broadwayInit"].apply(null, arguments)
- });
- var _broadwayPlayStream = Module["_broadwayPlayStream"] = (function() {
- return Module["asm"]["_broadwayPlayStream"].apply(null, arguments)
- });
- Module["asm"] = asm;
- //退出状态
- function ExitStatus(status) {
- this.name = "ExitStatus";
- this.message = "Program terminated with exit(" + status + ")";
- this.status = status
- }
- ExitStatus.prototype = new Error;
- ExitStatus.prototype.constructor = ExitStatus;
- var initialStackTop;
- dependenciesFulfilled = function runCaller() {
- if(!Module["calledRun"]) run();
- if(!Module["calledRun"]) dependenciesFulfilled = runCaller
- };
- function run(args) {
- args = args || Module["arguments"];
- if(runDependencies > 0) {
- return
- }
- preRun();
- if(runDependencies > 0) return;
- if(Module["calledRun"]) return;
- function doRun() {
- if(Module["calledRun"]) return;
- Module["calledRun"] = true;
- if(ABORT) return;
- ensureInitRuntime();
- preMain();
- if(Module["onRuntimeInitialized"]) Module["onRuntimeInitialized"]();
- postRun()
- }
- if(Module["setStatus"]) {
- Module["setStatus"]("Running...");
- setTimeout((function() {
- setTimeout((function() {
- Module["setStatus"]("")
- }), 1);
- doRun()
- }), 1)
- } else {
- doRun()
- }
- }
- Module["run"] = run;
- // 通道
- function exit(status, implicit) {
- if(implicit && Module["noExitRuntime"] && status === 0) {
- return
- }
- if(Module["noExitRuntime"]) {} else {
- ABORT = true;
- EXITSTATUS = status;
- STACKTOP = initialStackTop;
- exitRuntime();
- if(Module["onExit"]) Module["onExit"](status)
- }
- if(ENVIRONMENT_IS_NODE) {
- process["exit"](status)
- }
- Module["quit"](status, new ExitStatus(status))
- }
- Module["exit"] = exit;
- //中止
- function abort(what) {
- if(Module["onAbort"]) {
- Module["onAbort"](what)
- }
- if(what !== undefined) {
- Module.print(what);
- Module.printErr(what);
- what = JSON.stringify(what)
- } else {
- what = ""
- }
- ABORT = true;
- EXITSTATUS = 1;
- throw "abort(" + what + "). Build with -s ASSERTIONS=1 for more info."
- }
- Module["abort"] = abort;
- if(Module["preInit"]) {
- if(typeof Module["preInit"] == "function") Module["preInit"] = [Module["preInit"]];
- while(Module["preInit"].length > 0) {
- Module["preInit"].pop()()
- }
- }
- Module["noExitRuntime"] = true;
- run()
- // return Module;
- //})();
- var resultModule;
- if(typeof global !== "undefined") {
- if(global.Module) {
- resultModule = global.Module;
- };
- };
- if(typeof Module != "undefined") {
- resultModule = Module;
- };
- resultModule._broadwayOnHeadersDecoded = par_broadwayOnHeadersDecoded;
- resultModule._broadwayOnPictureDecoded = par_broadwayOnPictureDecoded;
- var moduleIsReady = false;
- var cbFun;
- // 模块就绪 加载
- var moduleReady = function() {
- moduleIsReady = true;
- if(cbFun) {
- cbFun(resultModule);
- }
- };
- //运行时初始化
- resultModule.onRuntimeInitialized = function() {
- moduleReady(resultModule);
- };
- return function(callback) {
- if(moduleIsReady) {
- callback(resultModule);
- } else {
- cbFun = callback;
- };
- };
- };
- return(function() {
- "use strict";
- var nowValue = function() {
- return(new Date()).getTime();
- };
- if(typeof performance != "undefined") {
- if(performance.now) {
- nowValue = function() {
- return performance.now();
- };
- };
- };
- //请注意重点 Decoder 这个进行解码函数 TDDE
- var Decoder = function(parOptions) {
- this.options = parOptions || {};
- this.now = nowValue;
- var asmInstance;
- var fakeWindow = {};
- var toU8Array;
- var toU32Array;
- //关于Pic Fun
- var onPicFun = function($buffer, width, height) {
- var buffer = this.pictureBuffers[$buffer];
- if(!buffer) {
- buffer = this.pictureBuffers[$buffer] = toU8Array($buffer, (width * height * 3) / 2);
- };
- var infos;
- var doInfo = false;
- if(this.infoAr.length) {
- doInfo = true;
- infos = this.infoAr;
- };
- this.infoAr = [];
- if(this.options.rgb) {
- if(!asmInstance) {
- asmInstance = getAsm(width, height);
- };
- asmInstance.inp.set(buffer);
- asmInstance.doit();
- var copyU8 = new Uint8Array(asmInstance.outSize);
- copyU8.set(asmInstance.out);
- if(doInfo) {
- infos[0].finishDecoding = nowValue();
- };
- this.onPictureDecoded(copyU8, width, height, infos);
- return;
- };
- if(doInfo) {
- infos[0].finishDecoding = nowValue();
- };
- this.onPictureDecoded(buffer, width, height, infos);
- }.bind(this);
- var ignore = false;
- if(this.options.sliceMode) {
- onPicFun = function($buffer, width, height, $sliceInfo) {
- if(ignore) {
- return;
- };
- var buffer = this.pictureBuffers[$buffer];
- if(!buffer) {
- buffer = this.pictureBuffers[$buffer] = toU8Array($buffer, (width * height * 3) / 2);
- };
- var sliceInfo = this.pictureBuffers[$sliceInfo];
- if(!sliceInfo) {
- sliceInfo = this.pictureBuffers[$sliceInfo] = toU32Array($sliceInfo, 18);
- };
- var infos;
- var doInfo = false;
- if(this.infoAr.length) {
- doInfo = true;
- infos = this.infoAr;
- };
- this.infoAr = [];
- /*if (this.options.rgb){
-
- no rgb in slice mode
- };*/
- infos[0].finishDecoding = nowValue();
- var sliceInfoAr = [];
- for(var i = 0; i < 20; ++i) {
- sliceInfoAr.push(sliceInfo[i]);
- };
- infos[0].sliceInfoAr = sliceInfoAr;
- this.onPictureDecoded(buffer, width, height, infos);
- }.bind(this);
- };
- var ModuleCallback = getModule.apply(fakeWindow, [function() {}, onPicFun]);
- var MAX_STREAM_BUFFER_LENGTH = 1024 * 1024;
- var instance = this;
- // 图片解码
- this.onPictureDecoded = function(buffer, width, height, infos) {
- };
- this.onDecoderReady = function() {};
- var bufferedCalls = [];
- this.decode = function decode(typedAr, parInfo, copyDoneFun) {
- bufferedCalls.push([typedAr, parInfo, copyDoneFun]);
- };
- // 模块回调
- ModuleCallback(function(Module) {
- var HEAP8 = Module.HEAP8;
- var HEAPU8 = Module.HEAPU8;
- var HEAP16 = Module.HEAP16;
- var HEAP32 = Module.HEAP32;
- // 来自旧构造函数
- Module._broadwayInit();
- /**
- * 从HEAP8指针创建类型化数组。
- */
- toU8Array = function(ptr, length) {
- return HEAPU8.subarray(ptr, ptr + length);
- };
- toU32Array = function(ptr, length) {
- //var tmp = HEAPU8.subarray(ptr, ptr + (length * 4));
- return new Uint32Array(HEAPU8.buffer, ptr, length);
- };
- instance.streamBuffer = toU8Array(Module._broadwayCreateStream(MAX_STREAM_BUFFER_LENGTH), MAX_STREAM_BUFFER_LENGTH);
- instance.pictureBuffers = {};
- // 收集nal单位提供的额外信息
- instance.infoAr = [];
- // 解码流缓冲区。这可能是一个没有
- //
- //*起始码,或具有帧起始码前缀的NAL单元序列。这个 TDDE
- //
- //*函数用提供的缓冲区覆盖编解码器分配的流缓冲区
- var sliceNum = 0;
- if(instance.options.sliceMode) {
- sliceNum = instance.options.sliceNum;
- instance.decode = function decode(typedAr, parInfo, copyDoneFun) {
- instance.infoAr.push(parInfo);
- parInfo.startDecoding = nowValue();
- var nals = parInfo.nals;
- var i;
- if(!nals) {
- nals = [];
- parInfo.nals = nals;
- var l = typedAr.length;
- var foundSomething = false;
- var lastFound = 0;
- var lastStart = 0;
- for(i = 0; i < l; ++i) {
- if(typedAr[i] === 1) {
- if(
- typedAr[i - 1] === 0 &&
- typedAr[i - 2] === 0
- ) {
- var startPos = i - 2;
- if(typedAr[i - 3] === 0) {
- startPos = i - 3;
- };
- // its a nal;
- if(foundSomething) {
- nals.push({
- offset: lastFound,
- end: startPos,
- type: typedAr[lastStart] & 31
- });
- };
- lastFound = startPos;
- lastStart = startPos + 3;
- if(typedAr[i - 3] === 0) {
- lastStart = startPos + 4;
- };
- foundSomething = true;
- };
- };
- };
- if(foundSomething) {
- nals.push({
- offset: lastFound,
- end: i,
- type: typedAr[lastStart] & 31
- });
- };
- };
- var currentSlice = 0;
- var playAr;
- var offset = 0;
- for(i = 0; i < nals.length; ++i) {
- if(nals[i].type === 1 || nals[i].type === 5) {
- if(currentSlice === sliceNum) {
- playAr = typedAr.subarray(nals[i].offset, nals[i].end);
- instance.streamBuffer[offset] = 0;
- offset += 1;
- instance.streamBuffer.set(playAr, offset);
- offset += playAr.length;
- };
- currentSlice += 1;
- } else {
- playAr = typedAr.subarray(nals[i].offset, nals[i].end);
- instance.streamBuffer[offset] = 0;
- offset += 1;
- instance.streamBuffer.set(playAr, offset);
- offset += playAr.length;
- Module._broadwayPlayStream(offset);
- offset = 0;
- };
- };
- copyDoneFun();
- Module._broadwayPlayStream(offset);
- };
- } else {
- instance.decode = function decode(typedAr, parInfo) {
- // console.info("Decoding: " + buffer.length);
- // 收集信息 infos
- if(parInfo) {
- instance.infoAr.push(parInfo);
- parInfo.startDecoding = nowValue();
- };
- instance.streamBuffer.set(typedAr);
- Module._broadwayPlayStream(typedAr.length);
- };
- };
- if(bufferedCalls.length) {
- var bi = 0;
- for(bi = 0; bi < bufferedCalls.length; ++bi) {
- instance.decode(bufferedCalls[bi][0], bufferedCalls[bi][1], bufferedCalls[bi][2]);
- };
- bufferedCalls = [];
- };
- instance.onDecoderReady(instance);
- });
- };
- Decoder.prototype = {
- };
- // 要创建的工厂asm.js给定分辨率的yuv->rgb转换器
- var asmInstances = {};
- var getAsm = function(parWidth, parHeight) {
- var idStr = "" + parWidth + "x" + parHeight;
- if(asmInstances[idStr]) {
- return asmInstances[idStr];
- };
- var lumaSize = parWidth * parHeight;
- var chromaSize = (lumaSize | 0) >> 2;
- var inpSize = lumaSize + chromaSize + chromaSize;
- var outSize = parWidth * parHeight * 4;
- var cacheSize = Math.pow(2, 24) * 4;
- var size = inpSize + outSize + cacheSize;
- var chunkSize = Math.pow(2, 24);
- var heapSize = chunkSize;
- while(heapSize < size) {
- heapSize += chunkSize;
- };
- var heap = new ArrayBuffer(heapSize);
- var res = asmFactory(global, {}, heap);
- res.init(parWidth, parHeight);
- asmInstances[idStr] = res;
- res.heap = heap;
- res.out = new Uint8Array(heap, 0, outSize);
- res.inp = new Uint8Array(heap, outSize, inpSize);
- res.outSize = outSize;
- return res;
- };
- function asmFactory(stdlib, foreign, heap) {
- "use asm";
- var imul = stdlib.Math.imul;
- var min = stdlib.Math.min;
- var max = stdlib.Math.max;
- var pow = stdlib.Math.pow;
- var out = new stdlib.Uint8Array(heap);
- var out32 = new stdlib.Uint32Array(heap);
- var inp = new stdlib.Uint8Array(heap);
- var mem = new stdlib.Uint8Array(heap);
- var mem32 = new stdlib.Uint32Array(heap);
- // 对于双算法 TDDE
- /*var vt = 1.370705;
- var gt = 0.698001;
- var gt2 = 0.337633;
- var bt = 1.732446;*/
- var width = 0;
- var height = 0;
- var lumaSize = 0;
- var chromaSize = 0;
- var inpSize = 0;
- var outSize = 0;
- var inpStart = 0;
- var outStart = 0;
- var widthFour = 0;
- var cacheStart = 0;
- // 初始化HUANGFEI 解码
- function init(parWidth, parHeight) {
- parWidth = parWidth | 0;
- parHeight = parHeight | 0;
- var i = 0;
- var s = 0;
- width = parWidth;
- widthFour = imul(parWidth, 4) | 0;
- height = parHeight;
- lumaSize = imul(width | 0, height | 0) | 0;
- chromaSize = (lumaSize | 0) >> 2;
- outSize = imul(imul(width, height) | 0, 4) | 0;
- inpSize = ((lumaSize + chromaSize) | 0 + chromaSize) | 0;
- outStart = 0;
- inpStart = (outStart + outSize) | 0;
- cacheStart = (inpStart + inpSize) | 0;
- // 初始化内存(为了安全起见)
- s = ~~(+pow(+2, +24));
- s = imul(s, 4) | 0;
- for(i = 0 | 0;
- ((i | 0) < (s | 0)) | 0; i = (i + 4) | 0) {
- mem32[((cacheStart + i) | 0) >> 2] = 0;
- };
- };
- // 真正的解码计算HUANGFEI TDDT
- function doit() {
- var ystart = 0;
- var ustart = 0;
- var vstart = 0;
- var y = 0;
- var yn = 0;
- var u = 0;
- var v = 0;
- var o = 0;
- var line = 0;
- var col = 0;
- var usave = 0;
- var vsave = 0;
- var ostart = 0;
- var cacheAdr = 0;
- ostart = outStart | 0;
- ystart = inpStart | 0;
- ustart = (ystart + lumaSize | 0) | 0;
- vstart = (ustart + chromaSize) | 0;
- // 对应的帧 喂入 TDDT
- for(line = 0;
- (line | 0) < (height | 0); line = (line + 2) | 0) {
- usave = ustart;
- vsave = vstart;
- for(col = 0;
- (col | 0) < (width | 0); col = (col + 2) | 0) {
- y = inp[ystart >> 0] | 0;
- yn = inp[((ystart + width) | 0) >> 0] | 0;
- u = inp[ustart >> 0] | 0;
- v = inp[vstart >> 0] | 0;
- cacheAdr = (((((y << 16) | 0) + ((u << 8) | 0)) | 0) + v) | 0;
- o = mem32[((cacheStart + cacheAdr) | 0) >> 2] | 0;
- if(o) {} else {
- o = yuv2rgbcalc(y, u, v) | 0;
- mem32[((cacheStart + cacheAdr) | 0) >> 2] = o | 0;
- };
- mem32[ostart >> 2] = o;
- cacheAdr = (((((yn << 16) | 0) + ((u << 8) | 0)) | 0) + v) | 0;
- o = mem32[((cacheStart + cacheAdr) | 0) >> 2] | 0;
- if(o) {} else {
- o = yuv2rgbcalc(yn, u, v) | 0;
- mem32[((cacheStart + cacheAdr) | 0) >> 2] = o | 0;
- };
- mem32[((ostart + widthFour) | 0) >> 2] = o;
- //yuv2rgb5(y, u, v, ostart);
- //yuv2rgb5(yn, u, v, (ostart + widthFour)|0);
- ostart = (ostart + 4) | 0;
- // 下一步只对 Y 和v保持不变
- ystart = (ystart + 1) | 0;
- y = inp[ystart >> 0] | 0;
- yn = inp[((ystart + width) | 0) >> 0] | 0;
- //yuv2rgb5(y, u, v, ostart);
- cacheAdr = (((((y << 16) | 0) + ((u << 8) | 0)) | 0) + v) | 0;
- o = mem32[((cacheStart + cacheAdr) | 0) >> 2] | 0;
- if(o) {} else {
- o = yuv2rgbcalc(y, u, v) | 0;
- mem32[((cacheStart + cacheAdr) | 0) >> 2] = o | 0;
- };
- mem32[ostart >> 2] = o;
- //yuv2rgb5(yn, u, v, (ostart + widthFour)|0);
- cacheAdr = (((((yn << 16) | 0) + ((u << 8) | 0)) | 0) + v) | 0;
- o = mem32[((cacheStart + cacheAdr) | 0) >> 2] | 0;
- if(o) {} else {
- o = yuv2rgbcalc(yn, u, v) | 0;
- mem32[((cacheStart + cacheAdr) | 0) >> 2] = o | 0;
- };
- mem32[((ostart + widthFour) | 0) >> 2] = o;
- ostart = (ostart + 4) | 0;
- //所有positions加1
- ystart = (ystart + 1) | 0;
- ustart = (ustart + 1) | 0;
- vstart = (vstart + 1) | 0;
- };
- ostart = (ostart + widthFour) | 0;
- ystart = (ystart + width) | 0;
- };
- };
- //渲染图布
- function yuv2rgbcalc(y, u, v) {
- y = y | 0;
- u = u | 0;
- v = v | 0;
- var r = 0;
- var g = 0;
- var b = 0;
- var o = 0;
- var a0 = 0;
- var a1 = 0;
- var a2 = 0;
- var a3 = 0;
- var a4 = 0;
- a0 = imul(1192, (y - 16) | 0) | 0;
- a1 = imul(1634, (v - 128) | 0) | 0;
- a2 = imul(832, (v - 128) | 0) | 0;
- a3 = imul(400, (u - 128) | 0) | 0;
- a4 = imul(2066, (u - 128) | 0) | 0;
- r = (((a0 + a1) | 0) >> 10) | 0;
- g = (((((a0 - a2) | 0) - a3) | 0) >> 10) | 0;
- b = (((a0 + a4) | 0) >> 10) | 0;
- if((((r & 255) | 0) != (r | 0)) | 0) {
- r = min(255, max(0, r | 0) | 0) | 0;
- };
- if((((g & 255) | 0) != (g | 0)) | 0) {
- g = min(255, max(0, g | 0) | 0) | 0;
- };
- if((((b & 255) | 0) != (b | 0)) | 0) {
- b = min(255, max(0, b | 0) | 0) | 0;
- };
- o = 255;
- o = (o << 8) | 0;
- o = (o + b) | 0;
- o = (o << 8) | 0;
- o = (o + g) | 0;
- o = (o << 8) | 0;
- o = (o + r) | 0;
- return o | 0;
- };
- return {
- init: init,
- doit: doit
- };
- };
- /*
- 潜在的工作机初始化 HUANGFEI
-
- */
- if(typeof self != "undefined") {
- var isWorker = false;
- var decoder;
- var reuseMemory = false;
- var sliceMode = false;
- var sliceNum = 0;
- var sliceCnt = 0;
- var lastSliceNum = 0;
- var sliceInfoAr;
- var lastBuf;
- var awaiting = 0;
- var pile = [];
- var startDecoding;
- var finishDecoding;
- var timeDecoding;
- var memAr = [];
- var getMem = function(length) {
- if(memAr.length) {
- var u = memAr.shift();
- while(u && u.byteLength !== length) {
- u = memAr.shift();
- };
- if(u) {
- return u;
- };
- };
- return new ArrayBuffer(length);
- };
- var copySlice = function(source, target, infoAr, width, height) {
- var length = width * height;
- var length4 = length / 4
- var plane2 = length;
- var plane3 = length + length4;
- var copy16 = function(parBegin, parEnd) {
- var i = 0;
- for(i = 0; i < 16; ++i) {
- var begin = parBegin + (width * i);
- var end = parEnd + (width * i)
- target.set(source.subarray(begin, end), begin);
- };
- };
- var copy8 = function(parBegin, parEnd) {
- var i = 0;
- for(i = 0; i < 8; ++i) {
- var begin = parBegin + ((width / 2) * i);
- var end = parEnd + ((width / 2) * i)
- target.set(source.subarray(begin, end), begin);
- };
- };
- var copyChunk = function(begin, end) {
- target.set(source.subarray(begin, end), begin);
- };
- var begin = infoAr[0];
- var end = infoAr[1];
- if(end > 0) {
- copy16(begin, end);
- copy8(infoAr[2], infoAr[3]);
- copy8(infoAr[4], infoAr[5]);
- };
- begin = infoAr[6];
- end = infoAr[7];
- if(end > 0) {
- copy16(begin, end);
- copy8(infoAr[8], infoAr[9]);
- copy8(infoAr[10], infoAr[11]);
- };
- begin = infoAr[12];
- end = infoAr[15];
- if(end > 0) {
- copyChunk(begin, end);
- copyChunk(infoAr[13], infoAr[16]);
- copyChunk(infoAr[14], infoAr[17]);
- };
- };
- var sliceMsgFun = function() {};
- var setSliceCnt = function(parSliceCnt) {
- sliceCnt = parSliceCnt;
- lastSliceNum = sliceCnt - 1;
- };
- // 实时更新
- self.addEventListener('message', function(e) {
- if(isWorker) {
- if(reuseMemory) {
- if(e.data.reuse) {
- memAr.push(e.data.reuse);
- };
- };
- if(e.data.buf) {
- if(sliceMode && awaiting !== 0) {
- pile.push(e.data);
- } else {
- decoder.decode(
- new Uint8Array(e.data.buf, e.data.offset || 0, e.data.length),
- e.data.info,
- function() {
- if(sliceMode && sliceNum !== lastSliceNum) {
- postMessage(e.data, [e.data.buf]);
- };
- }
- );
- };
- return;
- };
- if(e.data.slice) {
- // 更新参考图片
- var copyStart = nowValue();
- copySlice(new Uint8Array(e.data.slice), lastBuf, e.data.infos[0].sliceInfoAr, e.data.width, e.data.height);
- // 需要更新它
- if(e.data.theOne) {
- copySlice(lastBuf, new Uint8Array(e.data.slice), sliceInfoAr, e.data.width, e.data.height);
- if(timeDecoding > e.data.infos[0].timeDecoding) {
- e.data.infos[0].timeDecoding = timeDecoding;
- };
- e.data.infos[0].timeCopy += (nowValue() - copyStart);
- };
- // 继续前进
- postMessage(e.data, [e.data.slice]);
- // 管道中的下一个框架
- awaiting -= 1;
- if(awaiting === 0 && pile.length) {
- var data = pile.shift();
- decoder.decode(
- new Uint8Array(data.buf, data.offset || 0, data.length),
- data.info,
- function() {
- if(sliceMode && sliceNum !== lastSliceNum) {
- postMessage(data, [data.buf]);
- };
- }
- );
- };
- return;
- };
- if(e.data.setSliceCnt) {
- setSliceCnt(e.data.sliceCnt);
- return;
- };
- } else {
- if(e.data && e.data.type === "Broadway.js - Worker init") {
- isWorker = true;
- decoder = new Decoder(e.data.options);
- if(e.data.options.sliceMode) {
- reuseMemory = true;
- sliceMode = true;
- sliceNum = e.data.options.sliceNum;
- setSliceCnt(e.data.options.sliceCnt);
- decoder.onPictureDecoded = function(buffer, width, height, infos) {
- // 缓冲区需要复制
- var copyU8 = new Uint8Array(getMem(buffer.length));
- copySlice(buffer, copyU8, infos[0].sliceInfoAr, width, height);
- startDecoding = infos[0].startDecoding;
- finishDecoding = infos[0].finishDecoding;
- timeDecoding = finishDecoding - startDecoding;
- infos[0].timeDecoding = timeDecoding;
- infos[0].timeCopy = 0;
- postMessage({
- slice: copyU8.buffer,
- sliceNum: sliceNum,
- width: width,
- height: height,
- infos: infos
- }, [copyU8.buffer]); // 第二个参数用于指示所有权的转移
- awaiting = sliceCnt - 1;
- lastBuf = buffer;
- sliceInfoAr = infos[0].sliceInfoAr;
- };
- } else if(e.data.options.reuseMemory) {
- reuseMemory = true;
- decoder.onPictureDecoded = function(buffer, width, height, infos) {
- // buffer 需要复制因为我们放弃了所有权
- var copyU8 = new Uint8Array(getMem(buffer.length));
- copyU8.set(buffer, 0, buffer.length);
- postMessage({
- buf: copyU8.buffer,
- length: buffer.length,
- width: width,
- height: height,
- infos: infos
- }, [copyU8.buffer]); // 第二个参数用于指示所有权的转移
- };
- } else {
- decoder.onPictureDecoded = function(buffer, width, height, infos) {
- if(buffer) {
- buffer = new Uint8Array(buffer);
- };
- var copyU8 = new Uint8Array(buffer.length);
- copyU8.set(buffer, 0, buffer.length);
- postMessage({
- buf: copyU8.buffer,
- length: buffer.length,
- width: width,
- height: height,
- infos: infos
- }, [copyU8.buffer]);
- };
- };
- postMessage({
- consoleLog: "broadway worker initialized"
- });
- };
- };
- }, false);
- };
- Decoder.nowValue = nowValue;
- return Decoder;
- })();
- }));
|