X-Git-Url: http://id.pley.net/movie_parser.git/blobdiff_plain/49dd866a06288856e4a1d5df3f00a6a0fccea2fa..HEAD:/AtomTester.html diff --git a/AtomTester.html b/AtomTester.html old mode 100644 new mode 100755 index 2617264..1ff5f4e --- a/AtomTester.html +++ b/AtomTester.html @@ -13,39 +13,39 @@ var reader = new FileReader(); output.innerHTML = ''; - function checkForMoovAtom(offset) { + function checkForAtom(offset) { reader.onload = function(e) { - var result = e.target.result; - var basicAtom = new Atom(result); - if (!basicAtom) - return; - else if (basicAtom.type == 'moov') - readMoovAtom(offset, basicAtom.size); - else - checkForMoovAtom(offset + basicAtom.size); + var atom = new Atom(); + if (atom) { + atom.parse(e.target.result, 0); + readAtom(offset, atom.size); + } }; - var subset = file.slice(offset, offset + 16); + var subset = file.slice(offset, offset + 36); reader.readAsArrayBuffer(subset); - }; - - function readMoovAtom(offset, length) { - reader.onload = function(e) { - moovAtom = Atom.create(e.target.result); + } + + function readAtom(offset, length) { + reader.onload = function(e) { + atom = Atom.create(e.target.result); + if (!atom) + return; var output = document.getElementById('output'); - output.appendChild(toDOMNode(moovAtom)); + output.appendChild(toDOMNode(atom)); + if (file.size > offset + length) + checkForAtom(offset + length); }; var subset = file.slice(offset, offset + length); reader.readAsArrayBuffer(subset); - }; + } - checkForMoovAtom(0); + checkForAtom(0); } - function toDOMRepresentation(object) { if (object instanceof Atom) return toDOMNode(object); - else if (object instanceof Array) { + else if (object instanceof Array || object instanceof Uint32Array) { var span = document.createElement('span'); span.appendChild(document.createTextNode('[')); for (var i = 0; i < object.length; ++i) { @@ -60,13 +60,26 @@ return document.createTextNode('"' + object + '"'); else if (object instanceof Date) return document.createTextNode(object.toLocaleString()); - else + else if (object instanceof Uint8Array) { + return Uint8ArrayNode(object); + } else if (object instanceof Object) + return toDOMNode(object); + else if (object === null) + return document.createTextNode('[null]'); + else return document.createTextNode(object.toString()); } function toDOMNode(object) { var output = document.createElement('dl'); + + if (typeof(object.description) == 'string') { + var div = document.createElement('div'); + div.classList.add('description'); + div.appendChild(document.createTextNode(object.description)); + output.appendChild(div); + } for (property in object) { var value = object[property]; @@ -74,7 +87,7 @@ continue; var div = document.createElement('div'); var dt = document.createElement('dt'); - dt.appendChild(document.createTextNode(property)); + dt.appendChild(document.createTextNode(property + ': ')); var dd = document.createElement('dd'); dd.appendChild(toDOMRepresentation(value)); div.appendChild(dt); @@ -83,6 +96,29 @@ } return output; } + + function Uint8ArrayNode(array) + { + var table = document.createElement('table'); + var width = 16; + for (var offset = 0; offset <= array.length; offset += width) { + var tr = document.createElement('tr'); + table.appendChild(tr); + + var th = document.createElement('th'); + tr.appendChild(th); + th.innerText = ('0000000' + offset.toString(16)).substr(-8) + ':'; + + for (var column = 0; column < width && offset + column < array.length; column += 2) { + var td = document.createElement('td'); + tr.appendChild(td); + td.innerText = ('00' + array[offset + column].toString(16)).substr(-2); + if (offset + column + 1 < array.length) + td.innerText += ('00' + array[offset + column + 1].toString(16)).substr(-2); + } + } + return table; + } function setup() { document.getElementById('file').addEventListener('change', onFileSelect, false); @@ -91,13 +127,15 @@