@gyeonghokim/vega 0.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +301 -0
- package/dist/assets/media-worker-DqCztg6H.js +3363 -0
- package/dist/assets/media-worker-DqCztg6H.js.map +1 -0
- package/dist/audio/audio-renderer.d.ts +76 -0
- package/dist/audio/audio-renderer.d.ts.map +1 -0
- package/dist/audio/audio-worklet-processor.d.ts +14 -0
- package/dist/audio/audio-worklet-processor.d.ts.map +1 -0
- package/dist/audio/ring-buffer.d.ts +71 -0
- package/dist/audio/ring-buffer.d.ts.map +1 -0
- package/dist/convert.d.ts +27 -0
- package/dist/convert.d.ts.map +1 -0
- package/dist/demuxer/mp4-demuxer.d.ts +133 -0
- package/dist/demuxer/mp4-demuxer.d.ts.map +1 -0
- package/dist/demuxer/mp4box-types.d.ts +149 -0
- package/dist/demuxer/mp4box-types.d.ts.map +1 -0
- package/dist/factory.d.ts +16 -0
- package/dist/factory.d.ts.map +1 -0
- package/dist/index.d.ts +10 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/renderers/renderer-2d.d.ts +12 -0
- package/dist/renderers/renderer-2d.d.ts.map +1 -0
- package/dist/renderers/renderer-webgl.d.ts +11 -0
- package/dist/renderers/renderer-webgl.d.ts.map +1 -0
- package/dist/renderers/renderer-webgpu.d.ts +11 -0
- package/dist/renderers/renderer-webgpu.d.ts.map +1 -0
- package/dist/types/index.d.ts +24 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/vega.d.ts +189 -0
- package/dist/types/vega.d.ts.map +1 -0
- package/dist/types/worker-messages.d.ts +179 -0
- package/dist/types/worker-messages.d.ts.map +1 -0
- package/dist/vega.d.ts +13 -0
- package/dist/vega.d.ts.map +1 -0
- package/dist/vega.js +488 -0
- package/dist/vega.js.map +1 -0
- package/dist/vega.umd.cjs +42 -0
- package/dist/vega.umd.cjs.map +1 -0
- package/dist/worker/media-worker.d.ts +6 -0
- package/dist/worker/media-worker.d.ts.map +1 -0
- package/dist/worker/video-renderer.d.ts +63 -0
- package/dist/worker/video-renderer.d.ts.map +1 -0
- package/package.json +65 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"media-worker-DqCztg6H.js","sources":["../node_modules/mp4box/dist/mp4box.all.js","../src/worker/media-worker.ts"],"sourcesContent":["// file:src/log.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar Log = (function (){\n\t\tvar start = new Date();\n\t\tvar LOG_LEVEL_ERROR \t= 4;\n\t\tvar LOG_LEVEL_WARNING \t= 3;\n\t\tvar LOG_LEVEL_INFO \t\t= 2;\n\t\tvar LOG_LEVEL_DEBUG\t\t= 1;\n\t\tvar log_level = LOG_LEVEL_ERROR;\n\t\tvar logObject = {\n\t\t\tsetLogLevel : function(level) {\n\t\t\t\tif (level == this.debug) log_level = LOG_LEVEL_DEBUG;\n\t\t\t\telse if (level == this.info) log_level = LOG_LEVEL_INFO;\n\t\t\t\telse if (level == this.warn) log_level = LOG_LEVEL_WARNING;\n\t\t\t\telse if (level == this.error) log_level = LOG_LEVEL_ERROR;\n\t\t\t\telse log_level = LOG_LEVEL_ERROR;\n\t\t\t},\n\t\t\tdebug : function(module, msg) {\n\t\t\t\tif (console.debug === undefined) {\n\t\t\t\t\tconsole.debug = console.log;\n\t\t\t\t}\n\t\t\t\tif (LOG_LEVEL_DEBUG >= log_level) {\n\t\t\t\t\tconsole.debug(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\tlog : function(module, msg) {\n\t\t\t\tthis.debug(module.msg)\n\t\t\t},\n\t\t\tinfo : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_INFO >= log_level) {\n\t\t\t\t\tconsole.info(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\twarn : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_WARNING >= log_level) {\n\t\t\t\t\tconsole.warn(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t},\n\t\t\terror : function(module, msg) {\n\t\t\t\tif (LOG_LEVEL_ERROR >= log_level) {\n\t\t\t\t\tconsole.error(\"[\"+Log.getDurationString(new Date()-start,1000)+\"]\",\"[\"+module+\"]\",msg);\n\t\t\t\t}\n\t\t\t}\n\t\t};\n\t\treturn logObject;\n\t})();\n\t\n/* Helper function to print a duration value in the form H:MM:SS.MS */\nLog.getDurationString = function(duration, _timescale) {\n\tvar neg;\n\t/* Helper function to print a number on a fixed number of digits */\n\tfunction pad(number, length) {\n\t\tvar str = '' + number;\n\t\tvar a = str.split('.');\t\t\n\t\twhile (a[0].length < length) {\n\t\t\ta[0] = '0' + a[0];\n\t\t}\n\t\treturn a.join('.');\n\t}\n\tif (duration < 0) {\n\t\tneg = true;\n\t\tduration = -duration;\n\t} else {\n\t\tneg = false;\t\n\t}\n\tvar timescale = _timescale || 1;\n\tvar duration_sec = duration/timescale;\n\tvar hours = Math.floor(duration_sec/3600);\n\tduration_sec -= hours * 3600;\n\tvar minutes = Math.floor(duration_sec/60);\n\tduration_sec -= minutes * 60;\t\t\n\tvar msec = duration_sec*1000;\n\tduration_sec = Math.floor(duration_sec);\n\tmsec -= duration_sec*1000;\n\tmsec = Math.floor(msec);\n\treturn (neg ? \"-\": \"\")+hours+\":\"+pad(minutes,2)+\":\"+pad(duration_sec,2)+\".\"+pad(msec,3);\n}\n\t\n/* Helper function to stringify HTML5 TimeRanges objects */\t\nLog.printRanges = function(ranges) {\n\tvar length = ranges.length;\n\tif (length > 0) {\n\t\tvar str = \"\";\n\t\tfor (var i = 0; i < length; i++) {\n\t\t if (i > 0) str += \",\";\n\t\t str += \"[\"+Log.getDurationString(ranges.start(i))+ \",\"+Log.getDurationString(ranges.end(i))+\"]\";\n\t\t}\n\t\treturn str;\n\t} else {\n\t\treturn \"(empty)\";\n\t}\n}\n\nif (typeof exports !== 'undefined') {\n\texports.Log = Log;\n}\n// file:src/stream.js\nvar MP4BoxStream = function(arrayBuffer) {\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n this.dataview = new DataView(arrayBuffer);\n } else {\n throw (\"Needs an array buffer\");\n }\n this.position = 0;\n};\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\nMP4BoxStream.prototype.getPosition = function() {\n return this.position;\n}\n\nMP4BoxStream.prototype.getEndPosition = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.getLength = function() {\n return this.buffer.byteLength;\n}\n\nMP4BoxStream.prototype.seek = function (pos) {\n var npos = Math.max(0, Math.min(this.buffer.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n return true;\n}\n\nMP4BoxStream.prototype.isEos = function () {\n return this.getPosition() >= this.getEndPosition();\n}\n\n/*************************************************************************\n Read methods, simimar to DataStream but simpler\n *************************************************************************/\nMP4BoxStream.prototype.readAnyInt = function(size, signed) {\n var res = 0;\n if (this.position + size <= this.buffer.byteLength) {\n switch (size) {\n case 1:\n if (signed) {\n res = this.dataview.getInt8(this.position);\n } else {\n res = this.dataview.getUint8(this.position);\n }\n break;\n case 2:\n if (signed) {\n res = this.dataview.getInt16(this.position);\n } else {\n res = this.dataview.getUint16(this.position);\n }\n break;\n case 3:\n if (signed) {\n throw (\"No method for reading signed 24 bits values\");\n } else {\n res = this.dataview.getUint8(this.position) << 16;\n res |= this.dataview.getUint8(this.position+1) << 8;\n res |= this.dataview.getUint8(this.position+2);\n }\n break;\n case 4:\n if (signed) {\n res = this.dataview.getInt32(this.position);\n } else {\n res = this.dataview.getUint32(this.position);\n }\n break;\n case 8:\n if (signed) {\n throw (\"No method for reading signed 64 bits values\");\n } else {\n res = this.dataview.getUint32(this.position) << 32;\n res |= this.dataview.getUint32(this.position+4);\n }\n break;\n default:\n throw (\"readInt method not implemented for size: \"+size);\n }\n this.position+= size;\n return res;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readUint8 = function() {\n return this.readAnyInt(1, false);\n}\n\nMP4BoxStream.prototype.readUint16 = function() {\n return this.readAnyInt(2, false);\n}\n\nMP4BoxStream.prototype.readUint24 = function() {\n return this.readAnyInt(3, false);\n}\n\nMP4BoxStream.prototype.readUint32 = function() {\n return this.readAnyInt(4, false);\n}\n\nMP4BoxStream.prototype.readUint64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readString = function(length) {\n if (this.position + length <= this.buffer.byteLength) {\n var s = \"\";\n for (var i = 0; i < length; i++) {\n s += String.fromCharCode(this.readUint8());\n }\n return s;\n } else {\n throw (\"Not enough bytes in buffer\");\n }\n}\n\nMP4BoxStream.prototype.readCString = function() {\n var arr = [];\n while(true) {\n var b = this.readUint8();\n if (b !== 0) {\n arr.push(b);\n } else {\n break;\n }\n }\n return String.fromCharCode.apply(null, arr); \n}\n\nMP4BoxStream.prototype.readInt8 = function() {\n return this.readAnyInt(1, true);\n}\n\nMP4BoxStream.prototype.readInt16 = function() {\n return this.readAnyInt(2, true);\n}\n\nMP4BoxStream.prototype.readInt32 = function() {\n return this.readAnyInt(4, true);\n}\n\nMP4BoxStream.prototype.readInt64 = function() {\n return this.readAnyInt(8, false);\n}\n\nMP4BoxStream.prototype.readUint8Array = function(length) {\n var arr = new Uint8Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint8();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint16Array = function(length) {\n var arr = new Int16Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint16();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readUint32Array = function(length) {\n var arr = new Uint32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readUint32();\n }\n return arr;\n}\n\nMP4BoxStream.prototype.readInt32Array = function(length) {\n var arr = new Int32Array(length);\n for (var i = 0; i < length; i++) {\n arr[i] = this.readInt32();\n }\n return arr;\n}\n\nif (typeof exports !== 'undefined') {\n exports.MP4BoxStream = MP4BoxStream;\n}// file:src/DataStream.js\n/**\n DataStream reads scalars, arrays and structs of data from an ArrayBuffer.\n It's like a file-like DataView on steroids.\n\n @param {ArrayBuffer} arrayBuffer ArrayBuffer to read from.\n @param {?Number} byteOffset Offset from arrayBuffer beginning for the DataStream.\n @param {?Boolean} endianness DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN (the default).\n */\nvar DataStream = function(arrayBuffer, byteOffset, endianness) {\n this._byteOffset = byteOffset || 0;\n if (arrayBuffer instanceof ArrayBuffer) {\n this.buffer = arrayBuffer;\n } else if (typeof arrayBuffer == \"object\") {\n this.dataView = arrayBuffer;\n if (byteOffset) {\n this._byteOffset += byteOffset;\n }\n } else {\n this.buffer = new ArrayBuffer(arrayBuffer || 0);\n }\n this.position = 0;\n this.endianness = endianness == null ? DataStream.LITTLE_ENDIAN : endianness;\n};\nDataStream.prototype = {};\n\nDataStream.prototype.getPosition = function() {\n return this.position;\n}\n\n/**\n Internal function to resize the DataStream buffer when required.\n @param {number} extra Number of bytes to add to the buffer allocation.\n @return {null}\n */\nDataStream.prototype._realloc = function(extra) {\n if (!this._dynamicSize) {\n return;\n }\n var req = this._byteOffset + this.position + extra;\n var blen = this._buffer.byteLength;\n if (req <= blen) {\n if (req > this._byteLength) {\n this._byteLength = req;\n }\n return;\n }\n if (blen < 1) {\n blen = 1;\n }\n while (req > blen) {\n blen *= 2;\n }\n var buf = new ArrayBuffer(blen);\n var src = new Uint8Array(this._buffer);\n var dst = new Uint8Array(buf, 0, src.length);\n dst.set(src);\n this.buffer = buf;\n this._byteLength = req;\n};\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the extra bytes from the backing buffer when\n the virtual byteLength is smaller than the buffer byteLength (happens after\n growing the buffer with writes and not filling the extra space completely).\n\n @return {null}\n */\nDataStream.prototype._trimAlloc = function() {\n if (this._byteLength == this._buffer.byteLength) {\n return;\n }\n var buf = new ArrayBuffer(this._byteLength);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, 0, dst.length);\n dst.set(src);\n this.buffer = buf;\n};\n\n\n/**\n Big-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.BIG_ENDIAN = false;\n\n/**\n Little-endian const to use as default endianness.\n @type {boolean}\n */\nDataStream.LITTLE_ENDIAN = true;\n\n/**\n Virtual byte length of the DataStream backing buffer.\n Updated to be max of original buffer size and last written size.\n If dynamicSize is false is set to buffer size.\n @type {number}\n */\nDataStream.prototype._byteLength = 0;\n\n/**\n Returns the byte length of the DataStream object.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteLength',\n { get: function() {\n return this._byteLength - this._byteOffset;\n }});\n\n/**\n Set/get the backing ArrayBuffer of the DataStream object.\n The setter updates the DataView to point to the new buffer.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'buffer',\n { get: function() {\n this._trimAlloc();\n return this._buffer;\n },\n set: function(v) {\n this._buffer = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the byteOffset of the DataStream object.\n The setter updates the DataView to point to the new byteOffset.\n @type {number}\n */\nObject.defineProperty(DataStream.prototype, 'byteOffset',\n { get: function() {\n return this._byteOffset;\n },\n set: function(v) {\n this._byteOffset = v;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._buffer.byteLength;\n } });\n\n/**\n Set/get the backing DataView of the DataStream object.\n The setter updates the buffer and byteOffset to point to the DataView values.\n @type {Object}\n */\nObject.defineProperty(DataStream.prototype, 'dataView',\n { get: function() {\n return this._dataView;\n },\n set: function(v) {\n this._byteOffset = v.byteOffset;\n this._buffer = v.buffer;\n this._dataView = new DataView(this._buffer, this._byteOffset);\n this._byteLength = this._byteOffset + v.byteLength;\n } });\n\n/**\n Sets the DataStream read/write position to given position.\n Clamps between 0 and DataStream length.\n\n @param {number} pos Position to seek to.\n @return {null}\n */\nDataStream.prototype.seek = function(pos) {\n var npos = Math.max(0, Math.min(this.byteLength, pos));\n this.position = (isNaN(npos) || !isFinite(npos)) ? 0 : npos;\n};\n\n/**\n Returns true if the DataStream seek pointer is at the end of buffer and\n there's no more data to read.\n\n @return {boolean} True if the seek pointer is at the end of the buffer.\n */\nDataStream.prototype.isEof = function() {\n return (this.position >= this._byteLength);\n};\n\n\n/**\n Maps a Uint8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Uint8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n\n/**\n Reads an Int32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int32Array.\n */\nDataStream.prototype.readInt32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Int32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int16Array.\n */\nDataStream.prototype.readInt16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Int16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads an Int8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Int8Array.\n */\nDataStream.prototype.readInt8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Int8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint32Array.\n */\nDataStream.prototype.readUint32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Uint32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint16Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint16Array.\n */\nDataStream.prototype.readUint16Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 2) : length;\n var arr = new Uint16Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Uint8Array of desired length from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Uint8Array.\n */\nDataStream.prototype.readUint8Array = function(length) {\n length = length == null ? (this.byteLength-this.position) : length;\n var arr = new Uint8Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float64Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float64Array.\n */\nDataStream.prototype.readFloat64Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 8) : length;\n var arr = new Float64Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n/**\n Reads a Float32Array of desired length and endianness from the DataStream.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} The read Float32Array.\n */\nDataStream.prototype.readFloat32Array = function(length, e) {\n length = length == null ? (this.byteLength-this.position / 4) : length;\n var arr = new Float32Array(length);\n DataStream.memcpy(arr.buffer, 0,\n this.buffer, this.byteOffset+this.position,\n length*arr.BYTES_PER_ELEMENT);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += arr.byteLength;\n return arr;\n};\n\n\n/**\n Reads a 32-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt32 = function(e) {\n var v = this._dataView.getInt32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readInt16 = function(e) {\n var v = this._dataView.getInt16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readInt8 = function() {\n var v = this._dataView.getInt8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint32 = function(e) {\n var v = this._dataView.getUint32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 16-bit unsigned int from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readUint16 = function(e) {\n var v = this._dataView.getUint16(this.position, e == null ? this.endianness : e);\n this.position += 2;\n return v;\n};\n\n/**\n Reads an 8-bit unsigned int from the DataStream.\n\n @return {number} The read number.\n */\nDataStream.prototype.readUint8 = function() {\n var v = this._dataView.getUint8(this.position);\n this.position += 1;\n return v;\n};\n\n/**\n Reads a 32-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat32 = function(e) {\n var v = this._dataView.getFloat32(this.position, e == null ? this.endianness : e);\n this.position += 4;\n return v;\n};\n\n/**\n Reads a 64-bit float from the DataStream with the desired endianness.\n\n @param {?boolean} e Endianness of the number.\n @return {number} The read number.\n */\nDataStream.prototype.readFloat64 = function(e) {\n var v = this._dataView.getFloat64(this.position, e == null ? this.endianness : e);\n this.position += 8;\n return v;\n};\n\n/**\n Native endianness. Either DataStream.BIG_ENDIAN or DataStream.LITTLE_ENDIAN\n depending on the platform endianness.\n\n @type {boolean}\n */\nDataStream.endianness = new Int8Array(new Int16Array([1]).buffer)[0] > 0;\n\n/**\n Copies byteLength bytes from the src buffer at srcOffset to the\n dst buffer at dstOffset.\n\n @param {Object} dst Destination ArrayBuffer to write to.\n @param {number} dstOffset Offset to the destination ArrayBuffer.\n @param {Object} src Source ArrayBuffer to read from.\n @param {number} srcOffset Offset to the source ArrayBuffer.\n @param {number} byteLength Number of bytes to copy.\n */\nDataStream.memcpy = function(dst, dstOffset, src, srcOffset, byteLength) {\n var dstU8 = new Uint8Array(dst, dstOffset, byteLength);\n var srcU8 = new Uint8Array(src, srcOffset, byteLength);\n dstU8.set(srcU8);\n};\n\n/**\n Converts array to native endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} arrayIsLittleEndian True if the data in the array is\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.arrayToNative = function(array, arrayIsLittleEndian) {\n if (arrayIsLittleEndian == this.endianness) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Converts native endianness array to desired endianness in-place.\n\n @param {Object} array Typed array to convert.\n @param {boolean} littleEndian True if the converted array should be\n little-endian. Set false for big-endian.\n @return {Object} The converted typed array.\n */\nDataStream.nativeToEndian = function(array, littleEndian) {\n if (this.endianness == littleEndian) {\n return array;\n } else {\n return this.flipArrayEndianness(array);\n }\n};\n\n/**\n Flips typed array endianness in-place.\n\n @param {Object} array Typed array to flip.\n @return {Object} The converted typed array.\n */\nDataStream.flipArrayEndianness = function(array) {\n var u8 = new Uint8Array(array.buffer, array.byteOffset, array.byteLength);\n for (var i=0; i<array.byteLength; i+=array.BYTES_PER_ELEMENT) {\n for (var j=i+array.BYTES_PER_ELEMENT-1, k=i; j>k; j--, k++) {\n var tmp = u8[k];\n u8[k] = u8[j];\n u8[j] = tmp;\n }\n }\n return array;\n};\n\n/**\n Seek position where DataStream#readStruct ran into a problem.\n Useful for debugging struct parsing.\n\n @type {number}\n */\nDataStream.prototype.failurePosition = 0;\n\nString.fromCharCodeUint8 = function(uint8arr) {\n var arr = [];\n for (var i = 0; i < uint8arr.length; i++) {\n arr[i] = uint8arr[i];\n }\n return String.fromCharCode.apply(null, arr);\n}\n/**\n Read a string of desired length and encoding from the DataStream.\n\n @param {number} length The length of the string to read in bytes.\n @param {?string} encoding The encoding of the string data in the DataStream.\n Defaults to ASCII.\n @return {string} The read string.\n */\nDataStream.prototype.readString = function(length, encoding) {\n if (encoding == null || encoding == \"ASCII\") {\n return String.fromCharCodeUint8.apply(null, [this.mapUint8Array(length == null ? this.byteLength-this.position : length)]);\n } else {\n return (new TextDecoder(encoding)).decode(this.mapUint8Array(length));\n }\n};\n\n/**\n Read null-terminated string of desired length from the DataStream. Truncates\n the returned string so that the null byte is not a part of it.\n\n @param {?number} length The length of the string to read.\n @return {string} The read string.\n */\nDataStream.prototype.readCString = function(length) {\n var blen = this.byteLength-this.position;\n var u8 = new Uint8Array(this._buffer, this._byteOffset + this.position);\n var len = blen;\n if (length != null) {\n len = Math.min(length, blen);\n }\n for (var i = 0; i < len && u8[i] !== 0; i++); // find first zero byte\n var s = String.fromCharCodeUint8.apply(null, [this.mapUint8Array(i)]);\n if (length != null) {\n this.position += len-i;\n } else if (i != blen) {\n this.position += 1; // trailing zero if not at end of buffer\n }\n return s;\n};\n\n/* \n TODO: fix endianness for 24/64-bit fields\n TODO: check range/support for 64-bits numbers in JavaScript\n*/\nvar MAX_SIZE = Math.pow(2, 32);\n\nDataStream.prototype.readInt64 = function () {\n return (this.readInt32()*MAX_SIZE)+this.readUint32();\n}\nDataStream.prototype.readUint64 = function () {\n\treturn (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readInt64 = function () {\n return (this.readUint32()*MAX_SIZE)+this.readUint32();\n}\n\nDataStream.prototype.readUint24 = function () {\n\treturn (this.readUint8()<<16)+(this.readUint8()<<8)+this.readUint8();\n}\n\nif (typeof exports !== 'undefined') {\n exports.DataStream = DataStream; \n}\n// file:src/DataStream-write.js\n/**\n Saves the DataStream contents to the given filename.\n Uses Chrome's anchor download property to initiate download.\n \n @param {string} filename Filename to save as.\n @return {null}\n */\nDataStream.prototype.save = function(filename) {\n var blob = new Blob([this.buffer]);\n if (window.URL && URL.createObjectURL) {\n var url = window.URL.createObjectURL(blob);\n var a = document.createElement('a');\n // Required in Firefox:\n document.body.appendChild(a);\n a.setAttribute('href', url);\n a.setAttribute('download', filename);\n // Required in Firefox:\n a.setAttribute('target', '_self');\n a.click();\n window.URL.revokeObjectURL(url);\n } else {\n throw(\"DataStream.save: Can't create object URL.\");\n }\n};\n\n/**\n Whether to extend DataStream buffer when trying to write beyond its size.\n If set, the buffer is reallocated to twice its current size until the\n requested write fits the buffer.\n @type {boolean}\n */\nDataStream.prototype._dynamicSize = true;\nObject.defineProperty(DataStream.prototype, 'dynamicSize',\n { get: function() {\n return this._dynamicSize;\n },\n set: function(v) {\n if (!v) {\n this._trimAlloc();\n }\n this._dynamicSize = v;\n } });\n\n/**\n Internal function to trim the DataStream buffer when required.\n Used for stripping out the first bytes when not needed anymore.\n\n @return {null}\n */\nDataStream.prototype.shift = function(offset) {\n var buf = new ArrayBuffer(this._byteLength-offset);\n var dst = new Uint8Array(buf);\n var src = new Uint8Array(this._buffer, offset, dst.length);\n dst.set(src);\n this.buffer = buf;\n this.position -= offset;\n};\n\n/**\n Writes an Int32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Int32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt32(arr[i], e);\n }\n }\n};\n\n/**\n Writes an Int16Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeInt16Array = function(arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Int16Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt16Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt16(arr[i], e);\n }\n }\n};\n\n/**\n Writes an Int8Array to the DataStream.\n\n @param {Object} arr The array to write.\n */\nDataStream.prototype.writeInt8Array = function(arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Int8Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapInt8Array(arr.length);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeInt8(arr[i]);\n }\n }\n};\n\n/**\n Writes a Uint32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeUint32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Uint32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint32(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Uint16Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeUint16Array = function(arr, e) {\n this._realloc(arr.length * 2);\n if (arr instanceof Uint16Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint16Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint16(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Uint8Array to the DataStream.\n\n @param {Object} arr The array to write.\n */\nDataStream.prototype.writeUint8Array = function(arr) {\n this._realloc(arr.length * 1);\n if (arr instanceof Uint8Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapUint8Array(arr.length);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeUint8(arr[i]);\n }\n }\n};\n\n/**\n Writes a Float64Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeFloat64Array = function(arr, e) {\n this._realloc(arr.length * 8);\n if (arr instanceof Float64Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapFloat64Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeFloat64(arr[i], e);\n }\n }\n};\n\n/**\n Writes a Float32Array of specified endianness to the DataStream.\n\n @param {Object} arr The array to write.\n @param {?boolean} e Endianness of the data to write.\n */\nDataStream.prototype.writeFloat32Array = function(arr, e) {\n this._realloc(arr.length * 4);\n if (arr instanceof Float32Array &&\n this.byteOffset+this.position % arr.BYTES_PER_ELEMENT === 0) {\n DataStream.memcpy(this._buffer, this.byteOffset+this.position,\n arr.buffer, 0,\n arr.byteLength);\n this.mapFloat32Array(arr.length, e);\n } else {\n for (var i=0; i<arr.length; i++) {\n this.writeFloat32(arr[i], e);\n }\n }\n};\n\n\n/**\n Writes a 32-bit int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeInt32 = function(v, e) {\n this._realloc(4);\n this._dataView.setInt32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 16-bit int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeInt16 = function(v, e) {\n this._realloc(2);\n this._dataView.setInt16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n};\n\n/**\n Writes an 8-bit int to the DataStream.\n\n @param {number} v Number to write.\n */\nDataStream.prototype.writeInt8 = function(v) {\n this._realloc(1);\n this._dataView.setInt8(this.position, v);\n this.position += 1;\n};\n\n/**\n Writes a 32-bit unsigned int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeUint32 = function(v, e) {\n this._realloc(4);\n this._dataView.setUint32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 16-bit unsigned int to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeUint16 = function(v, e) {\n this._realloc(2);\n this._dataView.setUint16(this.position, v, e == null ? this.endianness : e);\n this.position += 2;\n};\n\n/**\n Writes an 8-bit unsigned int to the DataStream.\n\n @param {number} v Number to write.\n */\nDataStream.prototype.writeUint8 = function(v) {\n this._realloc(1);\n this._dataView.setUint8(this.position, v);\n this.position += 1;\n};\n\n/**\n Writes a 32-bit float to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeFloat32 = function(v, e) {\n this._realloc(4);\n this._dataView.setFloat32(this.position, v, e == null ? this.endianness : e);\n this.position += 4;\n};\n\n/**\n Writes a 64-bit float to the DataStream with the desired endianness.\n\n @param {number} v Number to write.\n @param {?boolean} e Endianness of the number.\n */\nDataStream.prototype.writeFloat64 = function(v, e) {\n this._realloc(8);\n this._dataView.setFloat64(this.position, v, e == null ? this.endianness : e);\n this.position += 8;\n};\n\n/**\n Write a UCS-2 string of desired endianness to the DataStream. The\n lengthOverride argument lets you define the number of characters to write.\n If the string is shorter than lengthOverride, the extra space is padded with\n zeroes.\n\n @param {string} str The string to write.\n @param {?boolean} endianness The endianness to use for the written string data.\n @param {?number} lengthOverride The number of characters to write.\n */\nDataStream.prototype.writeUCS2String = function(str, endianness, lengthOverride) {\n if (lengthOverride == null) {\n lengthOverride = str.length;\n }\n for (var i = 0; i < str.length && i < lengthOverride; i++) {\n this.writeUint16(str.charCodeAt(i), endianness);\n }\n for (; i<lengthOverride; i++) {\n this.writeUint16(0);\n }\n};\n\n/**\n Writes a string of desired length and encoding to the DataStream.\n\n @param {string} s The string to write.\n @param {?string} encoding The encoding for the written string data.\n Defaults to ASCII.\n @param {?number} length The number of characters to write.\n */\nDataStream.prototype.writeString = function(s, encoding, length) {\n var i = 0;\n if (encoding == null || encoding == \"ASCII\") {\n if (length != null) {\n var len = Math.min(s.length, length);\n for (i=0; i<len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i<length; i++) {\n this.writeUint8(0);\n }\n } else {\n for (i=0; i<s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n }\n } else {\n this.writeUint8Array((new TextEncoder(encoding)).encode(s.substring(0, length)));\n }\n};\n\n/**\n Writes a null-terminated string to DataStream and zero-pads it to length\n bytes. If length is not given, writes the string followed by a zero.\n If string is longer than length, the written part of the string does not have\n a trailing zero.\n\n @param {string} s The string to write.\n @param {?number} length The number of characters to write.\n */\nDataStream.prototype.writeCString = function(s, length) {\n var i = 0;\n if (length != null) {\n var len = Math.min(s.length, length);\n for (i=0; i<len; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n for (; i<length; i++) {\n this.writeUint8(0);\n }\n } else {\n for (i=0; i<s.length; i++) {\n this.writeUint8(s.charCodeAt(i));\n }\n this.writeUint8(0);\n }\n};\n\n/**\n Writes a struct to the DataStream. Takes a structDefinition that gives the\n types and a struct object that gives the values. Refer to readStruct for the\n structure of structDefinition.\n\n @param {Object} structDefinition Type definition of the struct.\n @param {Object} struct The struct data object.\n */\nDataStream.prototype.writeStruct = function(structDefinition, struct) {\n for (var i = 0; i < structDefinition.length; i+=2) {\n var t = structDefinition[i+1];\n this.writeType(t, struct[structDefinition[i]], struct);\n }\n};\n\n/**\n Writes object v of type t to the DataStream.\n\n @param {Object} t Type of data to write.\n @param {Object} v Value of data to write.\n @param {Object} struct Struct to pass to write callback functions.\n */\nDataStream.prototype.writeType = function(t, v, struct) {\n var tp;\n if (typeof t == \"function\") {\n return t(this, v);\n } else if (typeof t == \"object\" && !(t instanceof Array)) {\n return t.set(this, v, struct);\n }\n var lengthOverride = null;\n var charset = \"ASCII\";\n var pos = this.position;\n if (typeof(t) == 'string' && /:/.test(t)) {\n tp = t.split(\":\");\n t = tp[0];\n lengthOverride = parseInt(tp[1]);\n }\n if (typeof t == 'string' && /,/.test(t)) {\n tp = t.split(\",\");\n t = tp[0];\n charset = parseInt(tp[1]);\n }\n\n switch(t) {\n case 'uint8':\n this.writeUint8(v);\n break;\n case 'int8':\n this.writeInt8(v);\n break;\n\n case 'uint16':\n this.writeUint16(v, this.endianness);\n break;\n case 'int16':\n this.writeInt16(v, this.endianness);\n break;\n case 'uint32':\n this.writeUint32(v, this.endianness);\n break;\n case 'int32':\n this.writeInt32(v, this.endianness);\n break;\n case 'float32':\n this.writeFloat32(v, this.endianness);\n break;\n case 'float64':\n this.writeFloat64(v, this.endianness);\n break;\n\n case 'uint16be':\n this.writeUint16(v, DataStream.BIG_ENDIAN);\n break;\n case 'int16be':\n this.writeInt16(v, DataStream.BIG_ENDIAN);\n break;\n case 'uint32be':\n this.writeUint32(v, DataStream.BIG_ENDIAN);\n break;\n case 'int32be':\n this.writeInt32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float32be':\n this.writeFloat32(v, DataStream.BIG_ENDIAN);\n break;\n case 'float64be':\n this.writeFloat64(v, DataStream.BIG_ENDIAN);\n break;\n\n case 'uint16le':\n this.writeUint16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int16le':\n this.writeInt16(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'uint32le':\n this.writeUint32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'int32le':\n this.writeInt32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float32le':\n this.writeFloat32(v, DataStream.LITTLE_ENDIAN);\n break;\n case 'float64le':\n this.writeFloat64(v, DataStream.LITTLE_ENDIAN);\n break;\n\n case 'cstring':\n this.writeCString(v, lengthOverride);\n break;\n\n case 'string':\n this.writeString(v, charset, lengthOverride);\n break;\n\n case 'u16string':\n this.writeUCS2String(v, this.endianness, lengthOverride);\n break;\n\n case 'u16stringle':\n this.writeUCS2String(v, DataStream.LITTLE_ENDIAN, lengthOverride);\n break;\n\n case 'u16stringbe':\n this.writeUCS2String(v, DataStream.BIG_ENDIAN, lengthOverride);\n break;\n\n default:\n if (t.length == 3) {\n var ta = t[1];\n for (var i=0; i<v.length; i++) {\n this.writeType(ta, v[i]);\n }\n break;\n } else {\n this.writeStruct(t, v);\n break;\n }\n }\n if (lengthOverride != null) {\n this.position = pos;\n this._realloc(lengthOverride);\n this.position = pos + lengthOverride;\n }\n};\n\n\nDataStream.prototype.writeUint64 = function (v) {\n\tvar h = Math.floor(v / MAX_SIZE);\n\tthis.writeUint32(h);\n\tthis.writeUint32(v & 0xFFFFFFFF);\n}\n\nDataStream.prototype.writeUint24 = function (v) {\n\tthis.writeUint8((v & 0x00FF0000)>>16);\n\tthis.writeUint8((v & 0x0000FF00)>>8);\n\tthis.writeUint8((v & 0x000000FF));\n}\n\nDataStream.prototype.adjustUint32 = function(position, value) {\n\tvar pos = this.position;\n\tthis.seek(position);\n\tthis.writeUint32(value);\n\tthis.seek(pos);\n}\n// file:src/DataStream-map.js\n/**\n Maps an Int32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Int32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps an Int16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Int16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps an Int8Array into the DataStream buffer.\n\n Nice for quickly reading in data.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Int8Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapInt8Array = function(length) {\n this._realloc(length * 1);\n var arr = new Int8Array(this._buffer, this.byteOffset+this.position, length);\n this.position += length * 1;\n return arr;\n};\n\n/**\n Maps a Uint32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Uint32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n\n/**\n Maps a Uint16Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Uint16Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapUint16Array = function(length, e) {\n this._realloc(length * 2);\n var arr = new Uint16Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 2;\n return arr;\n};\n\n/**\n Maps a Float64Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float64Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat64Array = function(length, e) {\n this._realloc(length * 8);\n var arr = new Float64Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 8;\n return arr;\n};\n\n/**\n Maps a Float32Array into the DataStream buffer, swizzling it to native\n endianness in-place. The current offset from the start of the buffer needs to\n be a multiple of element size, just like with typed array views.\n\n Nice for quickly reading in data. Warning: potentially modifies the buffer\n contents.\n\n @param {number} length Number of elements to map.\n @param {?boolean} e Endianness of the data to read.\n @return {Object} Float32Array to the DataStream backing buffer.\n */\nDataStream.prototype.mapFloat32Array = function(length, e) {\n this._realloc(length * 4);\n var arr = new Float32Array(this._buffer, this.byteOffset+this.position, length);\n DataStream.arrayToNative(arr, e == null ? this.endianness : e);\n this.position += length * 4;\n return arr;\n};\n// file:src/buffer.js\n/**\n * MultiBufferStream is a class that acts as a SimpleStream for parsing \n * It holds several, possibly non-contiguous ArrayBuffer objects, each with a fileStart property \n * containing the offset for the buffer data in an original/virtual file \n *\n * It inherits also from DataStream for all read/write/alloc operations\n */\n\n/**\n * Constructor\n */\nvar MultiBufferStream = function(buffer) {\n\t/* List of ArrayBuffers, with a fileStart property, sorted in fileStart order and non overlapping */\n\tthis.buffers = [];\t\n\tthis.bufferIndex = -1;\n\tif (buffer) {\n\t\tthis.insertBuffer(buffer);\n\t\tthis.bufferIndex = 0;\n\t}\n}\nMultiBufferStream.prototype = new DataStream(new ArrayBuffer(), 0, DataStream.BIG_ENDIAN);\n\n/************************************************************************************\n Methods for the managnement of the buffers (insertion, removal, concatenation, ...)\n ***********************************************************************************/\n\nMultiBufferStream.prototype.initialized = function() {\n\tvar firstBuffer;\n\tif (this.bufferIndex > -1) {\n\t\treturn true;\n\t} else if (this.buffers.length > 0) {\n\t\tfirstBuffer = this.buffers[0];\n\t\tif (firstBuffer.fileStart === 0) {\n\t\t\tthis.buffer = firstBuffer;\n\t\t\tthis.bufferIndex = 0;\n\t\t\tLog.debug(\"MultiBufferStream\", \"Stream ready for parsing\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\tLog.warn(\"MultiBufferStream\", \"The first buffer should have a fileStart of 0\");\n\t\t\tthis.logBufferLevel();\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\tLog.warn(\"MultiBufferStream\", \"No buffer to start parsing from\");\n\t\tthis.logBufferLevel();\n\t\treturn false;\n\t}\t\t\t\n}\n\n/**\n * helper functions to concatenate two ArrayBuffer objects\n * @param {ArrayBuffer} buffer1 \n * @param {ArrayBuffer} buffer2 \n * @return {ArrayBuffer} the concatenation of buffer1 and buffer2 in that order\n */\nArrayBuffer.concat = function(buffer1, buffer2) {\n Log.debug(\"ArrayBuffer\", \"Trying to create a new buffer of size: \"+(buffer1.byteLength + buffer2.byteLength));\n var tmp = new Uint8Array(buffer1.byteLength + buffer2.byteLength);\n tmp.set(new Uint8Array(buffer1), 0);\n tmp.set(new Uint8Array(buffer2), buffer1.byteLength);\n return tmp.buffer;\n};\n\n/**\n * Reduces the size of a given buffer, but taking the part between offset and offset+newlength\n * @param {ArrayBuffer} buffer \n * @param {Number} offset the start of new buffer\n * @param {Number} newLength the length of the new buffer\n * @return {ArrayBuffer} the new buffer\n */\nMultiBufferStream.prototype.reduceBuffer = function(buffer, offset, newLength) {\n\tvar smallB;\n\tsmallB = new Uint8Array(newLength);\n\tsmallB.set(new Uint8Array(buffer, offset, newLength));\n\tsmallB.buffer.fileStart = buffer.fileStart+offset;\n\tsmallB.buffer.usedBytes = 0;\n\treturn smallB.buffer;\t\n}\n\n/**\n * Inserts the new buffer in the sorted list of buffers,\n * making sure, it is not overlapping with existing ones (possibly reducing its size).\n * if the new buffer overrides/replaces the 0-th buffer (for instance because it is bigger), \n * updates the DataStream buffer for parsing \n*/\nMultiBufferStream.prototype.insertBuffer = function(ab) {\t\n\tvar to_add = true;\n\t/* TODO: improve insertion if many buffers */\n\tfor (var i = 0; i < this.buffers.length; i++) {\n\t\tvar b = this.buffers[i];\n\t\tif (ab.fileStart <= b.fileStart) {\n\t\t\t/* the insertion position is found */\n\t\t\tif (ab.fileStart === b.fileStart) {\n\t\t\t\t/* The new buffer overlaps with an existing buffer */\n\t\t\t\tif (ab.byteLength > b.byteLength) {\n\t\t\t\t\t/* the new buffer is bigger than the existing one\n\t\t\t\t\t remove the existing buffer and try again to insert \n\t\t\t\t\t the new buffer to check overlap with the next ones */\n\t\t\t\t\tthis.buffers.splice(i, 1);\n\t\t\t\t\ti--; \n\t\t\t\t\tcontinue;\n\t\t\t\t} else {\n\t\t\t\t\t/* the new buffer is smaller than the existing one, just drop it */\n\t\t\t\t\tLog.warn(\"MultiBufferStream\", \"Buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\") already appended, ignoring\");\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t/* The beginning of the new buffer is not overlapping with an existing buffer\n\t\t\t\t let's check the end of it */\n\t\t\t\tif (ab.fileStart + ab.byteLength <= b.fileStart) {\n\t\t\t\t\t/* no overlap, we can add it as is */\n\t\t\t\t} else {\n\t\t\t\t\t/* There is some overlap, cut the new buffer short, and add it*/\n\t\t\t\t\tab = this.reduceBuffer(ab, 0, b.fileStart - ab.fileStart);\n\t\t\t\t}\n\t\t\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\t\t\tthis.buffers.splice(i, 0, ab);\n\t\t\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\t\t\tif (i === 0) {\n\t\t\t\t\tthis.buffer = ab;\n\t\t\t\t}\n\t\t\t}\n\t\t\tto_add = false;\n\t\t\tbreak;\n\t\t} else if (ab.fileStart < b.fileStart + b.byteLength) {\n\t\t\t/* the new buffer overlaps its beginning with the end of the current buffer */\n\t\t\tvar offset = b.fileStart + b.byteLength - ab.fileStart;\n\t\t\tvar newLength = ab.byteLength - offset;\n\t\t\tif (newLength > 0) {\n\t\t\t\t/* the new buffer is bigger than the current overlap, drop the overlapping part and try again inserting the remaining buffer */\n\t\t\t\tab = this.reduceBuffer(ab, offset, newLength);\n\t\t\t} else {\n\t\t\t\t/* the content of the new buffer is entirely contained in the existing buffer, drop it entirely */\n\t\t\t\tto_add = false;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* if the buffer has not been added, we can add it at the end */\n\tif (to_add) {\n\t\tLog.debug(\"MultiBufferStream\", \"Appending new buffer (fileStart: \"+ab.fileStart+\" - Length: \"+ab.byteLength+\")\");\n\t\tthis.buffers.push(ab);\n\t\t/* if this new buffer is inserted in the first place in the list of the buffer, \n\t\t and the DataStream is initialized, make it the buffer used for parsing */\n\t\tif (i === 0) {\n\t\t\tthis.buffer = ab;\n\t\t}\n\t}\n}\n\n/**\n * Displays the status of the buffers (number and used bytes)\n * @param {Object} info callback method for display\n */\nMultiBufferStream.prototype.logBufferLevel = function(info) {\n\tvar i;\n\tvar buffer;\n\tvar used, total;\n\tvar ranges = [];\n\tvar range;\n\tvar bufferedString = \"\";\n\tused = 0;\n\ttotal = 0;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (i === 0) {\n\t\t\trange = {};\n\t\t\tranges.push(range);\n\t\t\trange.start = buffer.fileStart;\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tbufferedString += \"[\"+range.start+\"-\";\n\t\t} else if (range.end === buffer.fileStart) {\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t} else {\n\t\t\trange = {};\n\t\t\trange.start = buffer.fileStart;\n\t\t\tbufferedString += (ranges[ranges.length-1].end-1)+\"], [\"+range.start+\"-\";\n\t\t\trange.end = buffer.fileStart+buffer.byteLength;\n\t\t\tranges.push(range);\n\t\t}\n\t\tused += buffer.usedBytes;\n\t\ttotal += buffer.byteLength;\n\t}\n\tif (ranges.length > 0) {\n\t\tbufferedString += (range.end-1)+\"]\";\n\t}\n\tvar log = (info ? Log.info : Log.debug)\n\tif (this.buffers.length === 0) {\n\t\tlog(\"MultiBufferStream\", \"No more buffer in memory\");\n\t} else {\n\t\tlog(\"MultiBufferStream\", \"\"+this.buffers.length+\" stored buffer(s) (\"+used+\"/\"+total+\" bytes), continuous ranges: \"+bufferedString);\n\t}\n}\n\nMultiBufferStream.prototype.cleanBuffers = function () {\n\tvar i;\n\tvar buffer;\n\tfor (i = 0; i < this.buffers.length; i++) {\n\t\tbuffer = this.buffers[i];\n\t\tif (buffer.usedBytes === buffer.byteLength) {\n\t\t\tLog.debug(\"MultiBufferStream\", \"Removing buffer #\"+i);\n\t\t\tthis.buffers.splice(i, 1);\n\t\t\ti--;\n\t\t}\n\t}\n}\n\nMultiBufferStream.prototype.mergeNextBuffer = function() {\n\tvar next_buffer;\n\tif (this.bufferIndex+1 < this.buffers.length) {\n\t\tnext_buffer = this.buffers[this.bufferIndex+1];\n\t\tif (next_buffer.fileStart === this.buffer.fileStart + this.buffer.byteLength) {\n\t\t\tvar oldLength = this.buffer.byteLength;\n\t\t\tvar oldUsedBytes = this.buffer.usedBytes;\n\t\t\tvar oldFileStart = this.buffer.fileStart;\n\t\t\tthis.buffers[this.bufferIndex] = ArrayBuffer.concat(this.buffer, next_buffer);\n\t\t\tthis.buffer = this.buffers[this.bufferIndex];\n\t\t\tthis.buffers.splice(this.bufferIndex+1, 1);\n\t\t\tthis.buffer.usedBytes = oldUsedBytes; /* TODO: should it be += ? */\n\t\t\tthis.buffer.fileStart = oldFileStart;\n\t\t\tLog.debug(\"ISOFile\", \"Concatenating buffer for box parsing (length: \"+oldLength+\"->\"+this.buffer.byteLength+\")\");\n\t\t\treturn true;\n\t\t} else {\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\treturn false;\n\t}\n}\n\n\n/*************************************************************************\n Seek-related functions\n *************************************************************************/\n\n/**\n * Finds the buffer that holds the given file position\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Number} the index of the buffer holding the seeked file position, -1 if not found.\n */\nMultiBufferStream.prototype.findPosition = function(fromStart, filePosition, markAsUsed) {\n\tvar i;\n\tvar abuffer = null;\n\tvar index = -1;\n\n\t/* find the buffer with the largest position smaller than the given position */\n\tif (fromStart === true) {\n\t /* the reposition can be in the past, we need to check from the beginning of the list of buffers */\n\t\ti = 0;\n\t} else {\n\t\ti = this.bufferIndex;\n\t}\n\n\twhile (i < this.buffers.length) {\n\t\tabuffer = this.buffers[i];\n\t\tif (abuffer.fileStart <= filePosition) {\n\t\t\tindex = i;\n\t\t\tif (markAsUsed) {\n\t\t\t\tif (abuffer.fileStart + abuffer.byteLength <= filePosition) {\n\t\t\t\t\tabuffer.usedBytes = abuffer.byteLength;\t\n\t\t\t\t} else {\n\t\t\t\t\tabuffer.usedBytes = filePosition - abuffer.fileStart;\n\t\t\t\t}\t\t\n\t\t\t\tthis.logBufferLevel();\t\n\t\t\t}\n\t\t} else {\n\t\t\tbreak;\n\t\t}\n\t\ti++;\n\t}\n\n\tif (index !== -1) {\n\t\tabuffer = this.buffers[index];\n\t\tif (abuffer.fileStart + abuffer.byteLength >= filePosition) {\t\t\t\n\t\t\tLog.debug(\"MultiBufferStream\", \"Found position in existing buffer #\"+index);\n\t\t\treturn index;\n\t\t} else {\n\t\t\treturn -1;\n\t\t}\n\t} else {\n\t\treturn -1;\n\t}\n}\n\n/**\n * Finds the largest file position contained in a buffer or in the next buffers if they are contiguous (no gap)\n * starting from the given buffer index or from the current buffer if the index is not given\n *\n * @param {Number} inputindex Index of the buffer to start from\n * @return {Number} The largest file position found in the buffers\n */\nMultiBufferStream.prototype.findEndContiguousBuf = function(inputindex) {\n\tvar i;\n\tvar currentBuf;\n\tvar nextBuf;\n\tvar index = (inputindex !== undefined ? inputindex : this.bufferIndex);\n\tcurrentBuf = this.buffers[index];\n\t/* find the end of the contiguous range of data */\n\tif (this.buffers.length > index+1) {\n\t\tfor (i = index+1; i < this.buffers.length; i++) {\n\t\t\tnextBuf = this.buffers[i];\n\t\t\tif (nextBuf.fileStart === currentBuf.fileStart + currentBuf.byteLength) {\n\t\t\t\tcurrentBuf = nextBuf;\n\t\t\t} else {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\t/* return the position of last byte in the file that we have */\n\treturn currentBuf.fileStart + currentBuf.byteLength;\n}\n\n/**\n * Returns the largest file position contained in the buffers, larger than the given position\n * @param {Number} pos the file position to start from\n * @return {Number} the largest position in the current buffer or in the buffer and the next contiguous \n * buffer that holds the given position\n */\nMultiBufferStream.prototype.getEndFilePositionAfter = function(pos) {\n\tvar index = this.findPosition(true, pos, false);\n\tif (index !== -1) {\n\t\treturn this.findEndContiguousBuf(index);\n\t} else {\n\t\treturn pos;\n\t}\n}\n\n/*************************************************************************\n Garbage collection related functions\n *************************************************************************/\n\n/**\n * Marks a given number of bytes as used in the current buffer for garbage collection\n * @param {Number} nbBytes \n */\nMultiBufferStream.prototype.addUsedBytes = function(nbBytes) {\n\tthis.buffer.usedBytes += nbBytes;\n\tthis.logBufferLevel();\n}\n\n/**\n * Marks the entire current buffer as used, ready for garbage collection\n */\nMultiBufferStream.prototype.setAllUsedBytes = function() {\n\tthis.buffer.usedBytes = this.buffer.byteLength;\n\tthis.logBufferLevel();\n}\n\n/*************************************************************************\n Common API between MultiBufferStream and SimpleStream\n *************************************************************************/\n\n/**\n * Tries to seek to a given file position\n * if possible, repositions the parsing from there and returns true \n * if not possible, does not change anything and returns false \n * @param {Number} filePosition position in the file to seek to\n * @param {Boolean} fromStart indicates if the search should start from the current buffer (false) \n * or from the first buffer (true)\n * @param {Boolean} markAsUsed indicates if the bytes in between the current position and the seek position \n * should be marked as used for garbage collection\n * @return {Boolean} true if the seek succeeded, false otherwise\n */\nMultiBufferStream.prototype.seek = function(filePosition, fromStart, markAsUsed) {\n\tvar index;\n\tindex = this.findPosition(fromStart, filePosition, markAsUsed);\n\tif (index !== -1) {\n\t\tthis.buffer = this.buffers[index];\n\t\tthis.bufferIndex = index;\n\t\tthis.position = filePosition - this.buffer.fileStart;\n\t\tLog.debug(\"MultiBufferStream\", \"Repositioning parser at buffer position: \"+this.position);\n\t\treturn true;\n\t} else {\n\t\tLog.debug(\"MultiBufferStream\", \"Position \"+filePosition+\" not found in buffered data\");\n\t\treturn false;\n\t}\n}\n\n/**\n * Returns the current position in the file\n * @return {Number} the position in the file\n */\nMultiBufferStream.prototype.getPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.position;\n}\n\n/**\n * Returns the length of the current buffer\n * @return {Number} the length of the current buffer\n */\nMultiBufferStream.prototype.getLength = function() {\n\treturn this.byteLength;\n}\n\nMultiBufferStream.prototype.getEndPosition = function() {\n\tif (this.bufferIndex === -1 || this.buffers[this.bufferIndex] === null) {\n\t\tthrow \"Error accessing position in the MultiBufferStream\";\n\t}\n\treturn this.buffers[this.bufferIndex].fileStart+this.byteLength;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MultiBufferStream = MultiBufferStream;\n}// file:src/descriptor.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MPEG4DescriptorParser = function () {\n\tvar ES_DescrTag \t\t\t= 0x03;\n\tvar DecoderConfigDescrTag \t= 0x04;\n\tvar DecSpecificInfoTag \t\t= 0x05;\n\tvar SLConfigDescrTag \t\t= 0x06;\n\n\tvar descTagToName = [];\n\tdescTagToName[ES_DescrTag] \t\t\t\t= \"ES_Descriptor\";\n\tdescTagToName[DecoderConfigDescrTag] \t= \"DecoderConfigDescriptor\";\n\tdescTagToName[DecSpecificInfoTag] \t\t= \"DecoderSpecificInfo\";\n\tdescTagToName[SLConfigDescrTag] \t\t= \"SLConfigDescriptor\";\n\n\tthis.getDescriptorName = function(tag) {\n\t\treturn descTagToName[tag];\n\t}\n\n\tvar that = this;\n\tvar classes = {};\n\n\tthis.parseOneDescriptor = function (stream) {\n\t\tvar hdrSize = 0;\n\t\tvar size = 0;\n\t\tvar tag;\n\t\tvar desc;\n\t\tvar byteRead;\n\t\ttag = stream.readUint8();\n\t\thdrSize++;\n\t\tbyteRead = stream.readUint8();\n\t\thdrSize++;\n\t\twhile (byteRead & 0x80) {\n\t\t\tsize = (size << 7) + (byteRead & 0x7F);\n\t\t\tbyteRead = stream.readUint8();\n\t\t\thdrSize++;\n\t\t}\n\t\tsize = (size << 7) + (byteRead & 0x7F);\n\t\tLog.debug(\"MPEG4DescriptorParser\", \"Found \"+(descTagToName[tag] || \"Descriptor \"+tag)+\", size \"+size+\" at position \"+stream.getPosition());\n\t\tif (descTagToName[tag]) {\n\t\t\tdesc = new classes[descTagToName[tag]](size);\n\t\t} else {\n\t\t\tdesc = new classes.Descriptor(size);\n\t\t}\n\t\tdesc.parse(stream);\n\t\treturn desc;\n\t}\n\n\tclasses.Descriptor = function(_tag, _size) {\n\t\tthis.tag = _tag;\n\t\tthis.size = _size;\n\t\tthis.descs = [];\n\t}\n\n\tclasses.Descriptor.prototype.parse = function (stream) {\n\t\tthis.data = stream.readUint8Array(this.size);\n\t}\n\n\tclasses.Descriptor.prototype.findDescriptor = function (tag) {\n\t\tfor (var i = 0; i < this.descs.length; i++) {\n\t\t\tif (this.descs[i].tag == tag) {\n\t\t\t\treturn this.descs[i];\n\t\t\t}\n\t\t}\n\t\treturn null;\n\t}\n\n\tclasses.Descriptor.prototype.parseRemainingDescriptors = function (stream) {\n\t\tvar start = stream.position;\n\t\twhile (stream.position < start+this.size) {\n\t\t\tvar desc = that.parseOneDescriptor(stream);\n\t\t\tthis.descs.push(desc);\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor = function (size) {\n\t\tclasses.Descriptor.call(this, ES_DescrTag, size);\n\t}\n\n\tclasses.ES_Descriptor.prototype = new classes.Descriptor();\n\n\tclasses.ES_Descriptor.prototype.parse = function(stream) {\n\t\tthis.ES_ID = stream.readUint16();\n\t\tthis.flags = stream.readUint8();\n\t\tthis.size -= 3;\n\t\tif (this.flags & 0x80) {\n\t\t\tthis.dependsOn_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.dependsOn_ES_ID = 0;\n\t\t}\n\t\tif (this.flags & 0x40) {\n\t\t\tvar l = stream.readUint8();\n\t\t\tthis.URL = stream.readString(l);\n\t\t\tthis.size -= l+1;\n\t\t} else {\n\t\t\tthis.URL = \"\";\n\t\t}\n\t\tif (this.flags & 0x20) {\n\t\t\tthis.OCR_ES_ID = stream.readUint16();\n\t\t\tthis.size -= 2;\n\t\t} else {\n\t\t\tthis.OCR_ES_ID = 0;\n\t\t}\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.ES_Descriptor.prototype.getOTI = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (dcd) {\n\t\t\treturn dcd.oti;\n\t\t} else {\n\t\t\treturn 0;\n\t\t}\n\t}\n\n\tclasses.ES_Descriptor.prototype.getAudioConfig = function(stream) {\n\t\tvar dcd = this.findDescriptor(DecoderConfigDescrTag);\n\t\tif (!dcd) return null;\n\t\tvar dsi = dcd.findDescriptor(DecSpecificInfoTag);\n\t\tif (dsi && dsi.data) {\n\t\t\tvar audioObjectType = (dsi.data[0]& 0xF8) >> 3;\n\t\t\tif (audioObjectType === 31 && dsi.data.length >= 2) {\n\t\t\t\taudioObjectType = 32 + ((dsi.data[0] & 0x7) << 3) + ((dsi.data[1] & 0xE0) >> 5);\n\t\t\t}\n\t\t\treturn audioObjectType;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n\n\tclasses.DecoderConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, DecoderConfigDescrTag, size);\n\t}\n\tclasses.DecoderConfigDescriptor.prototype = new classes.Descriptor();\n\n\tclasses.DecoderConfigDescriptor.prototype.parse = function(stream) {\n\t\tthis.oti = stream.readUint8();\n\t\tthis.streamType = stream.readUint8();\n\t\tthis.upStream = ((this.streamType >> 1) & 1) !== 0;\n\t\tthis.streamType = this.streamType >>> 2;\n\t\tthis.bufferSize = stream.readUint24();\n\t\tthis.maxBitrate = stream.readUint32();\n\t\tthis.avgBitrate = stream.readUint32();\n\t\tthis.size -= 13;\n\t\tthis.parseRemainingDescriptors(stream);\n\t}\n\n\tclasses.DecoderSpecificInfo = function (size) {\n\t\tclasses.Descriptor.call(this, DecSpecificInfoTag, size);\n\t}\n\tclasses.DecoderSpecificInfo.prototype = new classes.Descriptor();\n\n\tclasses.SLConfigDescriptor = function (size) {\n\t\tclasses.Descriptor.call(this, SLConfigDescrTag, size);\n\t}\n\tclasses.SLConfigDescriptor.prototype = new classes.Descriptor();\n\n\treturn this;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.MPEG4DescriptorParser = MPEG4DescriptorParser;\n}\n// file:src/box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar BoxParser = {\n\tERR_INVALID_DATA : -1,\n\tERR_NOT_ENOUGH_DATA : 0,\n\tOK : 1,\n\n\t// Boxes to be created with default parsing\n\tBASIC_BOXES: [\n\t\t{type: \"mdat\", name: \"MediaDataBox\"},\n\t\t{type: \"idat\", name: \"ItemDataBox\"},\n\t\t{type: \"free\", name: \"FreeSpaceBox\"},\n\t\t{type: \"skip\", name: \"FreeSpaceBox\"},\n\t\t{type: \"meco\", name: \"AdditionalMetadataContainerBox\"},\n\t\t{type: \"strk\", name: \"SubTrackBox\"}\n\t],\n\tFULL_BOXES: [\n\t\t{type: \"hmhd\", name: \"HintMediaHeaderBox\"},\n\t\t{type: \"nmhd\", name: \"NullMediaHeaderBox\"},\n\t\t{type: \"iods\", name: \"ObjectDescriptorBox\"},\n\t\t{type: \"xml \", name: \"XMLBox\"},\n\t\t{type: \"bxml\", name: \"BinaryXMLBox\"},\n\t\t{type: \"ipro\", name: \"ItemProtectionBox\"},\n\t\t{type: \"mere\", name: \"MetaboxRelationBox\"}\n\t],\n\tCONTAINER_BOXES: [\n\t\t[{type: \"moov\", name: \"CompressedMovieBox\"}, [\"trak\", \"pssh\"]],\n\t\t[{type: \"trak\", name: \"TrackBox\"}],\n\t\t[{type: \"edts\", name: \"EditBox\"}],\n\t\t[{type: \"mdia\", name: \"MediaBox\"}],\n\t\t[{type: \"minf\", name: \"MediaInformationBox\"}],\n\t\t[{type: \"dinf\", name: \"DataInformationBox\"}],\n\t\t[{type: \"stbl\", name: \"SampleTableBox\"}, [\"sgpd\", \"sbgp\"]],\n\t\t[{type: \"mvex\", name: \"MovieExtendsBox\"}, [\"trex\"]],\n\t\t[{type: \"moof\", name: \"CompressedMovieFragmentBox\"}, [\"traf\"]],\n\t\t[{type: \"traf\", name: \"TrackFragmentBox\"}, [\"trun\", \"sgpd\", \"sbgp\"]],\n\t\t[{type: \"vttc\", name: \"VTTCueBox\"}],\n\t\t[{type: \"tref\", name: \"TrackReferenceBox\"}],\n\t\t[{type: \"iref\", name: \"ItemReferenceBox\"}],\n\t\t[{type: \"mfra\", name: \"MovieFragmentRandomAccessBox\"}, [\"tfra\"]],\n\t\t[{type: \"meco\", name: \"AdditionalMetadataContainerBox\"}],\n\t\t[{type: \"hnti\", name: \"trackhintinformation\"}],\n\t\t[{type: \"hinf\", name: \"hintstatisticsbox\"}],\n\t\t[{type: \"strk\", name: \"SubTrackBox\"}],\n\t\t[{type: \"strd\", name: \"SubTrackDefinitionBox\"}],\n\t\t[{type: \"sinf\", name: \"ProtectionSchemeInfoBox\"}],\n\t\t[{type: \"rinf\", name: \"RestrictedSchemeInfoBox\"}],\n\t\t[{type: \"schi\", name: \"SchemeInformationBox\"}],\n\t\t[{type: \"trgr\", name: \"TrackGroupBox\"}],\n\t\t[{type: \"udta\", name: \"UserDataBox\"}, [\"kind\"]],\n\t\t[{type: \"iprp\", name: \"ItemPropertiesBox\"}, [\"ipma\"]],\n\t\t[{type: \"ipco\", name: \"ItemPropertyContainerBox\"}],\n\t\t[{type: \"grpl\", name: \"GroupsListBox\"}],\n\t\t[{type: \"j2kH\", name: \"J2KHeaderInfoBox\"}],\n\t\t[{type: \"etyp\", name: \"ExtendedTypeBox\"}, [\"tyco\"]]\n\t],\n\t// Boxes effectively created\n\tboxCodes : [],\n\tfullBoxCodes : [],\n\tcontainerBoxCodes : [],\n\tsampleEntryCodes : {},\n\tsampleGroupEntryCodes: [],\n\ttrackGroupTypes: [],\n\tUUIDBoxes: {},\n\tUUIDs: [],\n\tinitialize: function() {\n\t\tBoxParser.FullBox.prototype = new BoxParser.Box();\n\t\tBoxParser.ContainerBox.prototype = new BoxParser.Box();\n\t\tBoxParser.SampleEntry.prototype = new BoxParser.Box();\n\t\tBoxParser.TrackGroupTypeBox.prototype = new BoxParser.FullBox();\n\n\t\t/* creating constructors for simple boxes */\n\t\tBoxParser.BASIC_BOXES.forEach(function(box) {\n\t\t\tBoxParser.createBoxCtor(box.type, box.name)\n\t\t});\n\t\tBoxParser.FULL_BOXES.forEach(function(box) {\n\t\t\tBoxParser.createFullBoxCtor(box.type, box.name);\n\t\t});\n\t\tBoxParser.CONTAINER_BOXES.forEach(function(boxes) {\n\t\t\tBoxParser.createContainerBoxCtor(boxes[0].type, boxes[0].name, null, boxes[1]);\n\t\t});\n\t},\n\tBox: function(_type, _size, _name, _uuid) {\n\t\tthis.type = _type;\n\t\tthis.box_name = _name;\n\t\tthis.size = _size;\n\t\tthis.uuid = _uuid;\n\t},\n\tFullBox: function(type, size, name, uuid) {\n\t\tBoxParser.Box.call(this, type, size, name, uuid);\n\t\tthis.flags = 0;\n\t\tthis.version = 0;\n\t},\n\tContainerBox: function(type, size, name, uuid) {\n\t\tBoxParser.Box.call(this, type, size, name, uuid);\n\t\tthis.boxes = [];\n\t},\n\tSampleEntry: function(type, size, hdr_size, start) {\n\t\tBoxParser.ContainerBox.call(this, type, size);\n\t\tthis.hdr_size = hdr_size;\n\t\tthis.start = start;\n\t},\n\tSampleGroupEntry: function(type) {\n\t\tthis.grouping_type = type;\n\t},\n\tTrackGroupTypeBox: function(type, size) {\n\t\tBoxParser.FullBox.call(this, type, size);\n\t},\n\tcreateBoxCtor: function(type, name, parseMethod){\n\t\tBoxParser.boxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.Box.call(this, type, size, name);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.Box();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateFullBoxCtor: function(type, name, parseMethod) {\n\t\t//BoxParser.fullBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.FullBox.call(this, type, size, name);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n\t\tBoxParser[type+\"Box\"].prototype.parse = function(stream) {\n\t\t\tthis.parseFullHeader(stream);\n\t\t\tif (parseMethod) {\n\t\t\t\tparseMethod.call(this, stream);\n\t\t\t}\n\t\t};\n\t},\n\taddSubBoxArrays: function(subBoxNames) {\n\t\tif (subBoxNames) {\n\t\t\tthis.subBoxNames = subBoxNames;\n\t\t\tvar nbSubBoxes = subBoxNames.length;\n\t\t\tfor (var k = 0; k<nbSubBoxes; k++) {\n\t\t\t\tthis[subBoxNames[k]+\"s\"] = [];\n\t\t\t}\n\t\t}\n\t},\n\tcreateContainerBoxCtor: function(type, name, parseMethod, subBoxNames) {\n\t\t//BoxParser.containerBoxCodes.push(type);\n\t\tBoxParser[type+\"Box\"] = function(size) {\n\t\t\tBoxParser.ContainerBox.call(this, type, size, name);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t}\n\t\tBoxParser[type+\"Box\"].prototype = new BoxParser.ContainerBox();\n\t\tif (parseMethod) BoxParser[type+\"Box\"].prototype.parse = parseMethod;\n\t},\n\tcreateMediaSampleEntryCtor: function(mediaType, parseMethod, subBoxNames) {\n\t\tBoxParser.sampleEntryCodes[mediaType] = [];\n\t\tBoxParser[mediaType+\"SampleEntry\"] = function(type, size) {\n\t\t\tBoxParser.SampleEntry.call(this, type, size);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t};\n\t\tBoxParser[mediaType+\"SampleEntry\"].prototype = new BoxParser.SampleEntry();\n\t\tif (parseMethod) BoxParser[mediaType+\"SampleEntry\"].prototype .parse = parseMethod;\n\t},\n\tcreateSampleEntryCtor: function(mediaType, type, parseMethod, subBoxNames) {\n\t\tBoxParser.sampleEntryCodes[mediaType].push(type);\n\t\tBoxParser[type+\"SampleEntry\"] = function(size) {\n\t\t\tBoxParser[mediaType+\"SampleEntry\"].call(this, type, size);\n\t\t\tBoxParser.addSubBoxArrays.call(this, subBoxNames);\n\t\t};\n\t\tBoxParser[type+\"SampleEntry\"].prototype = new BoxParser[mediaType+\"SampleEntry\"]();\n\t\tif (parseMethod) BoxParser[type+\"SampleEntry\"].prototype.parse = parseMethod;\n\t},\n\tcreateEncryptedSampleEntryCtor: function(mediaType, type, parseMethod) {\n\t\tBoxParser.createSampleEntryCtor.call(this, mediaType, type, parseMethod, [\"sinf\"]);\n\t},\n\tcreateSampleGroupCtor: function(type, parseMethod) {\n\t\t//BoxParser.sampleGroupEntryCodes.push(type);\n\t\tBoxParser[type+\"SampleGroupEntry\"] = function(size) {\n\t\t\tBoxParser.SampleGroupEntry.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"SampleGroupEntry\"].prototype = new BoxParser.SampleGroupEntry();\n\t\tif (parseMethod) BoxParser[type+\"SampleGroupEntry\"].prototype.parse = parseMethod;\n\t},\n\tcreateTrackGroupCtor: function(type, parseMethod) {\n\t\t//BoxParser.trackGroupTypes.push(type);\n\t\tBoxParser[type+\"TrackGroupTypeBox\"] = function(size) {\n\t\t\tBoxParser.TrackGroupTypeBox.call(this, type, size);\n\t\t}\n\t\tBoxParser[type+\"TrackGroupTypeBox\"].prototype = new BoxParser.TrackGroupTypeBox();\n\t\tif (parseMethod) BoxParser[type+\"TrackGroupTypeBox\"].prototype.parse = parseMethod;\n\t},\n\tcreateUUIDBox: function(uuid, name, isFullBox, isContainerBox, parseMethod) {\n\t\tBoxParser.UUIDs.push(uuid);\n\t\tBoxParser.UUIDBoxes[uuid] = function(size) {\n\t\t\tif (isFullBox) {\n\t\t\t\tBoxParser.FullBox.call(this, \"uuid\", size, name, uuid);\n\t\t\t} else {\n\t\t\t\tif (isContainerBox) {\n\t\t\t\t\tBoxParser.ContainerBox.call(this, \"uuid\", size, name, uuid);\n\t\t\t\t} else {\n\t\t\t\t\tBoxParser.Box.call(this, \"uuid\", size, name, uuid);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tBoxParser.UUIDBoxes[uuid].prototype = (isFullBox ? new BoxParser.FullBox() : (isContainerBox ? new BoxParser.ContainerBox() : new BoxParser.Box()));\n\t\tif (parseMethod) {\n\t\t\tif (isFullBox) {\n\t\t\t\tBoxParser.UUIDBoxes[uuid].prototype.parse = function(stream) {\n\t\t\t\t\tthis.parseFullHeader(stream);\n\t\t\t\t\tif (parseMethod) {\n\t\t\t\t\t\tparseMethod.call(this, stream);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tBoxParser.UUIDBoxes[uuid].prototype.parse = parseMethod;\n\t\t\t}\n\t\t}\n\t}\n}\n\nBoxParser.initialize();\n\nBoxParser.TKHD_FLAG_ENABLED = 0x000001;\nBoxParser.TKHD_FLAG_IN_MOVIE = 0x000002;\nBoxParser.TKHD_FLAG_IN_PREVIEW = 0x000004;\n\nBoxParser.TFHD_FLAG_BASE_DATA_OFFSET\t= 0x01;\nBoxParser.TFHD_FLAG_SAMPLE_DESC\t\t\t= 0x02;\nBoxParser.TFHD_FLAG_SAMPLE_DUR\t\t\t= 0x08;\nBoxParser.TFHD_FLAG_SAMPLE_SIZE\t\t\t= 0x10;\nBoxParser.TFHD_FLAG_SAMPLE_FLAGS\t\t= 0x20;\nBoxParser.TFHD_FLAG_DUR_EMPTY\t\t\t= 0x10000;\nBoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF= 0x20000;\n\nBoxParser.TRUN_FLAGS_DATA_OFFSET= 0x01;\nBoxParser.TRUN_FLAGS_FIRST_FLAG\t= 0x04;\nBoxParser.TRUN_FLAGS_DURATION\t= 0x100;\nBoxParser.TRUN_FLAGS_SIZE\t\t= 0x200;\nBoxParser.TRUN_FLAGS_FLAGS\t\t= 0x400;\nBoxParser.TRUN_FLAGS_CTS_OFFSET\t= 0x800;\n\nBoxParser.Box.prototype.add = function(name) {\n\treturn this.addBox(new BoxParser[name+\"Box\"]());\n}\n\nBoxParser.Box.prototype.addBox = function(box) {\n\tthis.boxes.push(box);\n\tif (this[box.type+\"s\"]) {\n\t\tthis[box.type+\"s\"].push(box);\n\t} else {\n\t\tthis[box.type] = box;\n\t}\n\treturn box;\n}\n\nBoxParser.Box.prototype.set = function(prop, value) {\n\tthis[prop] = value;\n\treturn this;\n}\n\nBoxParser.Box.prototype.addEntry = function(value, _prop) {\n\tvar prop = _prop || \"entries\";\n\tif (!this[prop]) {\n\t\tthis[prop] = [];\n\t}\n\tthis[prop].push(value);\n\treturn this;\n}\n\nif (typeof exports !== \"undefined\") {\n\texports.BoxParser = BoxParser;\n}\n// file:src/box-parse.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.parseUUID = function(stream) {\n\treturn BoxParser.parseHex16(stream);\n}\n\nBoxParser.parseHex16 = function(stream) {\n\tvar hex16 = \"\"\n\tfor (var i = 0; i <16; i++) {\n\t\tvar hex = stream.readUint8().toString(16);\n\t\thex16 += (hex.length === 1 ? \"0\"+hex : hex);\n\t}\n\treturn hex16;\n}\n\nBoxParser.parseOneBox = function(stream, headerOnly, parentSize) {\n\tvar box;\n\tvar start = stream.getPosition();\n\tvar hdr_size = 0;\n\tvar diff;\n\tvar uuid;\n\tif (stream.getEndPosition() - start < 8) {\n\t\tLog.debug(\"BoxParser\", \"Not enough data in stream to parse the type and size of the box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t}\n\tif (parentSize && parentSize < 8) {\n\t\tLog.debug(\"BoxParser\", \"Not enough bytes left in the parent box to parse a new box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t}\n\tvar size = stream.readUint32();\n\tvar type = stream.readString(4);\n\tvar box_type = type;\n\tLog.debug(\"BoxParser\", \"Found box of type '\"+type+\"' and size \"+size+\" at position \"+start);\n\thdr_size = 8;\n\tif (type == \"uuid\") {\n\t\tif ((stream.getEndPosition() - stream.getPosition() < 16) || (parentSize -hdr_size < 16)) {\n\t\t\tstream.seek(start);\n\t\t\tLog.debug(\"BoxParser\", \"Not enough bytes left in the parent box to parse a UUID box\");\n\t\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t\t}\n\t\tuuid = BoxParser.parseUUID(stream);\n\t\thdr_size += 16;\n\t\tbox_type = uuid;\n\t}\n\tif (size == 1) {\n\t\tif ((stream.getEndPosition() - stream.getPosition() < 8) || (parentSize && (parentSize - hdr_size) < 8)) {\n\t\t\tstream.seek(start);\n\t\t\tLog.warn(\"BoxParser\", \"Not enough data in stream to parse the extended size of the \\\"\"+type+\"\\\" box\");\n\t\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA };\n\t\t}\n\t\tsize = stream.readUint64();\n\t\thdr_size += 8;\n\t} else if (size === 0) {\n\t\t/* box extends till the end of file or invalid file */\n\t\tif (parentSize) {\n\t\t\tsize = parentSize;\n\t\t} else {\n\t\t\t/* box extends till the end of file */\n\t\t\tif (type !== \"mdat\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Unlimited box size not supported for type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\treturn { code: BoxParser.OK, box: box, size: box.size };\n\t\t\t}\n\t\t}\n\t}\n\tif (size !== 0 && size < hdr_size) {\n\t\tLog.error(\"BoxParser\", \"Box of type \"+type+\" has an invalid size \"+size+\" (too small to be a box)\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && parentSize && size > parentSize) {\n\t\tLog.error(\"BoxParser\", \"Box of type '\"+type+\"' has a size \"+size+\" greater than its container size \"+parentSize);\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (size !== 0 && start + size > stream.getEndPosition()) {\n\t\tstream.seek(start);\n\t\tLog.info(\"BoxParser\", \"Not enough data in stream to parse the entire '\"+type+\"' box\");\n\t\treturn { code: BoxParser.ERR_NOT_ENOUGH_DATA, type: type, size: size, hdr_size: hdr_size, start: start };\n\t}\n\tif (headerOnly) {\n\t\treturn { code: BoxParser.OK, type: type, size: size, hdr_size: hdr_size, start: start };\n\t} else {\n\t\tif (BoxParser[type+\"Box\"]) {\n\t\t\tbox = new BoxParser[type+\"Box\"](size);\n\t\t} else {\n\t\t\tif (type !== \"uuid\") {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown box type: '\"+type+\"'\");\n\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t} else {\n\t\t\t\tif (BoxParser.UUIDBoxes[uuid]) {\n\t\t\t\t\tbox = new BoxParser.UUIDBoxes[uuid](size);\n\t\t\t\t} else {\n\t\t\t\t\tLog.warn(\"BoxParser\", \"Unknown uuid type: '\"+uuid+\"'\");\n\t\t\t\t\tbox = new BoxParser.Box(type, size);\n\t\t\t\t\tbox.uuid = uuid;\n\t\t\t\t\tbox.has_unparsed_data = true;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\tbox.hdr_size = hdr_size;\n\t/* recording the position of the box in the input stream */\n\tbox.start = start;\n\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\tLog.info(\"BoxParser\", \"'\"+box_type+\"' box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\tbox.parseDataAndRewind(stream);\n\t}\n\tbox.parse(stream);\n\tdiff = stream.getPosition() - (box.start+box.size);\n\tif (diff < 0) {\n\t\tLog.warn(\"BoxParser\", \"Parsing of box '\"+box_type+\"' did not read the entire indicated box data size (missing \"+(-diff)+\" bytes), seeking forward\");\n\t\tstream.seek(box.start+box.size);\n\t} else if (diff > 0) {\n\t\tLog.error(\"BoxParser\", \"Parsing of box '\"+box_type+\"' read \"+diff+\" more bytes than the indicated box data size, seeking backwards\");\n\t\tif (box.size !== 0) stream.seek(box.start+box.size);\n\t}\n\treturn { code: BoxParser.OK, box: box, size: box.size };\n}\n\nBoxParser.Box.prototype.parse = function(stream) {\n\tif (this.type != \"mdat\") {\n\t\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t} else {\n\t\tif (this.size === 0) {\n\t\t\tstream.seek(stream.getEndPosition());\n\t\t} else {\n\t\t\tstream.seek(this.start+this.size);\n\t\t}\n\t}\n}\n\n/* Used to parse a box without consuming its data, to allow detailled parsing\n Useful for boxes for which a write method is not yet implemented */\nBoxParser.Box.prototype.parseDataAndRewind = function(stream) {\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n\t// restore the header size as if the full header had not been parsed\n\tthis.hdr_size -= 4;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.FullBox.prototype.parseFullHeader = function (stream) {\n\tthis.version = stream.readUint8();\n\tthis.flags = stream.readUint24();\n\tthis.hdr_size += 4;\n}\n\nBoxParser.FullBox.prototype.parse = function (stream) {\n\tthis.parseFullHeader(stream);\n\tthis.data = stream.readUint8Array(this.size-this.hdr_size);\n}\n\nBoxParser.ContainerBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\t/* store the box in the 'boxes' array to preserve box order (for offset) but also store box in a property for more direct access */\n\t\t\tthis.boxes.push(box);\n\t\t\tif (this.subBoxNames && this.subBoxNames.indexOf(box.type) != -1) {\n\t\t\t\tthis[this.subBoxNames[this.subBoxNames.indexOf(box.type)]+\"s\"].push(box);\n\t\t\t} else {\n\t\t\t\tvar box_type = box.type !== \"uuid\" ? box.type : box.uuid;\n\t\t\t\tif (this[box_type]) {\n\t\t\t\t\tLog.warn(\"Box of type \"+box_type+\" already stored in field of this type\");\n\t\t\t\t} else {\n\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\nBoxParser.Box.prototype.parseLanguage = function(stream) {\n\tthis.language = stream.readUint16();\n\tvar chars = [];\n\tchars[0] = (this.language>>10)&0x1F;\n\tchars[1] = (this.language>>5)&0x1F;\n\tchars[2] = (this.language)&0x1F;\n\tthis.languageString = String.fromCharCode(chars[0]+0x60, chars[1]+0x60, chars[2]+0x60);\n}\n\n// file:src/parsing/sampleentries/sampleentry.js\nBoxParser.SAMPLE_ENTRY_TYPE_VISUAL \t\t= \"Visual\";\nBoxParser.SAMPLE_ENTRY_TYPE_AUDIO \t\t= \"Audio\";\nBoxParser.SAMPLE_ENTRY_TYPE_HINT \t\t= \"Hint\";\nBoxParser.SAMPLE_ENTRY_TYPE_METADATA \t= \"Metadata\";\nBoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE \t= \"Subtitle\";\nBoxParser.SAMPLE_ENTRY_TYPE_SYSTEM \t\t= \"System\";\nBoxParser.SAMPLE_ENTRY_TYPE_TEXT \t\t= \"Text\";\n\nBoxParser.SampleEntry.prototype.parseHeader = function(stream) {\n\tstream.readUint8Array(6);\n\tthis.data_reference_index = stream.readUint16();\n\tthis.hdr_size += 8;\n}\n\nBoxParser.SampleEntry.prototype.parse = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n}\n\nBoxParser.SampleEntry.prototype.parseDataAndRewind = function(stream) {\n\tthis.parseHeader(stream);\n\tthis.data = stream.readUint8Array(this.size - this.hdr_size);\n\t// restore the header size as if the sample entry header had not been parsed\n\tthis.hdr_size -= 8;\n\t// rewinding\n\tstream.position -= this.size-this.hdr_size;\n}\n\nBoxParser.SampleEntry.prototype.parseFooter = function(stream) {\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n}\n\n// Base SampleEntry types with default parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_HINT);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM);\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT);\n\n//Base SampleEntry types for Audio and Video with specific parsing\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, function(stream) {\n\tvar compressorname_length;\n\tthis.parseHeader(stream);\n\tstream.readUint16();\n\tstream.readUint16();\n\tstream.readUint32Array(3);\n\tthis.width = stream.readUint16();\n\tthis.height = stream.readUint16();\n\tthis.horizresolution = stream.readUint32();\n\tthis.vertresolution = stream.readUint32();\n\tstream.readUint32();\n\tthis.frame_count = stream.readUint16();\n\tcompressorname_length = Math.min(31, stream.readUint8());\n\tthis.compressorname = stream.readString(compressorname_length);\n\tif (compressorname_length < 31) {\n\t\tstream.readString(31 - compressorname_length);\n\t}\n\tthis.depth = stream.readUint16();\n\tstream.readUint16();\n\tthis.parseFooter(stream);\n});\n\nBoxParser.createMediaSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, function(stream) {\n\tthis.parseHeader(stream);\n\tstream.readUint32Array(2);\n\tthis.channel_count = stream.readUint16();\n\tthis.samplesize = stream.readUint16();\n\tstream.readUint16();\n\tstream.readUint16();\n\tthis.samplerate = (stream.readUint32()/(1<<16));\n\tthis.parseFooter(stream);\n});\n\n// Sample entries inheriting from Audio and Video\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avc4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"av01\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dav1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hev1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"hvt1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"lhe1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvh1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"dvhe\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvc1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvi1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvs1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vvcN\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp08\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"vp09\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"avs3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"j2ki\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjp2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \"mjpg\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL,\t\"uncv\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mp4a\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ac-4\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"ec-3\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"Opus\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mha2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm1\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"mhm2\");\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"fLaC\");\n\n// Encrypted sample entries\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_VISUAL, \t\"encv\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_AUDIO, \t\"enca\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \t\"encu\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SYSTEM, \t\"encs\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_TEXT, \t\t\"enct\");\nBoxParser.createEncryptedSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \t\"encm\");\n// file:src/parsing/a1lx.js\nBoxParser.createBoxCtor(\"a1lx\", \"AV1LayeredImageIndexingProperty\", function(stream) {\n\tvar large_size = stream.readUint8() & 1;\n\tvar FieldLength = ((large_size & 1) + 1) * 16;\n\tthis.layer_size = [];\n\tfor (var i = 0; i < 3; i++) {\n\t\tif (FieldLength == 16) {\n\t\t\tthis.layer_size[i] = stream.readUint16();\n\t\t} else {\n\t\t\tthis.layer_size[i] = stream.readUint32();\n\t\t}\n\t}\n});// file:src/parsing/a1op.js\nBoxParser.createBoxCtor(\"a1op\", \"OperatingPointSelectorProperty\", function(stream) {\n\tthis.op_index = stream.readUint8();\n});// file:src/parsing/auxC.js\nBoxParser.createFullBoxCtor(\"auxC\", \"AuxiliaryTypeProperty\", function(stream) {\n\tthis.aux_type = stream.readCString();\n\tvar aux_subtype_length = this.size - this.hdr_size - (this.aux_type.length + 1);\n\tthis.aux_subtype = stream.readUint8Array(aux_subtype_length);\n});// file:src/parsing/av1C.js\nBoxParser.createBoxCtor(\"av1C\", \"AV1CodecConfigurationBox\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tvar tmp = stream.readUint8();\n\tif ((tmp >> 7 & 0x1) !== 1) {\n\t\tLog.error(\"av1C marker problem\");\n\t\treturn;\n\t}\n\tthis.version = tmp & 0x7F;\n\tif (this.version !== 1) {\n\t\tLog.error(\"av1C version \"+this.version+\" not supported\");\n\t\treturn;\n\t}\n\ttmp = stream.readUint8();\n\tthis.seq_profile = (tmp >> 5) & 0x7;\n\tthis.seq_level_idx_0 = tmp & 0x1F;\n\ttmp = stream.readUint8();\n\tthis.seq_tier_0 = (tmp >> 7) & 0x1;\n\tthis.high_bitdepth = (tmp >> 6) & 0x1;\n\tthis.twelve_bit = (tmp >> 5) & 0x1;\n\tthis.monochrome = (tmp >> 4) & 0x1;\n\tthis.chroma_subsampling_x = (tmp >> 3) & 0x1;\n\tthis.chroma_subsampling_y = (tmp >> 2) & 0x1;\n\tthis.chroma_sample_position = (tmp & 0x3);\n\ttmp = stream.readUint8();\n\tthis.reserved_1 = (tmp >> 5) & 0x7;\n\tif (this.reserved_1 !== 0) {\n\t\tLog.error(\"av1C reserved_1 parsing problem\");\n\t\treturn;\n\t}\n\tthis.initial_presentation_delay_present = (tmp >> 4) & 0x1;\n\tif (this.initial_presentation_delay_present === 1) {\n\t\tthis.initial_presentation_delay_minus_one = (tmp & 0xF);\n\t} else {\n\t\tthis.reserved_2 = (tmp & 0xF);\n\t\tif (this.reserved_2 !== 0) {\n\t\t\tLog.error(\"av1C reserved_2 parsing problem\");\n\t\t\treturn;\n\t\t}\n\t}\n\n\tvar configOBUs_length = this.size - this.hdr_size - 4;\n\tthis.configOBUs = stream.readUint8Array(configOBUs_length);\n});\n\n// file:src/parsing/avcC.js\nfunction printPS(ps) {\n\tvar str = \"<table class='inner-table'>\";\n\tstr += \"<thead><tr><th>length</th><th>nalu_data</th></tr></thead>\";\n\tstr += \"<tbody>\";\n\n\tfor (var i=0; i < ps.length; i++) {\n\t\tvar nalu = ps[i];\n\t\tstr += \"<tr>\";\n\t\tstr += \"<td>\"+nalu.length+\"</td>\";\n\t\tstr += \"<td>\";\n\t\tstr += nalu.nalu.reduce(function(str, byte) {\n\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t}, \"0x\");\n\t\tstr += \"</td></tr>\";\n\t}\n\tstr += \"</tbody></table>\";\n\treturn str;\n}\n\nBoxParser.createBoxCtor(\"avcC\", \"AVCConfigurationBox\", function(stream) {\n\tvar i;\n\tvar toparse;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.AVCProfileIndication = stream.readUint8();\n\tthis.profile_compatibility = stream.readUint8();\n\tthis.AVCLevelIndication = stream.readUint8();\n\tthis.lengthSizeMinusOne = (stream.readUint8() & 0x3);\n\tthis.nb_SPS_nalus = (stream.readUint8() & 0x1F);\n\ttoparse = this.size - this.hdr_size - 6;\n\tthis.SPS = [];\n\tthis.SPS.toString = function () {\n\t\treturn printPS(this);\n\t}\n\tfor (i = 0; i < this.nb_SPS_nalus; i++) {\n\t\tthis.SPS[i] = {};\n\t\tthis.SPS[i].length = stream.readUint16();\n\t\tthis.SPS[i].nalu = stream.readUint8Array(this.SPS[i].length);\n\t\ttoparse -= 2+this.SPS[i].length;\n\t}\n\tthis.nb_PPS_nalus = stream.readUint8();\n\ttoparse--;\n\tthis.PPS = [];\n\tthis.PPS.toString = function () {\n\t\treturn printPS(this);\n\t}\n\tfor (i = 0; i < this.nb_PPS_nalus; i++) {\n\t\tthis.PPS[i] = {};\n\t\tthis.PPS[i].length = stream.readUint16();\n\t\tthis.PPS[i].nalu = stream.readUint8Array(this.PPS[i].length);\n\t\ttoparse -= 2+this.PPS[i].length;\n\t}\n\tif (toparse>0) {\n\t\tthis.ext = stream.readUint8Array(toparse);\n\t}\n});\n\n// file:src/parsing/btrt.js\nBoxParser.createBoxCtor(\"btrt\", \"BitRateBox\", function(stream) {\n\tthis.bufferSizeDB = stream.readUint32();\n\tthis.maxBitrate = stream.readUint32();\n\tthis.avgBitrate = stream.readUint32();\n});\n\n// file:src/parsing/ccst.js\nBoxParser.createFullBoxCtor(\"ccst\", \"CodingConstraintsBox\", function(stream) {\n\tvar flags = stream.readUint8();\n\tthis.all_ref_pics_intra = ((flags & 0x80) == 0x80);\n\tthis.intra_pred_used = ((flags & 0x40) == 0x40);\n\tthis.max_ref_per_pic = ((flags & 0x3f) >> 2);\n\tstream.readUint24();\n});\n\n// file:src/parsing/cdef.js\nBoxParser.createBoxCtor(\"cdef\", \"ComponentDefinitionBox\", function(stream) {\n var i;\n this.channel_count = stream.readUint16();\n this.channel_indexes = [];\n this.channel_types = [];\n this.channel_associations = [];\n for (i = 0; i < this.channel_count; i++) {\n this.channel_indexes.push(stream.readUint16());\n this.channel_types.push(stream.readUint16());\n this.channel_associations.push(stream.readUint16());\n }\n});\n\n// file:src/parsing/clap.js\nBoxParser.createBoxCtor(\"clap\", \"CleanApertureBox\", function(stream) {\n\tthis.cleanApertureWidthN = stream.readUint32();\n\tthis.cleanApertureWidthD = stream.readUint32();\n\tthis.cleanApertureHeightN = stream.readUint32();\n\tthis.cleanApertureHeightD = stream.readUint32();\n\tthis.horizOffN = stream.readUint32();\n\tthis.horizOffD = stream.readUint32();\n\tthis.vertOffN = stream.readUint32();\n\tthis.vertOffD = stream.readUint32();\n});// file:src/parsing/clli.js\nBoxParser.createBoxCtor(\"clli\", \"ContentLightLevelBox\", function(stream) {\n\tthis.max_content_light_level = stream.readUint16();\n this.max_pic_average_light_level = stream.readUint16();\n});\n\n// file:src/parsing/cmex.js\nBoxParser.createFullBoxCtor(\"cmex\", \"CameraExtrinsicMatrixProperty\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.pos_x = stream.readInt32();\n\t}\n\tif (this.flags & 0x2) {\n\t\tthis.pos_y = stream.readInt32();\n\t}\n\tif (this.flags & 0x4) {\n\t\tthis.pos_z = stream.readInt32();\n\t}\n\tif (this.flags & 0x8) {\n\t\tif (this.version == 0) {\n\t\t\tif (this.flags & 0x10) {\n\t\t\t\tthis.quat_x = stream.readInt32();\n\t\t\t\tthis.quat_y = stream.readInt32();\n\t\t\t\tthis.quat_z = stream.readInt32();\n\t\t\t} else {\n\t\t\t\tthis.quat_x = stream.readInt16();\n\t\t\t\tthis.quat_y = stream.readInt16();\n\t\t\t\tthis.quat_z = stream.readInt16();\n\t\t\t}\n\t\t} else if (this.version == 1) {\n\t\t\t//ViewpointGlobalCoordinateSysRotationStruct rot;\n\t\t}\n\t}\n\tif (this.flags & 0x20) {\n\t\tthis.id = stream.readUint32();\n\t}\n});\n// file:src/parsing/cmin.js\nBoxParser.createFullBoxCtor(\"cmin\", \"CameraIntrinsicMatrixProperty\", function(stream) {\n\tthis.focal_length_x = stream.readInt32();\n\tthis.principal_point_x = stream.readInt32();\n\tthis.principal_point_y = stream.readInt32();\n\tif (this.flags & 0x1) {\n\t\tthis.focal_length_y = stream.readInt32();\n\t\tthis.skew_factor = stream.readInt32();\n\t}\n});// file:src/parsing/cmpd.js\nBoxParser.createBoxCtor(\"cmpd\", \"ComponentDefinitionBox\", function(stream) {\n\tthis.component_count = stream.readUint32();\n\tthis.component_types = [];\n\tthis.component_type_urls = [];\n\tfor (i = 0; i < this.component_count; i++) {\n\t\tvar component_type = stream.readUint16();\n\t\tthis.component_types.push(component_type);\n\t\tif (component_type >= 0x8000) {\n\t\t\tthis.component_type_urls.push(stream.readCString());\n\t\t}\n\t}\n});// file:src/parsing/co64.js\nBoxParser.createFullBoxCtor(\"co64\", \"ChunkLargeOffsetBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint64());\n\t\t}\n\t}\n});\n\n// file:src/parsing/CoLL.js\nBoxParser.createFullBoxCtor(\"CoLL\", \"ContentLightLevelBox\", function(stream) {\n\tthis.maxCLL = stream.readUint16();\n this.maxFALL = stream.readUint16();\n});\n\n// file:src/parsing/colr.js\nBoxParser.createBoxCtor(\"colr\", \"ColourInformationBox\", function(stream) {\n\tthis.colour_type = stream.readString(4);\n\tif (this.colour_type === 'nclx') {\n\t\tthis.colour_primaries = stream.readUint16();\n\t\tthis.transfer_characteristics = stream.readUint16();\n\t\tthis.matrix_coefficients = stream.readUint16();\n\t\tvar tmp = stream.readUint8();\n\t\tthis.full_range_flag = tmp >> 7;\n\t} else if (this.colour_type === 'rICC') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t} else if (this.colour_type === 'prof') {\n\t\tthis.ICC_profile = stream.readUint8Array(this.size - 4);\n\t}\n});// file:src/parsing/cprt.js\nBoxParser.createFullBoxCtor(\"cprt\", \"CopyrightBox\", function (stream) {\n\tthis.parseLanguage(stream);\n\tthis.notice = stream.readCString();\n});\n\n// file:src/parsing/cslg.js\nBoxParser.createFullBoxCtor(\"cslg\", \"CompositionToDecodeBox\", function(stream) {\n\tvar entry_count;\n\tif (this.version === 0) {\n\t\tthis.compositionToDTSShift = stream.readInt32(); /* signed */\n\t\tthis.leastDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.greatestDecodeToDisplayDelta = stream.readInt32(); /* signed */\n\t\tthis.compositionStartTime = stream.readInt32(); /* signed */\n\t\tthis.compositionEndTime = stream.readInt32(); /* signed */\n\t}\n});\n\n// file:src/parsing/ctts.js\nBoxParser.createFullBoxCtor(\"ctts\", \"CompositionOffsetBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_offsets = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\t/* some files are buggy and declare version=0 while using signed offsets.\n\t\t\t The likelyhood of using the most significant bit in a 32-bits time offset is very low,\n\t\t\t so using signed value here as well */\n\t\t\t var value = stream.readInt32();\n\t\t\t if (value < 0) {\n\t\t\t \t\tLog.warn(\"BoxParser\", \"ctts box uses negative values without using version 1\");\n\t\t\t }\n\t\t\tthis.sample_offsets.push(value);\n\t\t}\n\t} else if (this.version == 1) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\tthis.sample_offsets.push(stream.readInt32()); /* signed */\n\t\t}\n\t}\n});\n\n// file:src/parsing/dac3.js\nBoxParser.createBoxCtor(\"dac3\", \"AC3SpecificBox\", function(stream) {\n\tvar tmp_byte1 = stream.readUint8();\n\tvar tmp_byte2 = stream.readUint8();\n\tvar tmp_byte3 = stream.readUint8();\n\tthis.fscod = tmp_byte1 >> 6;\n\tthis.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\tthis.bsmod = ((tmp_byte1 & 0x1) << 2) | ((tmp_byte2 >> 6) & 0x3);\n\tthis.acmod = ((tmp_byte2 >> 3) & 0x7);\n\tthis.lfeon = ((tmp_byte2 >> 2) & 0x1);\n\tthis.bit_rate_code = (tmp_byte2 & 0x3) | ((tmp_byte3 >> 5) & 0x7);\n});\n\n// file:src/parsing/dec3.js\nBoxParser.createBoxCtor(\"dec3\", \"EC3SpecificBox\", function(stream) {\n\tvar tmp_16 = stream.readUint16();\n\tthis.data_rate = tmp_16 >> 3;\n\tthis.num_ind_sub = tmp_16 & 0x7;\n\tthis.ind_subs = [];\n\tfor (var i = 0; i < this.num_ind_sub+1; i++) {\n\t\tvar ind_sub = {};\n\t\tthis.ind_subs.push(ind_sub);\n\t\tvar tmp_byte1 = stream.readUint8();\n\t\tvar tmp_byte2 = stream.readUint8();\n\t\tvar tmp_byte3 = stream.readUint8();\n\t\tind_sub.fscod = tmp_byte1 >> 6;\n\t\tind_sub.bsid = ((tmp_byte1 >> 1) & 0x1F);\n\t\tind_sub.bsmod = ((tmp_byte1 & 0x1) << 4) | ((tmp_byte2 >> 4) & 0xF);\n\t\tind_sub.acmod = ((tmp_byte2 >> 1) & 0x7);\n\t\tind_sub.lfeon = (tmp_byte2 & 0x1);\n\t\tind_sub.num_dep_sub = ((tmp_byte3 >> 1) & 0xF);\n\t\tif (ind_sub.num_dep_sub > 0) {\n\t\t\tind_sub.chan_loc = ((tmp_byte3 & 0x1) << 8) | stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dfLa.js\nBoxParser.createFullBoxCtor(\"dfLa\", \"FLACSpecificBox\", function(stream) {\n var BLOCKTYPE_MASK = 0x7F;\n var LASTMETADATABLOCKFLAG_MASK = 0x80;\n\n var boxesFound = [];\n var knownBlockTypes = [\n \"STREAMINFO\",\n \"PADDING\",\n \"APPLICATION\",\n \"SEEKTABLE\",\n \"VORBIS_COMMENT\",\n \"CUESHEET\",\n \"PICTURE\",\n \"RESERVED\"\n ];\n\n // for (i=0; ; i++) { // to end of box\n do {\n var flagAndType = stream.readUint8();\n\n var type = Math.min(\n (flagAndType & BLOCKTYPE_MASK),\n (knownBlockTypes.length - 1)\n );\n\n // if this is a STREAMINFO block, read the true samplerate since this\n // can be different to the AudioSampleEntry samplerate.\n if (!(type)) {\n // read past all the other stuff\n stream.readUint8Array(13);\n\n // extract samplerate\n this.samplerate = (stream.readUint32() >> 12);\n\n // read to end of STREAMINFO\n stream.readUint8Array(20);\n } else {\n // not interested in other block types so just discard length bytes\n stream.readUint8Array(stream.readUint24());\n }\n\n boxesFound.push(knownBlockTypes[type]);\n\n if (!!(flagAndType & LASTMETADATABLOCKFLAG_MASK)) {\n break;\n }\n } while (true);\n\n this.numMetadataBlocks =\n boxesFound.length + \" (\" + boxesFound.join(\", \") + \")\";\n});\n// file:src/parsing/dimm.js\nBoxParser.createBoxCtor(\"dimm\", \"hintimmediateBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dmax.js\nBoxParser.createBoxCtor(\"dmax\", \"hintlongestpacket\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/dmed.js\nBoxParser.createBoxCtor(\"dmed\", \"hintmediaBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/dOps.js\nBoxParser.createBoxCtor(\"dOps\", \"OpusSpecificBox\", function(stream) {\n\tthis.Version = stream.readUint8();\n\tthis.OutputChannelCount = stream.readUint8();\n\tthis.PreSkip = stream.readUint16();\n\tthis.InputSampleRate = stream.readUint32();\n\tthis.OutputGain = stream.readInt16();\n\tthis.ChannelMappingFamily = stream.readUint8();\n\tif (this.ChannelMappingFamily !== 0) {\n\t\tthis.StreamCount = stream.readUint8();\n\t\tthis.CoupledCount = stream.readUint8();\n\t\tthis.ChannelMapping = [];\n\t\tfor (var i = 0; i < this.OutputChannelCount; i++) {\n\t\t\tthis.ChannelMapping[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/dref.js\nBoxParser.createFullBoxCtor(\"dref\", \"DataReferenceBox\", function(stream) {\n\tvar ret;\n\tvar box;\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/drep.js\nBoxParser.createBoxCtor(\"drep\", \"hintrepeatedBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/elng.js\nBoxParser.createFullBoxCtor(\"elng\", \"ExtendedLanguageBox\", function(stream) {\n\tthis.extended_language = stream.readString(this.size-this.hdr_size);\n});\n\n// file:src/parsing/elst.js\nBoxParser.createFullBoxCtor(\"elst\", \"EditListBox\", function(stream) {\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tentry.segment_duration = stream.readUint64();\n\t\t\tentry.media_time = stream.readInt64();\n\t\t} else {\n\t\t\tentry.segment_duration = stream.readUint32();\n\t\t\tentry.media_time = stream.readInt32();\n\t\t}\n\t\tentry.media_rate_integer = stream.readInt16();\n\t\tentry.media_rate_fraction = stream.readInt16();\n\t}\n});\n\n// file:src/parsing/emsg.js\nBoxParser.createFullBoxCtor(\"emsg\", \"EventMessageBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time \t\t\t= stream.readUint64();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t} else {\n\t\tthis.scheme_id_uri \t\t\t\t= stream.readCString();\n\t\tthis.value \t\t\t\t\t\t= stream.readCString();\n\t\tthis.timescale \t\t\t\t\t= stream.readUint32();\n\t\tthis.presentation_time_delta \t= stream.readUint32();\n\t\tthis.event_duration\t\t\t \t= stream.readUint32();\n\t\tthis.id \t\t\t\t\t\t= stream.readUint32();\n\t}\n\tvar message_size = this.size - this.hdr_size - (4*4 + (this.scheme_id_uri.length+1) + (this.value.length+1));\n\tif (this.version == 1) {\n\t\tmessage_size -= 4;\n\t}\n\tthis.message_data = stream.readUint8Array(message_size);\n});\n\n// file:src/parsing/EntityToGroup.js\n// ISO/IEC 14496-12:2022 Section 8.18.3 Entity to group box\nBoxParser.createEntityToGroupCtor = function(type, parseMethod) {\n BoxParser[type+\"Box\"] = function(size) {\n BoxParser.FullBox.call(this, type, size);\n }\n BoxParser[type+\"Box\"].prototype = new BoxParser.FullBox();\n BoxParser[type+\"Box\"].prototype.parse = function(stream) {\n this.parseFullHeader(stream);\n if (parseMethod) {\n parseMethod.call(this, stream);\n } else {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n }\n };\n};\n\n// Auto exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.2.1)\nBoxParser.createEntityToGroupCtor(\"aebr\");\n\n// Flash exposure bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.5.1)\nBoxParser.createEntityToGroupCtor(\"afbr\");\n\n// Album collection (ISO/IEC 23008-12:2022 Section 6.8.7.1)\nBoxParser.createEntityToGroupCtor(\"albc\");\n\n// Alternative entity (ISO/IEC 14496-12:2022 Section 8.18.3.1)\nBoxParser.createEntityToGroupCtor(\"altr\");\n\n// Burst image entity group (ISO/IEC 23008-12:2022 Section 6.8.2.2)\nBoxParser.createEntityToGroupCtor(\"brst\");\n\n// Depth of field bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.6.1)\nBoxParser.createEntityToGroupCtor(\"dobr\");\n\n// Equivalent entity (ISO/IEC 23008-12:2022 Section 6.8.1.1)\nBoxParser.createEntityToGroupCtor(\"eqiv\");\n\n// Favourites collection (ISO/IEC 23008-12:2022 Section 6.8.7.2)\nBoxParser.createEntityToGroupCtor(\"favc\");\n\n// Focus bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.4.1)\nBoxParser.createEntityToGroupCtor(\"fobr\");\n\n// Audio to image entity group (ISO/IEC 23008-12:2022 Section 6.8.4)\nBoxParser.createEntityToGroupCtor(\"iaug\");\n\n// Panorama (ISO/IEC 23008-12:2022 Section 6.8.8.1)\nBoxParser.createEntityToGroupCtor(\"pano\");\n\n// Slideshow (ISO/IEC 23008-12:2022 Section 6.8.9.1)\nBoxParser.createEntityToGroupCtor(\"slid\");\n\n// Stereo pair (ISO/IEC 23008-12:2022 Section 6.8.5)\nBoxParser.createEntityToGroupCtor(\"ster\");\n\n// Time-synchronised capture entity group (ISO/IEC 23008-12:2022 Section 6.8.3)\nBoxParser.createEntityToGroupCtor(\"tsyn\");\n\n// White balance bracketing (ISO/IEC 23008-12:2022 Section 6.8.6.3.1)\nBoxParser.createEntityToGroupCtor(\"wbbr\");\n\n// Alternative entity (ISO/IEC 23008-12:2022 AMD1 Section 6.8.10)\nBoxParser.createEntityToGroupCtor(\"prgr\");\n\n// Image Pyramid entity group (ISO/IEC 23008-12:20xx Section 6.8.11)\nBoxParser.createEntityToGroupCtor(\"pymd\", function(stream) {\n this.group_id = stream.readUint32();\n this.num_entities_in_group = stream.readUint32();\n this.entity_ids = [];\n for (var i = 0; i < this.num_entities_in_group; i++) {\n var entity_id = stream.readUint32();\n this.entity_ids.push(entity_id);\n }\n \n this.tile_size_x = stream.readUint16();\n this.tile_size_y = stream.readUint16();\n this.layer_binning = [];\n this.tiles_in_layer_column_minus1 = [];\n this.tiles_in_layer_row_minus1 = [];\n for (i = 0; i < this.num_entities_in_group; i++) {\n this.layer_binning[i] = stream.readUint16();\n this.tiles_in_layer_row_minus1[i] = stream.readUint16();\n this.tiles_in_layer_column_minus1[i] = stream.readUint16();\n }\n});\n\n// file:src/parsing/esds.js\nBoxParser.createFullBoxCtor(\"esds\", \"ElementaryStreamDescriptorBox\", function(stream) {\n\tvar esd_data = stream.readUint8Array(this.size-this.hdr_size);\n\tif (typeof MPEG4DescriptorParser !== \"undefined\") {\n\t\tvar esd_parser = new MPEG4DescriptorParser();\n\t\tthis.esd = esd_parser.parseOneDescriptor(new DataStream(esd_data.buffer, 0, DataStream.BIG_ENDIAN));\n\t}\n});\n\n// file:src/parsing/fiel.js\nBoxParser.createBoxCtor(\"fiel\", \"FieldHandlingBox\", function(stream) {\n\tthis.fieldCount = stream.readUint8();\n\tthis.fieldOrdering = stream.readUint8();\n});\n\n// file:src/parsing/frma.js\nBoxParser.createBoxCtor(\"frma\", \"OriginalFormatBox\", function(stream) {\n\tthis.data_format = stream.readString(4);\n});\n\n// file:src/parsing/ftyp.js\nBoxParser.createBoxCtor(\"ftyp\", \"FileTypeBox\", function(stream) {\n\tvar toparse = this.size - this.hdr_size;\n\tthis.major_brand = stream.readString(4);\n\tthis.minor_version = stream.readUint32();\n\ttoparse -= 8;\n\tthis.compatible_brands = [];\n\tvar i = 0;\n\twhile (toparse>=4) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t\ttoparse -= 4;\n\t\ti++;\n\t}\n});\n\n// file:src/parsing/hdlr.js\nBoxParser.createFullBoxCtor(\"hdlr\", \"HandlerBox\", function(stream) {\n\tif (this.version === 0) {\n\t\tstream.readUint32();\n\t\tthis.handler = stream.readString(4);\n\t\tstream.readUint32Array(3);\n\t\tthis.name = stream.readString(this.size-this.hdr_size-20);\n\t\tif (this.name[this.name.length-1]==='\\0') {\n\t\t\tthis.name = this.name.slice(0,-1);\n\t\t}\n\t}\n});\n\n// file:src/parsing/hvcC.js\nBoxParser.createBoxCtor(\"hvcC\", \"HEVCConfigurationBox\", function(stream) {\n\tvar i, j;\n\tvar nb_nalus;\n\tvar length;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\ttmp_byte = stream.readUint8();\n\tthis.general_profile_space = tmp_byte >> 6;\n\tthis.general_tier_flag = (tmp_byte & 0x20) >> 5;\n\tthis.general_profile_idc = (tmp_byte & 0x1F);\n\tthis.general_profile_compatibility = stream.readUint32();\n\tthis.general_constraint_indicator = stream.readUint8Array(6);\n\tthis.general_level_idc = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\tthis.chroma_format_idc = (stream.readUint8() & 0x3);\n\tthis.bit_depth_luma_minus8 = (stream.readUint8() & 0x7);\n\tthis.bit_depth_chroma_minus8 = (stream.readUint8() & 0x7);\n\tthis.avgFrameRate = stream.readUint16();\n\ttmp_byte = stream.readUint8();\n\tthis.constantFrameRate = (tmp_byte >> 6);\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tthis.nalu_arrays.toString = function () {\n\t\tvar str = \"<table class='inner-table'>\";\n\t\tstr += \"<thead><tr><th>completeness</th><th>nalu_type</th><th>nalu_data</th></tr></thead>\";\n\t\tstr += \"<tbody>\";\n\n\t\tfor (var i=0; i<this.length; i++) {\n\t\t\tvar nalu_array = this[i];\n\t\t\tstr += \"<tr>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.completeness+\"</td>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.nalu_type+\"</td>\";\n\t\t\tfor (var j=0; j<nalu_array.length; j++) {\n\t\t\t\tvar nalu = nalu_array[j];\n\t\t\t\tif (j !== 0) str += \"<tr>\";\n\t\t\t\tstr += \"<td>\";\n\t\t\t\tstr += nalu.data.reduce(function(str, byte) {\n\t\t\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t\t\t}, \"0x\");\n\t\t\t\tstr += \"</td></tr>\";\n\t\t\t}\n\t\t}\n\t\tstr += \"</tbody></table>\";\n\t\treturn str;\n\t}\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tlength = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/iinf.js\nBoxParser.createFullBoxCtor(\"iinf\", \"ItemInfoBox\", function(stream) {\n\tvar ret;\n\tif (this.version === 0) {\n\t\tthis.entry_count = stream.readUint16();\n\t} else {\n\t\tthis.entry_count = stream.readUint32();\n\t}\n\tthis.item_infos = [];\n\tfor (var i = 0; i < this.entry_count; i++) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (ret.box.type !== \"infe\") {\n\t\t\t\tLog.error(\"BoxParser\", \"Expected 'infe' box, got \"+ret.box.type);\n\t\t\t}\n\t\t\tthis.item_infos[i] = ret.box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/iloc.js\nBoxParser.createFullBoxCtor(\"iloc\", \"ItemLocationBox\", function(stream) {\n\tvar byte;\n\tbyte = stream.readUint8();\n\tthis.offset_size = (byte >> 4) & 0xF;\n\tthis.length_size = byte & 0xF;\n\tbyte = stream.readUint8();\n\tthis.base_offset_size = (byte >> 4) & 0xF;\n\tif (this.version === 1 || this.version === 2) {\n\t\tthis.index_size = byte & 0xF;\n\t} else {\n\t\tthis.index_size = 0;\n\t\t// reserved = byte & 0xF;\n\t}\n\tthis.items = [];\n\tvar item_count = 0;\n\tif (this.version < 2) {\n\t\titem_count = stream.readUint16();\n\t} else if (this.version === 2) {\n\t\titem_count = stream.readUint32();\n\t} else {\n\t\tthrow \"version of iloc box not supported\";\n\t}\n\tfor (var i = 0; i < item_count; i++) {\n\t\tvar item = {};\n\t\tthis.items.push(item);\n\t\tif (this.version < 2) {\n\t\t\titem.item_ID = stream.readUint16();\n\t\t} else if (this.version === 2) {\n\t\t\titem.item_ID = stream.readUint32();\n\t\t} else {\n\t\t\tthrow \"version of iloc box not supported\";\n\t\t}\n\t\tif (this.version === 1 || this.version === 2) {\n\t\t\titem.construction_method = (stream.readUint16() & 0xF);\n\t\t} else {\n\t\t\titem.construction_method = 0;\n\t\t}\n\t\titem.data_reference_index = stream.readUint16();\n\t\tswitch(this.base_offset_size) {\n\t\t\tcase 0:\n\t\t\t\titem.base_offset = 0;\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\titem.base_offset = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 8:\n\t\t\t\titem.base_offset = stream.readUint64();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tthrow \"Error reading base offset size\";\n\t\t}\n\t\tvar extent_count = stream.readUint16();\n\t\titem.extents = [];\n\t\tfor (var j=0; j < extent_count; j++) {\n\t\t\tvar extent = {};\n\t\t\titem.extents.push(extent);\n\t\t\tif (this.version === 1 || this.version === 2) {\n\t\t\t\tswitch(this.index_size) {\n\t\t\t\t\tcase 0:\n\t\t\t\t\t\textent.extent_index = 0;\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 4:\n\t\t\t\t\t\textent.extent_index = stream.readUint32();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 8:\n\t\t\t\t\t\textent.extent_index = stream.readUint64();\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t\t}\n\t\t\t}\n\t\t\tswitch(this.offset_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_offset = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_offset = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_offset = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t\tswitch(this.length_size) {\n\t\t\t\tcase 0:\n\t\t\t\t\textent.extent_length = 0;\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\textent.extent_length = stream.readUint32();\n\t\t\t\t\tbreak;\n\t\t\t\tcase 8:\n\t\t\t\t\textent.extent_length = stream.readUint64();\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tthrow \"Error reading extent index\";\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/imir.js\nBoxParser.createBoxCtor(\"imir\", \"ImageMirror\", function(stream) {\n\tvar tmp = stream.readUint8();\n\tthis.reserved = tmp >> 7;\n\tthis.axis = tmp & 1;\n});// file:src/parsing/infe.js\nBoxParser.createFullBoxCtor(\"infe\", \"ItemInfoEntry\", function(stream) {\n\tif (this.version === 0 || this.version === 1) {\n\t\tthis.item_ID = stream.readUint16();\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_name = stream.readCString();\n\t\tthis.content_type = stream.readCString();\n\t\tthis.content_encoding = stream.readCString();\n\t}\n\tif (this.version === 1) {\n\t\tthis.extension_type = stream.readString(4);\n\t\tLog.warn(\"BoxParser\", \"Cannot parse extension type\");\n\t\tstream.seek(this.start+this.size);\n\t\treturn;\n\t}\n\tif (this.version >= 2) {\n\t\tif (this.version === 2) {\n\t\t\tthis.item_ID = stream.readUint16();\n\t\t} else if (this.version === 3) {\n\t\t\tthis.item_ID = stream.readUint32();\n\t\t}\n\t\tthis.item_protection_index = stream.readUint16();\n\t\tthis.item_type = stream.readString(4);\n\t\tthis.item_name = stream.readCString();\n\t\tif (this.item_type === \"mime\") {\n\t\t\tthis.content_type = stream.readCString();\n\t\t\tthis.content_encoding = stream.readCString();\n\t\t} else if (this.item_type === \"uri \") {\n\t\t\tthis.item_uri_type = stream.readCString();\n\t\t}\n\t}\n});\n// file:src/parsing/ipma.js\nBoxParser.createFullBoxCtor(\"ipma\", \"ItemPropertyAssociationBox\", function(stream) {\n\tvar i, j;\n\tentry_count = stream.readUint32();\n\tthis.associations = [];\n\tfor(i=0; i<entry_count; i++) {\n\t\tvar item_assoc = {};\n\t\tthis.associations.push(item_assoc);\n\t\tif (this.version < 1) {\n\t\t\titem_assoc.id = stream.readUint16();\n\t\t} else {\n\t\t\titem_assoc.id = stream.readUint32();\n\t\t}\n\t\tvar association_count = stream.readUint8();\n\t\titem_assoc.props = [];\n\t\tfor (j = 0; j < association_count; j++) {\n\t\t\tvar tmp = stream.readUint8();\n\t\t\tvar p = {};\n\t\t\titem_assoc.props.push(p);\n\t\t\tp.essential = ((tmp & 0x80) >> 7) === 1;\n\t\t\tif (this.flags & 0x1) {\n\t\t\t\tp.property_index = (tmp & 0x7F) << 8 | stream.readUint8();\n\t\t\t} else {\n\t\t\t\tp.property_index = (tmp & 0x7F);\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/iref.js\nBoxParser.createFullBoxCtor(\"iref\", \"ItemReferenceBox\", function(stream) {\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.references = [];\n\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t} else {\n\t\t\t\tbox = new BoxParser.SingleItemTypeReferenceBoxLarge(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.warn(\"BoxParser\", box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.references.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n// file:src/parsing/irot.js\nBoxParser.createBoxCtor(\"irot\", \"ImageRotation\", function(stream) {\n\tthis.angle = stream.readUint8() & 0x3;\n});\n\n// file:src/parsing/ispe.js\nBoxParser.createFullBoxCtor(\"ispe\", \"ImageSpatialExtentsProperty\", function(stream) {\n\tthis.image_width = stream.readUint32();\n\tthis.image_height = stream.readUint32();\n});// file:src/parsing/kind.js\nBoxParser.createFullBoxCtor(\"kind\", \"KindBox\", function(stream) {\n\tthis.schemeURI = stream.readCString();\n\tthis.value = stream.readCString();\n});\n// file:src/parsing/leva.js\nBoxParser.createFullBoxCtor(\"leva\", \"LevelAssignmentBox\", function(stream) {\n\tvar count = stream.readUint8();\n\tthis.levels = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tvar level = {};\n\t\tthis.levels[i] = level;\n\t\tlevel.track_ID = stream.readUint32();\n\t\tvar tmp_byte = stream.readUint8();\n\t\tlevel.padding_flag = tmp_byte >> 7;\n\t\tlevel.assignment_type = tmp_byte & 0x7F;\n\t\tswitch (level.assignment_type) {\n\t\t\tcase 0:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tlevel.grouping_type = stream.readString(4);\n\t\t\t\tlevel.grouping_type_parameter = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbreak;\n\t\t\tcase 4:\n\t\t\t\tlevel.sub_track_id = stream.readUint32();\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown leva assignement type\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/lhvC.js\nBoxParser.createBoxCtor(\"lhvC\", \"LHEVCConfigurationBox\", function(stream) {\n\tvar i, j;\n\tvar tmp_byte;\n\tthis.configurationVersion = stream.readUint8();\n\tthis.min_spatial_segmentation_idc = stream.readUint16() & 0xFFF;\n\tthis.parallelismType = (stream.readUint8() & 0x3);\n\ttmp_byte = stream.readUint8();\n\tthis.numTemporalLayers = (tmp_byte & 0XD) >> 3;\n\tthis.temporalIdNested = (tmp_byte & 0X4) >> 2;\n\tthis.lengthSizeMinusOne = (tmp_byte & 0X3);\n\n\tthis.nalu_arrays = [];\n\tthis.nalu_arrays.toString = function () {\n\t\tvar str = \"<table class='inner-table'>\";\n\t\tstr += \"<thead><tr><th>completeness</th><th>nalu_type</th><th>nalu_data</th></tr></thead>\";\n\t\tstr += \"<tbody>\";\n\n\t\tfor (var i=0; i<this.length; i++) {\n\t\t\tvar nalu_array = this[i];\n\t\t\tstr += \"<tr>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.completeness+\"</td>\";\n\t\t\tstr += \"<td rowspan='\"+nalu_array.length+\"'>\"+nalu_array.nalu_type+\"</td>\";\n\t\t\tfor (var j=0; j<nalu_array.length; j++) {\n\t\t\t\tvar nalu = nalu_array[j];\n\t\t\t\tif (j !== 0) str += \"<tr>\";\n\t\t\t\tstr += \"<td>\";\n\t\t\t\tstr += nalu.data.reduce(function(str, byte) {\n\t\t\t\t\treturn str + byte.toString(16).padStart(2, \"0\");\n\t\t\t\t}, \"0x\");\n\t\t\t\tstr += \"</td></tr>\";\n\t\t\t}\n\t\t}\n\t\tstr += \"</tbody></table>\";\n\t\treturn str;\n\t}\n\tvar numOfArrays = stream.readUint8();\n\tfor (i = 0; i < numOfArrays; i++) {\n\t\tvar nalu_array = [];\n\t\tthis.nalu_arrays.push(nalu_array);\n\t\ttmp_byte = stream.readUint8()\n\t\tnalu_array.completeness = (tmp_byte & 0x80) >> 7;\n\t\tnalu_array.nalu_type = tmp_byte & 0x3F;\n\t\tvar numNalus = stream.readUint16();\n\t\tfor (j = 0; j < numNalus; j++) {\n\t\t\tvar nalu = {}\n\t\t\tnalu_array.push(nalu);\n\t\t\tvar length = stream.readUint16();\n\t\t\tnalu.data = stream.readUint8Array(length);\n\t\t}\n\t}\n});\n\n// file:src/parsing/lsel.js\nBoxParser.createBoxCtor(\"lsel\", \"LayerSelectorProperty\", function(stream) {\n\tthis.layer_id = stream.readUint16();\n});// file:src/parsing/maxr.js\nBoxParser.createBoxCtor(\"maxr\", \"hintmaxrate\", function(stream) {\n\tthis.period = stream.readUint32();\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/mdcv.js\nfunction ColorPoint(x, y) {\n this.x = x;\n this.y = y;\n}\n\nColorPoint.prototype.toString = function() {\n return \"(\"+this.x+\",\"+this.y+\")\";\n}\n\nBoxParser.createBoxCtor(\"mdcv\", \"MasteringDisplayColourVolumeBox\", function(stream) {\n this.display_primaries = [];\n this.display_primaries[0] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.display_primaries[1] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.display_primaries[2] = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.white_point = new ColorPoint(stream.readUint16(),stream.readUint16());\n this.max_display_mastering_luminance = stream.readUint32();\n this.min_display_mastering_luminance = stream.readUint32();\n});\n\n// file:src/parsing/mdhd.js\nBoxParser.createFullBoxCtor(\"mdhd\", \"MediaHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.parseLanguage(stream);\n\tstream.readUint16();\n});\n\n// file:src/parsing/mehd.js\nBoxParser.createFullBoxCtor(\"mehd\", \"MovieExtendsHeaderBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tLog.warn(\"BoxParser\", \"mehd box incorrectly uses flags set to 1, converting version to 1\");\n\t\tthis.version = 1;\n\t}\n\tif (this.version == 1) {\n\t\tthis.fragment_duration = stream.readUint64();\n\t} else {\n\t\tthis.fragment_duration = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/meta.js\nBoxParser.createFullBoxCtor(\"meta\", \"MetaBox\", function(stream) {\n\tthis.boxes = [];\n\tBoxParser.ContainerBox.prototype.parse.call(this, stream);\n});\n// file:src/parsing/mfhd.js\nBoxParser.createFullBoxCtor(\"mfhd\", \"MovieFragmentHeaderBox\", function(stream) {\n\tthis.sequence_number = stream.readUint32();\n});\n\n// file:src/parsing/mfro.js\nBoxParser.createFullBoxCtor(\"mfro\", \"MovieFragmentRandomAccessOffsetBox\", function(stream) {\n\tthis._size = stream.readUint32();\n});\n\n// file:src/parsing/mskC.js\nBoxParser.createFullBoxCtor(\"mskC\", \"MaskConfigurationProperty\", function(stream) {\n this.bits_per_pixel = stream.readUint8();\n});\n\n// file:src/parsing/mvhd.js\nBoxParser.createFullBoxCtor(\"mvhd\", \"MovieHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.timescale = stream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tthis.rate = stream.readUint32();\n\tthis.volume = stream.readUint16()>>8;\n\tstream.readUint16();\n\tstream.readUint32Array(2);\n\tthis.matrix = stream.readUint32Array(9);\n\tstream.readUint32Array(6);\n\tthis.next_track_id = stream.readUint32();\n});\n// file:src/parsing/npck.js\nBoxParser.createBoxCtor(\"npck\", \"hintPacketsSent\", function(stream) {\n\tthis.packetssent = stream.readUint32();\n});\n\n// file:src/parsing/nump.js\nBoxParser.createBoxCtor(\"nump\", \"hintPacketsSent\", function(stream) {\n\tthis.packetssent = stream.readUint64();\n});\n\n// file:src/parsing/padb.js\nBoxParser.createFullBoxCtor(\"padb\", \"PaddingBitsBox\", function(stream) {\n\tvar sample_count = stream.readUint32();\n\tthis.padbits = [];\n\tfor (var i = 0; i < Math.floor((sample_count+1)/2); i++) {\n\t\tthis.padbits = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pasp.js\nBoxParser.createBoxCtor(\"pasp\", \"PixelAspectRatioBox\", function(stream) {\n\tthis.hSpacing = stream.readUint32();\n\tthis.vSpacing = stream.readUint32();\n});// file:src/parsing/payl.js\nBoxParser.createBoxCtor(\"payl\", \"CuePayloadBox\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/payt.js\nBoxParser.createBoxCtor(\"payt\", \"hintpayloadID\", function(stream) {\n\tthis.payloadID = stream.readUint32();\n\tvar count = stream.readUint8();\n\tthis.rtpmap_string = stream.readString(count);\n});\n\n// file:src/parsing/pdin.js\nBoxParser.createFullBoxCtor(\"pdin\", \"ProgressiveDownloadInfoBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/8;\n\tthis.rate = [];\n\tthis.initial_delay = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.rate[i] = stream.readUint32();\n\t\tthis.initial_delay[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pitm.js\nBoxParser.createFullBoxCtor(\"pitm\", \"PrimaryItemBox\", function(stream) {\n\tif (this.version === 0) {\n\t\tthis.item_id = stream.readUint16();\n\t} else {\n\t\tthis.item_id = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/pixi.js\nBoxParser.createFullBoxCtor(\"pixi\", \"PixelInformationProperty\", function(stream) {\n\tvar i;\n\tthis.num_channels = stream.readUint8();\n\tthis.bits_per_channels = [];\n\tfor (i = 0; i < this.num_channels; i++) {\n\t\tthis.bits_per_channels[i] = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/pmax.js\nBoxParser.createBoxCtor(\"pmax\", \"hintlargestpacket\", function(stream) {\n\tthis.bytes = stream.readUint32();\n});\n\n// file:src/parsing/prdi.js\nBoxParser.createFullBoxCtor(\"prdi\", \"ProgressiveDerivedImageItemInformationProperty\", function(stream) {\n\tthis.step_count = stream.readUint16();\n\tthis.item_count = [];\n\tif (this.flags & 0x2) {\n\t\tfor (var i = 0; i < this.step_count; i++) {\n\t\t\tthis.item_count[i] = stream.readUint16();\n\t\t}\n\t}\n});// file:src/parsing/prft.js\nBoxParser.createFullBoxCtor(\"prft\", \"ProducerReferenceTimeBox\", function(stream) {\n\tthis.ref_track_id = stream.readUint32();\n\tthis.ntp_timestamp = stream.readUint64();\n\tif (this.version === 0) {\n\t\tthis.media_time = stream.readUint32();\n\t} else {\n\t\tthis.media_time = stream.readUint64();\n\t}\n});\n\n// file:src/parsing/pssh.js\nBoxParser.createFullBoxCtor(\"pssh\", \"ProtectionSystemSpecificHeaderBox\", function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tif (this.version > 0) {\n\t\tvar count = stream.readUint32();\n\t\tthis.kid = [];\n\t\tfor (var i = 0; i < count; i++) {\n\t\t\tthis.kid[i] = BoxParser.parseHex16(stream);\n\t\t}\n\t}\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/qt/clef.js\nBoxParser.createFullBoxCtor(\"clef\", \"TrackCleanApertureDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/enof.js\nBoxParser.createFullBoxCtor(\"enof\", \"TrackEncodedPixelsDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/prof.js\nBoxParser.createFullBoxCtor(\"prof\", \"TrackProductionApertureDimensionsBox\", function(stream) {\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});// file:src/parsing/qt/tapt.js\nBoxParser.createContainerBoxCtor(\"tapt\", \"TrackApertureModeDimensionsBox\", null, [ \"clef\", \"prof\", \"enof\"]);// file:src/parsing/rtp.js\nBoxParser.createBoxCtor(\"rtp \", \"rtpmoviehintinformation\", function(stream) {\n\tthis.descriptionformat = stream.readString(4);\n\tthis.sdptext = stream.readString(this.size - this.hdr_size - 4);\n});\n\n// file:src/parsing/saio.js\nBoxParser.createFullBoxCtor(\"saio\", \"SampleAuxiliaryInformationOffsetsBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readString(4);\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tvar count = stream.readUint32();\n\tthis.offset = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tif (this.version === 0) {\n\t\t\tthis.offset[i] = stream.readUint32();\n\t\t} else {\n\t\t\tthis.offset[i] = stream.readUint64();\n\t\t}\n\t}\n});\n// file:src/parsing/saiz.js\nBoxParser.createFullBoxCtor(\"saiz\", \"SampleAuxiliaryInformationSizesBox\", function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.aux_info_type = stream.readString(4);\n\t\tthis.aux_info_type_parameter = stream.readUint32();\n\t}\n\tthis.default_sample_info_size = stream.readUint8();\n\tthis.sample_count = stream.readUint32();\n\tthis.sample_info_size = [];\n\tif (this.default_sample_info_size === 0) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tthis.sample_info_size[i] = stream.readUint8();\n\t\t}\n\t}\n});\n\n// file:src/parsing/sampleentries/mett.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"mett\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/metx.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"metx\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/sbtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"sbtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stpp.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stpp\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.namespace = stream.readCString();\n\tthis.schema_location = stream.readCString();\n\tthis.auxiliary_mime_types = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/stxt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"stxt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.content_encoding = stream.readCString();\n\tthis.mime_format = stream.readCString();\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/sampleentries/tx3g.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_SUBTITLE, \"tx3g\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.displayFlags = stream.readUint32();\n\tthis.horizontal_justification = stream.readInt8();\n\tthis.vertical_justification = stream.readInt8();\n\tthis.bg_color_rgba = stream.readUint8Array(4);\n\tthis.box_record = stream.readInt16Array(4);\n\tthis.style_record = stream.readUint8Array(12);\n\tthis.parseFooter(stream);\n});\n// file:src/parsing/sampleentries/wvtt.js\nBoxParser.createSampleEntryCtor(BoxParser.SAMPLE_ENTRY_TYPE_METADATA, \"wvtt\", function(stream) {\n\tthis.parseHeader(stream);\n\tthis.parseFooter(stream);\n});\n\n// file:src/parsing/samplegroups/alst.js\nBoxParser.createSampleGroupCtor(\"alst\", function(stream) {\n\tvar i;\n\tvar roll_count = stream.readUint16();\n\tthis.first_output_sample = stream.readUint16();\n\tthis.sample_offset = [];\n\tfor (i = 0; i < roll_count; i++) {\n\t\tthis.sample_offset[i] = stream.readUint32();\n\t}\n\tvar remaining = this.description_length - 4 - 4*roll_count;\n\tthis.num_output_samples = [];\n\tthis.num_total_samples = [];\n\tfor (i = 0; i < remaining/4; i++) {\n\t\tthis.num_output_samples[i] = stream.readUint16();\n\t\tthis.num_total_samples[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/avll.js\nBoxParser.createSampleGroupCtor(\"avll\", function(stream) {\n\tthis.layerNumber = stream.readUint8();\n\tthis.accurateStatisticsFlag = stream.readUint8();\n\tthis.avgBitRate = stream.readUint16();\n\tthis.avgFrameRate = stream.readUint16();\n});\n\n// file:src/parsing/samplegroups/avss.js\nBoxParser.createSampleGroupCtor(\"avss\", function(stream) {\n\tthis.subSequenceIdentifier = stream.readUint16();\n\tthis.layerNumber = stream.readUint8();\n\tvar tmp_byte = stream.readUint8();\n\tthis.durationFlag = tmp_byte >> 7;\n\tthis.avgRateFlag = (tmp_byte >> 6) & 0x1;\n\tif (this.durationFlag) {\n\t\tthis.duration = stream.readUint32();\n\t}\n\tif (this.avgRateFlag) {\n\t\tthis.accurateStatisticsFlag = stream.readUint8();\n\t\tthis.avgBitRate = stream.readUint16();\n\t\tthis.avgFrameRate = stream.readUint16();\n\t}\n\tthis.dependency = [];\n\tvar numReferences = stream.readUint8();\n\tfor (var i = 0; i < numReferences; i++) {\n\t\tvar dependencyInfo = {};\n\t\tthis.dependency.push(dependencyInfo);\n\t\tdependencyInfo.subSeqDirectionFlag = stream.readUint8();\n\t\tdependencyInfo.layerNumber = stream.readUint8();\n\t\tdependencyInfo.subSequenceIdentifier = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/samplegroups/dtrt.js\nBoxParser.createSampleGroupCtor(\"dtrt\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/mvif.js\nBoxParser.createSampleGroupCtor(\"mvif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/prol.js\nBoxParser.createSampleGroupCtor(\"prol\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/rap.js\nBoxParser.createSampleGroupCtor(\"rap \", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.num_leading_samples_known = tmp_byte >> 7;\n\tthis.num_leading_samples = tmp_byte & 0x7F;\n});\n\n// file:src/parsing/samplegroups/rash.js\nBoxParser.createSampleGroupCtor(\"rash\", function(stream) {\n\tthis.operation_point_count = stream.readUint16();\n\tif (this.description_length !== 2+(this.operation_point_count === 1?2:this.operation_point_count*6)+9) {\n\t\tLog.warn(\"BoxParser\", \"Mismatch in \"+this.grouping_type+\" sample group length\");\n\t\tthis.data = stream.readUint8Array(this.description_length-2);\n\t} else {\n\t\tif (this.operation_point_count === 1) {\n\t\t\tthis.target_rate_share = stream.readUint16();\n\t\t} else {\n\t\t\tthis.target_rate_share = [];\n\t\t\tthis.available_bitrate = [];\n\t\t\tfor (var i = 0; i < this.operation_point_count; i++) {\n\t\t\t\tthis.available_bitrate[i] = stream.readUint32();\n\t\t\t\tthis.target_rate_share[i] = stream.readUint16();\n\t\t\t}\n\t\t}\n\t\tthis.maximum_bitrate = stream.readUint32();\n\t\tthis.minimum_bitrate = stream.readUint32();\n\t\tthis.discard_priority = stream.readUint8();\n\t}\n});\n\n// file:src/parsing/samplegroups/roll.js\nBoxParser.createSampleGroupCtor(\"roll\", function(stream) {\n\tthis.roll_distance = stream.readInt16();\n});\n\n// file:src/parsing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.parse = function(stream) {\n\tLog.warn(\"BoxParser\", \"Unknown Sample Group type: \"+this.grouping_type);\n\tthis.data = stream.readUint8Array(this.description_length);\n}\n\n// file:src/parsing/samplegroups/scif.js\nBoxParser.createSampleGroupCtor(\"scif\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/scnm.js\nBoxParser.createSampleGroupCtor(\"scnm\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/seig.js\nBoxParser.createSampleGroupCtor(\"seig\", function(stream) {\n\tthis.reserved = stream.readUint8();\n\tvar tmp = stream.readUint8();\n\tthis.crypt_byte_block = tmp >> 4;\n\tthis.skip_byte_block = tmp & 0xF;\n\tthis.isProtected = stream.readUint8();\n\tthis.Per_Sample_IV_Size = stream.readUint8();\n\tthis.KID = BoxParser.parseHex16(stream);\n\tthis.constant_IV_size = 0;\n\tthis.constant_IV = 0;\n\tif (this.isProtected === 1 && this.Per_Sample_IV_Size === 0) {\n\t\tthis.constant_IV_size = stream.readUint8();\n\t\tthis.constant_IV = stream.readUint8Array(this.constant_IV_size);\n\t}\n});\n\n// file:src/parsing/samplegroups/stsa.js\nBoxParser.createSampleGroupCtor(\"stsa\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/sync.js\nBoxParser.createSampleGroupCtor(\"sync\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.NAL_unit_type = tmp_byte & 0x3F;\n});\n\n// file:src/parsing/samplegroups/tele.js\nBoxParser.createSampleGroupCtor(\"tele\", function(stream) {\n\tvar tmp_byte = stream.readUint8();\n\tthis.level_independently_decodable = tmp_byte >> 7;\n});\n\n// file:src/parsing/samplegroups/tsas.js\nBoxParser.createSampleGroupCtor(\"tsas\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/tscl.js\nBoxParser.createSampleGroupCtor(\"tscl\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/samplegroups/vipr.js\nBoxParser.createSampleGroupCtor(\"vipr\", function(stream) {\n\tLog.warn(\"BoxParser\", \"Sample Group type: \"+this.grouping_type+\" not fully parsed\");\n});\n\n// file:src/parsing/sbgp.js\nBoxParser.createFullBoxCtor(\"sbgp\", \"SampleToGroupBox\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tif (this.version === 1) {\n\t\tthis.grouping_type_parameter = stream.readUint32();\n\t} else {\n\t\tthis.grouping_type_parameter = 0;\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry = {};\n\t\tthis.entries.push(entry);\n\t\tentry.sample_count = stream.readInt32();\n\t\tentry.group_description_index = stream.readInt32();\n\t}\n});\n\n// file:src/parsing/sbpm.js\nfunction Pixel(row, col) {\n\tthis.bad_pixel_row = row;\n\tthis.bad_pixel_column = col;\n}\n\nPixel.prototype.toString = function pixelToString() {\n\treturn \"[row: \" + this.bad_pixel_row + \", column: \" + this.bad_pixel_column + \"]\";\n}\n\nBoxParser.createFullBoxCtor(\"sbpm\", \"SensorBadPixelsMapBox\", function(stream) {\n\tvar i;\n\tthis.component_count = stream.readUint16();\n this.component_index = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n }\n\tvar flags = stream.readUint8();\n\tthis.correction_applied = (0x80 == (flags & 0x80));\n\tthis.num_bad_rows = stream.readUint32();\n\tthis.num_bad_cols = stream.readUint32();\n\tthis.num_bad_pixels = stream.readUint32();\n\tthis.bad_rows = [];\n\tthis.bad_columns = [];\n\tthis.bad_pixels = [];\n\tfor (i = 0; i < this.num_bad_rows; i++) {\n\t\tthis.bad_rows.push(stream.readUint32());\n\t}\n\tfor (i = 0; i < this.num_bad_cols; i++) {\n\t\tthis.bad_columns.push(stream.readUint32());\n\t}\n\tfor (i = 0; i < this.num_bad_pixels; i++) {\n\t\tvar row = stream.readUint32();\n\t\tvar col = stream.readUint32();\n\t\tthis.bad_pixels.push(new Pixel(row, col));\n\t}\n});\n\n// file:src/parsing/schm.js\nBoxParser.createFullBoxCtor(\"schm\", \"SchemeTypeBox\", function(stream) {\n\tthis.scheme_type = stream.readString(4);\n\tthis.scheme_version = stream.readUint32();\n\tif (this.flags & 0x000001) {\n\t\tthis.scheme_uri = stream.readString(this.size - this.hdr_size - 8);\n\t}\n});\n\n// file:src/parsing/sdp.js\nBoxParser.createBoxCtor(\"sdp \", \"rtptracksdphintinformation\", function(stream) {\n\tthis.sdptext = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/sdtp.js\nBoxParser.createFullBoxCtor(\"sdtp\", \"SampleDependencyTypeBox\", function(stream) {\n\tvar tmp_byte;\n\tvar count = (this.size - this.hdr_size);\n\tthis.is_leading = [];\n\tthis.sample_depends_on = [];\n\tthis.sample_is_depended_on = [];\n\tthis.sample_has_redundancy = [];\n\tfor (var i = 0; i < count; i++) {\n\t\ttmp_byte = stream.readUint8();\n\t\tthis.is_leading[i] = tmp_byte >> 6;\n\t\tthis.sample_depends_on[i] = (tmp_byte >> 4) & 0x3;\n\t\tthis.sample_is_depended_on[i] = (tmp_byte >> 2) & 0x3;\n\t\tthis.sample_has_redundancy[i] = tmp_byte & 0x3;\n\t}\n});\n\n// file:src/parsing/senc.js\n// Cannot be fully parsed because Per_Sample_IV_Size needs to be known\r\nBoxParser.createFullBoxCtor(\"senc\", \"SampleEncryptionBox\" /*, function(stream) {\r\n\tthis.parseFullHeader(stream);\r\n\tvar sample_count = stream.readUint32();\r\n\tthis.samples = [];\r\n\tfor (var i = 0; i < sample_count; i++) {\r\n\t\tvar sample = {};\r\n\t\t// tenc.default_Per_Sample_IV_Size or seig.Per_Sample_IV_Size\r\n\t\tsample.InitializationVector = this.readUint8Array(Per_Sample_IV_Size*8);\r\n\t\tif (this.flags & 0x2) {\r\n\t\t\tsample.subsamples = [];\r\n\t\t\tsubsample_count = stream.readUint16();\r\n\t\t\tfor (var j = 0; j < subsample_count; j++) {\r\n\t\t\t\tvar subsample = {};\r\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\r\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\r\n\t\t\t\tsample.subsamples.push(subsample);\r\n\t\t\t}\r\n\t\t}\r\n\t\t// TODO\r\n\t\tthis.samples.push(sample);\r\n\t}\r\n}*/);\r\n// file:src/parsing/sgpd.js\nBoxParser.createFullBoxCtor(\"sgpd\", \"SampleGroupDescriptionBox\", function(stream) {\n\tthis.grouping_type = stream.readString(4);\n\tLog.debug(\"BoxParser\", \"Found Sample Groups of type \"+this.grouping_type);\n\tif (this.version === 1) {\n\t\tthis.default_length = stream.readUint32();\n\t} else {\n\t\tthis.default_length = 0;\n\t}\n\tif (this.version >= 2) {\n\t\tthis.default_group_description_index = stream.readUint32();\n\t}\n\tthis.entries = [];\n\tvar entry_count = stream.readUint32();\n\tfor (var i = 0; i < entry_count; i++) {\n\t\tvar entry;\n\t\tif (BoxParser[this.grouping_type+\"SampleGroupEntry\"]) {\n\t\t\tentry = new BoxParser[this.grouping_type+\"SampleGroupEntry\"](this.grouping_type);\n\t\t} else {\n\t\t\tentry = new BoxParser.SampleGroupEntry(this.grouping_type);\n\t\t}\n\t\tthis.entries.push(entry);\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tentry.description_length = stream.readUint32();\n\t\t\t} else {\n\t\t\t\tentry.description_length = this.default_length;\n\t\t\t}\n\t\t} else {\n\t\t\tentry.description_length = this.default_length;\n\t\t}\n\t\tif (entry.write === BoxParser.SampleGroupEntry.prototype.write) {\n\t\t\tLog.info(\"BoxParser\", \"SampleGroup for type \"+this.grouping_type+\" writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t// storing data\n\t\t\tentry.data = stream.readUint8Array(entry.description_length);\n\t\t\t// rewinding\n\t\t\tstream.position -= entry.description_length;\n\t\t}\n\t\tentry.parse(stream);\n\t}\n});\n\n// file:src/parsing/sidx.js\nBoxParser.createFullBoxCtor(\"sidx\", \"CompressedSegmentIndexBox\", function(stream) {\n\tthis.reference_ID = stream.readUint32();\n\tthis.timescale = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.earliest_presentation_time = stream.readUint32();\n\t\tthis.first_offset = stream.readUint32();\n\t} else {\n\t\tthis.earliest_presentation_time = stream.readUint64();\n\t\tthis.first_offset = stream.readUint64();\n\t}\n\tstream.readUint16();\n\tthis.references = [];\n\tvar count = stream.readUint16();\n\tfor (var i = 0; i < count; i++) {\n\t\tvar ref = {};\n\t\tthis.references.push(ref);\n\t\tvar tmp_32 = stream.readUint32();\n\t\tref.reference_type = (tmp_32 >> 31) & 0x1;\n\t\tref.referenced_size = tmp_32 & 0x7FFFFFFF;\n\t\tref.subsegment_duration = stream.readUint32();\n\t\ttmp_32 = stream.readUint32();\n\t\tref.starts_with_SAP = (tmp_32 >> 31) & 0x1;\n\t\tref.SAP_type = (tmp_32 >> 28) & 0x7;\n\t\tref.SAP_delta_time = tmp_32 & 0xFFFFFFF;\n\t}\n});\n\n// file:src/parsing/singleitemtypereference.js\nBoxParser.SingleItemTypeReferenceBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBox.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBox.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint16();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint16();\n\t}\n}\n\n// file:src/parsing/singleitemtypereferencelarge.js\nBoxParser.SingleItemTypeReferenceBoxLarge = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype = new BoxParser.Box();\nBoxParser.SingleItemTypeReferenceBoxLarge.prototype.parse = function(stream) {\n\tthis.from_item_ID = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.references = [];\n\tfor(var i = 0; i < count; i++) {\n\t\tthis.references[i] = {};\n\t\tthis.references[i].to_item_ID = stream.readUint32();\n\t}\n}\n\n// file:src/parsing/SmDm.js\nBoxParser.createFullBoxCtor(\"SmDm\", \"SMPTE2086MasteringDisplayMetadataBox\", function(stream) {\n\tthis.primaryRChromaticity_x = stream.readUint16();\n this.primaryRChromaticity_y = stream.readUint16();\n this.primaryGChromaticity_x = stream.readUint16();\n this.primaryGChromaticity_y = stream.readUint16();\n this.primaryBChromaticity_x = stream.readUint16();\n this.primaryBChromaticity_y = stream.readUint16();\n this.whitePointChromaticity_x = stream.readUint16();\n this.whitePointChromaticity_y = stream.readUint16();\n this.luminanceMax = stream.readUint32();\n this.luminanceMin = stream.readUint32();\n});\n\n// file:src/parsing/smhd.js\nBoxParser.createFullBoxCtor(\"smhd\", \"SoundMediaHeaderBox\", function(stream) {\n\tthis.balance = stream.readUint16();\n\tstream.readUint16();\n});\n\n// file:src/parsing/ssix.js\nBoxParser.createFullBoxCtor(\"ssix\", \"CompressedSubsegmentIndexBox\", function(stream) {\n\tthis.subsegments = [];\n\tvar subsegment_count = stream.readUint32();\n\tfor (var i = 0; i < subsegment_count; i++) {\n\t\tvar subsegment = {};\n\t\tthis.subsegments.push(subsegment);\n\t\tsubsegment.ranges = [];\n\t\tvar range_count = stream.readUint32();\n\t\tfor (var j = 0; j < range_count; j++) {\n\t\t\tvar range = {};\n\t\t\tsubsegment.ranges.push(range);\n\t\t\trange.level = stream.readUint8();\n\t\t\trange.range_size = stream.readUint24();\n\t\t}\n\t}\n});\n\n// file:src/parsing/stco.js\nBoxParser.createFullBoxCtor(\"stco\", \"ChunkOffsetBox\", function(stream) {\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tthis.chunk_offsets = [];\n\tif (this.version === 0) {\n\t\tfor (var i = 0; i < entry_count; i++) {\n\t\t\tthis.chunk_offsets.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stdp.js\nBoxParser.createFullBoxCtor(\"stdp\", \"DegradationPriorityBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size)/2;\n\tthis.priority = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.priority[i] = stream.readUint16();\n\t}\n});\n\n// file:src/parsing/sthd.js\nBoxParser.createFullBoxCtor(\"sthd\", \"SubtitleMediaHeaderBox\");\n\n// file:src/parsing/stri.js\nBoxParser.createFullBoxCtor(\"stri\", \"SubTrackInformationBox\", function(stream) {\n\tthis.switch_group = stream.readUint16();\n\tthis.alternate_group = stream.readUint16();\n\tthis.sub_track_id = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 8)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsc.js\nBoxParser.createFullBoxCtor(\"stsc\", \"SampleToChunkBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.first_chunk = [];\n\tthis.samples_per_chunk = [];\n\tthis.sample_description_index = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.first_chunk.push(stream.readUint32());\n\t\t\tthis.samples_per_chunk.push(stream.readUint32());\n\t\t\tthis.sample_description_index.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsd.js\nBoxParser.createFullBoxCtor(\"stsd\", \"SampleDescriptionBox\", function(stream) {\n\tvar i;\n\tvar ret;\n\tvar entryCount;\n\tvar box;\n\tthis.entries = [];\n\tentryCount = stream.readUint32();\n\tfor (i = 1; i <= entryCount; i++) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tif (BoxParser[ret.type+\"SampleEntry\"]) {\n\t\t\t\tbox = new BoxParser[ret.type+\"SampleEntry\"](ret.size);\n\t\t\t\tbox.hdr_size = ret.hdr_size;\n\t\t\t\tbox.start = ret.start;\n\t\t\t} else {\n\t\t\t\tLog.warn(\"BoxParser\", \"Unknown sample entry type: \"+ret.type);\n\t\t\t\tbox = new BoxParser.SampleEntry(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\t}\n\t\t\tif (box.write === BoxParser.SampleEntry.prototype.write) {\n\t\t\t\tLog.info(\"BoxParser\", \"SampleEntry \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.entries.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsg.js\nBoxParser.createFullBoxCtor(\"stsg\", \"SubTrackSampleGroupBox\", function(stream) {\n\tthis.grouping_type = stream.readUint32();\n\tvar count = stream.readUint16();\n\tthis.group_description_index = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.group_description_index[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/stsh.js\nBoxParser.createFullBoxCtor(\"stsh\", \"ShadowSyncSampleBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tentry_count = stream.readUint32();\n\tthis.shadowed_sample_numbers = [];\n\tthis.sync_sample_numbers = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.shadowed_sample_numbers.push(stream.readUint32());\n\t\t\tthis.sync_sample_numbers.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stss.js\nBoxParser.createFullBoxCtor(\"stss\", \"SyncSampleBox\", function(stream) {\n\tvar i;\n\tvar entry_count;\n\tentry_count = stream.readUint32();\n\tif (this.version === 0) {\n\t\tthis.sample_numbers = [];\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_numbers.push(stream.readUint32());\n\t\t}\n\t}\n});\n\n// file:src/parsing/stsz.js\nBoxParser.createFullBoxCtor(\"stsz\", \"SampleSizeBox\", function(stream) {\n\tvar i;\n\tthis.sample_sizes = [];\n\tif (this.version === 0) {\n\t\tthis.sample_size = stream.readUint32();\n\t\tthis.sample_count = stream.readUint32();\n\t\tfor (i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.sample_size === 0) {\n\t\t\t\tthis.sample_sizes.push(stream.readUint32());\n\t\t\t} else {\n\t\t\t\tthis.sample_sizes[i] = this.sample_size;\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/stts.js\nBoxParser.createFullBoxCtor(\"stts\", \"TimeToSampleBox\", function(stream) {\n\tvar entry_count;\n\tvar i;\n\tvar delta;\n\tentry_count = stream.readUint32();\n\tthis.sample_counts = [];\n\tthis.sample_deltas = [];\n\tif (this.version === 0) {\n\t\tfor(i=0; i<entry_count; i++) {\n\t\t\tthis.sample_counts.push(stream.readUint32());\n\t\t\tdelta = stream.readInt32();\n\t\t\tif (delta < 0) {\n\t\t\t\tLog.warn(\"BoxParser\", \"File uses negative stts sample delta, using value 1 instead, sync may be lost!\");\n\t\t\t\tdelta = 1;\n\t\t\t}\n\t\t\tthis.sample_deltas.push(delta);\n\t\t}\n\t}\n});\n\n// file:src/parsing/stvi.js\nBoxParser.createFullBoxCtor(\"stvi\", \"StereoVideoBox\", function(stream) {\n\tvar tmp32 = stream.readUint32();\n\tthis.single_view_allowed = tmp32 & 0x3;\n\tthis.stereo_scheme = stream.readUint32();\n\tvar length = stream.readUint32();\n\tthis.stereo_indication_type = stream.readString(length);\n\tvar ret;\n\tvar box;\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t\tthis[box.type] = box;\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/styp.js\nBoxParser.createBoxCtor(\"styp\", \"SegmentTypeBox\", function(stream) {\n\tBoxParser.ftypBox.prototype.parse.call(this, stream);\n});\n\n// file:src/parsing/stz2.js\nBoxParser.createFullBoxCtor(\"stz2\", \"CompactSampleSizeBox\", function(stream) {\n\tvar i;\n\tvar sample_size;\n\tvar sample_count;\n\tthis.sample_sizes = [];\n\tif (this.version === 0) {\n\t\tthis.reserved = stream.readUint24();\n\t\tthis.field_size = stream.readUint8();\n\t\tsample_count = stream.readUint32();\n\t\tif (this.field_size === 4) {\n\t\t\tfor (i = 0; i < sample_count; i+=2) {\n\t\t\t\tvar tmp = stream.readUint8();\n\t\t\t\tthis.sample_sizes[i] = (tmp >> 4) & 0xF;\n\t\t\t\tthis.sample_sizes[i+1] = tmp & 0xF;\n\t\t\t}\n\t\t} else if (this.field_size === 8) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint8();\n\t\t\t}\n\t\t} else if (this.field_size === 16) {\n\t\t\tfor (i = 0; i < sample_count; i++) {\n\t\t\t\tthis.sample_sizes[i] = stream.readUint16();\n\t\t\t}\n\t\t} else {\n\t\t\tLog.error(\"BoxParser\", \"Error in length field in stz2 box\");\n\t\t}\n\t}\n});\n\n// file:src/parsing/subs.js\nBoxParser.createFullBoxCtor(\"subs\", \"SubSampleInformationBox\", function(stream) {\n\tvar i,j;\n\tvar entry_count;\n\tvar subsample_count;\n\tentry_count = stream.readUint32();\n\tthis.entries = [];\n\tfor (i = 0; i < entry_count; i++) {\n\t\tvar sampleInfo = {};\n\t\tthis.entries[i] = sampleInfo;\n\t\tsampleInfo.sample_delta = stream.readUint32();\n\t\tsampleInfo.subsamples = [];\n\t\tsubsample_count = stream.readUint16();\n\t\tif (subsample_count>0) {\n\t\t\tfor (j = 0; j < subsample_count; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsampleInfo.subsamples.push(subsample);\n\t\t\t\tif (this.version == 1) {\n\t\t\t\t\tsubsample.size = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tsubsample.size = stream.readUint16();\n\t\t\t\t}\n\t\t\t\tsubsample.priority = stream.readUint8();\n\t\t\t\tsubsample.discardable = stream.readUint8();\n\t\t\t\tsubsample.codec_specific_parameters = stream.readUint32();\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tenc.js\nBoxParser.createFullBoxCtor(\"tenc\", \"TrackEncryptionBox\", function(stream) {\n\tstream.readUint8(); // reserved\n\tif (this.version === 0) {\n\t\tstream.readUint8();\n\t} else {\n\t\tvar tmp = stream.readUint8();\n\t\tthis.default_crypt_byte_block = (tmp >> 4) & 0xF;\n\t\tthis.default_skip_byte_block = tmp & 0xF;\n\t}\n\tthis.default_isProtected = stream.readUint8();\n\tthis.default_Per_Sample_IV_Size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n\tif (this.default_isProtected === 1 && this.default_Per_Sample_IV_Size === 0) {\n\t\tthis.default_constant_IV_size = stream.readUint8();\n\t\tthis.default_constant_IV = stream.readUint8Array(this.default_constant_IV_size);\n\t}\n});// file:src/parsing/tfdt.js\nBoxParser.createFullBoxCtor(\"tfdt\", \"TrackFragmentBaseMediaDecodeTimeBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.baseMediaDecodeTime = stream.readUint64();\n\t} else {\n\t\tthis.baseMediaDecodeTime = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/tfhd.js\nBoxParser.createFullBoxCtor(\"tfhd\", \"TrackFragmentHeaderBox\", function(stream) {\n\tvar readBytes = 0;\n\tthis.track_id = stream.readUint32();\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET)) {\n\t\tthis.base_data_offset = stream.readUint64();\n\t\treadBytes += 8;\n\t} else {\n\t\tthis.base_data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC)) {\n\t\tthis.default_sample_description_index = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_description_index = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR)) {\n\t\tthis.default_sample_duration = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_duration = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE)) {\n\t\tthis.default_sample_size = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_size = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS)) {\n\t\tthis.default_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.default_sample_flags = 0;\n\t}\n});\n\n// file:src/parsing/tfra.js\nBoxParser.createFullBoxCtor(\"tfra\", \"TrackFragmentRandomAccessBox\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tstream.readUint24();\n\tvar tmp_byte = stream.readUint8();\n\tthis.length_size_of_traf_num = (tmp_byte >> 4) & 0x3;\n\tthis.length_size_of_trun_num = (tmp_byte >> 2) & 0x3;\n\tthis.length_size_of_sample_num = (tmp_byte) & 0x3;\n\tthis.entries = [];\n\tvar number_of_entries = stream.readUint32();\n\tfor (var i = 0; i < number_of_entries; i++) {\n\t\tif (this.version === 1) {\n\t\t\tthis.time = stream.readUint64();\n\t\t\tthis.moof_offset = stream.readUint64();\n\t\t} else {\n\t\t\tthis.time = stream.readUint32();\n\t\t\tthis.moof_offset = stream.readUint32();\n\t\t}\n\t\tthis.traf_number = stream[\"readUint\"+(8*(this.length_size_of_traf_num+1))]();\n\t\tthis.trun_number = stream[\"readUint\"+(8*(this.length_size_of_trun_num+1))]();\n\t\tthis.sample_number = stream[\"readUint\"+(8*(this.length_size_of_sample_num+1))]();\n\t}\n});\n\n// file:src/parsing/tkhd.js\nBoxParser.createFullBoxCtor(\"tkhd\", \"TrackHeaderBox\", function(stream) {\n\tif (this.version == 1) {\n\t\tthis.creation_time = stream.readUint64();\n\t\tthis.modification_time = stream.readUint64();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint64();\n\t} else {\n\t\tthis.creation_time = stream.readUint32();\n\t\tthis.modification_time = stream.readUint32();\n\t\tthis.track_id = stream.readUint32();\n\t\tstream.readUint32();\n\t\tthis.duration = stream.readUint32();\n\t}\n\tstream.readUint32Array(2);\n\tthis.layer = stream.readInt16();\n\tthis.alternate_group = stream.readInt16();\n\tthis.volume = stream.readInt16()>>8;\n\tstream.readUint16();\n\tthis.matrix = stream.readInt32Array(9);\n\tthis.width = stream.readUint32();\n\tthis.height = stream.readUint32();\n});\n\n// file:src/parsing/tmax.js\nBoxParser.createBoxCtor(\"tmax\", \"hintmaxrelativetime\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/tmin.js\nBoxParser.createBoxCtor(\"tmin\", \"hintminrelativetime\", function(stream) {\n\tthis.time = stream.readUint32();\n});\n\n// file:src/parsing/totl.js\nBoxParser.createBoxCtor(\"totl\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpay.js\nBoxParser.createBoxCtor(\"tpay\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint32();\n});\n\n// file:src/parsing/tpyl.js\nBoxParser.createBoxCtor(\"tpyl\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/TrackGroup.js\nBoxParser.TrackGroupTypeBox.prototype.parse = function(stream) {\n\tthis.parseFullHeader(stream);\n\tthis.track_group_id = stream.readUint32();\n}\n\n// file:src/parsing/trackgroups/msrc.js\nBoxParser.createTrackGroupCtor(\"msrc\");// file:src/parsing/TrakReference.js\nBoxParser.TrackReferenceTypeBox = function(type, size, hdr_size, start) {\n\tBoxParser.Box.call(this, type, size);\n\tthis.hdr_size = hdr_size;\n\tthis.start = start;\n}\nBoxParser.TrackReferenceTypeBox.prototype = new BoxParser.Box();\nBoxParser.TrackReferenceTypeBox.prototype.parse = function(stream) {\n\tthis.track_ids = stream.readUint32Array((this.size-this.hdr_size)/4);\n}\n\n// file:src/parsing/tref.js\nBoxParser.trefBox.prototype.parse = function(stream) {\n\tvar ret;\n\tvar box;\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, true, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = new BoxParser.TrackReferenceTypeBox(ret.type, ret.size, ret.hdr_size, ret.start);\n\t\t\tif (box.write === BoxParser.Box.prototype.write && box.type !== \"mdat\") {\n\t\t\t\tLog.info(\"BoxParser\", \"TrackReference \"+box.type+\" box writing not yet implemented, keeping unparsed data in memory for later write\");\n\t\t\t\tbox.parseDataAndRewind(stream);\n\t\t\t}\n\t\t\tbox.parse(stream);\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n}\n\n// file:src/parsing/trep.js\nBoxParser.createFullBoxCtor(\"trep\", \"TrackExtensionPropertiesBox\", function(stream) {\n\tthis.track_ID = stream.readUint32();\n\tthis.boxes = [];\n\twhile (stream.getPosition() < this.start+this.size) {\n\t\tret = BoxParser.parseOneBox(stream, false, this.size - (stream.getPosition() - this.start));\n\t\tif (ret.code === BoxParser.OK) {\n\t\t\tbox = ret.box;\n\t\t\tthis.boxes.push(box);\n\t\t} else {\n\t\t\treturn;\n\t\t}\n\t}\n});\n\n// file:src/parsing/trex.js\nBoxParser.createFullBoxCtor(\"trex\", \"TrackExtendsBox\", function(stream) {\n\tthis.track_id = stream.readUint32();\n\tthis.default_sample_description_index = stream.readUint32();\n\tthis.default_sample_duration = stream.readUint32();\n\tthis.default_sample_size = stream.readUint32();\n\tthis.default_sample_flags = stream.readUint32();\n});\n\n// file:src/parsing/trpy.js\nBoxParser.createBoxCtor(\"trpy\", \"hintBytesSent\", function(stream) {\n\tthis.bytessent = stream.readUint64();\n});\n\n// file:src/parsing/trun.js\nBoxParser.createFullBoxCtor(\"trun\", \"TrackRunBox\", function(stream) {\n\tvar readBytes = 0;\n\tthis.sample_count = stream.readUint32();\n\treadBytes+= 4;\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ) {\n\t\tthis.data_offset = stream.readInt32(); //signed\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.data_offset = 0;\n\t}\n\tif (this.size - this.hdr_size > readBytes && (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) ) {\n\t\tthis.first_sample_flags = stream.readUint32();\n\t\treadBytes += 4;\n\t} else {\n\t\tthis.first_sample_flags = 0;\n\t}\n\tthis.sample_duration = [];\n\tthis.sample_size = [];\n\tthis.sample_flags = [];\n\tthis.sample_composition_time_offset = [];\n\tif (this.size - this.hdr_size > readBytes) {\n\t\tfor (var i = 0; i < this.sample_count; i++) {\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\tthis.sample_duration[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\tthis.sample_size[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\tthis.sample_flags[i] = stream.readUint32();\n\t\t\t}\n\t\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\tif (this.version === 0) {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readUint32();\n\t\t\t\t} else {\n\t\t\t\t\tthis.sample_composition_time_offset[i] = stream.readInt32(); //signed\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n});\n\n// file:src/parsing/tsel.js\nBoxParser.createFullBoxCtor(\"tsel\", \"TrackSelectionBox\", function(stream) {\n\tthis.switch_group = stream.readUint32();\n\tvar count = (this.size - this.hdr_size - 4)/4;\n\tthis.attribute_list = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.attribute_list[i] = stream.readUint32();\n\t}\n});\n\n// file:src/parsing/txtC.js\nBoxParser.createFullBoxCtor(\"txtC\", \"TextConfigBox\", function(stream) {\n\tthis.config = stream.readCString();\n});\n\n// file:src/parsing/tyco.js\nBoxParser.createBoxCtor(\"tyco\", \"TypeCombinationBox\", function(stream) {\n\tvar count = (this.size - this.hdr_size) / 4;\n\tthis.compatible_brands = [];\n\tfor (var i = 0; i < count; i++) {\n\t\tthis.compatible_brands[i] = stream.readString(4);\n\t}\n});\n\n// file:src/parsing/udes.js\nBoxParser.createFullBoxCtor(\"udes\", \"UserDescriptionProperty\", function(stream) {\n\tthis.lang = stream.readCString();\n\tthis.name = stream.readCString();\n\tthis.description = stream.readCString();\n\tthis.tags = stream.readCString();\n});\n\n// file:src/parsing/uncC.js\nBoxParser.createFullBoxCtor(\"uncC\", \"UncompressedFrameConfigBox\", function(stream) {\n var i;\n this.profile = stream.readString(4);\n if (this.version == 1) {\n // Nothing - just the profile\n } else if (this.version == 0) {\n this.component_count = stream.readUint32();\n this.component_index = [];\n this.component_bit_depth_minus_one = [];\n this.component_format = [];\n this.component_align_size = [];\n for (i = 0; i < this.component_count; i++) {\n this.component_index.push(stream.readUint16());\n this.component_bit_depth_minus_one.push(stream.readUint8());\n this.component_format.push(stream.readUint8());\n this.component_align_size.push(stream.readUint8());\n }\n this.sampling_type = stream.readUint8();\n this.interleave_type = stream.readUint8();\n this.block_size = stream.readUint8();\n var flags = stream.readUint8();\n this.component_little_endian = (flags >> 7) & 0x1;\n this.block_pad_lsb = (flags >> 6) & 0x1;\n this.block_little_endian = (flags >> 5) & 0x1;\n this.block_reversed = (flags >> 4) & 0x1;\n this.pad_unknown = (flags >> 3) & 0x1;\n this.pixel_size = stream.readUint32();\n this.row_align_size = stream.readUint32();\n this.tile_align_size = stream.readUint32();\n this.num_tile_cols_minus_one = stream.readUint32();\n this.num_tile_rows_minus_one = stream.readUint32();\n }\n});\n\n// file:src/parsing/url.js\nBoxParser.createFullBoxCtor(\"url \", \"DataEntryUrlBox\", function(stream) {\n\tif (this.flags !== 0x000001) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/urn.js\nBoxParser.createFullBoxCtor(\"urn \", \"DataEntryUrnBox\", function(stream) {\n\tthis.name = stream.readCString();\n\tif (this.size - this.hdr_size - this.name.length - 1 > 0) {\n\t\tthis.location = stream.readCString();\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffLsm.js\nBoxParser.createUUIDBox(\"a5d40b30e81411ddba2f0800200c9a66\", \"LiveServerManifestBox\", true, false, function(stream) {\n this.LiveServerManifest = stream.readString(this.size - this.hdr_size)\n .replace(/&/g, \"&\")\n .replace(/</g, \"<\")\n .replace(/>/g, \">\")\n .replace(/\"/g, \""\")\n .replace(/'/g, \"'\");\n});// file:src/parsing/uuid/piff/piffPssh.js\nBoxParser.createUUIDBox(\"d08a4f1810f34a82b6c832d8aba183d3\", \"PiffProtectionSystemSpecificHeaderBox\", true, false, function(stream) {\n\tthis.system_id = BoxParser.parseHex16(stream);\n\tvar datasize = stream.readUint32();\n\tif (datasize > 0) {\n\t\tthis.data = stream.readUint8Array(datasize);\n\t}\n});\n\n// file:src/parsing/uuid/piff/piffSenc.js\nBoxParser.createUUIDBox(\"a2394f525a9b4f14a2446c427c648df4\", \"PiffSampleEncryptionBox\", true, false /*, function(stream) {\n\tif (this.flags & 0x1) {\n\t\tthis.AlgorithmID = stream.readUint24();\n\t\tthis.IV_size = stream.readUint8();\n\t\tthis.KID = BoxParser.parseHex16(stream);\n\t}\n\tvar sample_count = stream.readUint32();\n\tthis.samples = [];\n\tfor (var i = 0; i < sample_count; i++) {\n\t\tvar sample = {};\n\t\tsample.InitializationVector = this.readUint8Array(this.IV_size*8);\n\t\tif (this.flags & 0x2) {\n\t\t\tsample.subsamples = [];\n\t\t\tsample.NumberOfEntries = stream.readUint16();\n\t\t\tfor (var j = 0; j < sample.NumberOfEntries; j++) {\n\t\t\t\tvar subsample = {};\n\t\t\t\tsubsample.BytesOfClearData = stream.readUint16();\n\t\t\t\tsubsample.BytesOfProtectedData = stream.readUint32();\n\t\t\t\tsample.subsamples.push(subsample);\n\t\t\t}\n\t\t}\n\t\tthis.samples.push(sample);\n\t}\n}*/);\n// file:src/parsing/uuid/piff/piffTenc.js\nBoxParser.createUUIDBox(\"8974dbce7be74c5184f97148f9882554\", \"PiffTrackEncryptionBox\", true, false, function(stream) {\n\tthis.default_AlgorithmID = stream.readUint24();\n\tthis.default_IV_size = stream.readUint8();\n\tthis.default_KID = BoxParser.parseHex16(stream);\n});// file:src/parsing/uuid/piff/piffTfrf.js\nBoxParser.createUUIDBox(\"d4807ef2ca3946958e5426cb9e46a79f\", \"TfrfBox\", true, false, function(stream) {\n this.fragment_count = stream.readUint8();\n this.entries = [];\n\n for (var i = 0; i < this.fragment_count; i++) {\n var entry = {};\n var absolute_time = 0;\n var absolute_duration = 0;\n\n if (this.version === 1) {\n absolute_time = stream.readUint64();\n absolute_duration = stream.readUint64();\n } else {\n absolute_time = stream.readUint32();\n absolute_duration = stream.readUint32();\n }\n\n entry.absolute_time = absolute_time;\n entry.absolute_duration = absolute_duration;\n\n this.entries.push(entry);\n }\n});// file:src/parsing/uuid/piff/piffTfxd.js\nBoxParser.createUUIDBox(\"6d1d9b0542d544e680e2141daff757b2\", \"TfxdBox\", true, false, function(stream) {\n if (this.version === 1) {\n this.absolute_time = stream.readUint64();\n this.duration = stream.readUint64();\n } else {\n this.absolute_time = stream.readUint32();\n this.duration = stream.readUint32();\n }\n});// file:src/parsing/vmhd.js\nBoxParser.createFullBoxCtor(\"vmhd\", \"VideoMediaHeaderBox\", function(stream) {\n\tthis.graphicsmode = stream.readUint16();\n\tthis.opcolor = stream.readUint16Array(3);\n});\n\n// file:src/parsing/vpcC.js\nBoxParser.createFullBoxCtor(\"vpcC\", \"VPCodecConfigurationRecord\", function (stream) {\n\tvar tmp;\n\tif (this.version === 1) {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = tmp >> 4;\n\t\tthis.chromaSubsampling = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.colourPrimaries = stream.readUint8();\n\t\tthis.transferCharacteristics = stream.readUint8();\n\t\tthis.matrixCoefficients = stream.readUint8();\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t} else {\n\t\tthis.profile = stream.readUint8();\n\t\tthis.level = stream.readUint8();\n\t\ttmp = stream.readUint8();\n\t\tthis.bitDepth = (tmp >> 4) & 0xF;\n\t\tthis.colorSpace = tmp & 0xF;\n\t\ttmp = stream.readUint8();\n\t\tthis.chromaSubsampling = (tmp >> 4) & 0xF;\n\t\tthis.transferFunction = (tmp >> 1) & 0x7;\n\t\tthis.videoFullRangeFlag = tmp & 0x1;\n\t\tthis.codecIntializationDataSize = stream.readUint16();\n\t\tthis.codecIntializationData = stream.readUint8Array(this.codecIntializationDataSize);\n\t}\n});// file:src/parsing/vttC.js\nBoxParser.createBoxCtor(\"vttC\", \"WebVTTConfigurationBox\", function(stream) {\n\tthis.text = stream.readString(this.size - this.hdr_size);\n});\n\n// file:src/parsing/vvcC.js\nBoxParser.createFullBoxCtor(\"vvcC\", \"VvcConfigurationBox\", function (stream) {\n var i, j;\n\n // helper object to simplify extracting individual bits\n var bitReader = {\n held_bits: undefined,\n num_held_bits: 0,\n\n stream_read_1_bytes: function (strm) {\n this.held_bits = strm.readUint8();\n this.num_held_bits = 1 * 8;\n },\n stream_read_2_bytes: function (strm) {\n this.held_bits = strm.readUint16();\n this.num_held_bits = 2 * 8;\n },\n\n extract_bits: function (num_bits) {\n var ret = (this.held_bits >> (this.num_held_bits - num_bits)) & ((1 << num_bits) - 1);\n this.num_held_bits -= num_bits;\n return ret;\n }\n };\n\n // VvcDecoderConfigurationRecord\n bitReader.stream_read_1_bytes(stream);\n bitReader.extract_bits(5); // reserved\n this.lengthSizeMinusOne = bitReader.extract_bits(2);\n this.ptl_present_flag = bitReader.extract_bits(1);\n\n if (this.ptl_present_flag) {\n bitReader.stream_read_2_bytes(stream);\n this.ols_idx = bitReader.extract_bits(9);\n this.num_sublayers = bitReader.extract_bits(3);\n this.constant_frame_rate = bitReader.extract_bits(2);\n this.chroma_format_idc = bitReader.extract_bits(2);\n\n bitReader.stream_read_1_bytes(stream);\n this.bit_depth_minus8 = bitReader.extract_bits(3);\n bitReader.extract_bits(5); // reserved\n\n // VvcPTLRecord\n {\n bitReader.stream_read_2_bytes(stream);\n bitReader.extract_bits(2); // reserved\n this.num_bytes_constraint_info = bitReader.extract_bits(6);\n this.general_profile_idc = bitReader.extract_bits(7);\n this.general_tier_flag = bitReader.extract_bits(1);\n\n this.general_level_idc = stream.readUint8();\n\n bitReader.stream_read_1_bytes(stream);\n this.ptl_frame_only_constraint_flag = bitReader.extract_bits(1);\n this.ptl_multilayer_enabled_flag = bitReader.extract_bits(1);\n\n this.general_constraint_info = new Uint8Array(this.num_bytes_constraint_info);\n if (this.num_bytes_constraint_info) {\n for (i = 0; i < this.num_bytes_constraint_info - 1; i++) {\n var cnstr1 = bitReader.extract_bits(6);\n bitReader.stream_read_1_bytes(stream);\n var cnstr2 = bitReader.extract_bits(2);\n\n this.general_constraint_info[i] = ((cnstr1 << 2) | cnstr2);\n }\n this.general_constraint_info[this.num_bytes_constraint_info - 1] = bitReader.extract_bits(6);\n } else {\n //forbidden in spec!\n bitReader.extract_bits(6);\n }\n\n if (this.num_sublayers > 1) {\n bitReader.stream_read_1_bytes(stream);\n this.ptl_sublayer_present_mask = 0;\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n var val = bitReader.extract_bits(1);\n this.ptl_sublayer_present_mask |= val << j;\n }\n for (j = this.num_sublayers; j <= 8 && this.num_sublayers > 1; ++j) {\n bitReader.extract_bits(1); // ptl_reserved_zero_bit\n }\n\n this.sublayer_level_idc = [];\n for (j = this.num_sublayers - 2; j >= 0; --j) {\n if (this.ptl_sublayer_present_mask & (1 << j)) {\n this.sublayer_level_idc[j] = stream.readUint8();\n }\n }\n }\n\n this.ptl_num_sub_profiles = stream.readUint8();\n this.general_sub_profile_idc = [];\n if (this.ptl_num_sub_profiles) {\n for (i = 0; i < this.ptl_num_sub_profiles; i++) {\n this.general_sub_profile_idc.push(stream.readUint32());\n }\n }\n } // end VvcPTLRecord\n\n this.max_picture_width = stream.readUint16();\n this.max_picture_height = stream.readUint16();\n this.avg_frame_rate = stream.readUint16();\n }\n\n var VVC_NALU_OPI = 12;\n var VVC_NALU_DEC_PARAM = 13;\n\n this.nalu_arrays = [];\n var num_of_arrays = stream.readUint8();\n for (i = 0; i < num_of_arrays; i++) {\n var nalu_array = [];\n this.nalu_arrays.push(nalu_array);\n\n bitReader.stream_read_1_bytes(stream);\n nalu_array.completeness = bitReader.extract_bits(1);\n bitReader.extract_bits(2); // reserved\n nalu_array.nalu_type = bitReader.extract_bits(5);\n\n var numNalus = 1;\n if (nalu_array.nalu_type != VVC_NALU_DEC_PARAM && nalu_array.nalu_type != VVC_NALU_OPI) {\n numNalus = stream.readUint16();\n }\n\n for (j = 0; j < numNalus; j++) {\n var len = stream.readUint16();\n nalu_array.push({\n data: stream.readUint8Array(len),\n length: len\n });\n }\n }\n});\n// file:src/parsing/vvnC.js\nBoxParser.createFullBoxCtor(\"vvnC\", \"VvcNALUConfigBox\", function (stream) {\n // VvcNALUConfigBox\n var tmp = strm.readUint8();\n this.lengthSizeMinusOne = (tmp & 0x3);\n});\n// file:src/box-codecs.js\nBoxParser.SampleEntry.prototype.isVideo = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isAudio = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isSubtitle = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isMetadata = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.isHint = function() {\n\treturn false;\n}\n\nBoxParser.SampleEntry.prototype.getCodec = function() {\n\treturn this.type.replace('.','');\n}\n\nBoxParser.SampleEntry.prototype.getWidth = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getHeight = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getChannelCount = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleRate = function() {\n\treturn \"\";\n}\n\nBoxParser.SampleEntry.prototype.getSampleSize = function() {\n\treturn \"\";\n}\n\nBoxParser.VisualSampleEntry.prototype.isVideo = function() {\n\treturn true;\n}\n\nBoxParser.VisualSampleEntry.prototype.getWidth = function() {\n\treturn this.width;\n}\n\nBoxParser.VisualSampleEntry.prototype.getHeight = function() {\n\treturn this.height;\n}\n\nBoxParser.AudioSampleEntry.prototype.isAudio = function() {\n\treturn true;\n}\n\nBoxParser.AudioSampleEntry.prototype.getChannelCount = function() {\n\treturn this.channel_count;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleRate = function() {\n\treturn this.samplerate;\n}\n\nBoxParser.AudioSampleEntry.prototype.getSampleSize = function() {\n\treturn this.samplesize;\n}\n\nBoxParser.SubtitleSampleEntry.prototype.isSubtitle = function() {\n\treturn true;\n}\n\nBoxParser.MetadataSampleEntry.prototype.isMetadata = function() {\n\treturn true;\n}\n\n\nBoxParser.decimalToHex = function(d, padding) {\n\tvar hex = Number(d).toString(16);\n\tpadding = typeof (padding) === \"undefined\" || padding === null ? padding = 2 : padding;\n\twhile (hex.length < padding) {\n\t\thex = \"0\" + hex;\n\t}\n\treturn hex;\n}\n\nBoxParser.avc1SampleEntry.prototype.getCodec =\nBoxParser.avc2SampleEntry.prototype.getCodec =\nBoxParser.avc3SampleEntry.prototype.getCodec =\nBoxParser.avc4SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.avcC) {\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(this.avcC.AVCProfileIndication)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.profile_compatibility)+\n\t\t\t\t\t\t \"\"+BoxParser.decimalToHex(this.avcC.AVCLevelIndication);\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.hev1SampleEntry.prototype.getCodec =\nBoxParser.hvc1SampleEntry.prototype.getCodec = function() {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.hvcC) {\n\t\tbaseCodec += '.';\n\t\tswitch (this.hvcC.general_profile_space) {\n\t\t\tcase 0:\n\t\t\t\tbaseCodec += '';\n\t\t\t\tbreak;\n\t\t\tcase 1:\n\t\t\t\tbaseCodec += 'A';\n\t\t\t\tbreak;\n\t\t\tcase 2:\n\t\t\t\tbaseCodec += 'B';\n\t\t\t\tbreak;\n\t\t\tcase 3:\n\t\t\t\tbaseCodec += 'C';\n\t\t\t\tbreak;\n\t\t}\n\t\tbaseCodec += this.hvcC.general_profile_idc;\n\t\tbaseCodec += '.';\n\t\tvar val = this.hvcC.general_profile_compatibility;\n\t\tvar reversed = 0;\n\t\tfor (i=0; i<32; i++) {\n\t\t\treversed |= val & 1;\n\t\t\tif (i==31) break;\n\t\t\treversed <<= 1;\n\t\t\tval >>=1;\n\t\t}\n\t\tbaseCodec += BoxParser.decimalToHex(reversed, 0);\n\t\tbaseCodec += '.';\n\t\tif (this.hvcC.general_tier_flag === 0) {\n\t\t\tbaseCodec += 'L';\n\t\t} else {\n\t\t\tbaseCodec += 'H';\n\t\t}\n\t\tbaseCodec += this.hvcC.general_level_idc;\n\t\tvar hasByte = false;\n\t\tvar constraint_string = \"\";\n\t\tfor (i = 5; i >= 0; i--) {\n\t\t\tif (this.hvcC.general_constraint_indicator[i] || hasByte) {\n\t\t\t\tconstraint_string = \".\"+BoxParser.decimalToHex(this.hvcC.general_constraint_indicator[i], 0)+constraint_string;\n\t\t\t\thasByte = true;\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.vvc1SampleEntry.prototype.getCodec =\nBoxParser.vvi1SampleEntry.prototype.getCodec = function () {\n\tvar i;\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.vvcC) {\n\t\tbaseCodec += '.' + this.vvcC.general_profile_idc;\n\t\tif (this.vvcC.general_tier_flag) {\n\t\t\tbaseCodec += '.H';\n\t\t} else {\n\t\t\tbaseCodec += '.L';\n\t\t}\n\t\tbaseCodec += this.vvcC.general_level_idc;\n\n\t\tvar constraint_string = \"\";\n\t\tif (this.vvcC.general_constraint_info) {\n\t\t\tvar bytes = [];\n\t\t\tvar byte = 0;\n\t\t\tbyte |= this.vvcC.ptl_frame_only_constraint << 7;\n\t\t\tbyte |= this.vvcC.ptl_multilayer_enabled << 6;\n\t\t\tvar last_nonzero;\n\t\t\tfor (i = 0; i < this.vvcC.general_constraint_info.length; ++i) {\n\t\t\t\tbyte |= (this.vvcC.general_constraint_info[i] >> 2) & 0x3f;\n\t\t\t\tbytes.push(byte);\n\t\t\t\tif (byte) {\n\t\t\t\t\tlast_nonzero = i;\n\t\t\t\t}\n\n\t\t\t\tbyte = (this.vvcC.general_constraint_info[i] >> 2) & 0x03;\n\t\t\t}\n\n\t\t\tif (last_nonzero === undefined) {\n\t\t\t\tconstraint_string = \".CA\";\n\t\t\t}\n\t\t\telse {\n\t\t\t\tconstraint_string = \".C\"\n\t\t\t\tvar base32_chars = \"ABCDEFGHIJKLMNOPQRSTUVWXYZ234567\";\n\t\t\t\tvar held_bits = 0;\n\t\t\t\tvar num_held_bits = 0;\n\t\t\t\tfor (i = 0; i <= last_nonzero; ++i) {\n\t\t\t\t\theld_bits = (held_bits << 8) | bytes[i];\n\t\t\t\t\tnum_held_bits += 8;\n\n\t\t\t\t\twhile (num_held_bits >= 5) {\n\t\t\t\t\t\tvar val = (held_bits >> (num_held_bits - 5)) & 0x1f;\n\t\t\t\t\t\tconstraint_string += base32_chars[val];\n\n\t\t\t\t\t\tnum_held_bits -= 5;\n\t\t\t\t\t\theld_bits &= (1 << num_held_bits) - 1;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (num_held_bits) {\n\t\t\t\t\theld_bits <<= (5 - num_held_bits); // right-pad with zeros to 5 bits (is this correct?)\n\t\t\t\t\tconstraint_string += base32_chars[held_bits & 0x1f];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tbaseCodec += constraint_string;\n\t}\n\treturn baseCodec;\n}\n\nBoxParser.mp4aSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif (this.esds && this.esds.esd) {\n\t\tvar oti = this.esds.esd.getOTI();\n\t\tvar dsi = this.esds.esd.getAudioConfig();\n\t\treturn baseCodec+\".\"+BoxParser.decimalToHex(oti)+(dsi ? \".\"+dsi: \"\");\n\t} else {\n\t\treturn baseCodec;\n\t}\n}\n\nBoxParser.stxtSampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tif(this.mime_format) {\n\t\treturn baseCodec + \".\" + this.mime_format;\n\t} else {\n\t\treturn baseCodec\n\t}\n}\n\nBoxParser.vp08SampleEntry.prototype.getCodec =\nBoxParser.vp09SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.vpcC.level;\n\tif (level == 0) {\n\t\tlevel = \"00\";\n\t}\n\tvar bitDepth = this.vpcC.bitDepth;\n\tif (bitDepth == 8) {\n\t\tbitDepth = \"08\";\n\t}\n\treturn baseCodec + \".0\" + this.vpcC.profile + \".\" + level + \".\" + bitDepth;\n}\n\nBoxParser.av01SampleEntry.prototype.getCodec = function() {\n\tvar baseCodec = BoxParser.SampleEntry.prototype.getCodec.call(this);\n\tvar level = this.av1C.seq_level_idx_0;\n\tif (level < 10) {\n\t\tlevel = \"0\" + level;\n\t}\n\tvar bitdepth;\n\tif (this.av1C.seq_profile === 2 && this.av1C.high_bitdepth === 1) {\n\t\tbitdepth = (this.av1C.twelve_bit === 1) ? \"12\" : \"10\";\n\t} else if ( this.av1C.seq_profile <= 2 ) {\n\t\tbitdepth = (this.av1C.high_bitdepth === 1) ? \"10\" : \"08\";\n\t}\n\t// TODO need to parse the SH to find color config\n\treturn baseCodec+\".\"+this.av1C.seq_profile+\".\"+level+(this.av1C.seq_tier_0?\"H\":\"M\")+\".\"+bitdepth;//+\".\"+this.av1C.monochrome+\".\"+this.av1C.chroma_subsampling_x+\"\"+this.av1C.chroma_subsampling_y+\"\"+this.av1C.chroma_sample_position;\n}\n// file:src/box-write.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.writeHeader = function(stream, msg) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\tLog.debug(\"BoxWriter\", \"Writing box \"+this.type+\" of size: \"+this.size+\" at position \"+stream.getPosition()+(msg || \"\"));\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint32(1);\n\t} else {\n\t\tthis.sizePosition = stream.getPosition();\n\t\tstream.writeUint32(this.size);\n\t}\n\tstream.writeString(this.type, null, 4);\n\tif (this.type === \"uuid\") {\n\t\tstream.writeUint8Array(this.uuid);\n\t}\n\tif (this.size > MAX_SIZE) {\n\t\tstream.writeUint64(this.size);\n\t} \n}\n\nBoxParser.FullBox.prototype.writeHeader = function(stream) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream, \" v=\"+this.version+\" f=\"+this.flags);\n\tstream.writeUint8(this.version);\n\tstream.writeUint24(this.flags);\n}\n\nBoxParser.Box.prototype.write = function(stream) {\n\tif (this.type === \"mdat\") {\n\t\t/* TODO: fix this */\n\t\tif (this.data) {\n\t\t\tthis.size = this.data.length;\n\t\t\tthis.writeHeader(stream);\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t} else {\n\t\tthis.size = (this.data ? this.data.length : 0);\n\t\tthis.writeHeader(stream);\n\t\tif (this.data) {\n\t\t\tstream.writeUint8Array(this.data);\n\t\t}\n\t}\n}\n\nBoxParser.ContainerBox.prototype.write = function(stream) {\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tthis.boxes[i].write(stream);\n\t\t\tthis.size += this.boxes[i].size;\n\t\t}\n\t}\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\nBoxParser.TrackReferenceTypeBox.prototype.write = function(stream) {\n\tthis.size = this.track_ids.length*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32Array(this.track_ids);\n}\n\n// file:src/writing/avcC.js\nBoxParser.avcCBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.size = 7;\n\tfor (i = 0; i < this.SPS.length; i++) {\n\t\tthis.size += 2+this.SPS[i].length;\n\t}\n\tfor (i = 0; i < this.PPS.length; i++) {\n\t\tthis.size += 2+this.PPS[i].length;\n\t}\n\tif (this.ext) {\n\t\tthis.size += this.ext.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint8(this.configurationVersion);\n\tstream.writeUint8(this.AVCProfileIndication);\n\tstream.writeUint8(this.profile_compatibility);\n\tstream.writeUint8(this.AVCLevelIndication);\n\tstream.writeUint8(this.lengthSizeMinusOne + (63<<2));\n\tstream.writeUint8(this.SPS.length + (7<<5));\n\tfor (i = 0; i < this.SPS.length; i++) {\n\t\tstream.writeUint16(this.SPS[i].length);\n\t\tstream.writeUint8Array(this.SPS[i].nalu);\n\t}\n\tstream.writeUint8(this.PPS.length);\n\tfor (i = 0; i < this.PPS.length; i++) {\n\t\tstream.writeUint16(this.PPS[i].length);\n\t\tstream.writeUint8Array(this.PPS[i].nalu);\n\t}\n\tif (this.ext) {\n\t\tstream.writeUint8Array(this.ext);\n\t}\n}\n\n// file:src/writing/co64.js\nBoxParser.co64Box.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tfor(i=0; i<this.chunk_offsets.length; i++) {\n\t\tstream.writeUint64(this.chunk_offsets[i]);\n\t}\n}\n\n// file:src/writing/cslg.js\nBoxParser.cslgBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeInt32(this.compositionToDTSShift);\n\tstream.writeInt32(this.leastDecodeToDisplayDelta);\n\tstream.writeInt32(this.greatestDecodeToDisplayDelta);\n\tstream.writeInt32(this.compositionStartTime);\n\tstream.writeInt32(this.compositionEndTime);\n}\n\n// file:src/writing/ctts.js\nBoxParser.cttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i<this.sample_counts.length; i++) {\n\t\tstream.writeUint32(this.sample_counts[i]);\n\t\tif (this.version === 1) {\n\t\t\tstream.writeInt32(this.sample_offsets[i]); /* signed */\n\t\t} else {\t\t\t\n\t\t\tstream.writeUint32(this.sample_offsets[i]); /* unsigned */\n\t\t}\n\t}\n}\n\n// file:src/writing/dref.js\nBoxParser.drefBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4; //\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tthis.entries[i].write(stream);\n\t\tthis.size += this.entries[i].size;\n\t}\t\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\n// file:src/writing/elng.js\nBoxParser.elngBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.extended_language.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.extended_language);\n}\n\n// file:src/writing/elst.js\nBoxParser.elstBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4+12*this.entries.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tvar entry = this.entries[i];\n\t\tstream.writeUint32(entry.segment_duration);\n\t\tstream.writeInt32(entry.media_time);\n\t\tstream.writeInt16(entry.media_rate_integer);\n\t\tstream.writeInt16(entry.media_rate_fraction);\n\t}\n}\n\n// file:src/writing/emsg.js\nBoxParser.emsgBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+this.message_data.length+(this.scheme_id_uri.length+1)+(this.value.length+1);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.scheme_id_uri);\n\tstream.writeCString(this.value);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.presentation_time_delta);\n\tstream.writeUint32(this.event_duration);\n\tstream.writeUint32(this.id);\n\tstream.writeUint8Array(this.message_data);\n}\n\n// file:src/writing/ftyp.js\nBoxParser.ftypBox.prototype.write = function(stream) {\n\tthis.size = 8+4*this.compatible_brands.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.major_brand, null, 4);\n\tstream.writeUint32(this.minor_version);\n\tfor (var i = 0; i < this.compatible_brands.length; i++) {\n\t\tstream.writeString(this.compatible_brands[i], null, 4);\n\t}\n}\n\n// file:src/writing/hdlr.js\nBoxParser.hdlrBox.prototype.write = function(stream) {\n\tthis.size = 5*4+this.name.length+1;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(0);\n\tstream.writeString(this.handler, null, 4);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeCString(this.name);\n}\n\n// file:src/writing/hvcC.js\nBoxParser.hvcCBox.prototype.write = function(stream) {\n var i,j;\n this.size = 23;\n\n for (i = 0; i < this.nalu_arrays.length; i++) {\n this.size += 3;\n for (j = 0; j < this.nalu_arrays[i].length; j++) {\n this.size += 2 + this.nalu_arrays[i][j].data.length;\n }\n }\n\n this.writeHeader(stream);\n\n stream.writeUint8(this.configurationVersion);\n stream.writeUint8((this.general_profile_space << 6) +\n (this.general_tier_flag << 5) +\n this.general_profile_idc);\n stream.writeUint32(this.general_profile_compatibility);\n stream.writeUint8Array(this.general_constraint_indicator);\n stream.writeUint8(this.general_level_idc);\n stream.writeUint16(this.min_spatial_segmentation_idc + (15<<24));\n stream.writeUint8(this.parallelismType + (63<<2));\n stream.writeUint8(this.chroma_format_idc + (63<<2));\n stream.writeUint8(this.bit_depth_luma_minus8 + (31<<3));\n stream.writeUint8(this.bit_depth_chroma_minus8 + (31<<3));\n stream.writeUint16(this.avgFrameRate);\n stream.writeUint8((this.constantFrameRate<<6) +\n (this.numTemporalLayers<<3) +\n (this.temporalIdNested<<2) +\n this.lengthSizeMinusOne);\n stream.writeUint8(this.nalu_arrays.length);\n for (i = 0; i < this.nalu_arrays.length; i++) {\n // bit(1) array_completeness + bit(1) reserved = 0 + bit(6) nal_unit_type\n stream.writeUint8((this.nalu_arrays[i].completeness<<7) +\n this.nalu_arrays[i].nalu_type);\n stream.writeUint16(this.nalu_arrays[i].length);\n for (j = 0; j < this.nalu_arrays[i].length; j++) {\n stream.writeUint16(this.nalu_arrays[i][j].data.length);\n stream.writeUint8Array(this.nalu_arrays[i][j].data);\n }\n }\n}\n// file:src/writing/kind.js\nBoxParser.kindBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = (this.schemeURI.length+1)+(this.value.length+1);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.schemeURI);\n\tstream.writeCString(this.value);\n}\n\n// file:src/writing/mdhd.js\nBoxParser.mdhdBox.prototype.write = function(stream) {\n\tthis.size = 4*4+2*2;\n\tthis.flags = 0;\n\tthis.version = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint16(this.language);\n\tstream.writeUint16(0);\n}\n\n// file:src/writing/mehd.js\nBoxParser.mehdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.fragment_duration);\n}\n\n// file:src/writing/mfhd.js\nBoxParser.mfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sequence_number);\n}\n\n// file:src/writing/mvhd.js\nBoxParser.mvhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 23*4+2*2;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(this.rate);\n\tstream.writeUint16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32Array(this.matrix);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.next_track_id);\n}\n\n// file:src/writing/sampleentry.js\nBoxParser.SampleEntry.prototype.writeHeader = function(stream) {\n\tthis.size = 8;\n\tBoxParser.Box.prototype.writeHeader.call(this, stream);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint8(0);\n\tstream.writeUint16(this.data_reference_index);\n}\n\nBoxParser.SampleEntry.prototype.writeFooter = function(stream) {\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tthis.boxes[i].write(stream);\n\t\tthis.size += this.boxes[i].size;\n\t}\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\t\n}\n\nBoxParser.SampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tstream.writeUint8Array(this.data);\n\tthis.size += this.data.length;\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\t\n}\n\nBoxParser.VisualSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += 2*7+6*4+32;\n\tstream.writeUint16(0); \n\tstream.writeUint16(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.width);\n\tstream.writeUint16(this.height);\n\tstream.writeUint32(this.horizresolution);\n\tstream.writeUint32(this.vertresolution);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.frame_count);\n\tstream.writeUint8(Math.min(31, this.compressorname.length));\n\tstream.writeString(this.compressorname, null, 31);\n\tstream.writeUint16(this.depth);\n\tstream.writeInt16(-1);\n\tthis.writeFooter(stream);\n}\n\nBoxParser.AudioSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += 2*4+3*4;\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeUint16(this.channel_count);\n\tstream.writeUint16(this.samplesize);\n\tstream.writeUint16(0);\n\tstream.writeUint16(0);\n\tstream.writeUint32(this.samplerate<<16);\n\tthis.writeFooter(stream);\n}\n\nBoxParser.stppSampleEntry.prototype.write = function(stream) {\n\tthis.writeHeader(stream);\n\tthis.size += this.namespace.length+1+\n\t\t\t\t this.schema_location.length+1+\n\t\t\t\t this.auxiliary_mime_types.length+1;\n\tstream.writeCString(this.namespace);\n\tstream.writeCString(this.schema_location);\n\tstream.writeCString(this.auxiliary_mime_types);\n\tthis.writeFooter(stream);\n}\n\n// file:src/writing/samplegroups/samplegroup.js\nBoxParser.SampleGroupEntry.prototype.write = function(stream) {\n\tstream.writeUint8Array(this.data);\n}\n\n// file:src/writing/sbgp.js\nBoxParser.sbgpBox.prototype.write = function(stream) {\n\tthis.version = 1;\t\n\tthis.flags = 0;\n\tthis.size = 12+8*this.entries.length;\n\tthis.writeHeader(stream);\n\tstream.writeString(this.grouping_type, null, 4);\n\tstream.writeUint32(this.grouping_type_parameter);\n\tstream.writeUint32(this.entries.length);\n\tfor (var i = 0; i < this.entries.length; i++) {\n\t\tvar entry = this.entries[i];\n\t\tstream.writeInt32(entry.sample_count);\n\t\tstream.writeInt32(entry.group_description_index);\n\t}\n}\n\n// file:src/writing/sgpd.js\nBoxParser.sgpdBox.prototype.write = function(stream) {\n\tvar i;\n\tvar entry;\n\t// leave version as read\n\t// this.version;\n\tthis.flags = 0;\n\tthis.size = 12;\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tthis.size += 4;\n\t\t\t}\n\t\t\tthis.size += entry.data.length;\n\t\t}\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeString(this.grouping_type, null, 4);\n\tif (this.version === 1) {\n\t\tstream.writeUint32(this.default_length);\n\t}\n\tif (this.version >= 2) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tstream.writeUint32(this.entries.length);\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tentry = this.entries[i];\n\t\tif (this.version === 1) {\n\t\t\tif (this.default_length === 0) {\n\t\t\t\tstream.writeUint32(entry.description_length);\n\t\t\t}\n\t\t}\n\t\tentry.write(stream);\n\t}\n}\n\n\n// file:src/writing/sidx.js\nBoxParser.sidxBox.prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = 4*4+2+2+12*this.references.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.reference_ID);\n\tstream.writeUint32(this.timescale);\n\tstream.writeUint32(this.earliest_presentation_time);\n\tstream.writeUint32(this.first_offset);\n\tstream.writeUint16(0);\n\tstream.writeUint16(this.references.length);\n\tfor (var i = 0; i < this.references.length; i++) {\n\t\tvar ref = this.references[i];\n\t\tstream.writeUint32(ref.reference_type << 31 | ref.referenced_size);\n\t\tstream.writeUint32(ref.subsegment_duration);\n\t\tstream.writeUint32(ref.starts_with_SAP << 31 | ref.SAP_type << 28 | ref.SAP_delta_time);\n\t}\n}\n\n// file:src/writing/smhd.js\nBoxParser.smhdBox.prototype.write = function(stream) {\n var i;\n this.version = 0;\n this.flags = 1;\n this.size = 4;\n this.writeHeader(stream);\n stream.writeUint16(this.balance);\n stream.writeUint16(0);\n}\n// file:src/writing/stco.js\nBoxParser.stcoBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.chunk_offsets.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.chunk_offsets.length);\n\tstream.writeUint32Array(this.chunk_offsets);\n}\n\n// file:src/writing/stsc.js\nBoxParser.stscBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+12*this.first_chunk.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.first_chunk.length);\n\tfor(i=0; i<this.first_chunk.length; i++) {\n\t\tstream.writeUint32(this.first_chunk[i]);\n\t\tstream.writeUint32(this.samples_per_chunk[i]);\n\t\tstream.writeUint32(this.sample_description_index[i]);\n\t}\n}\n\n// file:src/writing/stsd.js\nBoxParser.stsdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 0;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.entries.length);\n\tthis.size += 4;\n\tfor (i = 0; i < this.entries.length; i++) {\n\t\tthis.entries[i].write(stream);\n\t\tthis.size += this.entries[i].size;\n\t}\n\t/* adjusting the size, now that all sub-boxes are known */\n\tLog.debug(\"BoxWriter\", \"Adjusting box \"+this.type+\" with new size \"+this.size);\n\tstream.adjustUint32(this.sizePosition, this.size);\n}\n\n// file:src/writing/stsh.js\nBoxParser.stshBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.shadowed_sample_numbers.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.shadowed_sample_numbers.length);\n\tfor(i=0; i<this.shadowed_sample_numbers.length; i++) {\n\t\tstream.writeUint32(this.shadowed_sample_numbers[i]);\n\t\tstream.writeUint32(this.sync_sample_numbers[i]);\n\t}\n}\n\n// file:src/writing/stss.js\nBoxParser.stssBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+4*this.sample_numbers.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_numbers.length);\n\tstream.writeUint32Array(this.sample_numbers);\n}\n\n// file:src/writing/stsz.js\nBoxParser.stszBox.prototype.write = function(stream) {\n\tvar i;\n\tvar constant = true;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tif (this.sample_sizes.length > 0) {\n\t\ti = 0;\n\t\twhile (i+1 < this.sample_sizes.length) {\n\t\t\tif (this.sample_sizes[i+1] !== this.sample_sizes[0]) {\n\t\t\t\tconstant = false;\n\t\t\t\tbreak;\n\t\t\t} else {\n\t\t\t\ti++;\n\t\t\t}\n\t\t}\n\t} else {\n\t\tconstant = false;\n\t}\n\tthis.size = 8;\n\tif (!constant) {\n\t\tthis.size += 4*this.sample_sizes.length;\n\t}\n\tthis.writeHeader(stream);\n\tif (!constant) {\n\t\tstream.writeUint32(0);\n\t} else {\n\t\tstream.writeUint32(this.sample_sizes[0]);\n\t}\n\tstream.writeUint32(this.sample_sizes.length);\n\tif (!constant) {\n\t\tstream.writeUint32Array(this.sample_sizes);\n\t}\t\n}\n\n// file:src/writing/stts.js\nBoxParser.sttsBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4+8*this.sample_counts.length;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_counts.length);\n\tfor(i=0; i<this.sample_counts.length; i++) {\n\t\tstream.writeUint32(this.sample_counts[i]);\n\t\tstream.writeUint32(this.sample_deltas[i]);\n\t}\n}\n\n// file:src/writing/tfdt.js\nBoxParser.tfdtBox.prototype.write = function(stream) {\n\tvar UINT32_MAX = Math.pow(2, 32) - 1;\n\t// use version 1 if baseMediaDecodeTime does not fit 32 bits\n\tthis.version = this.baseMediaDecodeTime > UINT32_MAX ? 1 : 0;\n\tthis.flags = 0;\n\tthis.size = 4;\n\tif (this.version === 1) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.version === 1) {\n\t\tstream.writeUint64(this.baseMediaDecodeTime);\n\t} else {\n\t\tstream.writeUint32(this.baseMediaDecodeTime);\n\t}\n}\n\n// file:src/writing/tfhd.js\nBoxParser.tfhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tthis.size += 8;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tthis.size += 4;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tif (this.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) {\n\t\tstream.writeUint64(this.base_data_offset);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\tstream.writeUint32(this.default_sample_description_index);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\tstream.writeUint32(this.default_sample_duration);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\tstream.writeUint32(this.default_sample_size);\n\t}\n\tif (this.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\tstream.writeUint32(this.default_sample_flags);\n\t}\n}\n\n// file:src/writing/tkhd.js\nBoxParser.tkhdBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\t//this.flags = 0;\n\tthis.size = 4*18+2*4;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.creation_time);\n\tstream.writeUint32(this.modification_time);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(0);\n\tstream.writeUint32(this.duration);\n\tstream.writeUint32(0);\n\tstream.writeUint32(0);\n\tstream.writeInt16(this.layer);\n\tstream.writeInt16(this.alternate_group);\n\tstream.writeInt16(this.volume<<8);\n\tstream.writeUint16(0);\n\tstream.writeInt32Array(this.matrix);\n\tstream.writeUint32(this.width);\n\tstream.writeUint32(this.height);\n}\n\n// file:src/writing/trex.js\nBoxParser.trexBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.flags = 0;\n\tthis.size = 4*5;\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.track_id);\n\tstream.writeUint32(this.default_sample_description_index);\n\tstream.writeUint32(this.default_sample_duration);\n\tstream.writeUint32(this.default_sample_size);\n\tstream.writeUint32(this.default_sample_flags);\n}\n\n// file:src/writing/trun.js\nBoxParser.trunBox.prototype.write = function(stream) {\n\tthis.version = 0;\n\tthis.size = 4;\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tthis.size += 4;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\tthis.size += 4*this.sample_duration.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\tthis.size += 4*this.sample_size.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\tthis.size += 4*this.sample_flags.length;\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\tthis.size += 4*this.sample_composition_time_offset.length;\n\t}\n\tthis.writeHeader(stream);\n\tstream.writeUint32(this.sample_count);\n\tif (this.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) {\n\t\tthis.data_offset_position = stream.getPosition();\n\t\tstream.writeInt32(this.data_offset); //signed\n\t}\n\tif (this.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG) {\n\t\tstream.writeUint32(this.first_sample_flags);\n\t}\n\tfor (var i = 0; i < this.sample_count; i++) {\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\tstream.writeUint32(this.sample_duration[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\tstream.writeUint32(this.sample_size[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\tstream.writeUint32(this.sample_flags[i]);\n\t\t}\n\t\tif (this.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\tif (this.version === 0) {\n\t\t\t\tstream.writeUint32(this.sample_composition_time_offset[i]);\n\t\t\t} else {\n\t\t\t\tstream.writeInt32(this.sample_composition_time_offset[i]); //signed\n\t\t\t}\n\t\t}\n\t}\t\t\n}\n\n// file:src/writing/url.js\nBoxParser[\"url Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tif (this.location) {\n\t\tthis.flags = 0;\n\t\tthis.size = this.location.length+1;\n\t} else {\n\t\tthis.flags = 0x000001;\n\t\tthis.size = 0;\n\t}\n\tthis.writeHeader(stream);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/urn.js\nBoxParser[\"urn Box\"].prototype.write = function(stream) {\n\tthis.version = 0;\t\n\tthis.flags = 0;\n\tthis.size = this.name.length+1+(this.location ? this.location.length+1 : 0);\n\tthis.writeHeader(stream);\n\tstream.writeCString(this.name);\n\tif (this.location) {\n\t\tstream.writeCString(this.location);\n\t}\n}\n\n// file:src/writing/vmhd.js\nBoxParser.vmhdBox.prototype.write = function(stream) {\n\tvar i;\n\tthis.version = 0;\n\tthis.flags = 1;\n\tthis.size = 8;\n\tthis.writeHeader(stream);\n\tstream.writeUint16(this.graphicsmode);\n\tstream.writeUint16Array(this.opcolor);\n}\n\n// file:src/box-unpack.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.cttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tsamples[k].pts = samples[k].dts + this.sample_offsets[i];\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.sttsBox.prototype.unpack = function(samples) {\n\tvar i, j, k;\n\tk = 0;\n\tfor (i = 0; i < this.sample_counts.length; i++) {\n\t\tfor (j = 0; j < this.sample_counts[i]; j++) {\n\t\t\tif (k === 0) {\n\t\t\t\tsamples[k].dts = 0;\n\t\t\t} else {\n\t\t\t\tsamples[k].dts = samples[k-1].dts + this.sample_deltas[i];\n\t\t\t}\n\t\t\tk++;\n\t\t}\n\t}\n}\n\nBoxParser.stcoBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.chunk_offsets.length; i++) {\n\t\tsamples[i].offset = this.chunk_offsets[i];\n\t}\n}\n\nBoxParser.stscBox.prototype.unpack = function(samples) {\n\tvar i, j, k, l, m;\n\tl = 0;\n\tm = 0;\n\tfor (i = 0; i < this.first_chunk.length; i++) {\n\t\tfor (j = 0; j < (i+1 < this.first_chunk.length ? this.first_chunk[i+1] : Infinity); j++) {\n\t\t\tm++;\n\t\t\tfor (k = 0; k < this.samples_per_chunk[i]; k++) {\n\t\t\t\tif (samples[l]) {\n\t\t\t\t\tsamples[l].description_index = this.sample_description_index[i];\n\t\t\t\t\tsamples[l].chunk_index = m;\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t\tl++;\n\t\t\t}\t\t\t\n\t\t}\n\t}\n}\n\nBoxParser.stszBox.prototype.unpack = function(samples) {\n\tvar i;\n\tfor (i = 0; i < this.sample_sizes.length; i++) {\n\t\tsamples[i].size = this.sample_sizes[i];\n\t}\n}\n// file:src/box-diff.js\n\nBoxParser.DIFF_BOXES_PROP_NAMES = [ \"boxes\", \"entries\", \"references\", \"subsamples\",\n\t\t\t\t\t \t \"items\", \"item_infos\", \"extents\", \"associations\",\n\t\t\t\t\t \t \"subsegments\", \"ranges\", \"seekLists\", \"seekPoints\",\n\t\t\t\t\t \t \"esd\", \"levels\"];\n\nBoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES = [ \"compatible_brands\", \"matrix\", \"opcolor\", \"sample_counts\", \"sample_deltas\",\n\"first_chunk\", \"samples_per_chunk\", \"sample_sizes\", \"chunk_offsets\", \"sample_offsets\", \"sample_description_index\", \"sample_duration\" ];\n\nBoxParser.boxEqualFields = function(box_a, box_b) {\n\tif (box_a && !box_b) return false;\n\tvar prop;\n\tfor (prop in box_a) {\n\t\tif (BoxParser.DIFF_BOXES_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\tcontinue;\n\t\t// } else if (excluded_fields && excluded_fields.indexOf(prop) > -1) {\n\t\t// \tcontinue;\n\t\t} else if (box_a[prop] instanceof BoxParser.Box || box_b[prop] instanceof BoxParser.Box) {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"undefined\" || typeof box_b[prop] === \"undefined\") {\n\t\t\tcontinue;\n\t\t} else if (typeof box_a[prop] === \"function\" || typeof box_b[prop] === \"function\") {\n\t\t\tcontinue;\n\t\t} else if (\n\t\t\t(box_a.subBoxNames && box_a.subBoxNames.indexOf(prop.slice(0,4)) > -1) ||\n\t\t\t(box_b.subBoxNames && box_b.subBoxNames.indexOf(prop.slice(0,4)) > -1)) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tif (prop === \"data\" || prop === \"start\" || prop === \"size\" || prop === \"creation_time\" || prop === \"modification_time\") {\n\t\t\t\tcontinue;\n\t\t\t} else if (BoxParser.DIFF_PRIMITIVE_ARRAY_PROP_NAMES.indexOf(prop) > -1) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\tif (box_a[prop] !== box_b[prop]) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n\nBoxParser.boxEqual = function(box_a, box_b) {\n\tif (!BoxParser.boxEqualFields(box_a, box_b)) {\n\t\treturn false;\n\t}\n\tfor (var j = 0; j < BoxParser.DIFF_BOXES_PROP_NAMES.length; j++) {\n\t\tvar name = BoxParser.DIFF_BOXES_PROP_NAMES[j];\n\t\tif (box_a[name] && box_b[name]) {\n\t\t\tif (!BoxParser.boxEqual(box_a[name], box_b[name])) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t}\n\t}\n\treturn true;\n}\n// file:src/text-mp4.js\n/* \n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar VTTin4Parser = function() {\t\n}\n\nVTTin4Parser.prototype.parseSample = function(data) {\n\tvar cues, cue;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tcues = [];\n\twhile (!stream.isEos()) {\n\t\tcue = BoxParser.parseOneBox(stream, false);\n\t\tif (cue.code === BoxParser.OK && cue.box.type === \"vttc\") {\n\t\t\tcues.push(cue.box);\n\t\t}\t\t\n\t}\n\treturn cues;\n}\n\nVTTin4Parser.prototype.getText = function (startTime, endTime, data) {\n\tfunction pad(n, width, z) {\n\t z = z || '0';\n\t n = n + '';\n\t return n.length >= width ? n : new Array(width - n.length + 1).join(z) + n;\n\t}\n\tfunction secToTimestamp(insec) {\n\t\tvar h = Math.floor(insec/3600);\n\t\tvar m = Math.floor((insec - h*3600)/60);\n\t\tvar s = Math.floor(insec - h*3600 - m*60);\n\t\tvar ms = Math.floor((insec - h*3600 - m*60 - s)*1000);\n\t\treturn \"\"+pad(h, 2)+\":\"+pad(m,2)+\":\"+pad(s, 2)+\".\"+pad(ms, 3);\n\t}\n\tvar cues = this.parseSample(data);\n\tvar string = \"\";\n\tfor (var i = 0; i < cues.length; i++) {\n\t\tvar cueIn4 = cues[i];\n\t\tstring += secToTimestamp(startTime)+\" --> \"+secToTimestamp(endTime)+\"\\r\\n\";\n\t\tstring += cueIn4.payl.text;\n\t}\n\treturn string;\n}\n\nvar XMLSubtitlein4Parser = function() {\t\n}\n\nXMLSubtitlein4Parser.prototype.parseSample = function(sample) {\n\tvar res = {};\t\n\tvar i;\n\tres.resources = [];\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\tif (!sample.subsamples || sample.subsamples.length === 0) {\n\t\tres.documentString = stream.readString(sample.data.length);\n\t} else {\n\t\tres.documentString = stream.readString(sample.subsamples[0].size);\n\t\tif (sample.subsamples.length > 1) {\n\t\t\tfor (i = 1; i < sample.subsamples.length; i++) {\n\t\t\t\tres.resources[i] = stream.readUint8Array(sample.subsamples[i].size);\n\t\t\t}\n\t\t}\n\t}\n\tif (typeof (DOMParser) !== \"undefined\") {\n\t\tres.document = (new DOMParser()).parseFromString(res.documentString, \"application/xml\");\n\t}\n\treturn res;\n}\n\nvar Textin4Parser = function() {\t\n}\n\nTextin4Parser.prototype.parseSample = function(sample) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(sample.data.buffer);\n\ttextString = stream.readString(sample.data.length);\n\treturn textString;\n}\n\nTextin4Parser.prototype.parseConfig = function(data) {\n\tvar textString;\n\tvar stream = new MP4BoxStream(data.buffer);\n\tstream.readUint32(); // version & flags\n\ttextString = stream.readCString();\n\treturn textString;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.VTTin4Parser = VTTin4Parser;\n\texports.XMLSubtitlein4Parser = XMLSubtitlein4Parser;\n\texports.Textin4Parser = Textin4Parser;\n}\n// file:src/isofile.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar ISOFile = function (stream) {\n\t/* MutiBufferStream object used to parse boxes */\n\tthis.stream = stream || new MultiBufferStream();\n\t/* Array of all boxes (in order) found in the file */\n\tthis.boxes = [];\n\t/* Array of all mdats */\n\tthis.mdats = [];\n\t/* Array of all moofs */\n\tthis.moofs = [];\n\t/* Boolean indicating if the file is compatible with progressive parsing (moov first) */\n\tthis.isProgressive = false;\n\t/* Boolean used to fire moov start event only once */\n\tthis.moovStartFound = false;\n\t/* Callback called when the moov parsing starts */\n\tthis.onMoovStart = null;\n\t/* Boolean keeping track of the call to onMoovStart, to avoid double calls */\n\tthis.moovStartSent = false;\n\t/* Callback called when the moov is entirely parsed */\n\tthis.onReady = null;\n\t/* Boolean keeping track of the call to onReady, to avoid double calls */\n\tthis.readySent = false;\n\t/* Callback to call when segments are ready */\n\tthis.onSegment = null;\n\t/* Callback to call when samples are ready */\n\tthis.onSamples = null;\n\t/* Callback to call when there is an error in the parsing or processing of samples */\n\tthis.onError = null;\n\t/* Boolean indicating if the moov box run-length encoded tables of sample information have been processed */\n\tthis.sampleListBuilt = false;\n\t/* Array of Track objects for which fragmentation of samples is requested */\n\tthis.fragmentedTracks = [];\n\t/* Array of Track objects for which extraction of samples is requested */\n\tthis.extractedTracks = [];\n\t/* Boolean indicating that fragmention is ready */\n\tthis.isFragmentationInitialized = false;\n\t/* Boolean indicating that fragmented has started */\n\tthis.sampleProcessingStarted = false;\n\t/* Number of the next 'moof' to generate when fragmenting */\n\tthis.nextMoofNumber = 0;\n\t/* Boolean indicating if the initial list of items has been produced */\n\tthis.itemListBuilt = false;\n\t/* Array of items */\n\tthis.items = [];\n\t/* Array of entity groups */\n\tthis.entity_groups = [];\n\t/* Callback called when the sidx box is entirely parsed */\n\tthis.onSidx = null;\n\t/* Boolean keeping track of the call to onSidx, to avoid double calls */\n\tthis.sidxSent = false;\n}\n\nISOFile.prototype.setSegmentOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar fragTrack = {};\n\t\tthis.fragmentedTracks.push(fragTrack);\n\t\tfragTrack.id = id;\n\t\tfragTrack.user = user;\n\t\tfragTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\tfragTrack.segmentStream = null;\n\t\tfragTrack.nb_samples = 1000;\n\t\tfragTrack.rapAlignement = true;\n\t\tif (options) {\n\t\t\tif (options.nbSamples) fragTrack.nb_samples = options.nbSamples;\n\t\t\tif (options.rapAlignement) fragTrack.rapAlignement = options.rapAlignement;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetSegmentOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar fragTrack = this.fragmentedTracks[i];\n\t\tif (fragTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.fragmentedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.setExtractionOptions = function(id, user, options) {\n\tvar trak = this.getTrackById(id);\n\tif (trak) {\n\t\tvar extractTrack = {};\n\t\tthis.extractedTracks.push(extractTrack);\n\t\textractTrack.id = id;\n\t\textractTrack.user = user;\n\t\textractTrack.trak = trak;\n\t\ttrak.nextSample = 0;\n\t\textractTrack.nb_samples = 1000;\n\t\textractTrack.samples = [];\n\t\tif (options) {\n\t\t\tif (options.nbSamples) extractTrack.nb_samples = options.nbSamples;\n\t\t}\n\t}\n}\n\nISOFile.prototype.unsetExtractionOptions = function(id) {\n\tvar index = -1;\n\tfor (var i = 0; i < this.extractedTracks.length; i++) {\n\t\tvar extractTrack = this.extractedTracks[i];\n\t\tif (extractTrack.id == id) {\n\t\t\tindex = i;\n\t\t}\n\t}\n\tif (index > -1) {\n\t\tthis.extractedTracks.splice(index, 1);\n\t}\n}\n\nISOFile.prototype.parse = function() {\n\tvar found;\n\tvar ret;\n\tvar box;\n\tvar parseBoxHeadersOnly = false;\n\n\tif (this.restoreParsePosition)\t{\n\t\tif (!this.restoreParsePosition()) {\n\t\t\treturn;\n\t\t}\n\t}\n\n\twhile (true) {\n\n\t\tif (this.hasIncompleteMdat && this.hasIncompleteMdat()) {\n\t\t\tif (this.processIncompleteMdat()) {\n\t\t\t\tcontinue;\n\t\t\t} else {\n\t\t\t\treturn;\n\t\t\t}\n\t\t} else {\n\t\t\tif (this.saveParsePosition)\t{\n\t\t\t\tthis.saveParsePosition();\n\t\t\t}\n\t\t\tret = BoxParser.parseOneBox(this.stream, parseBoxHeadersOnly);\n\t\t\tif (ret.code === BoxParser.ERR_NOT_ENOUGH_DATA) {\n\t\t\t\tif (this.processIncompleteBox) {\n\t\t\t\t\tif (this.processIncompleteBox(ret)) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tvar box_type;\n\t\t\t\t/* the box is entirely parsed */\n\t\t\t\tbox = ret.box;\n\t\t\t\tbox_type = (box.type !== \"uuid\" ? box.type : box.uuid);\n\t\t\t\t/* store the box in the 'boxes' array to preserve box order (for file rewrite if needed) */\n\t\t\t\tthis.boxes.push(box);\n\t\t\t\t/* but also store box in a property for more direct access */\n\t\t\t\tswitch (box_type) {\n\t\t\t\t\tcase \"mdat\":\n\t\t\t\t\t\tthis.mdats.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moof\":\n\t\t\t\t\t\tthis.moofs.push(box);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase \"moov\":\n\t\t\t\t\t\tthis.moovStartFound = true;\n\t\t\t\t\t\tif (this.mdats.length === 0) {\n\t\t\t\t\t\t\tthis.isProgressive = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\t/* no break */\n\t\t\t\t\t\t/* falls through */\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tif (this[box_type] !== undefined) {\n\t\t\t\t\t\t\tLog.warn(\"ISOFile\", \"Duplicate Box of type: \"+box_type+\", overriding previous occurrence\");\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis[box_type] = box;\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (this.updateUsedBytes) {\n\t\t\t\t\tthis.updateUsedBytes(box, ret);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.checkBuffer = function (ab) {\n\tif (ab === null || ab === undefined) {\n\t\tthrow(\"Buffer must be defined and non empty\");\n\t}\n\tif (ab.fileStart === undefined) {\n\t\tthrow(\"Buffer must have a fileStart property\");\n\t}\n\tif (ab.byteLength === 0) {\n\t\tLog.warn(\"ISOFile\", \"Ignoring empty buffer (fileStart: \"+ab.fileStart+\")\");\n\t\tthis.stream.logBufferLevel();\n\t\treturn false;\n\t}\n\tLog.info(\"ISOFile\", \"Processing buffer (fileStart: \"+ab.fileStart+\")\");\n\n\t/* mark the bytes in the buffer as not being used yet */\n\tab.usedBytes = 0;\n\tthis.stream.insertBuffer(ab);\n\tthis.stream.logBufferLevel();\n\n\tif (!this.stream.initialized()) {\n\t\tLog.warn(\"ISOFile\", \"Not ready to start parsing\");\n\t\treturn false;\n\t}\n\treturn true;\n}\n\n/* Processes a new ArrayBuffer (with a fileStart property)\n Returns the next expected file position, or undefined if not ready to parse */\nISOFile.prototype.appendBuffer = function(ab, last) {\n\tvar nextFileStart;\n\tif (!this.checkBuffer(ab)) {\n\t\treturn;\n\t}\n\n\t/* Parse whatever is in the existing buffers */\n\tthis.parse();\n\n\t/* Check if the moovStart callback needs to be called */\n\tif (this.moovStartFound && !this.moovStartSent) {\n\t\tthis.moovStartSent = true;\n\t\tif (this.onMoovStart) this.onMoovStart();\n\t}\n\n\tif (this.moov) {\n\t\t/* A moov box has been entirely parsed */\n\n\t\t/* if this is the first call after the moov is found we initialize the list of samples (may be empty in fragmented files) */\n\t\tif (!this.sampleListBuilt) {\n\t\t\tthis.buildSampleLists();\n\t\t\tthis.sampleListBuilt = true;\n\t\t}\n\n\t\t/* We update the sample information if there are any new moof boxes */\n\t\tthis.updateSampleLists();\n\n\t\t/* If the application needs to be informed that the 'moov' has been found,\n\t\t we create the information object and callback the application */\n\t\tif (this.onReady && !this.readySent) {\n\t\t\tthis.readySent = true;\n\t\t\tthis.onReady(this.getInfo());\n\t\t}\n\n\t\t/* See if any sample extraction or segment creation needs to be done with the available samples */\n\t\tthis.processSamples(last);\n\n\t\t/* Inform about the best range to fetch next */\n\t\tif (this.nextSeekPosition) {\n\t\t\tnextFileStart = this.nextSeekPosition;\n\t\t\tthis.nextSeekPosition = undefined;\n\t\t} else {\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t}\n\t\tif (this.stream.getEndFilePositionAfter) {\n\t\t\tnextFileStart = this.stream.getEndFilePositionAfter(nextFileStart);\n\t\t}\n\t} else {\n\t\tif (this.nextParsePosition) {\n\t\t\t/* moov has not been parsed but the first buffer was received,\n\t\t\t the next fetch should probably be the next box start */\n\t\t\tnextFileStart = this.nextParsePosition;\n\t\t} else {\n\t\t\t/* No valid buffer has been parsed yet, we cannot know what to parse next */\n\t\t\tnextFileStart = 0;\n\t\t}\n\t}\n\tif (this.sidx) {\n\t\tif (this.onSidx && !this.sidxSent) {\n\t\t\tthis.onSidx(this.sidx);\n\t\t\tthis.sidxSent = true;\n\t\t}\n\t}\n\tif (this.meta) {\n\t\tif (this.flattenItemInfo && !this.itemListBuilt) {\n\t\t\tthis.flattenItemInfo();\n\t\t\tthis.itemListBuilt = true;\n\t\t}\n\t\tif (this.processItems) {\n\t\t\tthis.processItems(this.onItem);\n\t\t}\n\t}\n\n\tif (this.stream.cleanBuffers) {\n\t\tLog.info(\"ISOFile\", \"Done processing buffer (fileStart: \"+ab.fileStart+\") - next buffer to fetch should have a fileStart position of \"+nextFileStart);\n\t\tthis.stream.logBufferLevel();\n\t\tthis.stream.cleanBuffers();\n\t\tthis.stream.logBufferLevel(true);\n\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t}\n\treturn nextFileStart;\n}\n\nISOFile.prototype.getInfo = function() {\n\tvar i, j;\n\tvar movie = {};\n\tvar trak;\n\tvar track;\n\tvar ref;\n\tvar sample_desc;\n\tvar _1904 = (new Date('1904-01-01T00:00:00Z').getTime());\n\n\tif (this.moov) {\n\t\tmovie.hasMoov = true;\n\t\tmovie.duration = this.moov.mvhd.duration;\n\t\tmovie.timescale = this.moov.mvhd.timescale;\n\t\tmovie.isFragmented = (this.moov.mvex != null);\n\t\tif (movie.isFragmented && this.moov.mvex.mehd) {\n\t\t\tmovie.fragment_duration = this.moov.mvex.mehd.fragment_duration;\n\t\t}\n\t\tmovie.isProgressive = this.isProgressive;\n\t\tmovie.hasIOD = (this.moov.iods != null);\n\t\tmovie.brands = [];\n\t\tmovie.brands.push(this.ftyp.major_brand);\n\t\tmovie.brands = movie.brands.concat(this.ftyp.compatible_brands);\n\t\tmovie.created = new Date(_1904+this.moov.mvhd.creation_time*1000);\n\t\tmovie.modified = new Date(_1904+this.moov.mvhd.modification_time*1000);\n\t\tmovie.tracks = [];\n\t\tmovie.audioTracks = [];\n\t\tmovie.videoTracks = [];\n\t\tmovie.subtitleTracks = [];\n\t\tmovie.metadataTracks = [];\n\t\tmovie.hintTracks = [];\n\t\tmovie.otherTracks = [];\n\t\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\t\ttrak = this.moov.traks[i];\n\t\t\tsample_desc = trak.mdia.minf.stbl.stsd.entries[0];\n\t\t\ttrack = {};\n\t\t\tmovie.tracks.push(track);\n\t\t\ttrack.id = trak.tkhd.track_id;\n\t\t\ttrack.name = trak.mdia.hdlr.name;\n\t\t\ttrack.references = [];\n\t\t\tif (trak.tref) {\n\t\t\t\tfor (j = 0; j < trak.tref.boxes.length; j++) {\n\t\t\t\t\tref = {};\n\t\t\t\t\ttrack.references.push(ref);\n\t\t\t\t\tref.type = trak.tref.boxes[j].type;\n\t\t\t\t\tref.track_ids = trak.tref.boxes[j].track_ids;\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (trak.edts) {\n\t\t\t\ttrack.edits = trak.edts.elst.entries;\n\t\t\t}\n\t\t\ttrack.created = new Date(_1904+trak.tkhd.creation_time*1000);\n\t\t\ttrack.modified = new Date(_1904+trak.tkhd.modification_time*1000);\n\t\t\ttrack.movie_duration = trak.tkhd.duration;\n\t\t\ttrack.movie_timescale = movie.timescale;\n\t\t\ttrack.layer = trak.tkhd.layer;\n\t\t\ttrack.alternate_group = trak.tkhd.alternate_group;\n\t\t\ttrack.volume = trak.tkhd.volume;\n\t\t\ttrack.matrix = trak.tkhd.matrix;\n\t\t\ttrack.track_width = trak.tkhd.width/(1<<16);\n\t\t\ttrack.track_height = trak.tkhd.height/(1<<16);\n\t\t\ttrack.timescale = trak.mdia.mdhd.timescale;\n\t\t\ttrack.cts_shift = trak.mdia.minf.stbl.cslg;\n\t\t\ttrack.duration = trak.mdia.mdhd.duration;\n\t\t\ttrack.samples_duration = trak.samples_duration;\n\t\t\ttrack.codec = sample_desc.getCodec();\n\t\t\ttrack.kind = (trak.udta && trak.udta.kinds.length ? trak.udta.kinds[0] : { schemeURI: \"\", value: \"\"});\n\t\t\ttrack.language = (trak.mdia.elng ? trak.mdia.elng.extended_language : trak.mdia.mdhd.languageString);\n\t\t\ttrack.nb_samples = trak.samples.length;\n\t\t\ttrack.size = trak.samples_size;\n\t\t\ttrack.bitrate = (track.size*8*track.timescale)/track.samples_duration;\n\t\t\tif (sample_desc.isAudio()) {\n\t\t\t\ttrack.type = \"audio\";\n\t\t\t\tmovie.audioTracks.push(track);\n\t\t\t\ttrack.audio = {};\n\t\t\t\ttrack.audio.sample_rate = sample_desc.getSampleRate();\n\t\t\t\ttrack.audio.channel_count = sample_desc.getChannelCount();\n\t\t\t\ttrack.audio.sample_size = sample_desc.getSampleSize();\n\t\t\t} else if (sample_desc.isVideo()) {\n\t\t\t\ttrack.type = \"video\";\n\t\t\t\tmovie.videoTracks.push(track);\n\t\t\t\ttrack.video = {};\n\t\t\t\ttrack.video.width = sample_desc.getWidth();\n\t\t\t\ttrack.video.height = sample_desc.getHeight();\n\t\t\t} else if (sample_desc.isSubtitle()) {\n\t\t\t\ttrack.type = \"subtitles\";\n\t\t\t\tmovie.subtitleTracks.push(track);\n\t\t\t} else if (sample_desc.isHint()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.hintTracks.push(track);\n\t\t\t} else if (sample_desc.isMetadata()) {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.metadataTracks.push(track);\n\t\t\t} else {\n\t\t\t\ttrack.type = \"metadata\";\n\t\t\t\tmovie.otherTracks.push(track);\n\t\t\t}\n\t\t}\n\t} else {\n\t\tmovie.hasMoov = false;\n\t}\n\tmovie.mime = \"\";\n\tif (movie.hasMoov && movie.tracks) {\n\t\tif (movie.videoTracks && movie.videoTracks.length > 0) {\n\t\t\tmovie.mime += 'video/mp4; codecs=\\\"';\n\t\t} else if (movie.audioTracks && movie.audioTracks.length > 0) {\n\t\t\tmovie.mime += 'audio/mp4; codecs=\\\"';\n\t\t} else {\n\t\t\tmovie.mime += 'application/mp4; codecs=\\\"';\n\t\t}\n\t\tfor (i = 0; i < movie.tracks.length; i++) {\n\t\t\tif (i !== 0) movie.mime += ',';\n\t\t\tmovie.mime+= movie.tracks[i].codec;\n\t\t}\n\t\tmovie.mime += '\\\"; profiles=\\\"';\n\t\tmovie.mime += this.ftyp.compatible_brands.join();\n\t\tmovie.mime += '\\\"';\n\t}\n\treturn movie;\n}\n\nISOFile.prototype.setNextSeekPositionFromSample = function (sample) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (this.nextSeekPosition) {\n\t\tthis.nextSeekPosition = Math.min(sample.offset+sample.alreadyRead,this.nextSeekPosition);\n\t} else {\n\t\tthis.nextSeekPosition = sample.offset+sample.alreadyRead;\n\t}\n}\n\nISOFile.prototype.processSamples = function(last) {\n\tvar i;\n\tvar trak;\n\tif (!this.sampleProcessingStarted) return;\n\n\t/* For each track marked for fragmentation,\n\t check if the next sample is there (i.e. if the sample information is known (i.e. moof has arrived) and if it has been downloaded)\n\t and create a fragment with it */\n\tif (this.isFragmentationInitialized && this.onSegment !== null) {\n\t\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\t\tvar fragTrak = this.fragmentedTracks[i];\n\t\t\ttrak = fragTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\t/* The sample information is there (either because the file is not fragmented and this is not the last sample,\n\t\t\t\tor because the file is fragmented and the moof for that sample has been received */\n\t\t\t\tLog.debug(\"ISOFile\", \"Creating media fragment on track #\"+fragTrak.id +\" for sample \"+trak.nextSample);\n\t\t\t\tvar result = this.createFragment(fragTrak.id, trak.nextSample, fragTrak.segmentStream);\n\t\t\t\tif (result) {\n\t\t\t\t\tfragTrak.segmentStream = result;\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t} else {\n\t\t\t\t\t/* The fragment could not be created because the media data is not there (not downloaded), wait for it */\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\t/* A fragment is created by sample, but the segment is the accumulation in the buffer of these fragments.\n\t\t\t\t It is flushed only as requested by the application (nb_samples) to avoid too many callbacks */\n\t\t\t\tif (trak.nextSample % fragTrak.nb_samples === 0 || (last || trak.nextSample >= trak.samples.length)) {\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sending fragmented data on track #\"+fragTrak.id+\" for samples [\"+Math.max(0,trak.nextSample-fragTrak.nb_samples)+\",\"+(trak.nextSample-1)+\"]\");\n\t\t\t\t\tLog.info(\"ISOFile\", \"Sample data size in memory: \"+this.getAllocatedSampleDataSize());\n\t\t\t\t\tif (this.onSegment) {\n\t\t\t\t\t\tthis.onSegment(fragTrak.id, fragTrak.user, fragTrak.segmentStream.buffer, trak.nextSample, (last || trak.nextSample >= trak.samples.length));\n\t\t\t\t\t}\n\t\t\t\t\t/* force the creation of a new buffer */\n\t\t\t\t\tfragTrak.segmentStream = null;\n\t\t\t\t\tif (fragTrak !== this.fragmentedTracks[i]) {\n\t\t\t\t\t\t/* make sure we can stop fragmentation if needed */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (this.onSamples !== null) {\n\t\t/* For each track marked for data export,\n\t\t check if the next sample is there (i.e. has been downloaded) and send it */\n\t\tfor (i = 0; i < this.extractedTracks.length; i++) {\n\t\t\tvar extractTrak = this.extractedTracks[i];\n\t\t\ttrak = extractTrak.trak;\n\t\t\twhile (trak.nextSample < trak.samples.length && this.sampleProcessingStarted) {\n\t\t\t\tLog.debug(\"ISOFile\", \"Exporting on track #\"+extractTrak.id +\" sample #\"+trak.nextSample);\n\t\t\t\tvar sample = this.getSample(trak, trak.nextSample);\n\t\t\t\tif (sample) {\n\t\t\t\t\ttrak.nextSample++;\n\t\t\t\t\textractTrak.samples.push(sample);\n\t\t\t\t} else {\n\t\t\t\t\tthis.setNextSeekPositionFromSample(trak.samples[trak.nextSample]);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tif (trak.nextSample % extractTrak.nb_samples === 0 || trak.nextSample >= trak.samples.length) {\n\t\t\t\t\tLog.debug(\"ISOFile\", \"Sending samples on track #\"+extractTrak.id+\" for sample \"+trak.nextSample);\n\t\t\t\t\tif (this.onSamples) {\n\t\t\t\t\t\tthis.onSamples(extractTrak.id, extractTrak.user, extractTrak.samples);\n\t\t\t\t\t}\n\t\t\t\t\textractTrak.samples = [];\n\t\t\t\t\tif (extractTrak !== this.extractedTracks[i]) {\n\t\t\t\t\t\t/* check if the extraction needs to be stopped */\n\t\t\t\t\t\tbreak;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\n/* Find and return specific boxes using recursion and early return */\nISOFile.prototype.getBox = function(type) {\n var result = this.getBoxes(type, true);\n return (result.length ? result[0] : null);\n}\n\nISOFile.prototype.getBoxes = function(type, returnEarly) {\n var result = [];\n ISOFile._sweep.call(this, type, result, returnEarly);\n return result;\n}\n\nISOFile._sweep = function(type, result, returnEarly) {\n if (this.type && this.type == type) result.push(this);\n for (var box in this.boxes) {\n if (result.length && returnEarly) return;\n ISOFile._sweep.call(this.boxes[box], type, result, returnEarly);\n }\n}\n\nISOFile.prototype.getTrackSamplesInfo = function(track_id) {\n\tvar track = this.getTrackById(track_id);\n\tif (track) {\n\t\treturn track.samples;\n\t} else {\n\t\treturn;\n\t}\n}\n\nISOFile.prototype.getTrackSample = function(track_id, number) {\n\tvar track = this.getTrackById(track_id);\n\tvar sample = this.getSample(track, number);\n\treturn sample;\n}\n\n/* Called by the application to release the resources associated to samples already forwarded to the application */\nISOFile.prototype.releaseUsedSamples = function (id, sampleNum) {\n\tvar size = 0;\n\tvar trak = this.getTrackById(id);\n\tif (!trak.lastValidSample) trak.lastValidSample = 0;\n\tfor (var i = trak.lastValidSample; i < sampleNum; i++) {\n\t\tsize+=this.releaseSample(trak, i);\n\t}\n\tLog.info(\"ISOFile\", \"Track #\"+id+\" released samples up to \"+sampleNum+\" (released size: \"+size+\", remaining: \"+this.samplesDataSize+\")\");\n\ttrak.lastValidSample = sampleNum;\n}\n\nISOFile.prototype.start = function() {\n\tthis.sampleProcessingStarted = true;\n\tthis.processSamples(false);\n}\n\nISOFile.prototype.stop = function() {\n\tthis.sampleProcessingStarted = false;\n}\n\n/* Called by the application to flush the remaining samples (e.g. once the download is finished or when no more samples will be added) */\nISOFile.prototype.flush = function() {\n\tLog.info(\"ISOFile\", \"Flushing remaining samples\");\n\tthis.updateSampleLists();\n\tthis.processSamples(true);\n\tthis.stream.cleanBuffers();\n\tthis.stream.logBufferLevel(true);\n}\n\n/* Finds the byte offset for a given time on a given track\n also returns the time of the previous rap */\nISOFile.prototype.seekTrack = function(time, useRap, trak) {\n\tvar j;\n\tvar sample;\n\tvar seek_offset = Infinity;\n\tvar rap_seek_sample_num = 0;\n\tvar seek_sample_num = 0;\n\tvar timescale;\n\n\tif (trak.samples.length === 0) {\n\t\tLog.info(\"ISOFile\", \"No sample in track, cannot seek! Using time \"+Log.getDurationString(0, 1) +\" and offset: \"+0);\n\t\treturn { offset: 0, time: 0 };\n\t}\n\n\tfor (j = 0; j < trak.samples.length; j++) {\n\t\tsample = trak.samples[j];\n\t\tif (j === 0) {\n\t\t\tseek_sample_num = 0;\n\t\t\ttimescale = sample.timescale;\n\t\t} else if (sample.cts > time * sample.timescale) {\n\t\t\tseek_sample_num = j-1;\n\t\t\tbreak;\n\t\t}\n\t\tif (useRap && sample.is_sync) {\n\t\t\trap_seek_sample_num = j;\n\t\t}\n\t}\n\tif (useRap) {\n\t\tseek_sample_num = rap_seek_sample_num;\n\t}\n\ttime = trak.samples[seek_sample_num].cts;\n\ttrak.nextSample = seek_sample_num;\n\twhile (trak.samples[seek_sample_num].alreadyRead === trak.samples[seek_sample_num].size) {\n\t\t// No remaining samples to look for, all are downloaded.\n\t\tif (!trak.samples[seek_sample_num + 1]) {\n\t\t\tbreak;\n\t\t}\n\t\tseek_sample_num++;\n\t}\n\tseek_offset = trak.samples[seek_sample_num].offset+trak.samples[seek_sample_num].alreadyRead;\n\tLog.info(\"ISOFile\", \"Seeking to \"+(useRap ? \"RAP\": \"\")+\" sample #\"+trak.nextSample+\" on track \"+trak.tkhd.track_id+\", time \"+Log.getDurationString(time, timescale) +\" and offset: \"+seek_offset);\n\treturn { offset: seek_offset, time: time/timescale };\n}\n\nISOFile.prototype.getTrackDuration = function (trak) {\n\tvar sample;\n\n\tif (!trak.samples) {\n\t\treturn Infinity;\n\t}\n\tsample = trak.samples[trak.samples.length - 1];\n\treturn (sample.cts + sample.duration) / sample.timescale;\n}\n\n/* Finds the byte offset in the file corresponding to the given time or to the time of the previous RAP */\nISOFile.prototype.seek = function(time, useRap) {\n\tvar moov = this.moov;\n\tvar trak;\n\tvar trak_seek_info;\n\tvar i;\n\tvar seek_info = { offset: Infinity, time: Infinity };\n\tif (!this.moov) {\n\t\tthrow \"Cannot seek: moov not received!\";\n\t} else {\n\t\tfor (i = 0; i<moov.traks.length; i++) {\n\t\t\ttrak = moov.traks[i];\n\t\t\tif (time > this.getTrackDuration(trak)) { // skip tracks that already ended\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\ttrak_seek_info = this.seekTrack(time, useRap, trak);\n\t\t\tif (trak_seek_info.offset < seek_info.offset) {\n\t\t\t\tseek_info.offset = trak_seek_info.offset;\n\t\t\t}\n\t\t\tif (trak_seek_info.time < seek_info.time) {\n\t\t\t\tseek_info.time = trak_seek_info.time;\n\t\t\t}\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Seeking at time \"+Log.getDurationString(seek_info.time, 1)+\" needs a buffer with a fileStart position of \"+seek_info.offset);\n\t\tif (seek_info.offset === Infinity) {\n\t\t\t/* No sample info, in all tracks, cannot seek */\n\t\t\tseek_info = { offset: this.nextParsePosition, time: 0 };\n\t\t} else {\n\t\t\t/* check if the seek position is already in some buffer and\n\t\t\t in that case return the end of that buffer (or of the last contiguous buffer) */\n\t\t\t/* TODO: Should wait until append operations are done */\n\t\t\tseek_info.offset = this.stream.getEndFilePositionAfter(seek_info.offset);\n\t\t}\n\t\tLog.info(\"ISOFile\", \"Adjusted seek position (after checking data already in buffer): \"+seek_info.offset);\n\t\treturn seek_info;\n\t}\n}\n\nISOFile.prototype.equal = function(b) {\n\tvar box_index = 0;\n\twhile (box_index < this.boxes.length && box_index < b.boxes.length) {\n\t\tvar a_box = this.boxes[box_index];\n\t\tvar b_box = b.boxes[box_index];\n\t\tif (!BoxParser.boxEqual(a_box, b_box)) {\n\t\t\treturn false;\n\t\t}\n\t\tbox_index++;\n\t}\n\treturn true;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.ISOFile = ISOFile;\n}\n// file:src/isofile-advanced-parsing.js\n/* position in the current buffer of the beginning of the last box parsed */\nISOFile.prototype.lastBoxStartPosition = 0;\n/* indicator if the parsing is stuck in the middle of an mdat box */\nISOFile.prototype.parsingMdat = null;\n/* next file position that the parser needs:\n - 0 until the first buffer (i.e. fileStart ===0) has been received \n - otherwise, the next box start until the moov box has been parsed\n - otherwise, the position of the next sample to fetch\n */\nISOFile.prototype.nextParsePosition = 0;\n/* keep mdat data */\nISOFile.prototype.discardMdatData = false;\n\nISOFile.prototype.processIncompleteBox = function(ret) {\n\tvar box;\n\tvar merged;\n\tvar found;\n\t\n\t/* we did not have enough bytes in the current buffer to parse the entire box */\n\tif (ret.type === \"mdat\") { \n\t\t/* we had enough bytes to get its type and size and it's an 'mdat' */\n\t\t\n\t\t/* special handling for mdat boxes, since we don't actually need to parse it linearly \n\t\t we create the box */\n\t\tbox = new BoxParser[ret.type+\"Box\"](ret.size);\t\n\t\tthis.parsingMdat = box;\n\t\tthis.boxes.push(box);\n\t\tthis.mdats.push(box);\t\t\t\n\t\tbox.start = ret.start;\n\t\tbox.hdr_size = ret.hdr_size;\n\t\tthis.stream.addUsedBytes(box.hdr_size);\n\n\t\t/* indicate that the parsing should start from the end of the box */\n\t\tthis.lastBoxStartPosition = box.start + box.size;\n \t\t/* let's see if we have the end of the box in the other buffers */\n\t\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\t\tif (found) {\n\t\t\t/* found the end of the box */\n\t\t\tthis.parsingMdat = null;\n\t\t\t/* let's see if we can parse more in this buffer */\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* 'mdat' end not found in the existing buffers */\n\t\t\t/* determine the next position in the file to start parsing from */\n\t\t\tif (!this.moovStartFound) {\n\t\t\t\t/* moov not find yet, \n\t\t\t\t the file probably has 'mdat' at the beginning, and 'moov' at the end, \n\t\t\t\t indicate that the downloader should not try to download those bytes now */\n\t\t\t\tthis.nextParsePosition = box.start + box.size;\n\t\t\t} else {\n\t\t\t\t/* we have the start of the moov box, \n\t\t\t\t the next bytes should try to complete the current 'mdat' */\n\t\t\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\t\t}\n\t\t\t/* not much we can do, wait for more buffers to arrive */\n\t\t\treturn false;\n\t\t}\n\t} else {\n\t\t/* box is incomplete, we may not even know its type */\n\t\tif (ret.type === \"moov\") { \n\t\t\t/* the incomplete box is a 'moov' box */\n\t\t\tthis.moovStartFound = true;\n\t\t\tif (this.mdats.length === 0) {\n\t\t\t\tthis.isProgressive = true;\n\t\t\t}\n\t\t}\n\t\t/* either it's not an mdat box (and we need to parse it, we cannot skip it)\n\t\t (TODO: we could skip 'free' boxes ...)\n\t\t\t or we did not have enough data to parse the type and size of the box, \n\t\t we try to concatenate the current buffer with the next buffer to restart parsing */\n\t\tmerged = (this.stream.mergeNextBuffer ? this.stream.mergeNextBuffer() : false);\n\t\tif (merged) {\n\t\t\t/* The next buffer was contiguous, the merging succeeded,\n\t\t\t we can now continue parsing, \n\t\t\t the next best position to parse is at the end of this new buffer */\n\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\treturn true;\n\t\t} else {\n\t\t\t/* we cannot concatenate existing buffers because they are not contiguous or because there is no additional buffer */\n\t\t\t/* The next best position to parse is still at the end of this old buffer */\n\t\t\tif (!ret.type) {\n\t\t\t\t/* There were not enough bytes in the buffer to parse the box type and length,\n\t\t\t\t the next fetch should retrieve those missing bytes, i.e. the next bytes after this buffer */\n\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t} else {\n\t\t\t\t/* we had enough bytes to parse size and type of the incomplete box\n\t\t\t\t if we haven't found yet the moov box, skip this one and try the next one \n\t\t\t\t if we have found the moov box, let's continue linear parsing */\n\t\t\t\tif (this.moovStartFound) {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getEndPosition();\n\t\t\t\t} else {\n\t\t\t\t\tthis.nextParsePosition = this.stream.getPosition() + ret.size;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasIncompleteMdat = function () {\n\treturn (this.parsingMdat !== null);\n}\n\nISOFile.prototype.processIncompleteMdat = function () {\n\tvar box;\n\tvar found;\n\t\n\t/* we are in the parsing of an incomplete mdat box */\n\tbox = this.parsingMdat;\n\n\tfound = this.stream.seek(box.start + box.size, false, this.discardMdatData);\n\tif (found) {\n\t\tLog.debug(\"ISOFile\", \"Found 'mdat' end in buffered data\");\n\t\t/* the end of the mdat has been found */ \n\t\tthis.parsingMdat = null;\n\t\t/* we can parse more in this buffer */\n\t\treturn true;\n\t} else {\n\t\t/* we don't have the end of this mdat yet, \n\t\t indicate that the next byte to fetch is the end of the buffers we have so far, \n\t\t return and wait for more buffer to come */\n\t\tthis.nextParsePosition = this.stream.findEndContiguousBuf();\n\t\treturn false;\n\t}\n}\n\nISOFile.prototype.restoreParsePosition = function() {\n\t/* Reposition at the start position of the previous box not entirely parsed */\n\treturn this.stream.seek(this.lastBoxStartPosition, true, this.discardMdatData);\n}\n\nISOFile.prototype.saveParsePosition = function() {\n\t/* remember the position of the box start in case we need to roll back (if the box is incomplete) */\n\tthis.lastBoxStartPosition = this.stream.getPosition();\t\n}\n\nISOFile.prototype.updateUsedBytes = function(box, ret) {\n\tif (this.stream.addUsedBytes) {\n\t\tif (box.type === \"mdat\") {\n\t\t\t/* for an mdat box, only its header is considered used, other bytes will be used when sample data is requested */\n\t\t\tthis.stream.addUsedBytes(box.hdr_size);\n\t\t\tif (this.discardMdatData) {\n\t\t\t\tthis.stream.addUsedBytes(box.size-box.hdr_size);\n\t\t\t}\n\t\t} else {\n\t\t\t/* for all other boxes, the entire box data is considered used */\n\t\t\tthis.stream.addUsedBytes(box.size);\n\t\t}\t\n\t}\n}\n// file:src/isofile-advanced-creation.js\nISOFile.prototype.add = BoxParser.Box.prototype.add;\nISOFile.prototype.addBox = BoxParser.Box.prototype.addBox;\n\nISOFile.prototype.init = function (_options) {\n\tvar options = _options || {}; \n\tvar ftyp = this.add(\"ftyp\").set(\"major_brand\", (options.brands && options.brands[0]) || \"iso4\")\n\t\t\t\t\t\t\t .set(\"minor_version\", 0)\n\t\t\t\t\t\t\t .set(\"compatible_brands\", options.brands || [\"iso4\"]);\n\tvar moov = this.add(\"moov\");\n\tmoov.add(\"mvhd\").set(\"timescale\", options.timescale || 600)\n\t\t\t\t\t.set(\"rate\", options.rate || 1<<16)\n\t\t\t\t\t.set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"volume\", (options.width) ? 0 : 0x0100)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000])\n\t\t\t\t\t.set(\"next_track_id\", 1);\n\tmoov.add(\"mvex\");\n\treturn this;\n}\n\nISOFile.prototype.addTrack = function (_options) {\n\tif (!this.moov) {\n\t\tthis.init(_options);\n\t}\n\n\tvar options = _options || {}; \n\toptions.width = options.width || 320;\n\toptions.height = options.height || 320;\n\toptions.id = options.id || this.moov.mvhd.next_track_id;\n\toptions.type = options.type || \"avc1\";\n\n\tvar trak = this.moov.add(\"trak\");\n\tthis.moov.mvhd.next_track_id = options.id+1;\n\ttrak.add(\"tkhd\").set(\"flags\",BoxParser.TKHD_FLAG_ENABLED | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_MOVIE | \n\t\t\t\t\t\t\t\t BoxParser.TKHD_FLAG_IN_PREVIEW)\n\t\t\t\t\t.set(\"creation_time\",0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"track_id\", options.id)\n\t\t\t\t\t.set(\"duration\", options.duration || 0)\n\t\t\t\t\t.set(\"layer\", options.layer || 0)\n\t\t\t\t\t.set(\"alternate_group\", 0)\n\t\t\t\t\t.set(\"volume\", 1)\n\t\t\t\t\t.set(\"matrix\", [ 1<<16, 0, 0, 0, 1<<16, 0, 0, 0, 0x40000000 ])\n\t\t\t\t\t.set(\"width\", options.width << 16)\n\t\t\t\t\t.set(\"height\", options.height << 16);\n\n\tvar mdia = trak.add(\"mdia\");\n\tmdia.add(\"mdhd\").set(\"creation_time\", 0)\n\t\t\t\t\t.set(\"modification_time\", 0)\n\t\t\t\t\t.set(\"timescale\", options.timescale || 1)\n\t\t\t\t\t.set(\"duration\", options.media_duration || 0)\n\t\t\t\t\t.set(\"language\", options.language || \"und\");\n\n\tmdia.add(\"hdlr\").set(\"handler\", options.hdlr || \"vide\")\n\t\t\t\t\t.set(\"name\", options.name || \"Track created with MP4Box.js\");\n\n\tmdia.add(\"elng\").set(\"extended_language\", options.language || \"fr-FR\");\n\n\tvar minf = mdia.add(\"minf\");\n\tif (BoxParser[options.type+\"SampleEntry\"] === undefined) return;\n\tvar sample_description_entry = new BoxParser[options.type+\"SampleEntry\"]();\n\tsample_description_entry.data_reference_index = 1;\n\tvar media_type = \"\";\n\tfor (var mediaType in BoxParser.sampleEntryCodes) {\n\t\tvar codes = BoxParser.sampleEntryCodes[mediaType];\n\t\tfor (var i = 0; i < codes.length; i++) {\n\t\t\tif (codes.indexOf(options.type) > -1) {\n\t\t\t\tmedia_type = mediaType;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\t}\n\tswitch(media_type) {\n\t\tcase \"Visual\":\n\t\t\tminf.add(\"vmhd\").set(\"graphicsmode\",0).set(\"opcolor\", [ 0, 0, 0 ]);\n\t\t\tsample_description_entry.set(\"width\", options.width)\n\t\t\t\t\t\t.set(\"height\", options.height)\n\t\t\t\t\t\t.set(\"horizresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"vertresolution\", 0x48<<16)\n\t\t\t\t\t\t.set(\"frame_count\", 1)\n\t\t\t\t\t\t.set(\"compressorname\", options.type+\" Compressor\")\n\t\t\t\t\t\t.set(\"depth\", 0x18);\n\t\t\tif (options.avcDecoderConfigRecord) {\n\t\t\t\tvar avcC = new BoxParser.avcCBox();\n\t\t\t\tavcC.parse(new MP4BoxStream(options.avcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(avcC);\n\t\t\t} else if (options.hevcDecoderConfigRecord) {\n\t\t\t\tvar hvcC = new BoxParser.hvcCBox();\n\t\t\t\thvcC.parse(new MP4BoxStream(options.hevcDecoderConfigRecord));\n\t\t\t\tsample_description_entry.addBox(hvcC);\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Audio\":\n\t\t\tminf.add(\"smhd\").set(\"balance\", options.balance || 0);\n\t\t\tsample_description_entry.set(\"channel_count\", options.channel_count || 2)\n\t\t\t\t\t\t.set(\"samplesize\", options.samplesize || 16)\n\t\t\t\t\t\t.set(\"samplerate\", options.samplerate || 1<<16);\n\t\t\tbreak;\n\t\tcase \"Hint\":\n\t\t\tminf.add(\"hmhd\"); // TODO: add properties\n\t\t\tbreak;\n\t\tcase \"Subtitle\":\n\t\t\tminf.add(\"sthd\");\n\t\t\tswitch (options.type) {\n\t\t\t\tcase \"stpp\":\n\t\t\t\t\tsample_description_entry.set(\"namespace\", options.namespace || \"nonamespace\")\n\t\t\t\t\t\t\t\t.set(\"schema_location\", options.schema_location || \"\")\n\t\t\t\t\t\t\t\t.set(\"auxiliary_mime_types\", options.auxiliary_mime_types || \"\");\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tbreak;\n\t\tcase \"Metadata\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tcase \"System\":\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t\tdefault:\n\t\t\tminf.add(\"nmhd\");\n\t\t\tbreak;\n\t}\n\tif (options.description) {\n\t\tsample_description_entry.addBox(options.description);\n\t}\n\tif (options.description_boxes) {\n\t\toptions.description_boxes.forEach(function (b) {\n\t\t\tsample_description_entry.addBox(b);\n\t\t});\n\t}\n\tminf.add(\"dinf\").add(\"dref\").addEntry((new BoxParser[\"url Box\"]()).set(\"flags\", 0x1));\n\tvar stbl = minf.add(\"stbl\");\n\tstbl.add(\"stsd\").addEntry(sample_description_entry);\n\tstbl.add(\"stts\").set(\"sample_counts\", [])\n\t\t\t\t\t.set(\"sample_deltas\", []);\n\tstbl.add(\"stsc\").set(\"first_chunk\", [])\n\t\t\t\t\t.set(\"samples_per_chunk\", [])\n\t\t\t\t\t.set(\"sample_description_index\", []);\n\tstbl.add(\"stco\").set(\"chunk_offsets\", []);\n\tstbl.add(\"stsz\").set(\"sample_sizes\", []);\n\n\tthis.moov.mvex.add(\"trex\").set(\"track_id\", options.id)\n\t\t\t\t\t\t\t .set(\"default_sample_description_index\", options.default_sample_description_index || 1)\n\t\t\t\t\t\t\t .set(\"default_sample_duration\", options.default_sample_duration || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_size\", options.default_sample_size || 0)\n\t\t\t\t\t\t\t .set(\"default_sample_flags\", options.default_sample_flags || 0);\n\tthis.buildTrakSampleLists(trak);\n\treturn options.id;\n}\n\nBoxParser.Box.prototype.computeSize = function(stream_) {\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n}\n\nISOFile.prototype.addSample = function (track_id, data, _options) {\n\tvar options = _options || {};\n\tvar sample = {};\n\tvar trak = this.getTrackById(track_id);\n\tif (trak === null) return;\n sample.number = trak.samples.length;\n\tsample.track_id = trak.tkhd.track_id;\n\tsample.timescale = trak.mdia.mdhd.timescale;\n\tsample.description_index = (options.sample_description_index ? options.sample_description_index - 1: 0);\n\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\tsample.data = data;\n\tsample.size = data.byteLength;\n\tsample.alreadyRead = sample.size;\n\tsample.duration = options.duration || 1;\n\tsample.cts = options.cts || 0;\n\tsample.dts = options.dts || 0;\n\tsample.is_sync = options.is_sync || false;\n\tsample.is_leading = options.is_leading || 0;\n\tsample.depends_on = options.depends_on || 0;\n\tsample.is_depended_on = options.is_depended_on || 0;\n\tsample.has_redundancy = options.has_redundancy || 0;\n\tsample.degradation_priority = options.degradation_priority || 0;\n\tsample.offset = 0;\n\tsample.subsamples = options.subsamples;\n\ttrak.samples.push(sample);\n\ttrak.samples_size += sample.size;\n\ttrak.samples_duration += sample.duration;\n\tif (trak.first_dts === undefined) {\n\t\ttrak.first_dts = options.dts;\n\t}\n\n\tthis.processSamples();\n\t\n\tvar moof = this.createSingleSampleMoof(sample);\n\tthis.addBox(moof);\n\tmoof.computeSize();\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tthis.add(\"mdat\").data = new Uint8Array(data);\n\treturn sample;\n}\n\nISOFile.prototype.createSingleSampleMoof = function(sample) {\n\tvar sample_flags = 0;\n\tif (sample.is_sync)\n\t\tsample_flags = (1 << 25); // sample_depends_on_none (I picture)\n\telse\n\t\tsample_flags = (1 << 16); // non-sync\n\n\tvar moof = new BoxParser.moofBox();\n\tmoof.add(\"mfhd\").set(\"sequence_number\", this.nextMoofNumber);\n\tthis.nextMoofNumber++;\n\tvar traf = moof.add(\"traf\");\n\tvar trak = this.getTrackById(sample.track_id);\n\ttraf.add(\"tfhd\").set(\"track_id\", sample.track_id)\n\t\t\t\t\t.set(\"flags\", BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF);\n\ttraf.add(\"tfdt\").set(\"baseMediaDecodeTime\", (sample.dts - (trak.first_dts || 0)));\n\ttraf.add(\"trun\").set(\"flags\", BoxParser.TRUN_FLAGS_DATA_OFFSET | BoxParser.TRUN_FLAGS_DURATION | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_SIZE | BoxParser.TRUN_FLAGS_FLAGS | \n\t\t\t\t \t\t\t\t BoxParser.TRUN_FLAGS_CTS_OFFSET)\n\t\t\t\t\t.set(\"data_offset\",0)\n\t\t\t\t\t.set(\"first_sample_flags\",0)\n\t\t\t\t\t.set(\"sample_count\",1)\n\t\t\t\t\t.set(\"sample_duration\",[sample.duration])\n\t\t\t\t\t.set(\"sample_size\",[sample.size])\n\t\t\t\t\t.set(\"sample_flags\",[sample_flags])\n\t\t\t\t\t.set(\"sample_composition_time_offset\", [sample.cts - sample.dts]);\n\treturn moof;\n}\n\n// file:src/isofile-sample-processing.js\n/* Index of the last moof box received */\nISOFile.prototype.lastMoofIndex = 0;\n\n/* size of the buffers allocated for samples */\nISOFile.prototype.samplesDataSize = 0;\n\n/* Resets all sample tables */\nISOFile.prototype.resetTables = function () {\n\tvar i;\n\tvar trak, stco, stsc, stsz, stts, ctts, stss;\n\tthis.initial_duration = this.moov.mvhd.duration;\n\tthis.moov.mvhd.duration = 0;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\ttrak.tkhd.duration = 0;\n\t\ttrak.mdia.mdhd.duration = 0;\n\t\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\t\tstco.chunk_offsets = [];\n\t\tstsc = trak.mdia.minf.stbl.stsc;\n\t\tstsc.first_chunk = [];\n\t\tstsc.samples_per_chunk = [];\n\t\tstsc.sample_description_index = [];\n\t\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\t\tstsz.sample_sizes = [];\n\t\tstts = trak.mdia.minf.stbl.stts;\n\t\tstts.sample_counts = [];\n\t\tstts.sample_deltas = [];\n\t\tctts = trak.mdia.minf.stbl.ctts;\n\t\tif (ctts) {\n\t\t\tctts.sample_counts = [];\n\t\t\tctts.sample_offsets = [];\n\t\t}\n\t\tstss = trak.mdia.minf.stbl.stss;\n\t\tvar k = trak.mdia.minf.stbl.boxes.indexOf(stss);\n\t\tif (k != -1) trak.mdia.minf.stbl.boxes[k] = null;\n\t}\n}\n\nISOFile.initSampleGroups = function(trak, traf, sbgps, trak_sgpds, traf_sgpds) {\n\tvar l;\n\tvar k;\n\tvar sample_groups_info;\n\tvar sample_group_info;\n\tvar sample_group_key;\n\tfunction SampleGroupInfo(_type, _parameter, _sbgp) {\n\t\tthis.grouping_type = _type;\n\t\tthis.grouping_type_parameter = _parameter;\n\t\tthis.sbgp = _sbgp;\n\t\tthis.last_sample_in_run = -1;\n\t\tthis.entry_index = -1;\t\t\n\t}\n\tif (traf) {\n\t\ttraf.sample_groups_info = [];\n\t} \n\tif (!trak.sample_groups_info) {\n\t\ttrak.sample_groups_info = [];\n\t}\n\tfor (k = 0; k < sbgps.length; k++) {\n\t\tsample_group_key = sbgps[k].grouping_type +\"/\"+ sbgps[k].grouping_type_parameter;\n\t\tsample_group_info = new SampleGroupInfo(sbgps[k].grouping_type, sbgps[k].grouping_type_parameter, sbgps[k]);\n\t\tif (traf) {\n\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t}\n\t\tfor (l=0; l <trak_sgpds.length; l++) {\n\t\t\tif (trak_sgpds[l].grouping_type === sbgps[k].grouping_type) {\n\t\t\t\tsample_group_info.description = trak_sgpds[l];\n\t\t\t\tsample_group_info.description.used = true;\n\t\t\t}\n\t\t}\n\t\tif (traf_sgpds) {\n\t\t\tfor (l=0; l <traf_sgpds.length; l++) {\n\t\t\t\tif (traf_sgpds[l].grouping_type === sbgps[k].grouping_type) {\n\t\t\t\t\tsample_group_info.fragment_description = traf_sgpds[l];\n\t\t\t\t\tsample_group_info.fragment_description.used = true;\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t}\n\t\t\t}\t\t\t\n\t\t}\n\t}\n\tif (!traf) {\n\t\tfor (k = 0; k < trak_sgpds.length; k++) {\n\t\t\tif (!trak_sgpds[k].used && trak_sgpds[k].version >= 2) {\n\t\t\t\tsample_group_key = trak_sgpds[k].grouping_type +\"/0\";\n\t\t\t\tsample_group_info = new SampleGroupInfo(trak_sgpds[k].grouping_type, 0);\n\t\t\t\tif (!trak.sample_groups_info[sample_group_key]) {\n\t\t\t\t\ttrak.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t} else {\n\t\tif (traf_sgpds) {\n\t\t\tfor (k = 0; k < traf_sgpds.length; k++) {\n\t\t\t\tif (!traf_sgpds[k].used && traf_sgpds[k].version >= 2) {\n\t\t\t\t\tsample_group_key = traf_sgpds[k].grouping_type +\"/0\";\n\t\t\t\t\tsample_group_info = new SampleGroupInfo(traf_sgpds[k].grouping_type, 0);\n\t\t\t\t\tsample_group_info.is_fragment = true;\n\t\t\t\t\tif (!traf.sample_groups_info[sample_group_key]) {\n\t\t\t\t\t\ttraf.sample_groups_info[sample_group_key] = sample_group_info;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.setSampleGroupProperties = function(trak, sample, sample_number, sample_groups_info) {\n\tvar k;\n\tvar index;\n\tsample.sample_groups = [];\n\tfor (k in sample_groups_info) {\n\t\tsample.sample_groups[k] = {};\n\t\tsample.sample_groups[k].grouping_type = sample_groups_info[k].grouping_type;\n\t\tsample.sample_groups[k].grouping_type_parameter = sample_groups_info[k].grouping_type_parameter;\n\t\tif (sample_number >= sample_groups_info[k].last_sample_in_run) {\n\t\t\tif (sample_groups_info[k].last_sample_in_run < 0) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run = 0;\n\t\t\t}\n\t\t\tsample_groups_info[k].entry_index++;\t\n\t\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\t\tsample_groups_info[k].last_sample_in_run += sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].sample_count;\n\t\t\t}\n\t\t}\n\t\tif (sample_groups_info[k].entry_index <= sample_groups_info[k].sbgp.entries.length - 1) {\n\t\t\tsample.sample_groups[k].group_description_index = sample_groups_info[k].sbgp.entries[sample_groups_info[k].entry_index].group_description_index;\n\t\t} else {\n\t\t\tsample.sample_groups[k].group_description_index = -1; // special value for not defined\n\t\t}\n\t\tif (sample.sample_groups[k].group_description_index !== 0) {\n\t\t\tvar description;\n\t\t\tif (sample_groups_info[k].fragment_description) {\n\t\t\t\tdescription = sample_groups_info[k].fragment_description;\n\t\t\t} else {\n\t\t\t\tdescription = sample_groups_info[k].description;\n\t\t\t}\n\t\t\tif (sample.sample_groups[k].group_description_index > 0) {\n\t\t\t\tif (sample.sample_groups[k].group_description_index > 65535) {\n\t\t\t\t\tindex = (sample.sample_groups[k].group_description_index >> 16)-1;\n\t\t\t\t} else {\n\t\t\t\t\tindex = sample.sample_groups[k].group_description_index-1;\n\t\t\t\t}\n\t\t\t\tif (description && index >= 0) {\n\t\t\t\t\tsample.sample_groups[k].description = description.entries[index];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (description && description.version >= 2) {\n\t\t\t\t\tif (description.default_group_description_index > 0) {\t\t\t\t\t\t\t\t\n\t\t\t\t\t\tsample.sample_groups[k].description = description.entries[description.default_group_description_index-1];\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.process_sdtp = function (sdtp, sample, number) {\n\tif (!sample) {\n\t\treturn;\n\t}\n\tif (sdtp) {\n\t\tsample.is_leading = sdtp.is_leading[number];\n\t\tsample.depends_on = sdtp.sample_depends_on[number];\n\t\tsample.is_depended_on = sdtp.sample_is_depended_on[number];\n\t\tsample.has_redundancy = sdtp.sample_has_redundancy[number];\n\t} else {\n\t\tsample.is_leading = 0;\n\t\tsample.depends_on = 0;\n\t\tsample.is_depended_on = 0\n\t\tsample.has_redundancy = 0;\n\t}\t\n}\n\n/* Build initial sample list from sample tables */\nISOFile.prototype.buildSampleLists = function() {\t\n\tvar i;\n\tvar trak;\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\ttrak = this.moov.traks[i];\n\t\tthis.buildTrakSampleLists(trak);\n\t}\n}\n\nISOFile.prototype.buildTrakSampleLists = function(trak) {\t\n\tvar j, k;\n\tvar stco, stsc, stsz, stts, ctts, stss, stsd, subs, sbgps, sgpds, stdp;\n\tvar chunk_run_index, chunk_index, last_chunk_in_run, offset_in_chunk, last_sample_in_chunk;\n\tvar last_sample_in_stts_run, stts_run_index, last_sample_in_ctts_run, ctts_run_index, last_stss_index, last_subs_index, subs_entry_index, last_subs_sample_index;\n\n\ttrak.samples = [];\n\ttrak.samples_duration = 0;\n\ttrak.samples_size = 0;\n\tstco = trak.mdia.minf.stbl.stco || trak.mdia.minf.stbl.co64;\n\tstsc = trak.mdia.minf.stbl.stsc;\n\tstsz = trak.mdia.minf.stbl.stsz || trak.mdia.minf.stbl.stz2;\n\tstts = trak.mdia.minf.stbl.stts;\n\tctts = trak.mdia.minf.stbl.ctts;\n\tstss = trak.mdia.minf.stbl.stss;\n\tstsd = trak.mdia.minf.stbl.stsd;\n\tsubs = trak.mdia.minf.stbl.subs;\n\tstdp = trak.mdia.minf.stbl.stdp;\n\tsbgps = trak.mdia.minf.stbl.sbgps;\n\tsgpds = trak.mdia.minf.stbl.sgpds;\n\t\n\tlast_sample_in_stts_run = -1;\n\tstts_run_index = -1;\n\tlast_sample_in_ctts_run = -1;\n\tctts_run_index = -1;\n\tlast_stss_index = 0;\n\tsubs_entry_index = 0;\n\tlast_subs_sample_index = 0;\t\t\n\n\tISOFile.initSampleGroups(trak, null, sbgps, sgpds);\n\n\tif (typeof stsz === \"undefined\") {\n\t\treturn;\n\t}\n\n\t/* we build the samples one by one and compute their properties */\n\tfor (j = 0; j < stsz.sample_sizes.length; j++) {\n\t\tvar sample = {};\n\t\tsample.number = j;\n\t\tsample.track_id = trak.tkhd.track_id;\n\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\tsample.alreadyRead = 0;\n\t\ttrak.samples[j] = sample;\n\t\t/* size can be known directly */\n\t\tsample.size = stsz.sample_sizes[j];\n\t\ttrak.samples_size += sample.size;\n\t\t/* computing chunk-based properties (offset, sample description index)*/\n\t\tif (j === 0) {\t\t\t\t\n\t\t\tchunk_index = 1; /* the first sample is in the first chunk (chunk indexes are 1-based) */\n\t\t\tchunk_run_index = 0; /* the first chunk is the first entry in the first_chunk table */\n\t\t\tsample.chunk_index = chunk_index;\n\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\tlast_sample_in_chunk = stsc.samples_per_chunk[chunk_run_index];\n\t\t\toffset_in_chunk = 0;\n\n\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t} else {\n\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t}\n\t\t} else {\n\t\t\tif (j < last_sample_in_chunk) {\n\t\t\t\t/* the sample is still in the current chunk */\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t} else {\n\t\t\t\t/* the sample is in the next chunk */\n\t\t\t\tchunk_index++;\n\t\t\t\tsample.chunk_index = chunk_index;\n\t\t\t\t/* reset the accumulated offset in the chunk */\n\t\t\t\toffset_in_chunk = 0;\n\t\t\t\tif (chunk_index <= last_chunk_in_run) {\n\t\t\t\t\t/* stay in the same entry of the first_chunk table */\n\t\t\t\t\t/* chunk_run_index unmodified */\n\t\t\t\t} else {\n\t\t\t\t\tchunk_run_index++;\n\t\t\t\t\t/* Is there another entry in the first_chunk table ? */\n\t\t\t\t\tif (chunk_run_index + 1 < stsc.first_chunk.length) {\n\t\t\t\t\t\t/* The last chunk in the run is the chunk before the next first chunk */\n\t\t\t\t\t\tlast_chunk_in_run = stsc.first_chunk[chunk_run_index+1]-1; \t\n\t\t\t\t\t} else {\n\t\t\t\t\t\t/* There is only one entry in the table, it is valid for all future chunks*/\n\t\t\t\t\t\tlast_chunk_in_run = Infinity;\n\t\t\t\t\t}\n\t\t\t\t\t\n\t\t\t\t}\n\t\t\t\tsample.chunk_run_index = chunk_run_index;\n\t\t\t\tlast_sample_in_chunk += stsc.samples_per_chunk[chunk_run_index];\n\t\t\t}\n\t\t}\n\n\t\tsample.description_index = stsc.sample_description_index[sample.chunk_run_index]-1;\n\t\tsample.description = stsd.entries[sample.description_index];\n\t\tsample.offset = stco.chunk_offsets[sample.chunk_index-1] + offset_in_chunk; /* chunk indexes are 1-based */\n\t\toffset_in_chunk += sample.size;\n\n\t\t/* setting dts, cts, duration and rap flags */\n\t\tif (j > last_sample_in_stts_run) {\n\t\t\tstts_run_index++;\n\t\t\tif (last_sample_in_stts_run < 0) {\n\t\t\t\tlast_sample_in_stts_run = 0;\n\t\t\t}\n\t\t\tlast_sample_in_stts_run += stts.sample_counts[stts_run_index];\t\t\t\t\n\t\t}\n\t\tif (j > 0) {\n\t\t\ttrak.samples[j-1].duration = stts.sample_deltas[stts_run_index];\n\t\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t\t\tsample.dts = trak.samples[j-1].dts + trak.samples[j-1].duration;\n\t\t} else {\n\t\t\tsample.dts = 0;\n\t\t}\n\t\tif (ctts) {\n\t\t\tif (j >= last_sample_in_ctts_run) {\n\t\t\t\tctts_run_index++;\n\t\t\t\tif (last_sample_in_ctts_run < 0) {\n\t\t\t\t\tlast_sample_in_ctts_run = 0;\n\t\t\t\t}\n\t\t\t\tlast_sample_in_ctts_run += ctts.sample_counts[ctts_run_index];\t\t\t\t\n\t\t\t}\n\t\t\tsample.cts = trak.samples[j].dts + ctts.sample_offsets[ctts_run_index];\n\t\t} else {\n\t\t\tsample.cts = sample.dts;\n\t\t}\n\t\tif (stss) {\n\t\t\tif (j == stss.sample_numbers[last_stss_index] - 1) { // sample numbers are 1-based\n\t\t\t\tsample.is_sync = true;\n\t\t\t\tlast_stss_index++;\n\t\t\t} else {\n\t\t\t\tsample.is_sync = false;\t\t\t\t\n\t\t\t\tsample.degradation_priority = 0;\n\t\t\t}\n\t\t\tif (subs) {\n\t\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j+1) {\n\t\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t\t\tsubs_entry_index++;\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\tsample.is_sync = true;\n\t\t}\n\t\tISOFile.process_sdtp(trak.mdia.minf.stbl.sdtp, sample, sample.number);\n\t\tif (stdp) {\n\t\t\tsample.degradation_priority = stdp.priority[j];\n\t\t} else {\n\t\t\tsample.degradation_priority = 0;\n\t\t}\n\t\tif (subs) {\n\t\t\tif (subs.entries[subs_entry_index].sample_delta + last_subs_sample_index == j) {\n\t\t\t\tsample.subsamples = subs.entries[subs_entry_index].subsamples;\n\t\t\t\tlast_subs_sample_index += subs.entries[subs_entry_index].sample_delta;\n\t\t\t}\n\t\t}\n\t\tif (sbgps.length > 0 || sgpds.length > 0) {\n\t\t\tISOFile.setSampleGroupProperties(trak, sample, j, trak.sample_groups_info);\n\t\t}\n\t}\n\tif (j>0) {\n\t\ttrak.samples[j-1].duration = Math.max(trak.mdia.mdhd.duration - trak.samples[j-1].dts, 0);\n\t\ttrak.samples_duration += trak.samples[j-1].duration;\n\t}\n}\n\n/* Update sample list when new 'moof' boxes are received */\nISOFile.prototype.updateSampleLists = function() {\t\n\tvar i, j, k;\n\tvar default_sample_description_index, default_sample_duration, default_sample_size, default_sample_flags;\n\tvar last_run_position;\n\tvar box, moof, traf, trak, trex;\n\tvar sample;\n\tvar sample_flags;\n\t\n\tif (this.moov === undefined) {\n\t\treturn;\n\t}\n\t/* if the input file is fragmented and fetched in multiple downloads, we need to update the list of samples */\n\twhile (this.lastMoofIndex < this.moofs.length) {\n\t\tbox = this.moofs[this.lastMoofIndex];\n\t\tthis.lastMoofIndex++;\n\t\tif (box.type == \"moof\") {\n\t\t\tmoof = box;\n\t\t\tfor (i = 0; i < moof.trafs.length; i++) {\n\t\t\t\ttraf = moof.trafs[i];\n\t\t\t\ttrak = this.getTrackById(traf.tfhd.track_id);\n\t\t\t\ttrex = this.getTrexById(traf.tfhd.track_id);\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DESC) {\n\t\t\t\t\tdefault_sample_description_index = traf.tfhd.default_sample_description_index;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_description_index = (trex ? trex.default_sample_description_index: 1);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_DUR) {\n\t\t\t\t\tdefault_sample_duration = traf.tfhd.default_sample_duration;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_duration = (trex ? trex.default_sample_duration : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_SIZE) {\n\t\t\t\t\tdefault_sample_size = traf.tfhd.default_sample_size;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_size = (trex ? trex.default_sample_size : 0);\n\t\t\t\t}\n\t\t\t\tif (traf.tfhd.flags & BoxParser.TFHD_FLAG_SAMPLE_FLAGS) {\n\t\t\t\t\tdefault_sample_flags = traf.tfhd.default_sample_flags;\n\t\t\t\t} else {\n\t\t\t\t\tdefault_sample_flags = (trex ? trex.default_sample_flags : 0);\n\t\t\t\t}\n\t\t\t\ttraf.sample_number = 0;\n\t\t\t\t/* process sample groups */\n\t\t\t\tif (traf.sbgps.length > 0) {\n\t\t\t\t\tISOFile.initSampleGroups(trak, traf, traf.sbgps, trak.mdia.minf.stbl.sgpds, traf.sgpds);\n\t\t\t\t}\n\t\t\t\tfor (j = 0; j < traf.truns.length; j++) {\n\t\t\t\t\tvar trun = traf.truns[j];\n\t\t\t\t\tfor (k = 0; k < trun.sample_count; k++) {\n\t\t\t\t\t\tsample = {};\n\t\t\t\t\t\tsample.moof_number = this.lastMoofIndex;\n\t\t\t\t\t\tsample.number_in_traf = traf.sample_number;\n\t\t\t\t\t\ttraf.sample_number++;\n\t\t\t sample.number = trak.samples.length;\n\t\t\t\t\t\ttraf.first_sample_index = trak.samples.length;\n\t\t\t\t\t\ttrak.samples.push(sample);\n\t\t\t\t\t\tsample.track_id = trak.tkhd.track_id;\n\t\t\t\t\t\tsample.timescale = trak.mdia.mdhd.timescale;\n\t\t\t\t\t\tsample.description_index = default_sample_description_index-1;\n\t\t\t\t\t\tsample.description = trak.mdia.minf.stbl.stsd.entries[sample.description_index];\n\t\t\t\t\t\tsample.size = default_sample_size;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_SIZE) {\n\t\t\t\t\t\t\tsample.size = trun.sample_size[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_size += sample.size;\n\t\t\t\t\t\tsample.duration = default_sample_duration;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_DURATION) {\n\t\t\t\t\t\t\tsample.duration = trun.sample_duration[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttrak.samples_duration += sample.duration;\n\t\t\t\t\t\tif (trak.first_traf_merged || k > 0) {\n\t\t\t\t\t\t\tsample.dts = trak.samples[trak.samples.length-2].dts+trak.samples[trak.samples.length-2].duration;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (traf.tfdt) {\n\t\t\t\t\t\t\t\tsample.dts = traf.tfdt.baseMediaDecodeTime;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.dts = 0;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\ttrak.first_traf_merged = true;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.cts = sample.dts;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_CTS_OFFSET) {\n\t\t\t\t\t\t\tsample.cts = sample.dts + trun.sample_composition_time_offset[k];\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample_flags = default_sample_flags;\n\t\t\t\t\t\tif (trun.flags & BoxParser.TRUN_FLAGS_FLAGS) {\n\t\t\t\t\t\t\tsample_flags = trun.sample_flags[k];\n\t\t\t\t\t\t} else if (k === 0 && (trun.flags & BoxParser.TRUN_FLAGS_FIRST_FLAG)) {\n\t\t\t\t\t\t\tsample_flags = trun.first_sample_flags;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tsample.is_sync = ((sample_flags >> 16 & 0x1) ? false : true);\n\t\t\t\t\t\tsample.is_leading = (sample_flags >> 26 & 0x3);\n\t\t\t\t\t\tsample.depends_on = (sample_flags >> 24 & 0x3);\n\t\t\t\t\t\tsample.is_depended_on = (sample_flags >> 22 & 0x3);\n\t\t\t\t\t\tsample.has_redundancy = (sample_flags >> 20 & 0x3);\n\t\t\t\t\t\tsample.degradation_priority = (sample_flags & 0xFFFF);\n\t\t\t\t\t\t//ISOFile.process_sdtp(traf.sdtp, sample, sample.number_in_traf);\n\t\t\t\t\t\tvar bdop = (traf.tfhd.flags & BoxParser.TFHD_FLAG_BASE_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar dbim = (traf.tfhd.flags & BoxParser.TFHD_FLAG_DEFAULT_BASE_IS_MOOF) ? true : false;\n\t\t\t\t\t\tvar dop = (trun.flags & BoxParser.TRUN_FLAGS_DATA_OFFSET) ? true : false;\n\t\t\t\t\t\tvar bdo = 0;\n\t\t\t\t\t\tif (!bdop) {\n\t\t\t\t\t\t\tif (!dbim) {\n\t\t\t\t\t\t\t\tif (j === 0) { // the first track in the movie fragment\n\t\t\t\t\t\t\t\t\tbdo = moof.start; // the position of the first byte of the enclosing Movie Fragment Box\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tbdo = last_run_position; // end of the data defined by the preceding *track* (irrespective of the track id) fragment in the moof\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tbdo = moof.start;\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tbdo = traf.tfhd.base_data_offset;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (j === 0 && k === 0) {\n\t\t\t\t\t\t\tif (dop) {\n\t\t\t\t\t\t\t\tsample.offset = bdo + trun.data_offset; // If the data-offset is present, it is relative to the base-data-offset established in the track fragment header\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tsample.offset = bdo; // the data for this run starts the base-data-offset defined by the track fragment header\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tsample.offset = last_run_position; // this run starts immediately after the data of the previous run\n\t\t\t\t\t\t}\n\t\t\t\t\t\tlast_run_position = sample.offset + sample.size;\n\t\t\t\t\t\tif (traf.sbgps.length > 0 || traf.sgpds.length > 0 ||\n\t\t\t\t\t\t\ttrak.mdia.minf.stbl.sbgps.length > 0 || trak.mdia.minf.stbl.sgpds.length > 0) {\n\t\t\t\t\t\t\tISOFile.setSampleGroupProperties(trak, sample, sample.number_in_traf, traf.sample_groups_info);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (traf.subs) {\n\t\t\t\t\ttrak.has_fragment_subsamples = true;\n\t\t\t\t\tvar sample_index = traf.first_sample_index;\n\t\t\t\t\tfor (j = 0; j < traf.subs.entries.length; j++) {\n\t\t\t\t\t\tsample_index += traf.subs.entries[j].sample_delta;\n\t\t\t\t\t\tsample = trak.samples[sample_index-1];\n\t\t\t\t\t\tsample.subsamples = traf.subs.entries[j].subsamples;\n\t\t\t\t\t}\t\t\t\t\t\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\t\n}\n\n/* Try to get sample data for a given sample:\n returns null if not found\n returns the same sample if already requested\n */\nISOFile.prototype.getSample = function(trak, sampleNum) {\t\n\tvar buffer;\n\tvar sample = trak.samples[sampleNum];\n\t\n\tif (!this.moov) {\n\t\treturn null;\n\t}\n\n\tif (!sample.data) {\n\t\t/* Not yet fetched */\n\t\tsample.data = new Uint8Array(sample.size);\n\t\tsample.alreadyRead = 0;\n\t\tthis.samplesDataSize += sample.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating sample #\"+sampleNum+\" on track #\"+trak.tkhd.track_id+\" of size \"+sample.size+\" (total: \"+this.samplesDataSize+\")\");\n\t} else if (sample.alreadyRead == sample.size) {\n\t\t/* Already fetched entirely */\n\t\treturn sample;\n\t}\n\n\t/* The sample has only been partially fetched, we need to check in all buffers */\n\twhile(true) {\n\t\tvar index =\tthis.stream.findPosition(true, sample.offset + sample.alreadyRead, false);\n\t\tif (index > -1) {\n\t\t\tbuffer = this.stream.buffers[index];\n\t\t\tvar lengthAfterStart = buffer.byteLength - (sample.offset + sample.alreadyRead - buffer.fileStart);\n\t\t\tif (sample.size - sample.alreadyRead <= lengthAfterStart) {\n\t\t\t\t/* the (rest of the) sample is entirely contained in this buffer */\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+(sample.size - sample.alreadyRead)+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, sample.size - sample.alreadyRead);\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += sample.size - sample.alreadyRead;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\tsample.alreadyRead = sample.size;\n\n\t\t\t\treturn sample;\n\t\t\t} else {\n\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\tif (lengthAfterStart === 0) return null;\n\n\t\t\t\tLog.debug(\"ISOFile\",\"Getting sample #\"+sampleNum+\" partial data (alreadyRead: \"+sample.alreadyRead+\" offset: \"+\n\t\t\t\t\t(sample.offset+sample.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\" full size: \"+sample.size+\")\");\n\n\t\t\t\tDataStream.memcpy(sample.data.buffer, sample.alreadyRead,\n\t\t\t\t buffer, sample.offset+sample.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\tsample.alreadyRead += lengthAfterStart;\n\n\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t/* keep looking in the next buffer */\n\t\t\t}\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t}\n}\n\n/* Release the memory used to store the data of the sample */\nISOFile.prototype.releaseSample = function(trak, sampleNum) {\t\n\tvar sample = trak.samples[sampleNum];\n\tif (sample.data) {\n\t\tthis.samplesDataSize -= sample.size;\n\t\tsample.data = null;\n\t\tsample.alreadyRead = 0;\n\t\treturn sample.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\nISOFile.prototype.getAllocatedSampleDataSize = function() {\n\treturn this.samplesDataSize;\n}\n\n/* Builds the MIME Type 'codecs' sub-parameters for the whole file */\nISOFile.prototype.getCodecs = function() {\t\n\tvar i;\n\tvar codecs = \"\";\n\tfor (i = 0; i < this.moov.traks.length; i++) {\n\t\tvar trak = this.moov.traks[i];\n\t\tif (i>0) {\n\t\t\tcodecs+=\",\"; \n\t\t}\n\t\tcodecs += trak.mdia.minf.stbl.stsd.entries[0].getCodec();\t\t\n\t}\n\treturn codecs;\n}\n\n/* Helper function */\nISOFile.prototype.getTrexById = function(id) {\t\n\tvar i;\n\tif (!this.moov || !this.moov.mvex) return null;\n\tfor (i = 0; i < this.moov.mvex.trexs.length; i++) {\n\t\tvar trex = this.moov.mvex.trexs[i];\n\t\tif (trex.track_id == id) return trex;\n\t}\n\treturn null;\n}\n\n/* Helper function */\nISOFile.prototype.getTrackById = function(id) {\n\tif (this.moov === undefined) {\n\t\treturn null;\n\t}\n\tfor (var j = 0; j < this.moov.traks.length; j++) {\n\t\tvar trak = this.moov.traks[j];\n\t\tif (trak.tkhd.track_id == id) return trak;\n\t}\n\treturn null;\n}\n// file:src/isofile-item-processing.js\n/* size of the buffers allocated for samples */\nISOFile.prototype.itemsDataSize = 0;\n\nISOFile.prototype.flattenItemInfo = function() {\t\n\tvar items = this.items;\n\tvar entity_groups = this.entity_groups;\n\tvar i, j;\n\tvar item;\n\tvar meta = this.meta;\n\tif (meta === null || meta === undefined) return;\n\tif (meta.hdlr === undefined) return;\n\tif (meta.iinf === undefined) return;\n\tfor (i = 0; i < meta.iinf.item_infos.length; i++) {\n\t\titem = {};\n\t\titem.id = meta.iinf.item_infos[i].item_ID;\n\t\titems[item.id] = item;\n\t\titem.ref_to = [];\n\t\titem.name = meta.iinf.item_infos[i].item_name;\n\t\tif (meta.iinf.item_infos[i].protection_index > 0) {\n\t\t\titem.protection = meta.ipro.protections[meta.iinf.item_infos[i].protection_index-1];\n\t\t}\n\t\tif (meta.iinf.item_infos[i].item_type) {\n\t\t\titem.type = meta.iinf.item_infos[i].item_type;\n\t\t} else {\n\t\t\titem.type = \"mime\";\n\t\t}\n\t\titem.content_type = meta.iinf.item_infos[i].content_type;\n\t\titem.content_encoding = meta.iinf.item_infos[i].content_encoding;\n\t\titem.item_uri_type = meta.iinf.item_infos[i].item_uri_type;\n\t}\n\tif (meta.grpl) {\n\t\tfor (i = 0; i < meta.grpl.boxes.length; i++) {\n\t\t\tentity_group = {};\n\t\t\tentity_group.id = meta.grpl.boxes[i].group_id;\n\t\t\tentity_group.entity_ids = meta.grpl.boxes[i].entity_ids;\n\t\t\tentity_group.type = meta.grpl.boxes[i].type;\n\t\t\tentity_groups[entity_group.id] = entity_group;\n\t\t}\n\t}\n\tif (meta.iloc) {\n\t\tfor(i = 0; i < meta.iloc.items.length; i++) {\n\t\t\tvar offset;\n\t\t\tvar itemloc = meta.iloc.items[i];\n\t\t\titem = items[itemloc.item_ID];\n\t\t\tif (itemloc.data_reference_index !== 0) {\n\t\t\t\tLog.warn(\"Item storage with reference to other files: not supported\");\n\t\t\t\titem.source = meta.dinf.boxes[itemloc.data_reference_index-1];\n\t\t\t}\n\t\t\tswitch(itemloc.construction_method) {\n\t\t\t\tcase 0: // offset into the file referenced by the data reference index\n\t\t\t\tbreak;\n\t\t\t\tcase 1: // offset into the idat box of this meta box\n\t\t\t\tbreak;\n\t\t\t\tcase 2: // offset into another item\n\t\t\t\tLog.warn(\"Item storage with construction_method : not supported\");\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\titem.extents = [];\n\t\t\titem.size = 0;\n\t\t\tfor (j = 0; j < itemloc.extents.length; j++) {\n\t\t\t\titem.extents[j] = {};\n\t\t\t\titem.extents[j].offset = itemloc.extents[j].extent_offset + itemloc.base_offset;\n\t\t\t\tif (itemloc.construction_method == 1) {\n\t\t\t\t\titem.extents[j].offset += meta.idat.start + meta.idat.hdr_size;\n\t\t\t\t}\n\t\t\t\titem.extents[j].length = itemloc.extents[j].extent_length;\n\t\t\t\titem.extents[j].alreadyRead = 0;\n\t\t\t\titem.size += item.extents[j].length;\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.pitm) {\n\t\titems[meta.pitm.item_id].primary = true;\n\t}\n\tif (meta.iref) {\n\t\tfor (i=0; i <meta.iref.references.length; i++) {\n\t\t\tvar ref = meta.iref.references[i];\n\t\t\tfor (j=0; j<ref.references.length; j++) {\n\t\t\t\titems[ref.from_item_ID].ref_to.push({type: ref.type, id: ref.references[j]});\n\t\t\t}\n\t\t}\n\t}\n\tif (meta.iprp) {\n\t\tfor (var k = 0; k < meta.iprp.ipmas.length; k++) {\n\t\t\tvar ipma = meta.iprp.ipmas[k];\n\t\t\tfor (i = 0; i < ipma.associations.length; i++) {\n\t\t\t\tvar association = ipma.associations[i];\n\t\t\t\titem = items[association.id];\n\t\t\t\tif (!item) {\n\t\t\t\t\titem = entity_groups[association.id];\n\t\t\t\t}\n\t\t\t\tif (item) {\n\t\t\t\t\tif (item.properties === undefined) {\n\t\t\t\t\t\titem.properties = {};\n\t\t\t\t\t\titem.properties.boxes = [];\n\t\t\t\t\t}\n\t\t\t\t\tfor (j = 0; j < association.props.length; j++) {\n\t\t\t\t\t\tvar propEntry = association.props[j];\n\t\t\t\t\t\tif (propEntry.property_index > 0 && propEntry.property_index-1 < meta.iprp.ipco.boxes.length) {\n\t\t\t\t\t\t\tvar propbox = meta.iprp.ipco.boxes[propEntry.property_index-1];\n\t\t\t\t\t\t\titem.properties[propbox.type] = propbox;\n\t\t\t\t\t\t\titem.properties.boxes.push(propbox);\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nISOFile.prototype.getItem = function(item_id) {\t\n\tvar buffer;\n\tvar item;\n\t\n\tif (!this.meta) {\n\t\treturn null;\n\t}\n\n \titem = this.items[item_id];\n\tif (!item.data && item.size) {\n\t\t/* Not yet fetched */\n\t\titem.data = new Uint8Array(item.size);\n\t\titem.alreadyRead = 0;\n\t\tthis.itemsDataSize += item.size;\n\t\tLog.debug(\"ISOFile\", \"Allocating item #\"+item_id+\" of size \"+item.size+\" (total: \"+this.itemsDataSize+\")\");\n\t} else if (item.alreadyRead === item.size) {\n\t\t/* Already fetched entirely */\n\t\treturn item;\n\t}\n\n\t/* The item has only been partially fetched, we need to check in all buffers to find the remaining extents*/\n\n\tfor (var i = 0; i < item.extents.length; i++) {\n\t\tvar extent = item.extents[i];\n\t\tif (extent.alreadyRead === extent.length) {\n\t\t\tcontinue;\n\t\t} else {\n\t\t\tvar index =\tthis.stream.findPosition(true, extent.offset + extent.alreadyRead, false);\n\t\t\tif (index > -1) {\n\t\t\t\tbuffer = this.stream.buffers[index];\n\t\t\t\tvar lengthAfterStart = buffer.byteLength - (extent.offset + extent.alreadyRead - buffer.fileStart);\n\t\t\t\tif (extent.length - extent.alreadyRead <= lengthAfterStart) {\n\t\t\t\t\t/* the (rest of the) extent is entirely contained in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" data (alreadyRead: \"+extent.alreadyRead+\n\t\t\t\t\t\t\" offset: \"+(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+(extent.length - extent.alreadyRead)+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, extent.length - extent.alreadyRead);\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += extent.length - extent.alreadyRead;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\n\t\t\t\t\titem.alreadyRead += (extent.length - extent.alreadyRead);\n\t\t\t\t\textent.alreadyRead = extent.length;\n\t\t\t\t} else {\n\t\t\t\t\t/* the sample does not end in this buffer */\n\n\t\t\t\t\tLog.debug(\"ISOFile\",\"Getting item #\"+item_id+\" extent #\"+i+\" partial data (alreadyRead: \"+extent.alreadyRead+\" offset: \"+\n\t\t\t\t\t\t(extent.offset+extent.alreadyRead - buffer.fileStart)+\" read size: \"+lengthAfterStart+\n\t\t\t\t\t\t\" full extent size: \"+extent.length+\" full item size: \"+item.size+\")\");\n\n\t\t\t\t\tDataStream.memcpy(item.data.buffer, item.alreadyRead, \n\t\t\t\t\t buffer, extent.offset+extent.alreadyRead - buffer.fileStart, lengthAfterStart);\n\t\t\t\t\textent.alreadyRead += lengthAfterStart;\n\t\t\t\t\titem.alreadyRead += lengthAfterStart;\n\n\t\t\t\t\t/* update the number of bytes used in this buffer and check if it needs to be removed */\n\t\t\t\t\tbuffer.usedBytes += lengthAfterStart;\n\t\t\t\t\tthis.stream.logBufferLevel();\n\t\t\t\t\treturn null;\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\treturn null;\n\t\t\t}\n\t\t}\n\t}\n\tif (item.alreadyRead === item.size) {\n\t\t/* fetched entirely */\n\t\treturn item;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n/* Release the memory used to store the data of the item */\nISOFile.prototype.releaseItem = function(item_id) {\t\n\tvar item = this.items[item_id];\n\tif (item.data) {\n\t\tthis.itemsDataSize -= item.size;\n\t\titem.data = null;\n\t\titem.alreadyRead = 0;\n\t\tfor (var i = 0; i < item.extents.length; i++) {\n\t\t\tvar extent = item.extents[i];\n\t\t\textent.alreadyRead = 0;\n\t\t}\n\t\treturn item.size;\n\t} else {\n\t\treturn 0;\n\t}\n}\n\n\nISOFile.prototype.processItems = function(callback) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tthis.getItem(item.id);\n\t\tif (callback && !item.sent) {\n\t\t\tcallback(item);\n\t\t\titem.sent = true;\n\t\t\titem.data = null;\n\t\t}\n\t}\n}\n\nISOFile.prototype.hasItem = function(name) {\n\tfor(var i in this.items) {\n\t\tvar item = this.items[i];\n\t\tif (item.name === name) {\n\t\t\treturn item.id;\n\t\t}\n\t}\n\treturn -1;\n}\n\nISOFile.prototype.getMetaHandler = function() {\n\tif (!this.meta) {\n\t\treturn null;\n\t} else {\n\t\treturn this.meta.hdlr.handler;\t\t\n\t}\n}\n\nISOFile.prototype.getPrimaryItem = function() {\n\tif (!this.meta || !this.meta.pitm) {\n\t\treturn null;\n\t} else {\n\t\treturn this.getItem(this.meta.pitm.item_id);\n\t}\n}\n\nISOFile.prototype.itemToFragmentedTrackFile = function(_options) {\n\tvar options = _options || {};\n\tvar item = null;\n\tif (options.itemId) {\n\t\titem = this.getItem(options.itemId);\n\t} else {\n\t\titem = this.getPrimaryItem();\n\t}\n\tif (item == null) return null;\n\n\tvar file = new ISOFile();\n\tfile.discardMdatData = false;\n\t// assuming the track type is the same as the item type\n\tvar trackOptions = { type: item.type, description_boxes: item.properties.boxes};\n\tif (item.properties.ispe) {\n\t\ttrackOptions.width = item.properties.ispe.image_width;\n\t\ttrackOptions.height = item.properties.ispe.image_height;\n\t}\n\tvar trackId = file.addTrack(trackOptions);\n\tif (trackId) {\n\t\tfile.addSample(trackId, item.data);\n\t\treturn file;\n\t} else {\n\t\treturn null;\n\t}\n}\n\n// file:src/isofile-write.js\n/* Rewrite the entire file */\nISOFile.prototype.write = function(outstream) {\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tthis.boxes[i].write(outstream);\n\t}\n}\n\nISOFile.prototype.createFragment = function(track_id, sampleNumber, stream_) {\n\tvar trak = this.getTrackById(track_id);\n\tvar sample = this.getSample(trak, sampleNumber);\n\tif (sample == null) {\n\t\tthis.setNextSeekPositionFromSample(trak.samples[sampleNumber]);\n\t\treturn null;\n\t}\n\t\n\tvar stream = stream_ || new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\n\tvar moof = this.createSingleSampleMoof(sample);\n\tmoof.write(stream);\n\n\t/* adjusting the data_offset now that the moof size is known*/\n\tmoof.trafs[0].truns[0].data_offset = moof.size+8; //8 is mdat header\n\tLog.debug(\"MP4Box\", \"Adjusting data_offset with new value \"+moof.trafs[0].truns[0].data_offset);\n\tstream.adjustUint32(moof.trafs[0].truns[0].data_offset_position, moof.trafs[0].truns[0].data_offset);\n\t\t\n\tvar mdat = new BoxParser.mdatBox();\n\tmdat.data = sample.data;\n\tmdat.write(stream);\n\treturn stream;\n}\n\n/* Modify the file and create the initialization segment */\nISOFile.writeInitializationSegment = function(ftyp, moov, total_duration, sample_duration) {\n\tvar i;\n\tvar index;\n\tvar mehd;\n\tvar trex;\n\tvar box;\n\tLog.debug(\"ISOFile\", \"Generating initialization segment\");\n\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tftyp.write(stream);\n\t\n\t/* we can now create the new mvex box */\n\tvar mvex = moov.add(\"mvex\");\n\tif (total_duration) {\n\t\tmvex.add(\"mehd\").set(\"fragment_duration\", total_duration);\n\t}\n\tfor (i = 0; i < moov.traks.length; i++) {\n\t\tmvex.add(\"trex\").set(\"track_id\", moov.traks[i].tkhd.track_id)\n\t\t\t\t\t\t.set(\"default_sample_description_index\", 1)\n\t\t\t\t\t\t.set(\"default_sample_duration\", sample_duration)\n\t\t\t\t\t\t.set(\"default_sample_size\", 0)\n\t\t\t\t\t\t.set(\"default_sample_flags\", 1<<16)\n\t}\n\tmoov.write(stream);\n\n\treturn stream.buffer;\n\n}\n\nISOFile.prototype.save = function(name) {\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n\tstream.save(name);\t\n}\n\nISOFile.prototype.getBuffer = function() {\n\tvar stream = new DataStream();\n\tstream.endianness = DataStream.BIG_ENDIAN;\n\tthis.write(stream);\n\treturn stream.buffer;\n}\n\nISOFile.prototype.initializeSegmentation = function() {\n\tvar i;\n\tvar j;\n\tvar box;\n\tvar initSegs;\n\tvar trak;\n\tvar seg;\n\tif (this.onSegment === null) {\n\t\tLog.warn(\"MP4Box\", \"No segmentation callback set!\");\n\t}\n\tif (!this.isFragmentationInitialized) {\n\t\tthis.isFragmentationInitialized = true;\t\t\n\t\tthis.nextMoofNumber = 0;\n\t\tthis.resetTables();\n\t}\t\n\tinitSegs = [];\t\n\tfor (i = 0; i < this.fragmentedTracks.length; i++) {\n\t\tvar moov = new BoxParser.moovBox();\n\t\tmoov.mvhd = this.moov.mvhd;\n\t moov.boxes.push(moov.mvhd);\n\t\ttrak = this.getTrackById(this.fragmentedTracks[i].id);\n\t\tmoov.boxes.push(trak);\n\t\tmoov.traks.push(trak);\n\t\tseg = {};\n\t\tseg.id = trak.tkhd.track_id;\n\t\tseg.user = this.fragmentedTracks[i].user;\n\t\tseg.buffer = ISOFile.writeInitializationSegment(this.ftyp, moov, (this.moov.mvex && this.moov.mvex.mehd ? this.moov.mvex.mehd.fragment_duration: undefined), (this.moov.traks[i].samples.length>0 ? this.moov.traks[i].samples[0].duration: 0));\n\t\tinitSegs.push(seg);\n\t}\n\treturn initSegs;\n}\n\n// file:src/box-print.js\n/* \n * Copyright (c) Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nBoxParser.Box.prototype.printHeader = function(output) {\n\tthis.size += 8;\n\tif (this.size > MAX_SIZE) {\n\t\tthis.size += 8;\n\t}\n\tif (this.type === \"uuid\") {\n\t\tthis.size += 16;\n\t}\n\toutput.log(output.indent+\"size:\"+this.size);\n\toutput.log(output.indent+\"type:\"+this.type);\n}\n\nBoxParser.FullBox.prototype.printHeader = function(output) {\n\tthis.size += 4;\n\tBoxParser.Box.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"version:\"+this.version);\n\toutput.log(output.indent+\"flags:\"+this.flags);\n}\n\nBoxParser.Box.prototype.print = function(output) {\n\tthis.printHeader(output);\n}\n\nBoxParser.ContainerBox.prototype.print = function(output) {\n\tthis.printHeader(output);\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tvar prev_indent = output.indent;\n\t\t\toutput.indent += \" \";\n\t\t\tthis.boxes[i].print(output);\n\t\t\toutput.indent = prev_indent;\n\t\t}\n\t}\n}\n\nISOFile.prototype.print = function(output) {\n\toutput.indent = \"\";\n\tfor (var i=0; i<this.boxes.length; i++) {\n\t\tif (this.boxes[i]) {\n\t\t\tthis.boxes[i].print(output);\n\t\t}\n\t}\t\n}\n\nBoxParser.mvhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"timescale: \"+this.timescale);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"rate: \"+this.rate);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"next_track_id: \"+this.next_track_id);\n}\n\nBoxParser.tkhdBox.prototype.print = function(output) {\n\tBoxParser.FullBox.prototype.printHeader.call(this, output);\n\toutput.log(output.indent+\"creation_time: \"+this.creation_time);\n\toutput.log(output.indent+\"modification_time: \"+this.modification_time);\n\toutput.log(output.indent+\"track_id: \"+this.track_id);\n\toutput.log(output.indent+\"duration: \"+this.duration);\n\toutput.log(output.indent+\"volume: \"+(this.volume>>8));\n\toutput.log(output.indent+\"matrix: \"+this.matrix.join(\", \"));\n\toutput.log(output.indent+\"layer: \"+this.layer);\n\toutput.log(output.indent+\"alternate_group: \"+this.alternate_group);\n\toutput.log(output.indent+\"width: \"+this.width);\n\toutput.log(output.indent+\"height: \"+this.height);\n}// file:src/mp4box.js\n/*\n * Copyright (c) 2012-2013. Telecom ParisTech/TSI/MM/GPAC Cyril Concolato\n * License: BSD-3-Clause (see LICENSE file)\n */\nvar MP4Box = {};\n\nMP4Box.createFile = function (_keepMdatData, _stream) {\n\t/* Boolean indicating if bytes containing media data should be kept in memory */\n\tvar keepMdatData = (_keepMdatData !== undefined ? _keepMdatData : true);\n\tvar file = new ISOFile(_stream);\n\tfile.discardMdatData = (keepMdatData ? false : true);\n\treturn file;\n}\n\nif (typeof exports !== 'undefined') {\n\texports.createFile = MP4Box.createFile;\n}\n","/**\n * Media Worker – demuxing and decoding in a Web Worker (W3C WebCodecs pattern).\n * MP4Box is loaded with DataStream exposed on globalThis for worker scope.\n */\n\nimport type {\n WorkerCommand,\n WorkerResponse,\n InitializeDoneResponse,\n FrameReadyResponse,\n ErrorResponse,\n} from \"../types/worker-messages.js\";\nimport type { MediaInfo } from \"../types/vega.js\";\nimport type {\n MP4BoxFile,\n MP4Info,\n MP4VideoTrackInfo,\n MP4AudioTrackInfo,\n MP4Sample,\n} from \"../demuxer/mp4box-types.js\";\nimport * as mp4box from \"mp4box\";\n\nconst mp4boxExports = mp4box as unknown as { createFile: () => MP4BoxFile; DataStream?: unknown };\nif (typeof globalThis !== \"undefined\" && mp4boxExports.DataStream) {\n (globalThis as unknown as { DataStream: unknown }).DataStream = mp4boxExports.DataStream;\n}\nconst createFile = mp4boxExports.createFile;\n\nlet playing = false;\nlet lastMediaTimeSecs = 0;\nlet lastMediaTimeCapturePoint = 0;\nlet animationFrameId: number | null = null;\n/** Total media duration in seconds; 0 until initialized. */\nlet mediaDurationSecs = 0;\n\nlet demuxer: MP4DemuxerWorker | null = null;\nlet videoRenderer: VideoDecoderWrapper | null = null;\nconst audioDecoder: AudioDecoder | null = null;\n\nconst videoFrameBuffer: VideoFrame[] = [];\nconst audioDataBuffer: AudioData[] = [];\n\nconst FRAME_BUFFER_TARGET = 3;\nconst _AUDIO_BUFFER_TARGET = 5;\n\n/**\n * Post a response message to the main thread.\n */\nfunction postResponse(response: WorkerResponse): void {\n self.postMessage(response);\n}\n\n/**\n * Post an error response.\n */\nfunction postError(message: string, code?: string): void {\n const response: ErrorResponse = { type: \"error\", message, code };\n postResponse(response);\n}\n\n/**\n * Update the media time reference.\n */\nfunction updateMediaTime(mediaTimeSecs: number, capturedAtHighResTimestamp: number): void {\n lastMediaTimeSecs = mediaTimeSecs;\n lastMediaTimeCapturePoint = capturedAtHighResTimestamp - performance.timeOrigin;\n}\n\n/**\n * Estimate current media time based on last known time.\n */\nfunction getMediaTimeMicroseconds(): number {\n const msecsSinceCapture = performance.now() - lastMediaTimeCapturePoint;\n return (lastMediaTimeSecs * 1000 + msecsSinceCapture) * 1000;\n}\n\n/**\n * Simple MP4 Demuxer for Worker context.\n */\nconst DEMUXER_GET_INFO_TIMEOUT_MS = 5000;\n\nclass MP4DemuxerWorker {\n private file: MP4BoxFile;\n private info: MP4Info | null = null;\n private infoResolver: ((info: MP4Info) => void) | null = null;\n private errorResolver: ((reason: Error) => void) | null = null;\n private loadError: Error | null = null;\n private videoTrack: MP4VideoTrackInfo | null = null;\n private audioTrack: MP4AudioTrackInfo | null = null;\n private videoSamples: MP4Sample[] = [];\n private audioSamples: MP4Sample[] = [];\n private videoSampleResolver: ((sample: MP4Sample) => void) | null = null;\n private audioSampleResolver: ((sample: MP4Sample) => void) | null = null;\n\n constructor() {\n this.file = createFile();\n this.file.onError = (e: string) => {\n this.loadError = new Error(e || \"Invalid or unsupported media\");\n if (this.errorResolver) {\n this.errorResolver(this.loadError);\n this.errorResolver = null;\n }\n this.infoResolver = null;\n };\n this.file.onReady = this.onReady.bind(this);\n this.file.onSamples = this.onSamples.bind(this);\n }\n\n /** Chunk size for range requests. One chunk is held in MP4Box at a time. */\n private static readonly STREAM_CHUNK_SIZE = 256 * 1024;\n\n async loadFromUrl(url: string): Promise<void> {\n this.loadError = null;\n this.info = null;\n\n const firstResponse = await fetch(url, {\n headers: { Range: `bytes=0-${MP4DemuxerWorker.STREAM_CHUNK_SIZE - 1}` },\n });\n\n if (firstResponse.status === 200 && !firstResponse.headers.has(\"Content-Range\")) {\n await this.loadFromBuffer(await firstResponse.arrayBuffer());\n return;\n }\n\n if (firstResponse.status !== 200 && firstResponse.status !== 206) {\n throw new Error(`Fetch failed: ${firstResponse.status}`);\n }\n\n let nextOffset = 0;\n const chunkSize = MP4DemuxerWorker.STREAM_CHUNK_SIZE;\n\n while (true) {\n const response =\n nextOffset === 0\n ? firstResponse\n : await fetch(url, {\n headers: { Range: `bytes=${nextOffset}-${nextOffset + chunkSize - 1}` },\n });\n\n if (response.status !== 200 && response.status !== 206) {\n throw new Error(`Fetch failed: ${response.status}`);\n }\n\n const ab = await response.arrayBuffer();\n if (ab.byteLength === 0) {\n this.file.flush();\n break;\n }\n\n const buffer = ab as ArrayBuffer & { fileStart: number };\n buffer.fileStart = nextOffset;\n const next = this.file.appendBuffer(buffer);\n nextOffset = typeof next === \"number\" ? next : nextOffset + ab.byteLength;\n\n if (ab.byteLength < chunkSize) {\n this.file.flush();\n break;\n }\n }\n }\n\n async loadFromBuffer(data: ArrayBuffer): Promise<void> {\n this.loadError = null;\n this.info = null;\n const buffer = data as ArrayBuffer & { fileStart: number };\n buffer.fileStart = 0;\n this.file.appendBuffer(buffer);\n this.file.flush();\n }\n\n private onReady(info: MP4Info): void {\n this.info = info;\n this.videoTrack = info.videoTracks[0];\n this.audioTrack = info.audioTracks[0];\n\n if (this.videoTrack) {\n this.file.setExtractionOptions(this.videoTrack.id, null, { nbSamples: 50 });\n }\n if (this.audioTrack) {\n this.file.setExtractionOptions(this.audioTrack.id, null, { nbSamples: 50 });\n }\n this.file.start();\n\n if (this.infoResolver) {\n this.infoResolver(info);\n this.infoResolver = null;\n }\n }\n\n private onSamples(trackId: number, _ref: unknown, samples: MP4Sample[]): void {\n if (this.videoTrack && trackId === this.videoTrack.id) {\n this.videoSamples.push(...samples);\n if (this.videoSampleResolver && this.videoSamples.length > 0) {\n const sample = this.videoSamples.shift();\n if (sample !== undefined) this.videoSampleResolver(sample);\n this.videoSampleResolver = null;\n }\n } else if (this.audioTrack && trackId === this.audioTrack.id) {\n this.audioSamples.push(...samples);\n if (this.audioSampleResolver && this.audioSamples.length > 0) {\n const sample = this.audioSamples.shift();\n if (sample !== undefined) this.audioSampleResolver(sample);\n this.audioSampleResolver = null;\n }\n }\n }\n\n async getInfo(): Promise<MP4Info> {\n if (this.info) return this.info;\n if (this.loadError) return Promise.reject(this.loadError);\n const timeout = new Promise<never>((_, reject) => {\n setTimeout(\n () => reject(new Error(\"Invalid or unsupported media\")),\n DEMUXER_GET_INFO_TIMEOUT_MS,\n );\n });\n const infoPromise = new Promise<MP4Info>((resolve, reject) => {\n this.infoResolver = resolve;\n this.errorResolver = reject;\n });\n return Promise.race([infoPromise, timeout]);\n }\n\n getVideoDecoderConfig(): VideoDecoderConfig | null {\n if (!this.videoTrack) return null;\n\n const codec = this.videoTrack.codec.startsWith(\"vp08\") ? \"vp8\" : this.videoTrack.codec;\n\n const description = this.getVideoDescription();\n\n return {\n codec,\n codedWidth: this.videoTrack.video.width,\n codedHeight: this.videoTrack.video.height,\n ...(description && { description }),\n };\n }\n\n getAudioDecoderConfig(): AudioDecoderConfig | null {\n if (!this.audioTrack) return null;\n\n const description = this.getAudioDescription();\n\n return {\n codec: this.audioTrack.codec,\n sampleRate: this.audioTrack.audio.sample_rate,\n numberOfChannels: this.audioTrack.audio.channel_count,\n ...(description && { description }),\n };\n }\n\n private getVideoDescription(): ArrayBuffer | undefined {\n if (!this.videoTrack) return undefined;\n const track = this.file.getTrackById(this.videoTrack.id);\n if (!track) return undefined;\n\n for (const entry of track.mdia.minf.stbl.stsd.entries) {\n const box = entry.avcC || entry.hvcC || entry.vpcC || entry.av1C;\n if (box) {\n const stream = new DataStream(undefined, 0, DataStream.BIG_ENDIAN);\n box.write(stream);\n return stream.buffer.slice(8);\n }\n }\n return undefined;\n }\n\n private getAudioDescription(): ArrayBuffer | undefined {\n if (!this.audioTrack) return undefined;\n const track = this.file.getTrackById(this.audioTrack.id);\n if (!track) return undefined;\n\n const entry = track.mdia.minf.stbl.stsd.entries[0];\n if (entry?.esds?.esd?.descs?.[0]?.descs?.[0]?.data) {\n const data = entry.esds.esd.descs[0].descs[0].data;\n return data.buffer.slice(data.byteOffset, data.byteOffset + data.byteLength) as ArrayBuffer;\n }\n return undefined;\n }\n\n startVideoExtraction(): void {\n if (this.videoTrack) {\n this.file.start();\n }\n }\n\n startAudioExtraction(): void {\n if (this.audioTrack) {\n this.file.start();\n }\n }\n\n async getNextVideoSample(): Promise<MP4Sample | null> {\n if (this.videoSamples.length > 0) {\n return this.videoSamples.shift() ?? null;\n }\n if (!this.videoTrack) return null;\n\n return new Promise((resolve) => {\n this.videoSampleResolver = resolve;\n this.file.start();\n });\n }\n\n async getNextAudioSample(): Promise<MP4Sample | null> {\n if (this.audioSamples.length > 0) {\n return this.audioSamples.shift() ?? null;\n }\n if (!this.audioTrack) return null;\n\n return new Promise((resolve) => {\n this.audioSampleResolver = resolve;\n this.file.start();\n });\n }\n\n /** Reset extraction position so next getNextVideoSample() returns from given time (e.g. after seek). */\n seek(timeSecs: number): void {\n this.file.seek(timeSecs, true);\n }\n\n getMediaInfo(): MediaInfo {\n const info = this.info;\n if (!info) throw new Error(\"Demuxer not initialized\");\n const mediaInfo: MediaInfo = {\n duration: info.duration / info.timescale,\n isFragmented: info.isFragmented,\n brands: info.brands,\n };\n\n if (this.videoTrack) {\n const frameRate =\n this.videoTrack.nb_samples / (this.videoTrack.duration / this.videoTrack.timescale);\n mediaInfo.videoTrack = {\n codec: this.videoTrack.codec,\n width: this.videoTrack.video.width,\n height: this.videoTrack.video.height,\n frameRate,\n bitrate: this.videoTrack.bitrate,\n };\n }\n\n if (this.audioTrack) {\n mediaInfo.audioTrack = {\n codec: this.audioTrack.codec,\n sampleRate: this.audioTrack.audio.sample_rate,\n channelCount: this.audioTrack.audio.channel_count,\n bitrate: this.audioTrack.bitrate,\n };\n }\n\n return mediaInfo;\n }\n\n hasVideoTrack(): boolean {\n return this.videoTrack !== null;\n }\n\n hasAudioTrack(): boolean {\n return this.audioTrack !== null;\n }\n}\n\n/**\n * Video Decoder Wrapper\n */\nclass VideoDecoderWrapper {\n private decoder: VideoDecoder;\n private fillInProgress = false;\n private getNextSample: () => Promise<MP4Sample | null>;\n\n constructor(getNextSample: () => Promise<MP4Sample | null>) {\n this.getNextSample = getNextSample;\n this.decoder = new VideoDecoder({\n output: (frame) => {\n videoFrameBuffer.push(frame);\n },\n error: (e) => {\n console.error(\"[VideoDecoder]\", e);\n postError(`Video decode error: ${e.message}`, \"DECODE_ERROR\");\n },\n });\n }\n\n async configure(config: VideoDecoderConfig): Promise<void> {\n const support = await VideoDecoder.isConfigSupported(config);\n if (!support.supported) {\n throw new Error(`Video codec not supported: ${config.codec}`);\n }\n this.decoder.configure(config);\n }\n\n async fillBuffer(): Promise<void> {\n if (this.fillInProgress) return;\n this.fillInProgress = true;\n\n try {\n while (\n videoFrameBuffer.length < FRAME_BUFFER_TARGET &&\n this.decoder.decodeQueueSize < FRAME_BUFFER_TARGET\n ) {\n const sample = await this.getNextSample();\n if (!sample) break;\n\n const chunk = new EncodedVideoChunk({\n type: sample.is_sync ? \"key\" : \"delta\",\n timestamp: (sample.cts * 1_000_000) / sample.timescale,\n duration: (sample.duration * 1_000_000) / sample.timescale,\n data: sample.data,\n });\n\n this.decoder.decode(chunk);\n }\n } catch (e) {\n console.error(\"[VideoDecoder] Fill error:\", e);\n }\n\n this.fillInProgress = false;\n }\n\n async flush(): Promise<void> {\n if (this.decoder.state === \"configured\") {\n await this.decoder.flush();\n }\n }\n\n close(): void {\n if (this.decoder.state !== \"closed\") {\n this.decoder.close();\n }\n }\n}\n\n/**\n * Render video frame for current time.\n */\nfunction renderVideo(): void {\n if (!playing) return;\n\n const timestamp = getMediaTimeMicroseconds();\n const mediaTimeSecs = timestamp / 1_000_000;\n\n if (mediaDurationSecs > 0 && mediaTimeSecs >= mediaDurationSecs - 0.001) {\n playing = false;\n if (animationFrameId !== null) {\n cancelAnimationFrame(animationFrameId);\n animationFrameId = null;\n }\n postResponse({ type: \"ended\" });\n return;\n }\n\n let bestFrame: VideoFrame | null = null;\n let bestIndex = -1;\n let minDelta = Number.MAX_VALUE;\n\n for (let i = 0; i < videoFrameBuffer.length; i++) {\n const delta = Math.abs(timestamp - videoFrameBuffer[i].timestamp);\n if (delta < minDelta) {\n minDelta = delta;\n bestIndex = i;\n }\n }\n\n if (bestIndex >= 0) {\n for (let i = 0; i < bestIndex; i++) {\n videoFrameBuffer[i].close();\n }\n videoFrameBuffer.splice(0, bestIndex);\n bestFrame = videoFrameBuffer.shift() || null;\n }\n\n if (bestFrame) {\n const response: FrameReadyResponse = {\n type: \"frame-ready\",\n frame: bestFrame,\n timestamp: bestFrame.timestamp,\n };\n postResponse(response);\n }\n\n videoRenderer?.fillBuffer();\n animationFrameId = requestAnimationFrame(renderVideo);\n}\n\n/**\n * Handle incoming commands from main thread.\n */\nasync function handleCommand(command: WorkerCommand): Promise<void> {\n switch (command.command) {\n case \"initialize\": {\n try {\n demuxer = new MP4DemuxerWorker();\n\n if (typeof command.source === \"string\") {\n await demuxer.loadFromUrl(command.source);\n } else {\n await demuxer.loadFromBuffer(command.source);\n }\n\n await demuxer.getInfo();\n\n if (demuxer.hasVideoTrack()) {\n const videoConfig = demuxer.getVideoDecoderConfig();\n if (videoConfig) {\n const d = demuxer;\n videoRenderer = new VideoDecoderWrapper(() =>\n d ? d.getNextVideoSample() : Promise.resolve(null),\n );\n await videoRenderer.configure(videoConfig);\n demuxer.startVideoExtraction();\n await videoRenderer.fillBuffer();\n }\n }\n\n let audioConfig: AudioDecoderConfig | null = null;\n let sharedArrayBuffer: SharedArrayBuffer | undefined;\n\n if (demuxer.hasAudioTrack()) {\n audioConfig = demuxer.getAudioDecoderConfig();\n if (audioConfig) {\n demuxer.startAudioExtraction();\n }\n }\n\n const mediaInfo = demuxer.getMediaInfo();\n mediaDurationSecs = mediaInfo.duration;\n const response: InitializeDoneResponse = {\n type: \"initialize-done\",\n mediaInfo,\n sampleRate: audioConfig?.sampleRate,\n channelCount: audioConfig?.numberOfChannels,\n sharedArrayBuffer,\n };\n postResponse(response);\n } catch (e) {\n const error = e as Error;\n postError(error.message, \"LOAD_ERROR\");\n }\n break;\n }\n\n case \"play\": {\n playing = true;\n updateMediaTime(command.mediaTimeSecs, command.mediaTimeCapturedAtHighResTimestamp);\n animationFrameId = requestAnimationFrame(renderVideo);\n break;\n }\n\n case \"pause\": {\n playing = false;\n if (animationFrameId !== null) {\n cancelAnimationFrame(animationFrameId);\n animationFrameId = null;\n }\n break;\n }\n\n case \"update-media-time\": {\n updateMediaTime(command.mediaTimeSecs, command.mediaTimeCapturedAtHighResTimestamp);\n break;\n }\n\n case \"seek\": {\n if (demuxer) {\n demuxer.seek(command.time);\n }\n\n for (const frame of videoFrameBuffer) {\n frame.close();\n }\n videoFrameBuffer.length = 0;\n\n for (const data of audioDataBuffer) {\n data.close();\n }\n audioDataBuffer.length = 0;\n\n await videoRenderer?.flush();\n await videoRenderer?.fillBuffer();\n\n postResponse({ type: \"seek-done\", time: command.time });\n break;\n }\n\n case \"stop\": {\n playing = false;\n if (animationFrameId !== null) {\n cancelAnimationFrame(animationFrameId);\n animationFrameId = null;\n }\n\n for (const frame of videoFrameBuffer) {\n frame.close();\n }\n videoFrameBuffer.length = 0;\n break;\n }\n\n case \"destroy\": {\n playing = false;\n mediaDurationSecs = 0;\n if (animationFrameId !== null) {\n cancelAnimationFrame(animationFrameId);\n }\n\n for (const frame of videoFrameBuffer) {\n frame.close();\n }\n videoFrameBuffer.length = 0;\n\n videoRenderer?.close();\n audioDecoder?.close();\n break;\n }\n }\n}\n\nself.addEventListener(\"message\", async (e: MessageEvent<WorkerCommand>) => {\n await handleCommand(e.data);\n});\n"],"names":["Log","start","LOG_LEVEL_ERROR","LOG_LEVEL_WARNING","LOG_LEVEL_INFO","LOG_LEVEL_DEBUG","log_level","logObject","level","module","msg","duration","_timescale","neg","pad","number","length","str","a","timescale","duration_sec","hours","minutes","msec","ranges","i","exports","MP4BoxStream","arrayBuffer","pos","npos","size","signed","res","s","arr","b","DataStream","byteOffset","endianness","extra","req","blen","buf","src","dst","v","e","dstOffset","srcOffset","byteLength","dstU8","srcU8","array","arrayIsLittleEndian","littleEndian","u8","j","k","tmp","uint8arr","encoding","len","MAX_SIZE","filename","blob","url","offset","lengthOverride","structDefinition","struct","t","tp","charset","ta","h","position","value","MultiBufferStream","buffer","firstBuffer","buffer1","buffer2","newLength","smallB","ab","to_add","info","used","total","range","bufferedString","log","next_buffer","oldLength","oldUsedBytes","oldFileStart","fromStart","filePosition","markAsUsed","abuffer","index","inputindex","currentBuf","nextBuf","nbBytes","MPEG4DescriptorParser","ES_DescrTag","DecoderConfigDescrTag","DecSpecificInfoTag","SLConfigDescrTag","descTagToName","tag","that","classes","stream","desc","byteRead","_tag","_size","l","dcd","dsi","audioObjectType","BoxParser","box","boxes","_type","_name","_uuid","type","name","uuid","hdr_size","parseMethod","subBoxNames","nbSubBoxes","mediaType","isFullBox","isContainerBox","prop","_prop","hex16","hex","headerOnly","parentSize","diff","box_type","ret","chars","compressorname_length","large_size","FieldLength","aux_subtype_length","configOBUs_length","printPS","ps","nalu","byte","toparse","flags","component_type","entry_count","tmp_byte1","tmp_byte2","tmp_byte3","tmp_16","ind_sub","BLOCKTYPE_MASK","LASTMETADATABLOCKFLAG_MASK","boxesFound","knownBlockTypes","flagAndType","entry","message_size","entity_id","esd_data","esd_parser","tmp_byte","nalu_array","numOfArrays","numNalus","item_count","item","extent_count","extent","item_assoc","association_count","p","count","ColorPoint","x","y","sample_count","datasize","roll_count","remaining","numReferences","dependencyInfo","Pixel","row","col","ref","tmp_32","subsegment_count","subsegment","range_count","entryCount","delta","tmp32","subsample_count","sampleInfo","subsample","readBytes","number_of_entries","absolute_time","absolute_duration","bitReader","strm","num_bits","cnstr1","cnstr2","val","VVC_NALU_OPI","VVC_NALU_DEC_PARAM","num_of_arrays","d","padding","baseCodec","reversed","hasByte","constraint_string","bytes","last_nonzero","base32_chars","held_bits","num_held_bits","oti","bitDepth","bitdepth","constant","UINT32_MAX","samples","m","box_a","box_b","VTTin4Parser","data","cues","cue","startTime","endTime","n","width","z","secToTimestamp","insec","ms","string","cueIn4","XMLSubtitlein4Parser","sample","Textin4Parser","textString","ISOFile","id","user","options","trak","fragTrack","extractTrack","parseBoxHeadersOnly","last","nextFileStart","movie","track","sample_desc","_1904","fragTrak","result","extractTrak","returnEarly","track_id","sampleNum","time","useRap","seek_offset","rap_seek_sample_num","seek_sample_num","moov","trak_seek_info","seek_info","box_index","a_box","b_box","merged","found","_options","mdia","minf","sample_description_entry","media_type","codes","avcC","hvcC","stbl","stream_","moof","sample_flags","traf","stco","stsc","stsz","stts","ctts","stss","sbgps","trak_sgpds","traf_sgpds","sample_group_info","sample_group_key","SampleGroupInfo","_parameter","_sbgp","sample_number","sample_groups_info","description","sdtp","stsd","subs","sgpds","stdp","chunk_run_index","chunk_index","last_chunk_in_run","offset_in_chunk","last_sample_in_chunk","last_sample_in_stts_run","stts_run_index","last_sample_in_ctts_run","ctts_run_index","last_stss_index","subs_entry_index","last_subs_sample_index","default_sample_description_index","default_sample_duration","default_sample_size","default_sample_flags","last_run_position","trex","trun","bdop","dbim","dop","bdo","sample_index","lengthAfterStart","codecs","items","entity_groups","meta","itemloc","ipma","association","propEntry","propbox","item_id","callback","file","trackOptions","trackId","outstream","sampleNumber","mdat","ftyp","total_duration","sample_duration","mvex","initSegs","seg","output","prev_indent","MP4Box","_keepMdatData","_stream","keepMdatData","mp4boxExports","mp4box","createFile","playing","lastMediaTimeSecs","lastMediaTimeCapturePoint","animationFrameId","mediaDurationSecs","demuxer","videoRenderer","videoFrameBuffer","audioDataBuffer","FRAME_BUFFER_TARGET","postResponse","response","postError","message","code","updateMediaTime","mediaTimeSecs","capturedAtHighResTimestamp","getMediaTimeMicroseconds","msecsSinceCapture","DEMUXER_GET_INFO_TIMEOUT_MS","_MP4DemuxerWorker","firstResponse","nextOffset","chunkSize","next","_ref","timeout","_","reject","infoPromise","resolve","codec","timeSecs","mediaInfo","frameRate","MP4DemuxerWorker","VideoDecoderWrapper","getNextSample","frame","config","chunk","renderVideo","timestamp","bestFrame","bestIndex","minDelta","handleCommand","command","videoConfig","audioConfig","sharedArrayBuffer"],"mappings":"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","x_google_ignoreList":[0]}
|