shithub: h264bsd

ref: 3cc5bb12d6f8e833bad40ad49444d3fcda5d0b6f
dir: /test/h264bsd.html/

View raw version
<!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/>
    <canvas id="canvas" width="640" height="480" style="border:solid;"></canvas>
    <h264decoder id="h264decoder"><h264decoder>
    <script src="../js/h264bsd_asm.js"></script>
    <script src="../js/sylvester.js"></script>
    <script src="../js/glUtils.js"></script>
    <script src="../js/util.js"></script>
    <script src="../js/canvas.js"></script>    
    <script src="../js/h264bsd.js"></script>
    <!--<script src="../js/dist/h264bsd.min.js"></script>-->
    <script type="text/javascript">
    	var canvas = document.getElementById('canvas');    	
    	var d = new H264Decoder(Module, canvas, true);
    	canvas.addEventListener("pictureReady", function(e){

			if (e.detail.picture == null){
				return;
			}			

			var bytes = e.detail.picture;			
			var width = e.detail.width;
			var height = e.detail.height;

			if (e.detail.encoding === 'YUV'){
				var wgc = new YUVWebGLCanvas(canvas, new Size(width, height));
				var lumaSize = width * height;
				var chromaSize = lumaSize >> 2;

			    wgc.YTexture.fill(bytes.subarray(0, lumaSize), true);
			    wgc.UTexture.fill(bytes.subarray(lumaSize, lumaSize + chromaSize), true);
			    wgc.VTexture.fill(bytes.subarray(lumaSize + chromaSize, lumaSize + 2 * chromaSize), true);
			    wgc.drawScene();

			} else if (e.detail.encoding === 'RGB'){
				var buf = document.createElement('canvas');
				var bufCtx = buf.getContext('2d');
				var imageData = bufCtx.createImageData(width, height);
				var out = imageData.data;
				
				for (var i = 0; i < bytes.length; i++){
					out[i] = bytes[i];
				}
				console.log(out);

				canvas.height = height;
				canvas.width = width;
				canvas.style.height = height;
				canvas.style.width = width;
				var oc = canvas.getContext('2d');
				oc.putImageData(imageData, 0,0);
			}

    	});

		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) {
				var buf = e.target.result;							
				d.decode(buf);			
			};

			// Read in the image file as a data URL.
			reader.readAsArrayBuffer(f);
		}		  

 		document.getElementById('file').addEventListener('change', handleFileSelect, false);
    </script>
</body>
</html>