Skip to content

Instantly share code, notes, and snippets.

View x-labz's full-sized avatar
🤩
playing hard

x-labz x-labz

🤩
playing hard
View GitHub Profile
@x-labz
x-labz / task-keepalive.js
Last active November 4, 2022 11:57
task-keepalive
function keepAliveTask(task) {
while (true) {
try {
log('starting task:', task.name)
task()
}
catch (error) {
log('task crashed:', task.name, error )
}
}
@x-labz
x-labz / webgl-transformer-canvas.js
Created February 2, 2022 15:09
webgl-transformer-canvas
// gl.readPixels(0, 0, W, H, gl.RGBA, gl.UNSIGNED_BYTE, bufferRGB);
const init = {
timestamp: videoFrame.timestamp,
codedWidth: W,
codedHeight: H,
format: "RGBA",
};
//const newFrame = new VideoFrame(bufferRGB, init);
const newFrame = new VideoFrame(gl.canvas, init);
@x-labz
x-labz / webgl-transformer-readpixels.js
Created February 2, 2022 14:35
frame transformer with readPixels
const W = 1280;
const H = 720;
async function start() {
const buffer = new Uint8Array(W * H * 1.5);
const bufferRGB = new Uint8Array(W * H * 4);
const transformer = new TransformStream({
async transform(videoFrame, controller) {
const startTs = performance.now();
@x-labz
x-labz / fragment-shader.c
Last active February 2, 2022 13:51
Fragment shader
precision highp float;
uniform sampler2D u_image;
uniform sampler2D u_image_frame;
uniform vec2 u_resolution;
varying vec2 v_texCoord;
void main() {
float x_offset = mod( gl_FragCoord.y ,2.0 ) < 1.0 ? 0.5 : 0.0 ;
vec4 y4 = texture2D(u_image_frame, vec2 ( v_texCoord.x / 1.0 , v_texCoord.y / 1.5 ) ) ;
@x-labz
x-labz / webgl.js
Last active December 16, 2023 12:39
WebGL initialization
var glRef = {};
function loadImage(src) {
return new Promise((resolve, reject) => {
const img = new Image();
img.onload = () => {
resolve(img);
};
img.src = src;
});
@x-labz
x-labz / vertex-shader.c
Created February 2, 2022 09:52
vertex-shader
attribute vec2 a_position;
attribute vec2 a_texCoord;
uniform vec2 u_resolution;
varying vec2 v_texCoord;
void main() {
gl_Position = vec4(( (a_position / u_resolution * 2.0) - 1.0) * vec2(1, -1), 0, 1);
v_texCoord = a_texCoord;
}
@x-labz
x-labz / init-wasm.js
Last active January 12, 2022 16:20
WASM binding
const WASM_FILE = "./main.wasm";
const W = 640;
const H = 360;
let mem_in, mem_out;
let mem_bg_img;
let instance = null;
let memoryStates = new WeakMap();
@x-labz
x-labz / frame-transformer.c
Last active January 12, 2022 15:45
frame transformer for wasm
#include <stdbool.h>
#include <stdint.h>
#include <stdlib.h>
#define WASM_EXPORT __attribute__((visibility("default")))
uint16_t w; // frame width
uint16_t h ; // frame height
uint8_t * input_buffer;
uint8_t * out_buffer;
@x-labz
x-labz / frame-transformer-js-wasm.js
Last active August 26, 2023 00:57
frame transformer with wasm
const W = 640; // video frame width
const H = 360; // video frame height
const pixelData = await imageLoader("./seaside.png"); // get the pixel data of the backgroung image in RGBA format
const buffer = new Uint8Array(W * H * 1.5); // byte buffer for the incoming frame in YUV 422 format
const bufferRGB = new Uint8Array(W * H * 4); // byte buffer for the result frame in RGBA format
const transformer = new TransformStream({
async transform(videoFrame, controller) {
const copyResult = await videoFrame.copyTo(buffer);
@x-labz
x-labz / frame-copy-result.js
Created January 12, 2022 13:23
frame-copyResult
[
{offset: 0, stride: 640},
{offset: 921600, stride: 320},
{offset: 1152000, stride: 320}
]