# libde265（電腦版「HEVC 相容模式」用，SPEC_M63）

- 函式庫：**libde265 1.1.3**（https://github.com/strukturag/libde265 ，tag `v1.1.3`，commit `ba62bf4cfb3242f3bf0a45617ff09e35236e4d82`），
  授權 **GNU LGPL 3.0 或之後版本**（全文：同資料夾 `COPYING.txt`，內含 LGPL-3.0 與它引用的 GPL-3.0）。
- 用途：電腦版分析影片時，瀏覽器解不開 HEVC（H.265）影片才載入（`js/video/compat.js`、`js/video/compatworker.js`），
  在瀏覽器的 worker 裡解出畫面。不在 `sw.js` 的預先快取 CORE；第一次用到才下載，之後由 SW 的一般快取存著。
- 這裡的檔：
  - `libde265.wasm`、`libde265.js`：用 Emscripten 從上面的原始碼編出來的 WebAssembly 與載入程式。**libde265 本體一行沒改。**
  - `src/libde265-1.1.3-src.tar.gz`：上面那個 commit 的完整原始碼（對應原始碼，LGPL 要求）。
  - `src/libde265_glue.c`：Shot Ledger 加的膠水（把 libde265 的公開 C API 包成幾個整數參數的函式），同樣以 LGPL-3.0 或之後版本授權。
  - `src/build_libde265.mjs`：重建腳本（原始碼清單、編譯旗標、連結選項全部在裡面）。
  - 網站上的網址：`/js/vendor/libde265/`（例：`/js/vendor/libde265/src/libde265-1.1.3-src.tar.gz`）。

## 重建（換成你自己改過的 libde265 也可以）

```
# 1. 裝 Emscripten（這次用 emsdk 6.0.10）
git clone https://github.com/emscripten-core/emsdk && cd emsdk && ./emsdk install 6.0.10 && ./emsdk activate 6.0.10
# 2. 解開原始碼（或 git clone https://github.com/strukturag/libde265 並 checkout 上面的 commit）
tar xzf libde265-1.1.3-src.tar.gz
# 3. 編譯（產出 libde265.js＋libde265.wasm）
node build_libde265.mjs --emsdk <emsdk 資料夾> --src <libde265 原始碼資料夾>
```

把產出的兩個檔換掉網站上的同名檔就會用你的版本（網頁不檢查雜湊）。

同一版 emsdk、同一個 commit、同一組旗標建出來的檔（2026-10-07，Windows；v131 膠水加 `sl_img_i420p16`，給 10 位元 HDR 影片用）：

| 檔 | 大小 | SHA-256 |
|---|---|---|
| libde265.wasm | 450,701 bytes | `89f7a66b906a794a5f3aba18e0b8e3ee023e618618530059aa6195a1cd8d0ddd` |
| libde265.js | 12,823 bytes | `bc8561077cedfac8b27925d52db4083c5018df21709a5c4dd51c6aa8ca6304e7` |
| src/libde265-1.1.3-src.tar.gz | 480,967 bytes | `afbfa8611f23741d96c4baa6c462230d32405f47e93c7fbac325d1b7e8f4f146` |

emcc：`6.0.10 (d6c521a7f05449857c76bd99e396895583cf2083)`。旗標：`-O3 -flto -msimd128`（SSE4.1 版的函式由 Emscripten 轉成 WASM SIMD）、
單執行緒（不需要 SharedArrayBuffer／COOP／COEP）、`-sMODULARIZE -sEXPORT_ES6 -sENVIRONMENT=worker -sALLOW_MEMORY_GROWTH -sFILESYSTEM=0`。

## 已知

libde265 1.1.3 讀 VUI 時把 transfer_characteristics ≥ 18 當成沒寫（`libde265/vui.cc`），HLG（18）會讀成 2。
網站不改 libde265：串流沒寫的色彩欄位改用 mp4 容器（colr）寫的值補（`js/video/compat.js` 的 `colorSpaceOf`）。

## 專利

HEVC 技術有專利。網站只在使用者自己的電腦上、瀏覽器解不開時才用它解碼（只解碼、不編碼、不另外販售解碼器）。
這裡的 LGPL 授權只涵蓋著作權，不包含任何專利授權（libde265 本身也這樣聲明）。

（`src/libde265_glue.c`、`src/build_libde265.mjs` 在 repo 裡放在 `tools/`，部署時由 `tools/build_public.sh` 複製到這裡。）
