ref: ae8d07b2a4414678e636df580ab8da52bf1ad4fb
dir: /test/h264bsd.html/
<!doctype html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<title>h.264bsd test</title>
</head>
<body>
<input type="file" id="file" name="file" /><br/>
<!--This is where we will display decoded frames-->
<canvas id="canvas" width="640" height="480" style="border:solid;"></canvas>
<script src="../js/h264bsd_asm.js"></script>
<script src="../js/h264bsd_decoder.js"></script>
<script src="../js/h264bsd_canvas.js"></script>
<!--<script src="../js/h264bsd.min.js"></script>-->
<script type="text/javascript">
var canvas = document.getElementById('canvas');
// Create the decoder and canvas
var d = new H264bsdDecoder(Module);
var c = new H264bsdCanvas(canvas);
console.log('Created decoder and canvas');
// Render for each picture
d.onPictureReady = function () {
console.log('Drawing next output picture...');
var outputSizeMB = d.outputSizeMB();
canvas.width = outputSizeMB.width * 16;
canvas.height = outputSizeMB.height * 16;
c.drawNextOutputPicture(d);
}
// Loop with setTimeout delay to allow UI to update.
var loopBody = function() {
var retCode = d.decode();
console.log('Decoded data. Return code: ', retCode, ' bytes remaining: ', d.inputBytesRemaining());
switch(retCode) {
case H264bsdDecoder.NO_INPUT:
console.log('Decoding complete');
d.release();
break;
default:
setTimeout(loopBody, 0);
break;
}
}
// Use the FileReader to get the bytes into the decoder
function handleFileSelect(evt) {
var f = evt.target.files[0]; // FileList object
var reader = new FileReader();
// Closure to capture the file information.
reader.onload = function(e) {
console.log('Queueing file data...');
var buf = e.target.result;
d.queueInput(buf);
loopBody();
};
// Read in the image file as a data URL.
reader.readAsArrayBuffer(f);
}
document.getElementById('file').addEventListener('change', handleFileSelect, false);
</script>
</body>
</html>