106 lines · 3.4 KB · HTML
RawDownload
<!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" />    <span id="fps_display"></span>    <br/>     <!--This is where we will display decoded frames-->    <canvas id="canvas" width="640" height="480" style="border:solid;"></canvas>     <script src="h264bsd_canvas.js"></script>     <script type="text/javascript">        var canvas = document.getElementById('canvas');         var pictureCount = 0;        var lastPictureCount = 0;         // Create the decoder and canvas        var decoder = new Worker('h264bsd_worker.js');        var display = new H264bsdCanvas(canvas);         console.log('Created decoder and canvas');         decoder.addEventListener('error', function(e) {            console.log('Decoder error', e);        })         decoder.addEventListener('message', function(e) {            var message = e.data;            if (!message.hasOwnProperty('type')) return;             switch(message.type) {            case 'pictureParams':                croppingParams = message.croppingParams;                if(croppingParams === null) {                    canvas.width = message.width;                    canvas.height = message.height;                } else {                    canvas.width = croppingParams.width;                    canvas.height = croppingParams.height;                }                break;            case 'noInput':                var copy = new Uint8Array(buf);                decoder.postMessage({                    'type' : 'queueInput',                    'data' : copy.buffer                }, [copy.buffer]);                break;            case 'pictureReady':                display.drawNextOutputPicture(                    message.width,                    message.height,                    message.croppingParams,                    new Uint8Array(message.data));                ++pictureCount;                break;            case 'decoderReady':                console.log('Decoder ready');                break;            }        });         function updateFpsCount() {            var picturesSinceLastUpdate = pictureCount - lastPictureCount;            var fpsDisplay = document.getElementById('fps_display');             fps_display.innerHTML = 'FPS: ' + picturesSinceLastUpdate;             lastPictureCount = pictureCount;        }         var buf = null;         // 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) {                buf = new Uint8Array(e.target.result);                 var copy = new Uint8Array(buf)                decoder.postMessage(                    {'type' : 'queueInput', 'data' : copy.buffer},                    [copy.buffer]);                setInterval(updateFpsCount, 1000);                 console.log('Starting encode loop');            };             // Read in the image file as a data URL.            reader.readAsArrayBuffer(f);        }         document.getElementById('file').addEventListener('change', handleFileSelect, false);    </script></body></html>

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t