カスタム Electron をビルドしてみた備忘録

Environment
Photo by hyt.

カスタム Electron をビルドしてみた備忘録です.

React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...

カスタム Electron をビルドって?

最近使い始めた Wave Terminal ですが,

$ wsh open test.mp4

のようにするだけで,ターミナル内で動画を再生できます.また,macOS, Windows, Linux と環境を問わず使えるのですが,macOS と Windows だと x265(HEVC とも言うらしい)の動画を再生できるのに,なぜか Linux だとできません.

Wave Terminal で Prezto を使う備忘録
Wave Terminal で Prezto を使う備忘録です.Wave Terminal は zsh に対応しているのですが,デフォルトだと Prezto が起動時に読み込まれません.いったん起動したあと,再度 zsh を Wave Te...

少し調べると Wave Terminal では,デスクトップアプリケーションフレームワーク Electron が使われていて,Electron は Chromium がベースになっていて,Chromium は HEVC の再生機能が省かれている(最新版ならハードウェアデコードはサポートされているらしい)ことが分かりました.

また,

GitHub - StaZhu/enable-chromium-hevc-hardware-decoding: A guide that teach you enable hardware HEVC decoding & encoding for Chrome / Edge, or build a custom version of Chromium / Electron that supports hardware & software HEVC decoding and hardware HEVC encoding.
A guide that teach you enable hardware HEVC decoding & encoding for Chrome / Edge, or build a custom version of Chromium...

を見ると,HEVC のソフトウェアデコードのパッチがあり,いまのところきちんとメインテナンスもされているようだったので,試しに最新版の Electron にこのパッチをあてたものを作成してみようかな,と思った訳ですね.

なお,結論から言えば,

止めときゃ良かった

とちょっと後悔しています.ものすごく時間がかかるだけじゃなくて,結構たくさん修正しないといけなくて,すごく面倒です.当たり前ですがこれで終わりじゃありませんしね.Wave Terminal もビルドし直さないといけないですからね.

しかし,せっかくやってみたので以下備忘録として方法を記しておきます.

React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...

準備

ビルドマシンの準備

まず,ビルド専用の端末(マシン)を使います.手元にあるノートPCとかでも可能でですが,止めといた方が良いです.もちろん適当な仮想マシンでも良いと思います.

理由は,

  1. ソースコードだけで 130Gbyte 程度ダウンロードが必要で,
  2. ビルド専用の環境を準備しないといけないですし,
  3. ものすごく時間がかかる

からです.

私の場合は少し古いですが,すでに使わなくなって放置してあった,

  • CPU: Intel Xeon E3-1225 v3(4コア4スレッド)
  • Memory: 16GByte
  • Storage: 1TByte

のマシンに Ubuntu 24.04 Server を入れ,これに

  • podman(環境を汚さないため)
  • tmux(スリープ対策)

をインストールしました.このマシンを ssh で遠隔操作してビルドを実行します.

docker から podman 雑感と備忘録
docker から podman 雑感と備忘録です.結論から記すと,とても良いです.私の使い方だと docker と使い勝手ほぼ変わりません.あと cockpit-podman が使いやすくて Good !です.podman ってなに?po...
Amazon.co.jp: GMKtec ミニPC G11初登場 AMD Ryzen Embedded R2514搭載 16GB DDR4+256GB SSD動作より安定 最大3.7GHz|4K×3画面出力・2.5GLAN HDMI 2.1/Type-C・Win11 Pro Mini PC USB3.2×4 企業・学習向け 超小型 高性能 (16GB+256GB) : パソコン・周辺機器
Amazon.co.jp: GMKtec ミニPC G11初登場 AMD Ryzen Embedded R2514搭載 16GB DDR4+256GB SSD動作より安定 最大3.7GHz|4K×3画面出力・2.5GLAN HDMI 2.1...

ビルド用コンテナの準備

ベースマシンの Ubuntu 24.04 の環境を壊さないように実際のビルドはさらにそれ専用のコンテナを使います.また,ベースマシンのホームディレクトリで,

$ mkdir ~/src

として,Electron のソースコード等はこのフォルダ以下にダウンロードすることにしました.Dockerfile 等を準備して以下の作業を自動化するのもそれほど難しいことではありませんが,今回は面倒だったのでそこまではしていません.

まず,tmux を起動しておきます(PCのスリープ対策等のため).

$ cd ~/src
$ tmux

