npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@signageos/samsung-wasm-decoder

v0.0.0

Published

Drop-in (mostly) API-compatible implementation of `nacl-decoder`, but using Samsung's WASM EMSS (ElementaryMediaStreamSource) + a `<video>` element.

Readme

samsung-wasm-decoder

Drop-in (mostly) API-compatible implementation of nacl-decoder, but using Samsung's WASM EMSS (ElementaryMediaStreamSource) + a <video> element.

JS/TS API

This package exports the same symbols as nacl-decoder:

  • createNaClDecoder() (creates a WASM-backed decoder)
  • isNaClSupported() (checks WebAssembly + Samsung EMSS bindings)
  • NaClDecoder (class)
  • VideoDecoder, VideoProfile, HWAcceleration, ResultStatus

Rendering happens via a <video> element (default id: video-element).

Expected runtime

The TS wrapper expects an Emscripten module instance available as:

  • globalThis.SamsungWasmDecoderModule

The native module must export the C functions declared in native/decoder.cpp.

Build (native / emscripten CLI)

This project is intended to be built with Samsung-customized Emscripten SDK (the one that provides Tizen WebAssembly extensions). The upstream emsdk typically will not have the samsung/* headers and EMSS runtime.

If you only need a local emcc toolchain on your dev machine, native/Makefile also includes an optional upstream emsdk bootstrap (downloaded into ./emscripten/). This is useful to get emcc into PATH, but it still won’t provide Samsung’s EMSS headers unless you use Samsung’s customized SDK.

Prerequisites

  • Samsung customized Emscripten SDK installed and activated (so emcc is on PATH).
  • A shell session where the SDK env is loaded (often via source /path/to/emsdk_env.sh).

Compile

cd /mnt/data/home/misak113/dev/supraio/samsung-wasm-decoder/native

# If your Samsung emsdk isn't already active:
source /path/to/samsung-emsdk/emsdk_env.sh

make clean
make

Bootstrap emcc locally (optional)

If you don’t have emcc available, you can bootstrap an upstream emsdk into this repo:

cd /mnt/data/home/misak113/dev/supraio/samsung-wasm-decoder/native

make emsdk
make all-emsdk

This downloads emsdk into samsung-wasm-decoder/emscripten/emsdk and builds in a subshell that sources emsdk_env.sh.

Outputs:

  • native/dist/samsung_wasm_decoder.js
  • native/dist/samsung_wasm_decoder.wasm

Build flags (why they matter)

The native/Makefile uses the same required flags described in Samsung’s WebAssemblyDemos EMSS samples:

  • -s ENVIRONMENT_MAY_BE_TIZEN (enables Samsung Tizen Emscripten extensions; required for EMSS)
  • -pthread -s USE_PTHREADS=1 -s PTHREAD_POOL_SIZE=1 (EMSS samples use threads; pool size must be >= threads you create)

If headers/libs aren’t found

If your SDK does not expose the Samsung extension headers on default include paths, pass extra include/link flags:

make EXTRA_CFLAGS='-I/path/to/samsung/extensions/include' \
		 EXTRA_LDFLAGS='-L/path/to/samsung/extensions/lib'

Runtime loading

The native build is modularized (-s MODULARIZE=1 -s EXPORT_NAME=SamsungWasmDecoderModule). That means native/dist/samsung_wasm_decoder.js defines a factory function.

You must instantiate it and assign the resulting module instance to globalThis.SamsungWasmDecoderModule before calling createNaClDecoder():

// Option A: include the generated JS via <script> and then:
globalThis.SamsungWasmDecoderModule = await SamsungWasmDecoderModule({});

// Option B: if you bundle/pack it, ensure the factory is reachable and do the same.

After that:

import { createNaClDecoder, VideoProfile, HWAcceleration } from 'samsung-wasm-decoder';

const decoder = createNaClDecoder({ videoElementId: 'video-element' });
await decoder.initialize({
	graphics3DContext: { width: 1920, height: 1080 },
	profile: VideoProfile.H264High,
	acceleration: HWAcceleration.WithFallback,
	minPictureCount: 4,
});

// Feed Annex-B H264 access units:
await decoder.decode({ decodeId: 0, data: someNalAccessUnitArrayBuffer });

Notes

  • Input to decode() / decodeAndRender() is expected to be H264 NAL access-unit bytes (commonly Annex-B). Keyframe detection is best-effort (IDR NAL type 5).
  • getPicture() / render() / recyclePicture() are compatibility shims; for display use decoder.videoElement.