次に,

$ podman run -it -v $(pwd):/src ubuntu:24.04 bash

でビルドを実行するコンテナを起動します.すると,

root@595bd1818b6a:~#

のようにコンテナのプロンプトが表示されます(595bd1818b6a はビルド用に起動したコンテナの ID です)./src にベースマシンの ~/src がマウントされています.

次は,コンテナに必要なパッケージを追加します.最新版の git を導入するため PPA を追加していることにご注意ください.また,パッケージの導入途中で systemd-network 等にエラーが表示されますが,これは無視して構いません.また Timezone を尋ねられますが,これも適当に設定してOKです(通常は Asia/Tokyo に設定だと思います).

root@595bd1818b6a:/# apt update;apt install software-properties-common -y
root@595bd1818b6a:/# add-apt-repository ppa:git-core/ppa # 途中 ENTER を入力
root@595bd1818b6a:/# apt install build-essential clang libdbus-1-dev libgtk-3-dev \
                       libnotify-dev libasound2-dev libcap-dev \
                       libcups2-dev libxtst-dev \
                       libxss1 libnss3-dev gcc-multilib g++-multilib curl \
                       gperf bison python3-dbusmock openjdk-8-jre \
                       git npm htop vim -y

必要なパッケージを導入したら,次は,現時点の最新安定版の node(node 24)を導入します.node 24 を導入し終えたら,Ubuntu 24.04 標準の node 18 を念の為削除します.

root@595bd1818b6a:/# npm install n -g
root@595bd1818b6a:/# n stable
root@595bd1818b6a:/# apt purge -y nodejs npm;apt autoremove -y

また,念のため,git と node の ver. を確認しておきます.

root@595bd1818b6a:/# git -v
git version 2.52.0

root@595bd1818b6a:/# node -v
v24.12.0

root@595bd1818b6a:/# npm -v
11.6.2

なお,間違えてコンテナを終了させてしまった場合は以下のような感じで再起動と再接続を行えます.

root@595bd1818b6a:/# exit
$ podman ps -a
CONTAINER ID  IMAGE                           COMMAND     CREATED            STATUS                         PORTS       NAMES
595bd1818b6a  docker.io/library/ubuntu:24.04  bash        About an hour ago  Exited (0) About a minute ago              charming_einstein
$ podman start 595bd1818b6a
$ podman ps
CONTAINER ID  IMAGE                           COMMAND     CREATED            STATUS         PORTS       NAMES
595bd1818b6a  docker.io/library/ubuntu:24.04  bash        About an hour ago  Up 11 seconds              charming_einstein
$ podman exec -it 595bd1818b6a bash
root@595bd1818b6a:/# npm -v
11.6.2
Amazon.co.jp: Docker実践ガイド 第3版 (impress top gear) : 古賀 政純: 本
Amazon.co.jp: Docker実践ガイド 第3版 (impress top gear) : 古賀 政純: 本

Electron のビルド

基本的に公式の案内に従います.公式の Linux でのビルド手順の解説は以下に載せられています.

ビルド手順 | Electron
カスタム Electron バイナリの作成にあたって **Electron そのもの** をビルドするには、以下のガイドラインに従ってください。 アプリのコードをビルド済み Electron バイナリにバンドルして頒布する場合は、アプリケー...
React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...

depot_tools のインストール

Chromium とその依存関係のダウンロードのため,depot_tools をインストールしておきます.

root@595bd1818b6a:~# cd /src
root@595bd1818b6a:/src# git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
root@595bd1818b6a:/src# export PATH=/src/depot_tools:$PATH
root@595bd1818b6a:/src# git config --global user.name "hyt adversaria"
root@595bd1818b6a:/src# git config --global user.email "[email protected]"
root@595bd1818b6a:/src# git config --global core.autocrlf false
root@595bd1818b6a:/src# git config --global core.filemode false
root@595bd1818b6a:/src# git config --global color.ui true

コンテナ内のどのディレクトリでコマンドを入力しているのかを

root@595bd1818b6a:/src#

のように示していることにご注意ください.

React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...

コードを取得

Electron のソースコードを取得します.

root@595bd1818b6a:/src# mkdir electron-gn && cd electron-gn
root@595bd1818b6a:/src/electron-gn# gclient config --name "src/electron" --unmanaged https://github.com/electron/electron
WARNING: Your metrics.cfg file was invalid or nonexistent. A new one will be created.
root@595bd1818b6a:/src/electron-gn# gclient sync --with_branch_heads --with_tags

公式のドキュメントに,

これはしばらくかかります。コーヒーでも飲みに行きましょう。

と記されていますが,コーヒーのみに行くどころじゃないです.少なく見積もっても半日程度かかりました.また,ダウンロードするソースコードの容量も約 130Gbyte と膨大です.途中スリープで接続を切断される等に備えて,ターミナルをデタッチしておくと良いと思います(tmux をこのために最初に導入しておいた.なお,tmux のデタッチは,CTRL+b のあとに CTRL+d です).

デタッチしておけば,ssh を切断しても処理は続行されますし,復帰(アタッチ)も,

$ tmux a

で簡単にできます.top もしくは htop でプロセスを表示させればダウンロードが終了したかどうかすぐに分かります.

React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...

将来に備える

将来公式の electron リポジトリから git pull する可能性がある場合のみ以下を実行しておく必要があるようなのです.

root@595bd1818b6a:/src/electron-gn# cd src/electron
root@595bd1818b6a:/src/electron-gn/src/electron# git remote remove origin
root@595bd1818b6a:/src/electron-gn/src/electron# git remote add origin https://github.com/electron/electron
root@595bd1818b6a:/src/electron-gn/src/electron# git checkout main
root@595bd1818b6a:/src/electron-gn/src/electron# git branch --set-upstream-to=origin/main
root@595bd1818b6a:/src/electron-gn/src/electron# cd -
React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...

Electron の依存関係の解決

Electron の依存関係を解決しておきます.Electron の ver. を指定する場合は(本稿執筆時点だと最新安定版は v39.2.7)以下を実行します.

root@595bd1818b6a:/src/electron-gn# cd src/electron
root@595bd1818b6a:/src/electron-gn/src/electron# git checkout v39.2.7
root@595bd1818b6a:/src/electron-gn/src/electron# git pull
root@595bd1818b6a:/src/electron-gn/src/electron# gclient sync -f
root@595bd1818b6a:/src/electron-gn/src/electron# cd -

リリース情報については,

GitHub - electron/electron: :electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS
:electron: Build cross-platform desktop apps with JavaScript, HTML, and CSS - electron/electron

をご覧ください.最新版の場合は,git checktou v39.2.7 の実行は不要です.

React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...

パッチの適用

HEVC と Widevine に対応させるために,以下のパッチを適用します.ただし,Electron は ver. 40 でかなり HEVC のサポートが拡充されているようなので,わざわざ苦労してパッチを当てる必要がないのかもしれないです(細かくは調べてないのでよく分かってません).

GitHub - StaZhu/enable-chromium-hevc-hardware-decoding: A guide that teach you enable hardware HEVC decoding & encoding for Chrome / Edge, or build a custom version of Chromium / Electron that supports hardware & software HEVC decoding and hardware HEVC encoding.
A guide that teach you enable hardware HEVC decoding & encoding for Chrome / Edge, or build a custom version of Chromium...

まず,patch を取得します.

root@595bd1818b6a:/src/electron-gn# git clone https://github.com/StaZhu/enable-chromium-hevc-hardware-decoding.git

ただし,このまま適用しても途中で失敗するので,以下のパッチのパッチを作成し,

root@595bd1818b6a:/src/electron-gn# cd enable-chromium-hevc-hardware-decoding/
root@595bd1818b6a:/src/electron-gn/enable-chromium-hevc-hardware-decoding# vi add-hevc-ffmpeg-decoder-parser.patch.patch
diff --git a/add-hevc-ffmpeg-decoder-parser.patch b/add-hevc-ffmpeg-decoder-parser.patch
index ce2b106..9d05a78 100644
--- a/add-hevc-ffmpeg-decoder-parser.patch
+++ b/add-hevc-ffmpeg-decoder-parser.patch
@@ -2763,7 +2763,7 @@ diff --git a/ffmpeg_generated.gni b/ffmpeg_generated.gni
 index a9d7ad8fad..46eb6b3c35 100644
 --- a/ffmpeg_generated.gni
 +++ b/ffmpeg_generated.gni
-@@ -226,6 +226,27 @@ if (((current_cpu == "arm64" || current_cpu == "arm64e") &&
+@@ -288,6 +288,27 @@
      (is_apple && ffmpeg_branding == "Chrome") ||
      (is_win && ffmpeg_branding == "Chrome") ||
      (use_linux_config && ffmpeg_branding == "Chrome")) {
@@ -2791,8 +2791,33 @@ index a9d7ad8fad..46eb6b3c35 100644
    ffmpeg_c_sources += [
      "libavcodec/atsc_a53.c",
      "libavcodec/autorename_libavcodec_videodsp.c",
-@@ -343,6 +364,19 @@ if (use_linux_config && current_cpu == "riscv64" &&
- 
+@@ -323,6 +344,24 @@
+ if ((current_cpu == "x64" && ffmpeg_branding == "Chrome") ||
+     (is_win && current_cpu == "x86" && ffmpeg_branding == "Chrome") ||
+     (use_linux_config && current_cpu == "x86" && ffmpeg_branding == "Chrome")) {
++
++  ffmpeg_c_sources += [
++    "libavcodec/x86/bswapdsp_init.c",
++    "libavcodec/x86/hevc/dsp_init.c",
++    "libavcodec/x86/h26x/h2656dsp.c"
++  ]
++
++  ffmpeg_asm_sources += [
++    "libavcodec/x86/bswapdsp.asm",
++    "libavcodec/x86/hevc/add_res.asm",
++    "libavcodec/x86/hevc/deblock.asm",
++    "libavcodec/x86/hevc/idct.asm",
++    "libavcodec/x86/hevc/mc.asm",
++    "libavcodec/x86/hevc/sao.asm",
++    "libavcodec/x86/hevc/sao_10bit.asm",
++    "libavcodec/x86/h26x/h2656_inter.asm"
++  ]
++
+   ffmpeg_c_sources += [
+     "libavcodec/x86/autorename_libavcodec_x86_aacpsdsp_init.c",
+     "libavcodec/x86/autorename_libavcodec_x86_h264dsp_init.c",
+@@ -442,6 +481,19 @@
+
  if ((current_cpu == "arm64" || current_cpu == "arm64e") &&
      ffmpeg_branding == "Chrome") {
 +
@@ -2810,8 +2835,8 @@ index a9d7ad8fad..46eb6b3c35 100644
 +
    ffmpeg_c_sources += [
      "libavcodec/aarch64/aacpsdsp_init_aarch64.c",
-     "libavcodec/aarch64/autorename_libavcodec_aarch64_videodsp_init.c",
-@@ -458,6 +492,11 @@ if ((is_android && current_cpu == "arm" && arm_use_neon) ||
+     "libavcodec/aarch64/h264chroma_init_aarch64.c",
+@@ -521,6 +573,11 @@
  if ((use_linux_config && current_cpu == "arm" && arm_use_neon &&
       ffmpeg_branding == "Chrome") ||
      (use_linux_config && current_cpu == "arm" && ffmpeg_branding == "Chrome")) {
@@ -2823,33 +2848,8 @@ index a9d7ad8fad..46eb6b3c35 100644
    ffmpeg_c_sources += [
      "libavcodec/arm/h264chroma_init_arm.c",
      "libavcodec/arm/h264dsp_init_arm.c",
-@@ -476,6 +515,24 @@ if ((current_cpu == "x64" && ffmpeg_branding == "Chrome") ||
-     (is_android && current_cpu == "x86" && ffmpeg_branding == "Chrome") ||
-     (is_win && current_cpu == "x86" && ffmpeg_branding == "Chrome") ||
-     (use_linux_config && current_cpu == "x86" && ffmpeg_branding == "Chrome")) {
-+
-+  ffmpeg_c_sources += [
-+    "libavcodec/x86/bswapdsp_init.c",
-+    "libavcodec/x86/hevc/dsp_init.c",
-+    "libavcodec/x86/h26x/h2656dsp.c"
-+  ]
-+
-+  ffmpeg_asm_sources += [
-+    "libavcodec/x86/bswapdsp.asm",
-+    "libavcodec/x86/hevc/add_res.asm",
-+    "libavcodec/x86/hevc/deblock.asm",
-+    "libavcodec/x86/hevc/idct.asm",
-+    "libavcodec/x86/hevc/mc.asm",
-+    "libavcodec/x86/hevc/sao.asm",
-+    "libavcodec/x86/hevc/sao_10bit.asm",
-+    "libavcodec/x86/h26x/h2656_inter.asm"
-+  ]
-+
-   ffmpeg_c_sources += [
-     "libavcodec/x86/aacpsdsp_init.c",
-     "libavcodec/x86/h264_intrapred_init.c",
-@@ -489,6 +546,18 @@ if ((current_cpu == "x64" && ffmpeg_branding == "Chrome") ||
- 
+@@ -537,6 +594,18 @@
+
  if (use_linux_config && current_cpu == "arm" && arm_use_neon &&
      ffmpeg_branding == "Chrome") {
+

このパッチをパッチファイルに適用します.

root@595bd1818b6a:/src/electron-gn/enable-chromium-hevc-hardware-decoding# git am add-hevc-ffmpeg-decoder-parser.patch.patch

改変したパッチを以下のように適用します.

root@595bd1818b6a:/src/electron-gn/enable-chromium-hevc-hardware-decoding# cd ../src/third_party/ffmpeg
root@595bd1818b6a:/src/electron-gn/src/third_party/ffmpeg# git am ../../../enable-chromium-hevc-hardware-decoding/add-hevc-ffmpeg-decoder-parser.patch
root@595bd1818b6a:/src/electron-gn/src/third_party/ffmpeg# cd ../..
root@595bd1818b6a:/src/electron-gn/src# git am ../enable-chromium-hevc-hardware-decoding/enable-hevc-ffmpeg-decoding.patch
root@595bd1818b6a:/src/electron-gn/src# cp -R ../enable-chromium-hevc-hardware-decoding/widevine/* third_party/widevine/cdm
インプレス標準教科書シリーズ H.265/HEVC教科書
H.264/AVCの2倍の圧縮率を実現した次世代の画像圧縮技術を徹底解説! 本書は、最新の動画像圧縮符号化標準「H.265/HEVC」の解説書です。 この標準は正式にはITU-T H.265|ISO/IEC 23008-2と表記され、その題...

Electron のビルド

環境変数の設定

まず,CHROMIUM BUILD TOOLS 環境変数をセットします.

root@595bd1818b6a:/src/electron-gn/src# export CHROMIUM_BUILDTOOLS_PATH=`pwd`/buildtools
React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...

Release ビルド設定

次に Electron の release ビルド設定を以下のように生成します.

root@595bd1818b6a:/src/electron-gn/src# gn gen out/Release --args="import(\"//electron/build/args/release.gn\")"
React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...

ビルドエラーへの対応

ビルドは ninja を使うのですが,このままだと途中でエラーが出るので,対応する部分を修正しておきます(エラーが出る都度修正しても良いと思います).修正内容は以下の通りです.

  1. third_party/node/linux/node-linux-x64/bin/node に実行権限を追加
  2. third_party/ffmpeg/libavcodec/hevc 以下にある C のソースのインクルードファイルの在処の一部を親ディレクトリに修正

third_party/node/linux/node-linux-x64/bin/node の実行権限の修正

third_party/node/linux/node-linux-x64/bin/node の実行権限の修正は,

root@595bd1818b6a:/src/electron-gn/src# chmod +x third_party/node/linux/node-linux-x64/bin/node

とするだけです.

third_party/ffmpeg/libavcodec/hevc 以下の修正

third_party/ffmpeg/libavcodec/hevc 以下の修正内容は以下の通りです.単にインクルードファイルをひとつ上の親ディレクトリから読み込むだけの変更なのですが,書き換え箇所が多いので,以下の内容のパッチファイルを作成して git am で適用するのが早いと思います.

root@595bd1818b6a:/src/electron-gn/src/third_party/ffmpeg/libavcodec/hevc# git diff .
diff --git a/libavcodec/hevc/cabac.c b/libavcodec/hevc/cabac.c
index 55d5741f87..a276681925 100644
--- a/libavcodec/hevc/cabac.c
+++ b/libavcodec/hevc/cabac.c
@@ -24,7 +24,7 @@
 #include "libavutil/attributes.h"
 #include "libavutil/common.h"
 
-#include "cabac_functions.h"
+#include "../cabac_functions.h"
 #include "data.h"
 #include "hevc.h"
 #include "hevcdec.h"
diff --git a/libavcodec/hevc/dsp_template.c b/libavcodec/hevc/dsp_template.c
index a0f79c2673..4c90f0ba3f 100644
--- a/libavcodec/hevc/dsp_template.c
+++ b/libavcodec/hevc/dsp_template.c
@@ -20,13 +20,13 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "get_bits.h"
+#include "../get_bits.h"
 #include "hevcdec.h"
 
-#include "bit_depth_template.c"
+#include "../bit_depth_template.c"
 #include "dsp.h"
-#include "h26x/h2656_sao_template.c"
-#include "h26x/h2656_inter_template.c"
+#include "../h26x/h2656_sao_template.c"
+#include "../h26x/h2656_inter_template.c"
 
 static void FUNC(put_pcm)(uint8_t *_dst, ptrdiff_t stride, int width, int height,
                           GetBitContext *gb, int pcm_bit_depth)
@@ -817,7 +817,7 @@ static void FUNC(put_hevc_epel_bi_w_hv)(uint8_t *_dst, ptrdiff_t _dststride,
 #define TQ2 pix[2  * xstride + 3 * ystride]
 #define TQ3 pix[3  * xstride + 3 * ystride]
 
-#include "h26x/h2656_deblock_template.c"
+#include "../h26x/h2656_deblock_template.c"
 
 static void FUNC(hevc_loop_filter_luma)(uint8_t *_pix,
                                         ptrdiff_t _xstride, ptrdiff_t _ystride,
diff --git a/libavcodec/hevc/filter.c b/libavcodec/hevc/filter.c
index 68ae0e9ef6..7195b08b42 100644
--- a/libavcodec/hevc/filter.c
+++ b/libavcodec/hevc/filter.c
@@ -26,7 +26,7 @@
 #include "libavutil/internal.h"
 
 #include "hevcdec.h"
-#include "progressframe.h"
+#include "../progressframe.h"
 
 #define LUMA 0
 #define CB 1
diff --git a/libavcodec/hevc/hevcdec.c b/libavcodec/hevc/hevcdec.c
index 7be175a1eb..2884382f46 100644
--- a/libavcodec/hevc/hevcdec.c
+++ b/libavcodec/hevc/hevcdec.c
@@ -39,24 +39,24 @@
 #include "libavutil/tdrdi.h"
 #include "libavutil/timecode.h"
 
-#include "aom_film_grain.h"
-#include "bswapdsp.h"
-#include "cabac_functions.h"
-#include "codec_internal.h"
-#include "decode.h"
-#include "golomb.h"
-#include "h274.h"
+#include "../aom_film_grain.h"
+#include "../bswapdsp.h"
+#include "../cabac_functions.h"
+#include "../codec_internal.h"
+#include "../decode.h"
+#include "../golomb.h"
+#include "../h274.h"
 #include "hevc.h"
 #include "parse.h"
 #include "hevcdec.h"
-#include "hwaccel_internal.h"
-#include "hwconfig.h"
-#include "internal.h"
-#include "profiles.h"
-#include "progressframe.h"
+#include "../hwaccel_internal.h"
+#include "../hwconfig.h"
+#include "../internal.h"
+#include "../profiles.h"
+#include "../progressframe.h"
 #include "libavutil/refstruct.h"
-#include "thread.h"
-#include "threadprogress.h"
+#include "../thread.h"
+#include "../threadprogress.h"
 
 static const uint8_t hevc_pel_weight[65] = { [2] = 0, [4] = 1, [6] = 2, [8] = 3, [12] = 4, [16] = 5, [24] = 6, [32] = 7, [48] = 8, [64] = 9 };
 
diff --git a/libavcodec/hevc/mvs.c b/libavcodec/hevc/mvs.c
index 55f115ad0c..9f6de98347 100644
--- a/libavcodec/hevc/mvs.c
+++ b/libavcodec/hevc/mvs.c
@@ -23,7 +23,7 @@
 
 #include "hevc.h"
 #include "hevcdec.h"
-#include "progressframe.h"
+#include "../progressframe.h"
 
 static const uint8_t l0_l1_cand_idx[12][2] = {
     { 0, 1, },
diff --git a/libavcodec/hevc/parse.c b/libavcodec/hevc/parse.c
index 29f21a5966..cb7c946d06 100644
--- a/libavcodec/hevc/parse.c
+++ b/libavcodec/hevc/parse.c
@@ -16,8 +16,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "bytestream.h"
-#include "h2645_parse.h"
+#include "../bytestream.h"
+#include "../h2645_parse.h"
 #include "hevc.h"
 #include "parse.h"
 
diff --git a/libavcodec/hevc/parser.c b/libavcodec/hevc/parser.c
index 62bcd91172..e9d02b0c7a 100644
--- a/libavcodec/hevc/parser.c
+++ b/libavcodec/hevc/parser.c
@@ -23,14 +23,14 @@
 #include "libavutil/common.h"
 #include "libavutil/mem.h"
 
-#include "golomb.h"
+#include "../golomb.h"
 #include "hevc.h"
-#include "parser_internal.h"
+#include "../parser_internal.h"
 #include "parse.h"
 #include "ps.h"
 #include "sei.h"
-#include "h2645_parse.h"
-#include "parser.h"
+#include "../h2645_parse.h"
+#include "../parser.h"
 
 #define START_CODE 0x000001 ///< start_code_prefix_one_3bytes
 
diff --git a/libavcodec/hevc/pred_template.c b/libavcodec/hevc/pred_template.c
index b4c2fcf506..07eb849540 100644
--- a/libavcodec/hevc/pred_template.c
+++ b/libavcodec/hevc/pred_template.c
@@ -22,7 +22,7 @@
 
 #include "libavutil/pixdesc.h"
 
-#include "bit_depth_template.c"
+#include "../bit_depth_template.c"
 #include "pred.h"
 
 #define POS(x, y) src[(x) + stride * (y)]
diff --git a/libavcodec/hevc/ps.c b/libavcodec/hevc/ps.c
index 7b9dbbcff8..3089c891b5 100644
--- a/libavcodec/hevc/ps.c
+++ b/libavcodec/hevc/ps.c
@@ -25,11 +25,11 @@
 
 #include "libavutil/imgutils.h"
 #include "libavutil/mem.h"
-#include "golomb.h"
-#include "h2645_vui.h"
+#include "../golomb.h"
+#include "../h2645_vui.h"
 #include "data.h"
 #include "ps.h"
-#include "profiles.h"
+#include "../profiles.h"
 #include "libavutil/refstruct.h"
 
 static const uint8_t default_scaling_list_intra[] = {
diff --git a/libavcodec/hevc/refs.c b/libavcodec/hevc/refs.c
index ccf7258ec4..f31bc9f149 100644
--- a/libavcodec/hevc/refs.c
+++ b/libavcodec/hevc/refs.c
@@ -25,11 +25,11 @@
 #include "libavutil/mem.h"
 #include "libavutil/stereo3d.h"
 
-#include "decode.h"
+#include "../decode.h"
 #include "hevc.h"
 #include "hevcdec.h"
-#include "progressframe.h"
-#include "thread.h"
+#include "../progressframe.h"
+#include "../thread.h"
 #include "libavutil/refstruct.h"
 
 void ff_hevc_unref_frame(HEVCFrame *frame, int flags)
diff --git a/libavcodec/hevc/sei.c b/libavcodec/hevc/sei.c
index 5fd4e763b3..466520db4c 100644
--- a/libavcodec/hevc/sei.c
+++ b/libavcodec/hevc/sei.c
@@ -22,8 +22,8 @@
  * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
  */
 
-#include "bytestream.h"
-#include "golomb.h"
+#include "../bytestream.h"
+#include "../golomb.h"
 #include "ps.h"
 #include "sei.h"
React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...

ninja でのビルド

修正後,ninja でビルドを開始します.

root@595bd1818b6a:/src/electron-gn/src# ninja -C out/Release electron

もちろんビルドが終わるまでにかなりの時間がかかります(ninja の表示だと約 45000 ステップほどあるらしい).

最後に zip ファイルにまとめます.

root@595bd1818b6a:/src/electron-gn/src# ninja -C out/Release electron:electron_dist_zip

これは5分くらいでしょうか.完了すると,~/src/electron-gn/src/out/Release 以下(コンテナ内だと /src/electron-gn/src/out/Release 以下)に dist.zip というファイル名で保存されます.お疲れ様でした.

ただし,最初の節に書きましたが,私の場合は Wave Terminal で HEVC ファイルが再生できるようにしたいので Electron をカスタムビルドしたのですから,まだこれでも道なかばです.しかし,いい加減記事としては長大になってしまったので,これについては別記事で紹介したいと思います.

以上!

React+Electronで作る デスクトップアプリ開発入門
「Electron」はWebページをデスクトップアプリにビルドして実行できるようにする技術です。「React」は世界的に人気のある「HTML5+JavaScript+CSS」のWebページを構築するためのフレームワークです。本書では「Rea...
タイトルとURLをコピーしました