diff --git a/.github/renovate.json b/.github/renovate.json index 1a409f36..949faf64 100644 --- a/.github/renovate.json +++ b/.github/renovate.json @@ -10,4 +10,4 @@ "group:allNonMajor", "schedule:weekly" ] -} +} \ No newline at end of file diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index d2e21cff..55eaf87a 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -2,6 +2,12 @@ name: build on: pull_request: + paths-ignore: + - 'doc/**' + - '**.md' + - 'THANKS' + - 'LICENSE' + - 'NOTICE' push: branches: - main @@ -37,7 +43,7 @@ jobs: sudo rm -rf /var/lib/apt/lists/* env: DEBIAN_FRONTEND: noninteractive - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Get vars shell: bash id: vars @@ -93,13 +99,6 @@ jobs: restore-keys: ${{ matrix.os }}-ccache-dir- - name: Ccache stat run: ccache -s - - name: Cache ~/.cache/bazel directory - uses: actions/cache@v3 - with: - path: "~/.cache/bazel" - key: ${{ matrix.os }}-cache-bazel-dir - - name: Install numpy - run: pip install numpy - name: Build hisui run: ./build.bash ${{ matrix.os }} --package --use-ccache ${{ contains(matrix.os, '_x86_64') && '--with-test' || '' }} timeout-minutes: 120 @@ -126,12 +125,6 @@ jobs: name: ${{ matrix.os }}-hisui-binary-${{ steps.vars.outputs.sha_short }} path: release/${{ matrix.os }}/hisui if-no-files-found: error - - name: Upload Lyra model_coeffs with hash - uses: actions/upload-artifact@v3 - with: - name: ${{ matrix.os }}-lyra-model-coeffs - path: third_party/lyra/lyra/lyra/model_coeffs - if-no-files-found: error - name: Upload tarball uses: actions/upload-artifact@v3 with: @@ -160,7 +153,7 @@ jobs: - build-linux runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Mkdir release shell: bash run: | @@ -191,22 +184,6 @@ jobs: chmod 755 release/ubuntu-20.04_arm64/hisui chmod 755 release/ubuntu-22.04_x86_64/hisui chmod 755 release/ubuntu-22.04_arm64/hisui - - uses: actions/download-artifact@v3 - with: - name: ubuntu-20.04_x86_64-lyra-model-coeffs - path: release/ubuntu-20.04_x86_64/lyra/model_coeffs - - uses: actions/download-artifact@v3 - with: - name: ubuntu-20.04_arm64-lyra-model-coeffs - path: release/ubuntu-20.04_arm64/lyra/model_coeffs - - uses: actions/download-artifact@v3 - with: - name: ubuntu-22.04_x86_64-lyra-model-coeffs - path: release/ubuntu-22.04_x86_64/lyra/model_coeffs - - uses: actions/download-artifact@v3 - with: - name: ubuntu-22.04_arm64-lyra-model-coeffs - path: release/ubuntu-22.04_arm64/lyra/model_coeffs - name: Get Versions shell: bash id: versions @@ -256,7 +233,7 @@ jobs: - build-linux runs-on: ubuntu-20.04 steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/download with: platform: ubuntu-20.04_x86_64 diff --git a/.github/workflows/lint.yml b/.github/workflows/lint.yml index c3c1bf16..44cdaab5 100644 --- a/.github/workflows/lint.yml +++ b/.github/workflows/lint.yml @@ -34,7 +34,7 @@ jobs: pip3 install --user cpplint env: DEBIAN_FRONTEND: noninteractive - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Lint hisui run: PATH=$PATH:~/.local/bin:~/go/bin ./lint.bash timeout-minutes: 120 diff --git a/.gitignore b/.gitignore index dfe7ecf1..cf4b69f3 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,4 @@ /third_party/libvpx -/third_party/lyra/bazel-* -/third_party/lyra/lyra /third_party/SVT-AV1 /test/integration/input/caminandes3.webm /test/integration/input/lilac_blossom_bloom_spring.jpg diff --git a/CHANGES.md b/CHANGES.md index 49a84e7d..f17adb8b 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -1,207 +1,229 @@ # 変更履歴 - CHANGE - - 下位互換のない変更 + - 下位互換のない変更 - UPDATE - - 下位互換がある変更 + - 下位互換がある変更 - ADD - - 下位互換がある追加 + - 下位互換がある追加 - FIX - - バグ修正 + - バグ修正 ## develop +## 2024.1.0 + +**リリース日**: 2024-09-09 + +- [CHANGE] Lyra を Hisui から外し、 Lyra に関連するオプションやファイル、関数を削除する + - Lyra 関連のファイルを削除 + - third_party/lyra を削除 + - src/audio/lyra を削除 + - Lyra 関連のビルド設定を削除 + - build.yml から Lyra 関連の設定を削除 + - build.bash から Lyra 関連の設定を削除 + - Doockerfile から Lyra 関連の設定を削除 + - `lyra_model_path` オプションを削除 + - `LyraHandler` クラスを削除 + - NOTICE から Lyra 関連の記述を削除 + - Lyra のバージョン定義を削除 + - ドキュメントから Lyra 関連の記述を削除 + - @torikizi +- [CHANGE] ビルド時に Bazel のインストールを行わないようにする + - Lyra のために Bazel を利用していたので、関連して削除 + - @torikizi + ## 2023.2.1 - [FIX] docker image 生成を修正する - - @haruymaa + - @haruymaa ## 2023.2.0 - [UPDATE] 依存ライブラリの更新をする - - `boost` を `1.83.0` にあげる - - `cpp-mp4` を `2023.2.1` にあげる - - `opus` を `1.4` にあげる - - @haruyama -- [CHANGE] one VPL での H.264 エンコードに対応する - - @haruyama -- [CHANGE] Lyra の デコードに対応する - - @haruyama -- [CHANGE] SVT-AV1 での AV1 デコード/エンコードに対応する - - @haruyama -- [CHANGE] OpenH264 での エンコードに対応する - - `--out-video-codec` オプションに H.264 の指定を追加する - - 画面共有合成機能では H.264 はサポートされない - - H.264 のチューニングオプションを追加する (ヘルプオプションには Debug でのみ表示される) - - `--openh264-threads` : エンコード時のスレッド数を指定するオプション [ default 1] - - `--openh264-min-qp` : 最小量子化パラメータを指定するオプション [0 - 51] - - `--openh264-max-qp` : 最大量子化パラメータを指定するオプション [0 - 51] - - 現時点で発見されている課題 - - 合成した H.264 のファイルを再生時、シークバーを動かすと再生が止まる - - @haruyama -- [CHANGE] Hisui のオプションに `--version` を追加し、バージョン出力を追加する - - `Recording Composition Tool Hisui [バージョン]` で出力する - - @haruyama -- [CHANGE] ビルドオプションに `--build-type-debug` を追加し、デバッグビルドを追加する - - デバッグビルドを利用することで通常見えないオプションをヘルプオプションで見ることができるようになる - - @torikizi + - `boost` を `1.83.0` にあげる + - `cpp-mp4` を `2023.2.1` にあげる + - `opus` を `1.4` にあげる + - @haruyama +- [ADD] one VPL での H.264 エンコードに対応する + - @haruyama +- [ADD] Lyra の デコードに対応する + - @haruyama +- [ADD] SVT-AV1 での AV1 デコード/エンコードに対応する + - @haruyama +- [ADD] OpenH264 での エンコードに対応する + - `--out-video-codec` オプションに H.264 の指定を追加する + - 画面共有合成機能では H.264 はサポートされない + - H.264 のチューニングオプションを追加する (ヘルプオプションには Debug でのみ表示される) + - `--openh264-threads` : エンコード時のスレッド数を指定するオプション [ default 1] + - `--openh264-min-qp` : 最小量子化パラメータを指定するオプション [0 - 51] + - `--openh264-max-qp` : 最大量子化パラメータを指定するオプション [0 - 51] + - 現時点で発見されている課題 + - 合成した H.264 のファイルを再生時、シークバーを動かすと再生が止まる + - @haruyama +- [ADD] Hisui のオプションに `--version` を追加し、バージョン出力を追加する + - `Recording Composition Tool Hisui [バージョン]` で出力する + - @haruyama +- [ADD] ビルドオプションに `--build-type-debug` を追加し、デバッグビルドを追加する + - デバッグビルドを利用することで通常見えないオプションをヘルプオプションで見ることができるようになる + - @torikizi - [FIX] `misspell` パッケージのインストールを `go get -u` から `go install` を利用するよう変更する - - @haruyama + - @haruyama ## 2023.1.1 - [UPDATE] 依存ライブラリの `cpp-mp4` を `2023.1.1` にあげる - - @torikizi + - @torikizi - [FIX] ヘルプで表示される config の typo を修正する - - @torikizi + - @torikizi ## 2023.1.0 - [FIX] --out-audio-codec の説明が間違っているのを修正する - - @haruyama + - @haruyama - [CHANGE] tarball に "hisui-${HISUI_VERSION}" ディレクトリを含める - - @haruyama + - @haruyama - [UPDATE] 依存ライブラリの更新をする - - `boost` を `1.81.0` にあげる - - `CLI11` を `2.3.2` にあげる - - `fmt` を `9.1.0` にあげる - - `spdlog` を `1.11.0` にあげる - - `libvpx` を `v1.13.0` にあげる - - `cpp-mp4` を `2023.1.0` にあげる - - `stb` を `5736b15f7ea0ffb08dd38af21067c314d6a3aae9` にあげる - - @haruyama + - `boost` を `1.81.0` にあげる + - `CLI11` を `2.3.2` にあげる + - `fmt` を `9.1.0` にあげる + - `spdlog` を `1.11.0` にあげる + - `libvpx` を `v1.13.0` にあげる + - `cpp-mp4` を `2023.1.0` にあげる + - `stb` を `5736b15f7ea0ffb08dd38af21067c314d6a3aae9` にあげる + - @haruyama - [FIX] Hisui で合成した MP4 ファイルが再生環境によって再生できない問題を修正する - - Safari, Windows Media Player, 映画&テレビ での再生を修正する - - @haruyama + - Safari, Windows Media Player, 映画&テレビ での再生を修正する + - @haruyama - [CHANGE] レイアウトに `*` のみを指定した場合、全てのレイアウトを指定したものとして扱うよう修正する - - layout: レイアウト指定ファイル, report-*.json, *.webm は sources から常に除外する - - @haruyama + - layout: レイアウト指定ファイル, report-_.json, _.webm は sources から常に除外する + - @haruyama - [FIX] 例外と null 参照を修正する - - 一部のケースで core dump していたのを修正する - - @haruyama + - 一部のケースで core dump していたのを修正する + - @haruyama - [FIX] オーバーラップする間隔の検査時に start < end な間隔のみを利用する - - レイアウトを使用したとき start = end なファイルが生成されていた場合エラーになっていたので修正する - - @haruyama + - レイアウトを使用したとき start = end なファイルが生成されていた場合エラーになっていたので修正する + - @haruyama - [UPDATE] deprecated になった actions/create-release と actions/upload-release の利用をやめて softprops/action-gh-release を利用する - - @melpon + - @melpon - [UPDATE] GitHub Actions の各種バージョンを上げる - - @melpon + - @melpon - [ADD] Ubuntu 20.04 ARM64 ビルドに対応する - - @melpon + - @melpon - [ADD] Ubuntu 22.04 に対応する - - @melpon + - @melpon ## 2022.1.0 - [UPDATE] 依存ライブラリの更新をする - - `boost` を `1.78.0` にあげる - - `CLI11` を `2.1.2` にあげる - - `fmt` を `8.0.1` にあげる - - `spdlog` を `1.9.2` にあげる - - `rapidcsv` を `8.53` にあげる - - `libvpx` を `v.1.11.0` にあげる - - `cpp-mp4` を `2022.1.0` にあげる - - `stb` を `af1a5bc352164740c1cc1354942b1c6b72eacb8a` にあげる - - @haruyama + - `boost` を `1.78.0` にあげる + - `CLI11` を `2.1.2` にあげる + - `fmt` を `8.0.1` にあげる + - `spdlog` を `1.9.2` にあげる + - `rapidcsv` を `8.53` にあげる + - `libvpx` を `v.1.11.0` にあげる + - `cpp-mp4` を `2022.1.0` にあげる + - `stb` を `af1a5bc352164740c1cc1354942b1c6b72eacb8a` にあげる + - @haruyama - [CHANGE] Boost::JSON を header-only で利用する - - @haruyama + - @haruyama - [CHANGE] レイアウト機能を追加する - - `--layout` オプションを追加する - - JSON 形式で作成したレイアウトファイルを利用して自由に合成する機能を追加する - - @haruyama + - `--layout` オプションを追加する + - JSON 形式で作成したレイアウトファイルを利用して自由に合成する機能を追加する + - @haruyama ## 2021.3 - [ADD] [実験的機能] 画面共有合成機能を追加する - - `--screen-capture-report` を指定して合成すると他の合成データより優先して表示する - - 実験的機能として画面共有合成機能オプションを追加する - - `--screen-capture-report` : 画面共有のメタデータを指定するオプション - - `--screen-capture-connection-id` : 画面共有の Connection ID を指定するオプション - - `--screen-capture-width` : 画面共有の width を指定するオプション (正の整数で、4 の倍数であること) [default: 960] - - `--screen-capture-height` : 画面共有の height を指定するオプション (正の整数で、4の倍数であること) [default: 640] - - `--screen-capture-bit-rate` : 画面共有のビットレートを指定するオプション (Kbps) [default: 1000] - - `--mix-screen-capture-audio` : 画面共有の音声を合成するか指定するオプション [default: false] - - 注意点 - - `--screen-capture-report` で指定されたものの中で時間が重なった合成データがある場合は そのうちの 1 つのみを利用する. - - @haruyama + - `--screen-capture-report` を指定して合成すると他の合成データより優先して表示する + - 実験的機能として画面共有合成機能オプションを追加する + - `--screen-capture-report` : 画面共有のメタデータを指定するオプション + - `--screen-capture-connection-id` : 画面共有の Connection ID を指定するオプション + - `--screen-capture-width` : 画面共有の width を指定するオプション (正の整数で、4 の倍数であること) [default: 960] + - `--screen-capture-height` : 画面共有の height を指定するオプション (正の整数で、4の倍数であること) [default: 640] + - `--screen-capture-bit-rate` : 画面共有のビットレートを指定するオプション (Kbps) [default: 1000] + - `--mix-screen-capture-audio` : 画面共有の音声を合成するか指定するオプション [default: false] + - 注意点 + - `--screen-capture-report` で指定されたものの中で時間が重なった合成データがある場合は そのうちの 1 つのみを利用する. + - @haruyama - [ADD] [実験的機能] 合成成功/失敗時にレポートを出力する機能を追加する - - レポートは指定したディレクトリに出力する - - 実験的機能として合成成功/失敗時にレポートを出力するオプションを追加する - - `--success-report` : 合成成功時にレポートを出力するオプション (`{utc_datetime}_ {recoding_id}_success.json`) - - `--failure-report ` : 合成失敗時にレポートを出力するオプション (`{utc_datetime}_ {recoding_id}_failure.json`) - - 合成失敗レポートはコマンドライン引数の処理での失敗時には出力しない - - レポートの対象は以下のようにする - - 入力 (各ファイルごとに) - - 音声のデコーダー情報 (codec, channels, duration) - - 映像のデコーダー情報 (codec, duration) - - 映像の解像度の変化 (timestamp, widht, height) - - 出力(container, mux_type, video_codec, audio_codec, duration) - - hisui 自体と利用ライブラリのバージョン - - @haruyama + - レポートは指定したディレクトリに出力する + - 実験的機能として合成成功/失敗時にレポートを出力するオプションを追加する + - `--success-report` : 合成成功時にレポートを出力するオプション (`{utc_datetime}_ {recoding_id}_success.json`) + - `--failure-report ` : 合成失敗時にレポートを出力するオプション (`{utc_datetime}_ {recoding_id}_failure.json`) + - 合成失敗レポートはコマンドライン引数の処理での失敗時には出力しない + - レポートの対象は以下のようにする + - 入力 (各ファイルごとに) + - 音声のデコーダー情報 (codec, channels, duration) + - 映像のデコーダー情報 (codec, duration) + - 映像の解像度の変化 (timestamp, widht, height) + - 出力(container, mux_type, video_codec, audio_codec, duration) + - hisui 自体と利用ライブラリのバージョン + - @haruyama - [UPDATE] `cpp-mp4` を `2021.3` にあげる - - @haruyama + - @haruyama - [UPDATE] `boost` を `1.76.0` にあげる - - @haruyama + - @haruyama ## 2021.2.3 - [FIX] PixelWidth/Height が 0 な VideoTrack を持つ WebM に対応するで混入したバグを修正する - - @haruyama + - @haruyama ## 2021.2.2 - [FIX] PixelWidth/Height が 0 な VideoTrack を持つ WebM に対応する - - libwebm で不正なファイルとして扱われるため patch をあて, hisui 側で不正と判定するように変更する - - @haruyama + - libwebm で不正なファイルとして扱われるため patch をあて, hisui 側で不正と判定するように変更する + - @haruyama ## 2021.2.1 - [FIX] --libvpx-therads が指定されていない場合の挙動を修正する - - @haruyama + - @haruyama ## 2021.2 - [UPDATE] `libvpx` を `v1.10.0` にあげる - - @haruyama + - @haruyama - [CHANGE] libvpx のパラメータのデフォルト値を調整する - - @haruyama + - @haruyama - [UPDATE] --libvp9-row-mt コマンドラインオプションを追加する - - @haruyama + - @haruyama - [UPDATE] --libvp9-tile-columns コマンドラインオプションを追加する - - @haruyama + - @haruyama - [UPDATE] WebM/MP4 Muxer の mux() を共通化する - - @haruyama + - @haruyama - [ADD] 音声の mix のみを行なう --audio-only コマンドラインオプションの追加する - - @haruyama + - @haruyama ## 2021.1.1 - [FIX] std::async で作った Future を get() し例外を伝播させる - - @haruyama + - @haruyama - [FIX] 解像度の変更が入っている H.264 の WebM を合成しようとすると落ちるのを修正する - - @haruyama + - @haruyama ## 2021.1 - [ADD] OpenH264 を利用した WebM 中の H.264 の decode に対応する - - @haruyama + - @haruyama - [ADD] cpp-mp4 を利用した MP4 の出力に対応する - - @haruyama + - @haruyama - [ADD] libfdk-aac を利用した MP4 への AAC の出力に対応する - - @haruyama + - @haruyama - [UPDATE] `boost` を `1.75.0` にあげる - - @haruyama + - @haruyama - [UPDATE] `fmt` を `7.1.3` にあげる - - @haruyama + - @haruyama - [UPDATE] `spdlog` を `1.8.2` にあげる - - @haruyama + - @haruyama - [CHANGE] `nlohmann::json` から `boost::json` へ切り替える - - @haruyama + - @haruyama ## 2020.1.1 - [FIX] Video のない WebM ファイルを利用した場合の取り扱いを修正する - - @haruyama + - @haruyama ## 2020.1 diff --git a/CMakeLists.txt b/CMakeLists.txt index c85f8f21..a71b1df1 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -319,8 +319,6 @@ target_sources(hisui src/archive_item.cpp src/audio/basic_sequencer.cpp src/audio/buffer_opus_encoder.cpp - src/audio/lyra_decoder.cpp - src/audio/lyra_handler.cpp src/audio/mixer.cpp src/audio/opus.cpp src/audio/opus_decoder.cpp @@ -459,7 +457,6 @@ target_include_directories(hisui third_party/libvpx/third_party/libwebm third_party/libvpx third_party/SVT-AV1/Source/API - third_party/lyra ) set_target_properties(hisui PROPERTIES CXX_STANDARD 20 C_STANDARD 11) @@ -475,7 +472,6 @@ target_link_libraries(hisui ${CMAKE_SOURCE_DIR}/third_party/libvpx/${HISUI_PACKAGE}/libvpx.a ${CMAKE_SOURCE_DIR}/third_party/SVT-AV1/Bin/${SVT_AV1_BUILD_TYPE}/libSvtAv1Dec.a ${CMAKE_SOURCE_DIR}/third_party/SVT-AV1/Bin/${SVT_AV1_BUILD_TYPE}/libSvtAv1Enc.a - ${CMAKE_SOURCE_DIR}/third_party/lyra/bazel-bin/liblyra.a ) if(WITH_TEST) diff --git a/NOTICE.md b/NOTICE.md index 08409a30..8e9efd7f 100644 --- a/NOTICE.md +++ b/NOTICE.md @@ -394,215 +394,6 @@ THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ``` -## Lyra - -https://github.com/google/lyra - -``` - - Apache License - Version 2.0, January 2004 - http://www.apache.org/licenses/ - - TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION - - 1. Definitions. - - "License" shall mean the terms and conditions for use, reproduction, - and distribution as defined by Sections 1 through 9 of this document. - - "Licensor" shall mean the copyright owner or entity authorized by - the copyright owner that is granting the License. - - "Legal Entity" shall mean the union of the acting entity and all - other entities that control, are controlled by, or are under common - control with that entity. For the purposes of this definition, - "control" means (i) the power, direct or indirect, to cause the - direction or management of such entity, whether by contract or - otherwise, or (ii) ownership of fifty percent (50%) or more of the - outstanding shares, or (iii) beneficial ownership of such entity. - - "You" (or "Your") shall mean an individual or Legal Entity - exercising permissions granted by this License. - - "Source" form shall mean the preferred form for making modifications, - including but not limited to software source code, documentation - source, and configuration files. - - "Object" form shall mean any form resulting from mechanical - transformation or translation of a Source form, including but - not limited to compiled object code, generated documentation, - and conversions to other media types. - - "Work" shall mean the work of authorship, whether in Source or - Object form, made available under the License, as indicated by a - copyright notice that is included in or attached to the work - (an example is provided in the Appendix below). - - "Derivative Works" shall mean any work, whether in Source or Object - form, that is based on (or derived from) the Work and for which the - editorial revisions, annotations, elaborations, or other modifications - represent, as a whole, an original work of authorship. For the purposes - of this License, Derivative Works shall not include works that remain - separable from, or merely link (or bind by name) to the interfaces of, - the Work and Derivative Works thereof. - - "Contribution" shall mean any work of authorship, including - the original version of the Work and any modifications or additions - to that Work or Derivative Works thereof, that is intentionally - submitted to Licensor for inclusion in the Work by the copyright owner - or by an individual or Legal Entity authorized to submit on behalf of - the copyright owner. For the purposes of this definition, "submitted" - means any form of electronic, verbal, or written communication sent - to the Licensor or its representatives, including but not limited to - communication on electronic mailing lists, source code control systems, - and issue tracking systems that are managed by, or on behalf of, the - Licensor for the purpose of discussing and improving the Work, but - excluding communication that is conspicuously marked or otherwise - designated in writing by the copyright owner as "Not a Contribution." - - "Contributor" shall mean Licensor and any individual or Legal Entity - on behalf of whom a Contribution has been received by Licensor and - subsequently incorporated within the Work. - - 2. Grant of Copyright License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - copyright license to reproduce, prepare Derivative Works of, - publicly display, publicly perform, sublicense, and distribute the - Work and such Derivative Works in Source or Object form. - - 3. Grant of Patent License. Subject to the terms and conditions of - this License, each Contributor hereby grants to You a perpetual, - worldwide, non-exclusive, no-charge, royalty-free, irrevocable - (except as stated in this section) patent license to make, have made, - use, offer to sell, sell, import, and otherwise transfer the Work, - where such license applies only to those patent claims licensable - by such Contributor that are necessarily infringed by their - Contribution(s) alone or by combination of their Contribution(s) - with the Work to which such Contribution(s) was submitted. If You - institute patent litigation against any entity (including a - cross-claim or counterclaim in a lawsuit) alleging that the Work - or a Contribution incorporated within the Work constitutes direct - or contributory patent infringement, then any patent licenses - granted to You under this License for that Work shall terminate - as of the date such litigation is filed. - - 4. Redistribution. You may reproduce and distribute copies of the - Work or Derivative Works thereof in any medium, with or without - modifications, and in Source or Object form, provided that You - meet the following conditions: - - (a) You must give any other recipients of the Work or - Derivative Works a copy of this License; and - - (b) You must cause any modified files to carry prominent notices - stating that You changed the files; and - - (c) You must retain, in the Source form of any Derivative Works - that You distribute, all copyright, patent, trademark, and - attribution notices from the Source form of the Work, - excluding those notices that do not pertain to any part of - the Derivative Works; and - - (d) If the Work includes a "NOTICE" text file as part of its - distribution, then any Derivative Works that You distribute must - include a readable copy of the attribution notices contained - within such NOTICE file, excluding those notices that do not - pertain to any part of the Derivative Works, in at least one - of the following places: within a NOTICE text file distributed - as part of the Derivative Works; within the Source form or - documentation, if provided along with the Derivative Works; or, - within a display generated by the Derivative Works, if and - wherever such third-party notices normally appear. The contents - of the NOTICE file are for informational purposes only and - do not modify the License. You may add Your own attribution - notices within Derivative Works that You distribute, alongside - or as an addendum to the NOTICE text from the Work, provided - that such additional attribution notices cannot be construed - as modifying the License. - - You may add Your own copyright statement to Your modifications and - may provide additional or different license terms and conditions - for use, reproduction, or distribution of Your modifications, or - for any such Derivative Works as a whole, provided Your use, - reproduction, and distribution of the Work otherwise complies with - the conditions stated in this License. - - 5. Submission of Contributions. Unless You explicitly state otherwise, - any Contribution intentionally submitted for inclusion in the Work - by You to the Licensor shall be under the terms and conditions of - this License, without any additional terms or conditions. - Notwithstanding the above, nothing herein shall supersede or modify - the terms of any separate license agreement you may have executed - with Licensor regarding such Contributions. - - 6. Trademarks. This License does not grant permission to use the trade - names, trademarks, service marks, or product names of the Licensor, - except as required for reasonable and customary use in describing the - origin of the Work and reproducing the content of the NOTICE file. - - 7. Disclaimer of Warranty. Unless required by applicable law or - agreed to in writing, Licensor provides the Work (and each - Contributor provides its Contributions) on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or - implied, including, without limitation, any warranties or conditions - of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A - PARTICULAR PURPOSE. You are solely responsible for determining the - appropriateness of using or redistributing the Work and assume any - risks associated with Your exercise of permissions under this License. - - 8. Limitation of Liability. In no event and under no legal theory, - whether in tort (including negligence), contract, or otherwise, - unless required by applicable law (such as deliberate and grossly - negligent acts) or agreed to in writing, shall any Contributor be - liable to You for damages, including any direct, indirect, special, - incidental, or consequential damages of any character arising as a - result of this License or out of the use or inability to use the - Work (including but not limited to damages for loss of goodwill, - work stoppage, computer failure or malfunction, or any and all - other commercial damages or losses), even if such Contributor - has been advised of the possibility of such damages. - - 9. Accepting Warranty or Additional Liability. While redistributing - the Work or Derivative Works thereof, You may choose to offer, - and charge a fee for, acceptance of support, warranty, indemnity, - or other liability obligations and/or rights consistent with this - License. However, in accepting such obligations, You may act only - on Your own behalf and on Your sole responsibility, not on behalf - of any other Contributor, and only if You agree to indemnify, - defend, and hold each Contributor harmless for any liability - incurred by, or claims asserted against, such Contributor by reason - of your accepting any such warranty or additional liability. - - END OF TERMS AND CONDITIONS - - APPENDIX: How to apply the Apache License to your work. - - To apply the Apache License to your work, attach the following - boilerplate notice, with the fields enclosed by brackets "[]" - replaced with your own identifying information. (Don't include - the brackets!) The text should be enclosed in the appropriate - comment syntax for the file format. We also recommend that a - file or class name and description of purpose be included on the - same "printed page" as the copyright notice for easier - identification within third-party archives. - - Copyright [yyyy] [name of copyright owner] - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -``` - ## oneVPL https://github.com/oneapi-src/oneVPL diff --git a/README.md b/README.md index f498b3f1..bc80321a 100644 --- a/README.md +++ b/README.md @@ -34,7 +34,7 @@ Sora が出力した録画ファイルを合成し WebM や MP4 で出力する ## デコーダー/エンコーダー -- Opus / Lyra 音声コーデックデコードに対応しています +- Opus 音声コーデックデコードに対応しています - VP8 / VP9 / AV1 / H.264 の映像コーデックデコードに対応しています - H.264 をデコードする場合は OpenH264 を用意する必要があります - Opus / AAC の音声エンコードに対応しています @@ -108,37 +108,41 @@ hisui Usage: /usr/local/bin/hisui [OPTIONS] Options: - -h,--help Print this help message and exit - -f,--in-metadata-file Metadata filename (REQUIRED) - --out-container Output container type (WebM/MP4). default: WebM - --out-video-codec Video codec (VP8/VP9). default: VP9 - --out-video-frame-rate Video frame rate (INTEGER/RATIONAL). default: 25 - --out-file Output filename - --max-columns Max columns (POSITIVE INTEGER). default: 3 - --libvpx-cq-level libvpx Constrained Quality level (NON NEGATIVE INTEGER). default: 30 - --libvpx-min-q libvpx minimum (best) quantizer (NON NEGATIVE INTEGER). default: 10 - --libvpx-max-q libvpx maximum (worst) quantizer (NON NEGATIVE INTEGER). default: 50 - --out-opus-bit-rate Opus bit rate (kbps, POSITIVE INTEGER). default: 65536 - --out-aac-bit-rate AAC bit rate (kbps, POSITIVE INTEGER). default: 64000 - --mp4-muxer MP4 muxer (Faststart/Simple). default: Faststart - --dir-for-faststart Directory for intermediate files of faststart muxer. default: metadata directory - --openh264 OpenH264 dynamic library path - --verbose Verbose mode - --audio-only Audio only mode - --show-progress-bar Toggle to show progress bar. default: true - --layout Layout Metadata File +-h,--help Print this help message and exit +-f,--in-metadata-file Metadata filename (REQUIRED) +--version Print version and exit +--out-container Output container type (WebM/MP4). default: WebM +--out-video-codec Video codec (VP8/VP9/H264/AV1). default: VP9 +--out-audio-codec Audio codec (Opus/AAC). default: Opus (hisui supports AAC only in MP4) +--out-video-frame-rate Video frame rate (INTEGER/RATIONAL). default: 25 +--out-file Output filename +--max-columns Max columns (POSITIVE INTEGER). default: 3 +--libvpx-cq-level libvpx Constrained Quality level (NON NEGATIVE INTEGER). default: 30 +--libvpx-min-q libvpx minimum (best) quantizer (NON NEGATIVE INTEGER). default: 10 +--libvpx-max-q libvpx maximum (worst) quantizer (NON NEGATIVE INTEGER). default: 50 +--out-opus-bit-rate Opus bit rate (kbps, POSITIVE INTEGER). default: 65536 +--out-aac-bit-rate AAC bit rate (kbps, POSITIVE INTEGER). default: 64000 +--mp4-muxer MP4 muxer (Faststart/Simple). default: Faststart +--dir-for-faststart Directory for intermediate files of faststart muxer. default: metadata directory +--openh264 OpenH264 dynamic library path +--verbose Verbose mode +--audio-only Audio only mode +--video-codec-engines Show video codec engines and exit. +--h264-encoder H264 encoder (OneVPL/OpenH264). default: OneVPL +--show-progress-bar Toggle to show progress bar. default: true +--layout Layout Metadata File Experimental Options: - --screen-capture-report Screen capture metadata filename - --screen-capture-connection-id - Screen capture connection id - --screen-capture-width Width for screen-capture (NON NEGATIVE multiple of 4). default: 960 - --screen-capture-height Height for screen-capture (NON NEGATIVE multiple of 4). default: 640 - --screen-capture-bit-rate Bit rate for screen-capture (kbps). default: 1000 - --mix-screen-capture-audio Mix screen-capture audio. default: false - --success-report Directory for success report - --failure-report Directory for failure report +--screen-capture-report Screen capture metadata filename +--screen-capture-connection-id +Screen capture connection id +--screen-capture-width Width for screen-capture (NON NEGATIVE multiple of 4). default: 960 +--screen-capture-height Height for screen-capture (NON NEGATIVE multiple of 4). default: 640 +--screen-capture-bit-rate Bit rate for screen-capture (kbps). default: 1000 +--mix-screen-capture-audio Mix screen-capture audio. default: false +--success-report Directory for success report +--failure-report Directory for failure report ``` ## ライセンス diff --git a/VERSION b/VERSION index d3833e27..a2e2217e 100644 --- a/VERSION +++ b/VERSION @@ -1,11 +1,10 @@ -HISUI_VERSION=2023.2.1 +HISUI_VERSION=2024.1.0 BOOST_VERSION=1.83.0 CLI11_VERSION=2.3.2 CPP_MP4_VERSION=2023.2.1 FMT_VERSION=9.1.0 LIBVPX_VERSION=1.13.0 -LYRA_VERSION=1.3.2 ONEVPL_VERSION=2023.3.1 OPUS_VERSION=1.4 PROGRESSCPP_ORIGINAL_VERSION=7bfba0d22d19c41323aa35541618b6ebec9d737c diff --git a/build.bash b/build.bash index a3b12bdf..a03cf74a 100755 --- a/build.bash +++ b/build.bash @@ -226,49 +226,6 @@ ${objcopy} --redefine-sym cpuinfo_x86_decode_vendor=local_cpuinfo_x86_decode_ven ${objcopy} --redefine-sym cpuinfo_x86_init_processor=local_cpuinfo_x86_init_processor third_party/SVT-AV1/Bin/"${SVT_AV1_BUILD_TYPE}"/libSvtAv1Enc.a ${objcopy} --redefine-sym cpuinfo_x86_detect_isa=local_cpuinfo_x86_detect_isa third_party/SVT-AV1/Bin/"${SVT_AV1_BUILD_TYPE}"/libSvtAv1Enc.a -# Lyra -cd third_party/lyra || exit 1 - -if [ -d lyra ] ; then - cd lyra || exit 1 - git checkout main - git pull -else - git clone --filter=tree:0 https://github.com/google/lyra.git - cd lyra || exit 1 -fi -git checkout v"${LYRA_VERSION}" - -cd .. - -lyra_bazel_options=('-c') -if [ "${BUILD_TYPE}" = "Debug" ]; then - lyra_bazel_options+=('dbg') -elif [ "${BUILD_TYPE}" = "Release" ]; then - lyra_bazel_options+=('opt') -fi - -case "$PACKAGE" in - *_x86_64 ) - lyra_bazel_sysroot='' - ;; - *_arm64 ) - lyra_bazel_options+=('--config=jetson') - lyra_bazel_sysroot='/usr/aarch64-linux-gnu' -esac - -clang_raw_version=$(clang -v |& /usr/bin/grep version | rev | cut -d ' ' -f 1 | rev) -clang_version=$(echo "$clang_raw_version" | cut -d '-' -f 1) -llvm_version=$(echo "$clang_version" | cut -d '.' -f 1) - -BAZEL_SYSROOT=${lyra_bazel_sysroot} BAZEL_LLVM_DIR=/usr/lib/llvm-${llvm_version} CLANG_VERSION=${clang_version} USE_BAZEL_VERSION=5.4.1 bazelisk build "${lyra_bazel_options[@]}" :lyra || exit 1 -# chmod 755 bazel-bin/liblyra.a -# objcopy --redefine-sym cpuinfo_is_initialized=local_cpuinfo_is_initialized bazel-bin/liblyra.a -# objcopy --redefine-sym cpuinfo_initialize=local_cpuinfo_initialize bazel-bin/liblyra.a -# objcopy --redefine-sym cpuinfo_deinitialize=local_cpuinfo_deinitialize bazel-bin/liblyra.a - -cd ../.. - if [ "${BUILD_TYPE}" = "Native" ]; then mkdir -p "native/$PACKAGE" cd "native/$PACKAGE" || exit 1 @@ -287,9 +244,7 @@ cmake --build . if [ $FLAG_PACKAGE -eq 1 ]; then rm -rf "hisui-${HISUI_VERSION}" mkdir "hisui-${HISUI_VERSION}" - mkdir "hisui-${HISUI_VERSION}/lyra" cp hisui ../../LICENSE ../../NOTICE.md "hisui-${HISUI_VERSION}" - cp -r ../../third_party/lyra/lyra/lyra/model_coeffs "hisui-${HISUI_VERSION}/lyra" - tar cvf "hisui-${HISUI_VERSION}_$PACKAGE.tar.gz" "hisui-${HISUI_VERSION}" + tar czvf "hisui-${HISUI_VERSION}_$PACKAGE.tar.gz" "hisui-${HISUI_VERSION}" rm -rf "hisui-${HISUI_VERSION}" fi diff --git a/doc/BUILD_LINUX.md b/doc/BUILD_LINUX.md index 77e55843..b3117544 100644 --- a/doc/BUILD_LINUX.md +++ b/doc/BUILD_LINUX.md @@ -10,38 +10,54 @@ hisui をクローンします。 git clone https://github.com/shiguredo/hisui.git ``` -必要なライブラリをインストールします。 +### x86_64 ビルド時 ``` -sudo apt install cmake clang libc6-dev libstdc++-10-dev yasm +sudo apt install cmake clang libc6-dev libstdc++-10-dev yasm libva-dev libdrm-dev g++ ``` -## Ubuntu 20.04 x86_64 ビルド +### Ubuntu 20.04 arm64 ビルド時 + +``` +sudo apt install cmake clang-12 binutils-aarch64-linux-gnu libc6-dev-arm64-cross libstdc++-10-dev-arm64-cross yasm g++ libva-dev libdrm-dev + +sudo update-alternatives --install /usr/bin/clang clang /usr/bin/clang-12 1 +sudo update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-12 1 +``` + +### Ubuntu 22.04 arm64 ビルド時 + +``` +sudo apt install cmake clang binutils-aarch64-linux-gnu libc6-dev-arm64-cross libstdc++-10-dev-arm64-cross yasm g++ libva-dev libdrm-dev +``` + +## ビルド + +### Ubuntu 20.04 x86_64 ビルド ``` ./build.bash ubuntu-20.04_x86_64 ``` -## Ubuntu 20.04 arm64 ビルド +### Ubuntu 20.04 arm64 ビルド ``` ./build.bash ubuntu-20.04_arm64 ``` -## Ubuntu 22.04 x86_64 ビルド +### Ubuntu 22.04 x86_64 ビルド ``` ./build.bash ubuntu-22.04_x86_64 ``` -## Ubuntu 22.04 arm64 ビルド +### Ubuntu 22.04 arm64 ビルド ``` ./build.bash ubuntu-22.04_arm64 ``` - -### --use-fdk-aac を有効にしたバイナリをビルドする +#### --use-fdk-aac を有効にしたバイナリをビルドする FDK-AAC を有効にする場合は自前でのビルドが必要になります。 @@ -57,4 +73,4 @@ sudo apt install libfdk-aac-dev ## バイナリ -release ディレクトリに hisui バイナリが生成されます。 +`release / ビルドを実行したアーキテクチャ名` の下に hisui バイナリが生成されます。 diff --git a/doc/FAQ.md b/doc/FAQ.md index 030aacc0..101e882e 100644 --- a/doc/FAQ.md +++ b/doc/FAQ.md @@ -1,6 +1,7 @@ ## FAQ ### 全般 + ### 分割録画した映像を合成できますか Hisui は現在分割録画ファイルからの合成に対応していません。 @@ -12,20 +13,21 @@ Windows の VirtualBox 上で Hisui を実行した際にエラーが発生し Hyper-V を無効にすることで事象が解消されることを確認しています。 #### 参考 + https://forums.virtualbox.org/viewtopic.php?f=6&t=101917 ### 合成データを出力する場所を指定することは可能ですか -可能です。 `--out-file` を使用して指定します。このオプションの有無や指定方法によって出力方法も変わりますので以下に記載します。 +可能です。 `--out-file` を使用して指定します。このオプションの有無や指定方法によって出力方法も変わりますので以下に記載します。 -| layout | `--out-file` | パス指定 | ファイル名 | 結果 | -| --- | --- | --- | --- | --- | -| 無 | 無 | 無 | 無 | report ファイルの格納場所に report ファイルと同じ名前で出力 | -| 無 | 有 | 無 | 有 | report ファイルの格納場所に指定した名前で出力 | -| 無 | 有 | 有 | 有 | 指定した場所に指定した名前で出力 | -| 有 | 無 | 無 | 無 | layout ファイルの格納場所に layout ファイルと同じ名前で出力 | -| 有 | 有 | 無 | 有 | layout ファイルの格納場所に指定した名前で出力 | -| 有 | 有 | 有 | 有 | 指定した場所に指定した名前で出力 | +| layout | `--out-file` | パス指定 | ファイル名 | 結果 | +| ------ | ------------ | -------- | ---------- | ----------------------------------------------------------- | +| 無 | 無 | 無 | 無 | report ファイルの格納場所に report ファイルと同じ名前で出力 | +| 無 | 有 | 無 | 有 | report ファイルの格納場所に指定した名前で出力 | +| 無 | 有 | 有 | 有 | 指定した場所に指定した名前で出力 | +| 有 | 無 | 無 | 無 | layout ファイルの格納場所に layout ファイルと同じ名前で出力 | +| 有 | 有 | 無 | 有 | layout ファイルの格納場所に指定した名前で出力 | +| 有 | 有 | 有 | 有 | 指定した場所に指定した名前で出力 | ### 特定の映像だけを表示するような合成にすることは可能ですか @@ -33,35 +35,35 @@ https://forums.virtualbox.org/viewtopic.php?f=6&t=101917 - `--screen-capture-report` を利用するケース - 複数の Channel を使用した場合はこのオプションを使用すると便利です。 + 複数の Channel を使用した場合はこのオプションを使用すると便利です。 - 例えば会議メンバーが参加している channel とは別に画面共有だけの channel を用意して配信し録画した場合の合成に役立ちます。 + 例えば会議メンバーが参加している channel とは別に画面共有だけの channel を用意して配信し録画した場合の合成に役立ちます。 - `--screen-capture-report` を使用することで画面共有中の間だけ、他の音声はそのままに画面共有の画面だけを表示して合成をすることができます。 + `--screen-capture-report` を使用することで画面共有中の間だけ、他の音声はそのままに画面共有の画面だけを表示して合成をすることができます。 - 実行コマンド例 + 実行コマンド例 - 大きく表示したい映像の report ファイルを指定します。 + 大きく表示したい映像の report ファイルを指定します。 - `./hisui -f .../report-2A0EVXFRVS7BSCEV4EQJ3MW4VC.json --screen-capture-report .../report-GACVGHQB953FX8GFG98AY3XGXR.json --out-file test.mp4` + `./hisui -f .../report-2A0EVXFRVS7BSCEV4EQJ3MW4VC.json --screen-capture-report .../report-GACVGHQB953FX8GFG98AY3XGXR.json --out-file test.mp4` - `--screen-capture-connection-id` を利用するケース - channel に接続している映像のうち特定の connection だけ大きくしたい場合などには `--screen-capture-connection-id` が便利です。 + channel に接続している映像のうち特定の connection だけ大きくしたい場合などには `--screen-capture-connection-id` が便利です。 - 同一 channel で画面共有をした場合、途中から画面共有をした映像を表示したい場合の合成に役立ちます。 + 同一 channel で画面共有をした場合、途中から画面共有をした映像を表示したい場合の合成に役立ちます。 - 実行コマンド例 + 実行コマンド例 - 大きく表示したい映像の connection id を指定します。 + 大きく表示したい映像の connection id を指定します。 - `./hisui -f .../report-4Z3KF8X4GH1G75SWSVA2YAZ65R.json --screen-capture-connection-id JVNGWZB23124NCH76ZRV67HXV8 --out-file test.mp4` + `./hisui -f .../report-4Z3KF8X4GH1G75SWSVA2YAZ65R.json --screen-capture-connection-id JVNGWZB23124NCH76ZRV67HXV8 --out-file test.mp4` - レイアウトファイルを利用するケース - レイアウトファイルにて `video_sources` で表示しておきたい映像を指定することで、対象としていない映像は合成されません。 + レイアウトファイルにて `video_sources` で表示しておきたい映像を指定することで、対象としていない映像は合成されません。 - この方法では合成データに指定した映像しか含まれないため、複数の映像を合成したい場合はご注意ください。 + この方法では合成データに指定した映像しか含まれないため、複数の映像を合成したい場合はご注意ください。 ### Hisui で作成した VP9/AAC の MP4 を再生することは可能ですか @@ -74,15 +76,15 @@ https://forums.virtualbox.org/viewtopic.php?f=6&t=101917 対象のファイルがないなど、様々な原因が考えられます。以下によくあるエラーを記載します。 -| エラーメッセージ | エラー内容 | 解決例 | -| --- | --- | --- | -| `--in-metadata-file: 1 required TEXT:FILE missing` | 合成対象のメタデータが見つかりません | `-f` オプションで指定した `recording.report` の指定と場所を確認してみてください | -| `[error] setting up muxer failed:` | ファイル指定ミス | `-f` オプションで指定したファイルの場所を確認してみてください。分割録画だけの録画データを対象にしていないか確認してみてください | -| `[error] muxing failed: Unable to open:` | 指定した場所が見つからない | `--out-file` などのオプションで指定した場所を確認してみてください | -| `[error] setting up muxer failed: file is not found:` | archive-hoge.webm が見つからない | report-hoge.json で指定されているファイルを確認してみてください | -| `--layout: 1 required TEXT:FILE missing` | レイアウトファイル指定ミス | レイアウトファイルの指定している場所を確認してみてください | -| `[error] parsing layout metadata failed: pattern` | レイアウトファイル内のエラー | メッセージに出力されている内容を確認してレイアウトの設定を見直してみてください | -| `[error] parsing audio_source(./hoge/archive-hoge.json) failed: filename() and file_path() do not exsit` | JSON 指定のファイルが見つからない | レイアウトで指定しているファイルの webm が存在しているか確認してみてください | +| エラーメッセージ | エラー内容 | 解決例 | +| -------------------------------------------------------------------------------------------------------- | ------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------- | +| `--in-metadata-file: 1 required TEXT:FILE missing` | 合成対象のメタデータが見つかりません | `-f` オプションで指定した `recording.report` の指定と場所を確認してみてください | +| `[error] setting up muxer failed:` | ファイル指定ミス | `-f` オプションで指定したファイルの場所を確認してみてください。分割録画だけの録画データを対象にしていないか確認してみてください | +| `[error] muxing failed: Unable to open:` | 指定した場所が見つからない | `--out-file` などのオプションで指定した場所を確認してみてください | +| `[error] setting up muxer failed: file is not found:` | archive-hoge.webm が見つからない | report-hoge.json で指定されているファイルを確認してみてください | +| `--layout: 1 required TEXT:FILE missing` | レイアウトファイル指定ミス | レイアウトファイルの指定している場所を確認してみてください | +| `[error] parsing layout metadata failed: pattern` | レイアウトファイル内のエラー | メッセージに出力されている内容を確認してレイアウトの設定を見直してみてください | +| `[error] parsing audio_source(./hoge/archive-hoge.json) failed: filename() and file_path() do not exsit` | JSON 指定のファイルが見つからない | レイアウトで指定しているファイルの webm が存在しているか確認してみてください | ### Hisui で合成をキャンセルしたときに mdatXXXX というファイルが生成されました @@ -101,6 +103,7 @@ Hisui の help はビルド方法によってヘルプの内容が変化しま また、`--build-type-debug` オプションを使用してビルドすることで、`--out-video-bit-rate`,`--libvpx-threads`, `--libvp9-frame-parallel` といったチューニング関連のヘルプが表示されるようになります。 ### コーデック + ### 音声コーデックに AAC を指定できますか Hisui では --use-fdk-aac オプションを使用して自前でビルドをすることで有効にすることが可能です。 @@ -116,13 +119,16 @@ Docker や リリースバイナリではなく Hisui をご自身でビルド 可能です。しかし再生環境によって音声が再生できない可能性があります。 以下の環境では再生できないことが確認されています。 + - Safari - Windows 10 標準アプリの映画 & テレビ - Windows 11 標準アプリのメディアプレイヤー ### H.264 を使った合成をしたい -H.264 の合成をする場合は OpenH264 を用意した上で --openh264 でライブラリファイルを指定してください +H.264 の合成をする場合は OpenH264 を用意した上で --openh264 でライブラリファイルを指定してください。 + +Intel の CPU をお使いの場合は oneVPL を使用して H.264 のエンコードをすることが可能です。 ### OpenH264 を指定してもエラーになってしまいました @@ -140,7 +146,14 @@ openh264 で要求されるライブラリのバージョンを満たしてい 取得した openh264 のバイナリがご利用の OS とあっているかご確認ください。 +### AV1 を使った合成をしたい + +Hisui は SVT-AV1 を利用して AV1 のエンコードとデコードをすることが可能です。 + +AV1 のエンコードとデコードを利用するには特にオプションは必要ありません。 + ### レイアウト + ### レイアウトを途中で切り替えることは可能ですか 可能です。以下に記載するようなケースで利用が可能です。 @@ -158,7 +171,7 @@ openh264 で要求されるライブラリのバージョンを満たしてい 詳細は [レイアウト機能](LAYOUT.md) のドキュメントを参照してください。 -### video_sources や audio_sources の指定で "*" を指定することは可能ですか +### video_sources や audio_sources の指定で "\*" を指定することは可能ですか 可能です。ただし以下の条件があります。 @@ -178,6 +191,7 @@ openh264 で要求されるライブラリのバージョンを満たしてい 一例を [レイアウト機能](https://github.com/shiguredo/hisui/blob/develop/doc/LAYOUT.md) に記載していますので、そちらと合わせてご参照ください。 ### エンコード + ### 複数の CPU コアを用いて映像をエンコードできますか Hisui で利用している [libvpx](https://github.com/webmproject/libvpx/) には、 @@ -190,13 +204,13 @@ Hisui は次のオプションを用意しています。 `--libvpx` で始ま これらのオプションを help で確認したい場合、`--build-type-debug` オプションをつけて Hisui をビルドしてください。 - `--libvpx-threads` - - 映像のエンコードに利用するスレッド数を指定します. Hisui でのデフォルトは 0 でマルチスレッド機能は無効です。 + - 映像のエンコードに利用するスレッド数を指定します. Hisui でのデフォルトは 0 でマルチスレッド機能は無効です。 - `--libvp9-tile-columns` - - 複数スレッドでのエンコーディングのために映像の列単位での分割を指定します。 2^(指定した数) の分割が行なわれます。 Hisui でのデフォルトは 0 です。 + - 複数スレッドでのエンコーディングのために映像の列単位での分割を指定します。 2^(指定した数) の分割が行なわれます。 Hisui でのデフォルトは 0 です。 - `--libvp9-row-mt` - - 1 を指定すると行ベースの非決定的マルチスレディングが有効になります。 Hisui でのデフォルトは 0 で無効です。 + - 1 を指定すると行ベースの非決定的マルチスレディングが有効になります。 Hisui でのデフォルトは 0 で無効です。 -[Recommended Settings for VOD Media | Google Developers](https://developers.google.com/media/vp9/settings/vod) の "Tiling and Threading Recommendations" が +[Recommended Settings for VOD Media | Google Developers](https://developers.google.com/media/vp9/settings/vod) の "Tiling and Threading Recommendations" が `threads` と `tile-columns` を決定する参考になります。 解像度の高くない映像でも `gamemoderun` コマンドを利用すると, マルチスレッドでのエンコードが高速化する場合がありました。 @@ -215,8 +229,7 @@ gamemoderun ./hisui -f ~/report-XXX.json --libvpx-threads 4 --libvp9-tile-column #### 参考 - [The WebM Project | VP8 Encode Parameter Guide](https://www.webmproject.org/docs/encoder-parameters/) -- [Recommended Settings for VOD Media | Google Developers](https://developers.google.com/media/vp9/settings/vod) +- [Recommended Settings for VOD Media | Google Developers](https://developers.google.com/media/vp9/settings/vod) - [mrintrepide/VP9 Encode Guide.md](https://gist.github.com/mrintrepide/3033c35ee9557e66cff7806f48dbd339) - [VP9 Encoding Guide - wiki](http://wiki.webmproject.org/ffmpeg/vp9-encoding-guide) - [FeralInteractive/gamemode: Optimise Linux system performance on demand](https://github.com/FeralInteractive/gamemode) - diff --git a/doc/LAYOUT.md b/doc/LAYOUT.md index c9a57220..8f14c2a4 100644 --- a/doc/LAYOUT.md +++ b/doc/LAYOUT.md @@ -54,8 +54,8 @@ hisui --layout layout.json - `audio_sources` : 格納されているファイル全てを相対パスで指定します - `audio_sources_excluded` : ファイルの中から音声を入れないファイルを指定します - `video_layout` : 映像レイアウトをこの中に指定します - - `grid` : 分かりやすい名称をつけてレイアウトを指定します - - `video_sources` : 合成する映像ファイルを全て指定します + - `grid` : 分かりやすい名称をつけてレイアウトを指定します + - `video_sources` : 合成する映像ファイルを全て指定します - `trim` : 音声も映像もない時に trim を有効にするかどうか指定します - `format` : 出力するフォーマットを指定します - `resolution` : 出力する映像のサイズを指定します @@ -64,7 +64,7 @@ hisui --layout layout.json ## レイアウト設定 Hisui レイアウトは [Composing Video Recordings using Twilio Programmable Video - Twilio](https://www.twilio.com/docs/video/api/compositions-resource) に準じます。 -Hisui のレイアウトでは `audio_sources`, `audio_sources_excluded`, Region(後述) 内の `video_sources`, `video_sources_excluded` に、Sora の archive-*.json のパス/パターンを指定します。 +Hisui のレイアウトでは `audio_sources`, `audio_sources_excluded`, Region(後述) 内の `video_sources`, `video_sources_excluded` に、Sora の `archive-*.json` のパス/パターンを指定します。 ## レイアウト用設定パラメータ @@ -72,7 +72,7 @@ Hisui のレイアウトでは `audio_sources`, `audio_sources_excluded`, Region ### audio_sources -音声のソースとして用いる archive-*.json のパスの配列を指定します。相対パスの指定も可能です。 パスは JSON ファイルのあるパスからの相対パスを探します。 +音声のソースとして用いる `archive-*.json` のパスの配列を指定します。相対パスの指定も可能です。 パスは JSON ファイルのあるパスからの相対パスを探します。 `*` をワイルドカードとして利用することができます。 @@ -137,15 +137,15 @@ Twilio では 0 は許可していませんが、 Hisui では 0 を未指定と ##### max_columns, max_rows の片方のみ指定されている場合 -`cells_excluded` と `reuse` (後述) を考慮した最大同時ソース数よりも指定されている数が等しいか大きい場合は、最大同時ソース数行x1列 ないし 1行x最大同時ソース数列の Grid となります。 +`cells_excluded` と `reuse` (後述) を考慮した最大同時ソース数よりも指定されている数が等しいか大きい場合は、最大同時ソース数行 x1 列 ないし 1 行 x 最大同時ソース数列の Grid となります。 それよりも大きい場合は、`max_columns` 行ないし `max_rows`列となり、列ないし行が必要なだけ追加されます。 ##### max_columns, max_rows が両方指定されている場合 -`cells_excluded` と `reuse` (後述) を考慮した最大同時ソース数よりも `max_columns` * `max_rows` が等しいか小さい場合は、`max_columns` 行 x `max_rows` 列となります。 +`cells_excluded` と `reuse` (後述) を考慮した最大同時ソース数よりも `max_columns` x `max_rows` が等しいか小さい場合は、`max_columns` 行 x `max_rows` 列となります。 `max_columns` > `max_rows` の場合、 -`max_columns` のほうが最大同時ソース数よりも大きいか等しい場合は 最大同時ソース数行x1列 となります。 +`max_columns` のほうが最大同時ソース数よりも大きいか等しい場合は 最大同時ソース数行 x1 列 となります。 そうでない場合は `max_columns` 行 ソースが収まる 列 となります。 `max_columns` <= `max_rows` の場合も、行と列が入れ替わった形で同様となります。 @@ -156,7 +156,8 @@ Region は Grid によって Cell に分割されます。Cell 間には枠線 Region のサイズ(`width` ないし `height`[後述]) が、動画のサイズ(`resolution` で決定される幅ないし高さ)と等しい場合は、Region の両端に枠線が入りません。そうでない場合は枠線が入ります。 各 Cell のサイズは 4 の倍数となります。 -このため、たとえば 240x160 の動画だけの Region についてそれより大きな(640x480 など)ベースに対して配置する場合、スケールを発生させないようにするには 244x164 のRegion を指定する必要があります。 +このため、たとえば 240x160 の動画だけの Region についてそれより大きな(640x480 など)ベースに対して配置する場合、スケールを発生させないようにするには 244x164 の Region を指定する必要があります。 + これらを考慮して 1 つの Cell のサイズがなるべく大きくなるように Cell のサイズを決定します。 @@ -199,7 +200,7 @@ Cell へのソースの配置の仕方を指定します。 ### video_sources -映像のソースとして用いる archive-*.json のパスの配列を指定します。相対パスの場合は、レイアウト設定を指定します。 JSON ファイルのあるパスからの相対パスを探すようになっています。 +映像のソースとして用いる `archive-*.json` のパスの配列を指定します。相対パスの場合は、レイアウト設定を指定します。 JSON ファイルのあるパスからの相対パスを探すようになっています。 `*` をワイルドカードとして利用できます。 @@ -237,7 +238,7 @@ Region の z 軸での位置を指定する。キーがない場合は 0。[-99, ### ソースからの WebM ファイルの探索 -archive-*.json 中の `filename`, `file_path` の順に WebM ファイルを探索します。 +`archive-*.json` 中の `filename`, `file_path` の順に WebM ファイルを探索します。 どちらについても、 @@ -246,7 +247,7 @@ archive-*.json 中の `filename`, `file_path` の順に WebM ファイルを探 ### 時間 -合成する時間は archive-*.json の `start_time`, `stop_time` を利用します。プログラムでは double としてパースしています。 +合成する時間は ` archive-*.json` の `start_time`, `stop_time` を利用します。プログラムでは double としてパースしています。 ### ビデオソースの描画順序 diff --git a/doc/USE.md b/doc/USE.md index 1fba4a7e..f6d1fe9a 100644 --- a/doc/USE.md +++ b/doc/USE.md @@ -13,11 +13,11 @@ Hisui は docker image を用意しています。これを使うことで気軽 - https://hub.docker.com/r/shiguredo/hisui ``` -docker run -v /home/shiguredo/sora-2022.2.3/archive:/hisui -it shiguredo/hisui:2023.2.1-ubuntu-22.04 -f /hisui/CSX77QY9F57V5BT72S62C28VS4/report-CSX77QY9F57V5BT72S62C28VS4.json +docker run -v /home/shiguredo/sora/archive:/hisui -it shiguredo/hisui:2023.2.1-ubuntu-22.04 -f /hisui/CSX77QY9F57V5BT72S62C28VS4/report-CSX77QY9F57V5BT72S62C28VS4.json ``` - -v で Sora の録画データがある archive フォルダを指定して下さい - - docker 側のフォルダはどこでも良いですがここでは /hisui を利用しています + - docker 側のフォルダはどこでも良いですがここでは /hisui を利用しています - -f で合成したい recording.report が生成するファイルを指定して下さい ## docker 経由で help を見る @@ -30,9 +30,10 @@ Usage: /usr/local/bin/hisui [OPTIONS] Options: -h,--help Print this help message and exit -f,--in-metadata-file Metadata filename (REQUIRED) + --version Print version and exit --out-container Output container type (WebM/MP4). default: WebM - --out-video-codec Video codec (VP8/VP9). default: VP9 - --out-video-frame-rate Video frame rate (INTEGER/RATIONAL). default: 25) + --out-video-codec Video codec (VP8/VP9/H264/AV1). default: VP9 + --out-video-frame-rate Video frame rate (INTEGER/RATIONAL). default: 25 --out-file Output filename --max-columns Max columns (POSITIVE INTEGER). default: 3 --libvpx-cq-level libvpx Constrained Quality level (NON NEGATIVE INTEGER). default: 30 @@ -45,6 +46,8 @@ Options: --openh264 OpenH264 dynamic library path --verbose Verbose mode --audio-only Audio only mode + --video-codec-engines Show video codec engines and exit. + --h264-encoder H264 encoder (OneVPL/OpenH264). default: OneVPL --show-progress-bar Toggle to show progress bar. default: true --layout Layout Metadata File @@ -56,14 +59,14 @@ Experimental Options: --screen-capture-width Width for screen-capture (NON NEGATIVE multiple of 4). default: 960 --screen-capture-height Height for screen-capture (NON NEGATIVE multiple of 4). default: 640 --screen-capture-bit-rate Bit rate for screen-capture (kbps). default: 1000 - --mix-screen-capture-audio Mix screen-capture audio. default: false) + --mix-screen-capture-audio Mix screen-capture audio. default: false --success-report Directory for success report --failure-report Directory for failure report ``` +## 自前ビルドおよび、リリースされたビルド済みのバイナリを使用して利用する - -## 自前ビルドで利用したい場合 +ビルド済みのバイナリを使用する場合は [Releases](https://github.com/shiguredo/hisui/releases) より環境に応じた最新のバイナリをダウンロードしてください。 -f で合成したい recording.report が生成するファイルを指定して下さい。 diff --git a/docker/Dockerfile b/docker/Dockerfile index 52ffef0d..1be3a963 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -8,13 +8,10 @@ RUN apt update \ && rm -rf /var/lib/apt/lists/* \ && rm -rf /var/cache/apt/archives/* -ENV HISUI_LYRA_MODEL_COEFFS_PATH /usr/local/lib/lyra/model_coeffs ARG UBUNTU_VERSION ARG TARGETARCH COPY release/ubuntu-${UBUNTU_VERSION}_x86_64/hisui /tmp/hisui-amd64 COPY release/ubuntu-${UBUNTU_VERSION}_arm64/hisui /tmp/hisui-arm64 -COPY release/ubuntu-${UBUNTU_VERSION}_x86_64/lyra/model_coeffs /tmp/amd64/lyra/model_coeffs -COPY release/ubuntu-${UBUNTU_VERSION}_arm64/lyra/model_coeffs /tmp/arm64/lyra/model_coeffs -RUN cp /tmp/hisui-${TARGETARCH} /usr/local/bin/hisui && mkdir -p /usr/local/lib && cp -r /tmp/${TARGETARCH}/lyra /usr/local/lib +RUN cp /tmp/hisui-$TARGETARCH /usr/local/bin/hisui ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/hisui"] diff --git a/docker/Dockerfile.local b/docker/Dockerfile.local index b265f78c..1be3a963 100644 --- a/docker/Dockerfile.local +++ b/docker/Dockerfile.local @@ -8,12 +8,10 @@ RUN apt update \ && rm -rf /var/lib/apt/lists/* \ && rm -rf /var/cache/apt/archives/* -ENV HISUI_LYRA_MODEL_COEFFS_PATH /usr/local/lib/lyra/model_coeffs ARG UBUNTU_VERSION ARG TARGETARCH COPY release/ubuntu-${UBUNTU_VERSION}_x86_64/hisui /tmp/hisui-amd64 COPY release/ubuntu-${UBUNTU_VERSION}_arm64/hisui /tmp/hisui-arm64 -COPY third_party/lyra/lyra/lyra/model_coeffs /usr/local/lib/lyra/model_coeffs RUN cp /tmp/hisui-$TARGETARCH /usr/local/bin/hisui ENTRYPOINT ["/usr/bin/tini", "--", "/usr/local/bin/hisui"] diff --git a/src/audio/lyra_decoder.cpp b/src/audio/lyra_decoder.cpp deleted file mode 100644 index 6193bc54..00000000 --- a/src/audio/lyra_decoder.cpp +++ /dev/null @@ -1,58 +0,0 @@ -#include "audio/lyra_decoder.hpp" - -#include -#include - -#include - -#include "constants.hpp" - -namespace hisui::audio { - -LyraDecoder::LyraDecoder(const int t_channles, const std::string& model_path) - : m_channels(t_channles) { - if (m_channels != 1) { - throw std::invalid_argument( - fmt::format("invalid number of channels: {}", m_channels)); - } - m_decoder = lyra_decoder_create(hisui::Constants::PCM_SAMPLE_RATE, m_channels, - model_path.c_str()); - if (m_decoder == nullptr) { - throw std::runtime_error("could not create lyra decoder"); - } - - m_lyra_buffer = new std::int16_t[hisui::Constants::PCM_SAMPLE_RATE / - hisui::Constants::LYRA_FRAME_RATE]; -} - -LyraDecoder::~LyraDecoder() { - if (m_lyra_buffer) { - delete[] m_lyra_buffer; - } - if (m_decoder) { - lyra_decoder_destroy(m_decoder); - } -} - -std::pair LyraDecoder::decode( - const unsigned char* src_buffer, - const std::size_t src_buffer_length) { - auto r = - lyra_decoder_set_encoded_packet(m_decoder, src_buffer, src_buffer_length); - if (!r) { - throw std::runtime_error("lyra_decoder_set_encoded_packet() failed"); - } - auto v = lyra_decoder_decode_samples( - m_decoder, - hisui::Constants::PCM_SAMPLE_RATE / hisui::Constants::LYRA_FRAME_RATE); - if (v == nullptr) { - throw std::runtime_error("lyra_decoder_decode_samples() failed"); - } - auto samples = lyra_vector_s16_get_size(v); - auto p = lyra_vector_s16_get_data(v); - std::memcpy(m_lyra_buffer, p, samples * 2); - lyra_vector_s16_destroy(v); - return {m_lyra_buffer, samples}; -} - -} // namespace hisui::audio diff --git a/src/audio/lyra_decoder.hpp b/src/audio/lyra_decoder.hpp deleted file mode 100644 index 97c318dc..00000000 --- a/src/audio/lyra_decoder.hpp +++ /dev/null @@ -1,29 +0,0 @@ -#pragma once - -#include - -#include -#include -#include -#include - -#include "audio/decoder.hpp" - -namespace hisui::audio { - -class LyraDecoder : public Decoder { - public: - explicit LyraDecoder(const int t_channles, const std::string& model_path); - ~LyraDecoder(); - - std::pair decode( - const unsigned char*, - const std::size_t) override; - - private: - lyra_decoder* m_decoder; - int m_channels; - std::int16_t* m_lyra_buffer = nullptr; -}; - -} // namespace hisui::audio diff --git a/src/audio/lyra_handler.cpp b/src/audio/lyra_handler.cpp deleted file mode 100644 index c2942ed4..00000000 --- a/src/audio/lyra_handler.cpp +++ /dev/null @@ -1,48 +0,0 @@ -#include "audio/lyra_handler.hpp" - -#include - -#include -#include - -namespace hisui::audio { - -void LyraHandler::setModelPath(const std::string& model_path) { - if (!m_handler) { - m_handler = new LyraHandler(model_path); - } -} - -bool LyraHandler::hasInstance() { - return m_handler != nullptr; -} - -LyraHandler& LyraHandler::getInstance() { - return *m_handler; -} - -LyraHandler::LyraHandler(const std::string& model_path) { - if (!std::empty(m_model_path)) { - return; - } - - if (!std::filesystem::is_directory(model_path)) { - throw std::invalid_argument(fmt::format("{} is not directory", model_path)); - } - - m_model_path = model_path; -} - -void LyraHandler::close() { - delete m_handler; - m_handler = nullptr; -} - -std::string LyraHandler::getModelPath() const { - if (!hasInstance()) { - throw std::runtime_error("lyra model path is not set"); - } - return m_model_path; -} - -} // namespace hisui::audio diff --git a/src/audio/lyra_handler.hpp b/src/audio/lyra_handler.hpp deleted file mode 100644 index 58274c63..00000000 --- a/src/audio/lyra_handler.hpp +++ /dev/null @@ -1,30 +0,0 @@ -#pragma once - -#include - -#include - -namespace hisui::audio { - -class LyraHandler { - public: - LyraHandler(const LyraHandler&) = delete; - LyraHandler& operator=(const LyraHandler&) = delete; - LyraHandler(LyraHandler&&) = delete; - LyraHandler& operator=(LyraHandler&&) = delete; - - std::string getModelPath() const; - - static void setModelPath(const std::string&); - static bool hasInstance(); - static LyraHandler& getInstance(); - static void close(); - - private: - std::string m_model_path = ""; - inline static LyraHandler* m_handler = nullptr; - - explicit LyraHandler(const std::string&); -}; - -} // namespace hisui::audio diff --git a/src/audio/webm_source.cpp b/src/audio/webm_source.cpp index 0aea8943..88df435c 100644 --- a/src/audio/webm_source.cpp +++ b/src/audio/webm_source.cpp @@ -8,8 +8,6 @@ #include #include "audio/decoder.hpp" -#include "audio/lyra_decoder.hpp" -#include "audio/lyra_handler.hpp" #include "audio/opus_decoder.hpp" #include "constants.hpp" #include "report/reporter.hpp" @@ -44,18 +42,6 @@ WebMSource::WebMSource(const std::string& t_file_path) { .duration = m_webm->getDuration()}); } break; - case hisui::webm::input::AudioCodec::Lyra: - m_channels = m_webm->getChannels(), - m_sampling_rate = static_cast(m_webm->getSamplingRate()); - m_decoder = std::make_shared( - m_channels, LyraHandler::getInstance().getModelPath()); - if (hisui::report::Reporter::hasInstance()) { - hisui::report::Reporter::getInstance().registerAudioDecoder( - m_webm->getFilePath(), {.codec = "lyra", - .channels = m_webm->getChannels(), - .duration = m_webm->getDuration()}); - } - break; default: // 対応していない WebM の場合は {0, 0} を返す m_webm = nullptr; diff --git a/src/config.cpp b/src/config.cpp index 13bde4ac..aedb1b32 100644 --- a/src/config.cpp +++ b/src/config.cpp @@ -317,9 +317,6 @@ void set_cli_options(CLI::App* app, Config* config) { CLI::CheckedTransformer(openh264_level_assoc, CLI::ignore_case)) ->group(OPTIONS_FOR_TUNING); - app->add_option("--lyra-model-path", config->lyra_model_path, - "Path to directory containing Lyra TFLite files"); - std::vector> log_level_assoc{ {"trace", spdlog::level::trace}, diff --git a/src/config.hpp b/src/config.hpp index ba8596ae..c63aac4a 100644 --- a/src/config.hpp +++ b/src/config.hpp @@ -135,8 +135,6 @@ class Config { ::EProfileIdc openh264_profile = ::PRO_BASELINE; ::ELevelIdc openh264_level = ::LEVEL_3_1; - std::string lyra_model_path = ""; - libyuv::FilterMode libyuv_filter_mode = libyuv::kFilterBox; config::VideoComposer video_composer = config::VideoComposer::Grid; diff --git a/src/constants.hpp b/src/constants.hpp index 8d3700ef..3341eb5f 100644 --- a/src/constants.hpp +++ b/src/constants.hpp @@ -8,8 +8,6 @@ namespace hisui { class Constants { public: static const std::uint32_t PCM_SAMPLE_RATE = 48000; - static const std::uint32_t LYRA_FRAME_RATE = - 50; // from chromemedia::codec::kFrameRate static const std::uint32_t VP8_FOURCC = 0x30385056; static const std::uint32_t VP9_FOURCC = 0x30395056; static const std::uint32_t AV1_FOURCC = 0x31305641; diff --git a/src/hisui.cpp b/src/hisui.cpp index 423bfcb3..191e5df3 100644 --- a/src/hisui.cpp +++ b/src/hisui.cpp @@ -13,7 +13,6 @@ #include #include -#include "audio/lyra_handler.hpp" #include "config.hpp" #include "constants.hpp" #include "datetime.hpp" @@ -40,10 +39,6 @@ static void closeHandlersAndSession() { hisui::video::OpenH264Handler::close(); } - if (hisui::audio::LyraHandler::hasInstance()) { - hisui::audio::LyraHandler::close(); - } - #ifdef USE_ONEVPL if (hisui::video::VPLSession::hasInstance()) { hisui::video::VPLSession::close(); @@ -84,14 +79,6 @@ int main(int argc, char** argv) { } spdlog::debug("log level={}", static_cast(config.log_level)); - if (std::empty(config.lyra_model_path)) { - if (const auto hisui_lyra_model_coeffs_path = - std::getenv("HISUI_LYRA_MODEL_COEFFS_PATH")) { - config.lyra_model_path = hisui_lyra_model_coeffs_path; - } - spdlog::debug("config.lyra_model_path={}", config.lyra_model_path); - } - if (!std::empty(config.openh264)) { try { hisui::video::OpenH264Handler::open(config.openh264); @@ -100,15 +87,6 @@ int main(int argc, char** argv) { } } - if (!std::empty(config.lyra_model_path)) { - try { - hisui::audio::LyraHandler::setModelPath(config.lyra_model_path); - } catch (const std::exception& e) { - spdlog::warn("failed to set lyra model path: {}", e.what()); - return EXIT_FAILURE; - } - } - if (config.enabledReport()) { hisui::report::Reporter::open(); } @@ -249,4 +227,3 @@ int main(int argc, char** argv) { return EXIT_SUCCESS; } - diff --git a/src/report/reporter.cpp b/src/report/reporter.cpp index 11486292..ea1a2294 100644 --- a/src/report/reporter.cpp +++ b/src/report/reporter.cpp @@ -95,7 +95,6 @@ void Reporter::collectVersions() { {"openh264", version::get_openh264_version()}, {"SVT-AV1", version::get_svt_av1_version()}, {"oneVPL", version::get_onevpl_version()}, - {"Lyra", version::get_lyra_version()}, #ifdef USE_FDK_AAC {"fdk-aac AACENC", version::get_fdkaac_aacenc_version()}, #endif diff --git a/src/version/version.cpp b/src/version/version.cpp index beab5de8..4bb750b1 100644 --- a/src/version/version.cpp +++ b/src/version/version.cpp @@ -48,12 +48,6 @@ std::string get_onevpl_version() { return "2023.3.1"; } -std::string get_lyra_version() { - // コードから得るには third_party/lyra を変更する必要あり - // VERSION と合わせること - return "1.3.2"; -} - #ifdef USE_FDK_AAC std::string get_fdkaac_aacenc_version() { ::LIB_INFO info[FDK_MODULE_LAST]; diff --git a/src/version/version.hpp b/src/version/version.hpp index 6d3c47f8..0c9338f0 100644 --- a/src/version/version.hpp +++ b/src/version/version.hpp @@ -9,7 +9,6 @@ std::string get_libwebm_version(); std::string get_openh264_version(); std::string get_svt_av1_version(); std::string get_onevpl_version(); -std::string get_lyra_version(); #ifdef USE_FDK_AAC std::string get_fdkaac_aacenc_version(); diff --git a/src/webm/input/audio_context.cpp b/src/webm/input/audio_context.cpp index 57ad6a59..8c1fc480 100644 --- a/src/webm/input/audio_context.cpp +++ b/src/webm/input/audio_context.cpp @@ -67,9 +67,6 @@ bool AudioContext::init() { } else { m_channels = static_cast(audio_track->GetChannels()); } - } else if (!std::strncmp(audio_track->GetCodecId(), "A_LYRA", 6)) { - m_codec = AudioCodec::Lyra; - m_channels = static_cast(audio_track->GetChannels()); } else { spdlog::info("unsuppoted codec: codec_id={}", audio_track->GetCodecId()); return false; diff --git a/src/webm/input/audio_context.hpp b/src/webm/input/audio_context.hpp index 705a2afc..1bef2a5f 100644 --- a/src/webm/input/audio_context.hpp +++ b/src/webm/input/audio_context.hpp @@ -10,7 +10,6 @@ namespace hisui::webm::input { enum struct AudioCodec { None, Opus, - Lyra, }; class AudioContext : public Context { diff --git a/third_party/lyra/.bazelrc b/third_party/lyra/.bazelrc deleted file mode 100644 index 4a0667d0..00000000 --- a/third_party/lyra/.bazelrc +++ /dev/null @@ -1,163 +0,0 @@ -# https://github.com/google/lyra/blob/main/.bazelrc からコピーしてきたもの - -# By default, the host platform is targeted with the default c toolchain, -# likely using gcc/libstdc++ on Linux. -# -# To select the android ARM64 platform, build with `--config=android_arm64` -# -# The Android platform and the clang toolchain requires an external -# toolchain (NDK with clang/libc++) that -# needs setup by the user. See README.md for instructions. -# -# If clang/libc++ is installed to /usr/local/ it can be used with linux builds -# instead of the default (gcc) by building with `--config=clang_toolchain`. -# Since this will provide no specific advantages for most users, and the process -# of installing a specific clang toolchain is a bit involved, the documentation -# for clang toolchain setup is in toolchain/ - -build --cxxopt=-std=gnu++17 -build --linkopt=-lm -# Use the default C++ toolchain to build the tools used during the -# build. -build --host_crosstool_top=@bazel_tools//tools/cpp:toolchain - -build:clang_toolchain --crosstool_top=//toolchain:clang_suite -build:clang_toolchain --cpu=k8 - -# Android -build:android_arm64 --cpu=arm64-v8a -build:android_arm64 --fat_apk_cpu=arm64-v8a -build:android_arm64 --crosstool_top=@android_toolchain//:toolchain -build:android_arm64 --host_crosstool_top=@bazel_tools//tools/cpp:toolchain -build:android_arm64 --linkopt=-lm -build:android_arm64 --linkopt=-ldl -build:android_arm64 --linkopt=-llog -build:android_arm64 --linkopt=-landroid -build:android_arm64 --cxxopt=-std=gnu++17 -# This is required for using command line flags on android. -# It could be removed for the APK targets, but making it default since -# it doesn't seem to affect the size. -build:android_arm64 --cxxopt=-DABSL_FLAGS_STRIP_NAMES=0 -# The android toolchain seems to add debug symbols (-g) even in copt mode. -# This seems like a bazel bug. -# (see https://github.com/bazelbuild/bazel/issues/13264). Until this is -# resolved, make optimized arguments default. -# If debugging c++ code, you may want to remove this. -build:android_arm64 --copt=-g0 -build:android_arm64 --copt=-Os -# When building the demo apk Android has transitive deps that need to be pulled -# in. The correct fix is probably to stop using gmaven_artifact() rules and -# use rules_jvm_external. After that, this might be removeable, and we can use -# androidx and more recent deps instead of deprecated ones. -build:android_arm64 --strict_java_deps=OFF - - -# Start Tensorflow -# The below is to allow tensorflow to build. -# Inspired by TensorFlow serving's .bazelrc to build from the source. -# It also may be useful to refer to TensorFlow .bazelrc for more details: -# https://github.com/tensorflow/tensorflow/blob/master/.bazelrc - -# Optimizations used for TF Serving release builds. -build:release --copt=-mavx -build:release --copt=-msse4.2 - -# Options used to build with CUDA. -build:cuda --repo_env TF_NEED_CUDA=1 -build:cuda --crosstool_top=@local_config_cuda//crosstool:toolchain -build:cuda --@local_config_cuda//:enable_cuda -build:cuda --define=using_cuda=true --define=using_cuda_nvcc=true -build:cuda --action_env=TF_CUDA_COMPUTE_CAPABILITIES="sm_35,sm_50,sm_60,sm_70,sm_75,compute_80" - -# Options used to build with TPU support. -build:tpu --distinct_host_configuration=false -build:tpu --define=with_tpu_support=true --define=framework_shared_object=false - -# Please note that MKL on MacOS or windows is still not supported. -# If you would like to use a local MKL instead of downloading, please set the -# environment variable "TF_MKL_ROOT" every time before build. -build:mkl --define=build_with_mkl=true --define=enable_mkl=true --define=build_with_openmp=true -build:mkl --define=tensorflow_mkldnn_contraction_kernel=0 - -# This config option is used to enable MKL-DNN open source library only, -# without depending on MKL binary version. -build:mkl_open_source_only --define=build_with_mkl_dnn_only=true -build:mkl_open_source_only --define=build_with_mkl=true --define=enable_mkl=true -build:mkl_open_source_only --define=tensorflow_mkldnn_contraction_kernel=0 - -# Processor native optimizations (depends on build host capabilities). -build:nativeopt --copt=-march=native -build:nativeopt --host_copt=-march=native -build:nativeopt --copt=-O3 - -build --keep_going -build --verbose_failures=true -build --spawn_strategy=standalone -build --genrule_strategy=standalone - -build --define=grpc_no_ares=true - -# Sets the default Apple platform to macOS. -build --apple_platform_type=macos - -build --experimental_repo_remote_exec - -# Enable platform specific config (e.g. by default use --config=windows when on windows, and --config=linux when on linux) -build --enable_platform_specific_config - -# End Tensorflow - -## Windows config -startup --windows_enable_symlinks -build:windows --enable_runfiles - -# These settings below allow for compilation using MSVC -build:windows --copt=/D_USE_MATH_DEFINES -build:windows --host_copt=/D_USE_MATH_DEFINES -build:windows --cxxopt=-D_HAS_DEPRECATED_RESULT_OF=1 -build:windows --cxxopt=/D_ITERATOR_DEBUG_LEVEL=0 - -build:windows --cxxopt=/Zc:__cplusplus -# c++20 needed in MSVC for designated initializers (llvm libc++ -# and gnu stc++ provides them in c++17). -build:windows --cxxopt=/std:c++20 -build:windows --linkopt=-ldl -build:windows --host_cxxopt=/std:c++20 - -# Make sure to include as little of windows.h as possible -build:windows --copt=-DWIN32_LEAN_AND_MEAN -build:windows --host_copt=-DWIN32_LEAN_AND_MEAN -build:windows --copt=-DNOGDI -build:windows --host_copt=-DNOGDI - -# MSVC (Windows): Standards-conformant preprocessor mode -# See https://docs.microsoft.com/en-us/cpp/preprocessor/preprocessor-experimental-overview -build:windows --copt=/Zc:preprocessor -build:windows --host_copt=/Zc:preprocessor - -# Misc build options we need for windows according to tensorflow -build:windows --linkopt=/DEBUG -build:windows --host_linkopt=/DEBUG -build:windows --linkopt=/OPT:REF -build:windows --host_linkopt=/OPT:REF -build:windows --linkopt=/OPT:ICF -build:windows --host_linkopt=/OPT:ICF -# This is a workaround for this magic preprocessor constant/macro not existing -# in MSVC -build:windows --host_copt=-D__PRETTY_FUNCTION__=__FUNCSIG__ -build:windows --copt=-D__PRETTY_FUNCTION__=__FUNCSIG__ - -build:macos_arm64 --cpu=darwin_arm64 - -build:ios_simulator --cpu=ios_x86_64 -build:ios_simulator --apple_platform_type=ios -build:ios_device --cpu=ios_arm64 -build:ios_device --apple_platform_type=ios - -build:linux_x86_64 --crosstool_top=@webrtc_clang_toolchain//:toolchain -build:linux_x86_64 --host_crosstool_top=@webrtc_clang_toolchain//:toolchain - -build:jetson --cpu=aarch64 -build:jetson --crosstool_top=@webrtc_clang_toolchain//:toolchain -build:jetson --host_crosstool_top=@bazel_tools//tools/cpp:toolchain -build:jetson --copt=-fPIC diff --git a/third_party/lyra/BUILD b/third_party/lyra/BUILD deleted file mode 100644 index 4366eca1..00000000 --- a/third_party/lyra/BUILD +++ /dev/null @@ -1,22 +0,0 @@ -load("cc_static_library.bzl", "cc_static_library") - -cc_library( - name = "lyrac", - srcs = [ - "lyra.cc", - ], - defines = [ - # "LYRA_EXPORTS", - ], - deps = [ - "@lyra//lyra:lyra_decoder", - ], - hdrs = ["lyra.h"], -) - -cc_static_library( - name = "lyra", - deps = [ - ":lyrac", - ], -) diff --git a/third_party/lyra/WORKSPACE b/third_party/lyra/WORKSPACE deleted file mode 100644 index 0efdcbd3..00000000 --- a/third_party/lyra/WORKSPACE +++ /dev/null @@ -1,145 +0,0 @@ -load("@bazel_tools//tools/build_defs/repo:git.bzl", "git_repository", "new_git_repository") -load("@bazel_tools//tools/build_defs/repo:http.bzl", "http_archive") - -local_repository( - name = "lyra", - path = "lyra", -) - -# Google logging -git_repository( - name = "com_google_glog", - remote = "https://github.com/google/glog.git", - branch = "master" -) -# Dependency for glog -git_repository( - name = "com_github_gflags_gflags", - remote = "https://github.com/mchinen/gflags.git", - branch = "android_linking_fix" -) - -http_archive( - name = "rules_android", - sha256 = "cd06d15dd8bb59926e4d65f9003bfc20f9da4b2519985c27e190cddc8b7a7806", - strip_prefix = "rules_android-0.1.1", - urls = ["https://github.com/bazelbuild/rules_android/archive/v0.1.1.zip"], -) - -# proto_library, cc_proto_library, and java_proto_library rules implicitly -# depend on @com_google_protobuf for protoc and proto runtimes. -# This statement defines the @com_google_protobuf repo. -git_repository( - name = "com_google_protobuf", - remote = "https://github.com/protocolbuffers/protobuf.git", - tag = "v3.20.3", -) - -load("@com_google_protobuf//:protobuf_deps.bzl", "protobuf_deps") -protobuf_deps() - -# Filesystem -# The new_* prefix is used because it is not a bazel project and there is -# no BUILD file in that repo. -FILESYSTEM_BUILD = """ -cc_library( - name = "filesystem", - hdrs = glob(["include/ghc/*"]), - visibility = ["//visibility:public"], -) -""" - -new_git_repository( - name = "gulrak_filesystem", - remote = "https://github.com/gulrak/filesystem.git", - tag = "v1.3.6", - build_file_content = FILESYSTEM_BUILD -) - -# Google Abseil Libs -git_repository( - name = "com_google_absl", - remote = "https://github.com/abseil/abseil-cpp.git", - tag = "20211102.0", - # Remove after https://github.com/abseil/abseil-cpp/issues/326 is solved. - #patches = [ - # "@lyra//third_party:com_google_absl_f863b622fe13612433fdf43f76547d5edda0c93001.diff" - #], - #patch_args = [ - # "-p1", - #] -) - -# Audio DSP -git_repository( - name = "com_google_audio_dsp", - # TODO(b/231448719) use main google repo after merging PR for TF eigen compatibility. - remote = "https://github.com/mchinen/multichannel-audio-tools.git", - # There are no tags for this repo, we are synced to bleeding edge. - commit = "14a45c5a7c965e5ef01fe537bd816ce10a247813", - repo_mapping = { - "@com_github_glog_glog" : "@com_google_glog", - "@eigen3": "@eigen_archive" - } -) - -# Transitive dependencies of Audio DSP. -# Note: eigen is used by Audio DSP, but provided through tensorflow workspace functions. - -http_archive( - name = "fft2d", - build_file = "fft2d.BUILD", - sha256 = "ada7e99087c4ed477bfdf11413f2ba8db8a840ba9bbf8ac94f4f3972e2a7cec9", - urls = [ - "http://www.kurims.kyoto-u.ac.jp/~ooura/fft2d.tgz", - ], -) - -# Begin Tensorflow WORKSPACE subset required for TFLite - -git_repository( - name = "org_tensorflow", - remote = "https://github.com/tensorflow/tensorflow.git", - # Below is reproducible and equivalent to `tag = "v2.9.0"` - commit = "8a20d54a3c1bfa38c03ea99a2ad3c1b0a45dfa95", - shallow_since = "1652465115 -0700", - patches = ["//:patches/android_tensorflow.patch", "//:patches/use_exceptions_tensorflow.patch"], - patch_args = ["-p1"] -) - -# Check bazel version requirement, which is stricter than TensorFlow's. -load( - "@org_tensorflow//tensorflow:version_check.bzl", - "check_bazel_version_at_least", -) - -check_bazel_version_at_least("3.7.2") - -# TF WORKSPACE Loading functions -# This section uses a subset of the tensorflow WORKSPACE loading by reusing its contents. -# There are four workspace() functions create repos for the dependencies. -# TF's loading is very complicated, and we only need a subset for TFLite. -# If we use the full TF loading sequence, we also run into conflicts and errors on some platforms. - -# Android 用のパッチを当てるために別途でリポジトリを取得しておく -load("@org_tensorflow//third_party:repo.bzl", "tf_http_archive", "tf_mirror_urls") - -tf_http_archive( - name = "XNNPACK", - sha256 = "7e9ad45391e5158fd00e816022bda21d54a6180788af7c455c864a78cee252c6", - strip_prefix = "XNNPACK-11b2812d64e49bab9b6c489f79067fc94e69db9f", - urls = tf_mirror_urls("https://github.com/google/XNNPACK/archive/11b2812d64e49bab9b6c489f79067fc94e69db9f.zip"), - patch_file = ["@//:patches/android_xnnpack.patch"] -) - -load("@org_tensorflow//tensorflow:workspace3.bzl", workspace3 = "workspace") -workspace3() - -load("@org_tensorflow//tensorflow:workspace2.bzl", workspace2 = "workspace") -workspace2() - -load("//:toolchain/linux_x86_64/toolchain_configure.bzl", "webrtc_clang_toolchain_configure") -webrtc_clang_toolchain_configure(name = "webrtc_clang_toolchain", src = "@//:toolchain/linux_x86_64/BUILD.tpl") - -load("//:toolchain/android/toolchain_configure.bzl", "android_toolchain_configure") -android_toolchain_configure(name = "android_toolchain", src = "@//:toolchain/android/BUILD.tpl") diff --git a/third_party/lyra/cc_static_library.bzl b/third_party/lyra/cc_static_library.bzl deleted file mode 100644 index 580825e3..00000000 --- a/third_party/lyra/cc_static_library.bzl +++ /dev/null @@ -1,65 +0,0 @@ -load("@bazel_tools//tools/cpp:toolchain_utils.bzl", "find_cpp_toolchain", "use_cpp_toolchain") - -# 依存するオブジェクトファイルを集めて静的ライブラリを作る -def _impl(ctx): - cc_toolchain = find_cpp_toolchain(ctx) - windows_constraint = ctx.attr._windows_constraint[platform_common.ConstraintValueInfo] - macos_constraint = ctx.attr._macos_constraint[platform_common.ConstraintValueInfo] - - if ctx.target_platform_has_constraint(windows_constraint): - output = ctx.actions.declare_file("{}.lib".format(ctx.attr.name)) - else: - output = ctx.actions.declare_file("lib{}.a".format(ctx.attr.name)) - - lib_sets = [] - for dep in ctx.attr.deps: - lib_sets.append(dep[CcInfo].linking_context.linker_inputs) - input_depset = depset(transitive = lib_sets) - - libs = [] - # dep: LinkerInput - for dep in input_depset.to_list(): - # lib: LibraryToLink - for lib in dep.libraries: - if lib.pic_static_library != None: - libs.append(lib.pic_static_library) - elif lib.static_library != None: - libs.append(lib.static_library) - - lib_paths = [lib.path for lib in libs] - - ar_path = cc_toolchain.ar_executable - - if ctx.target_platform_has_constraint(windows_constraint): - command = "\"{0}\" /OUT:{1} {2}".format(ar_path, output.path, " ".join(lib_paths)) - elif ctx.target_platform_has_constraint(macos_constraint): - command = '"{0}" -static -o {1} {2}'.format('libtool', output.path, " ".join(lib_paths)) - else: - command = 'echo "CREATE {1}\n{2}\nSAVE\nEND\n" | "{0}" -M'.format(ar_path, output.path, "\n".join(["ADDLIB " + path for path in lib_paths])) - - print(command) - - ctx.actions.run_shell( - command = command, - inputs = libs + cc_toolchain.all_files.to_list(), - outputs = [output], - mnemonic = "Archive", - progress_message = "Archiving all files to {}".format(output.path), - ) - return [ - DefaultInfo(files = depset([output])), - ] - -cc_static_library = rule( - implementation = _impl, - attrs = { - "deps": attr.label_list(), - "_cc_toolchain": attr.label( - default = "@bazel_tools//tools/cpp:current_cc_toolchain", - ), - '_windows_constraint': attr.label(default = "@platforms//os:windows"), - '_macos_constraint': attr.label(default = "@platforms//os:macos"), - }, - toolchains = use_cpp_toolchain(), - incompatible_use_toolchain_transition = True, -) diff --git a/third_party/lyra/external/fft2d.BUILD b/third_party/lyra/external/fft2d.BUILD deleted file mode 100644 index 7aff3329..00000000 --- a/third_party/lyra/external/fft2d.BUILD +++ /dev/null @@ -1,25 +0,0 @@ -package(default_visibility = ["//visibility:public"]) - -# Unrestricted use; can only distribute original package. -# See fft2d/readme2d.txt -licenses(["notice"]) - -exports_files(["LICENSE"]) - -# This is the main 2D FFT library. The 2D FFTs in this library call -# 1D FFTs. In addition, fast DCTs are provided for the special case -# of 8x8 and 16x16. This code in this library is referred to as -# "Version II" on http://momonga.t.u-tokyo.ac.jp/~ooura/fft.html. -cc_library( - name = "fft2d", - srcs = [ - "fft2d/alloc.c", - "fft2d/fftsg.c", - "fft2d/fftsg2d.c", - "fft2d/shrtdct.c", - ], - textual_hdrs = [ - "fft2d/alloc.h", - ], - linkopts = ["-lm"], -) diff --git a/third_party/lyra/lyra.cc b/third_party/lyra/lyra.cc deleted file mode 100644 index 2fb5c4d2..00000000 --- a/third_party/lyra/lyra.cc +++ /dev/null @@ -1,57 +0,0 @@ -#include "lyra.h" - -#include "lyra/lyra_decoder.h" - -using namespace chromemedia::codec; - -extern "C" { - -struct lyra_decoder { - std::unique_ptr decoder; -}; - -struct lyra_vector_s16 { - std::vector vec; -}; - -lyra_decoder* lyra_decoder_create(int sample_rate_hz, - int num_channels, - const char* model_path) { - auto decoder = LyraDecoder::Create(sample_rate_hz, num_channels, model_path); - if (decoder == nullptr) { - return nullptr; - } - auto p = new lyra_decoder(); - p->decoder = std::move(decoder); - return p; -} -bool lyra_decoder_set_encoded_packet(lyra_decoder* decoder, - const uint8_t* encoded, - size_t length) { - return decoder->decoder->SetEncodedPacket( - absl::MakeConstSpan(encoded, length)); -} -lyra_vector_s16* lyra_decoder_decode_samples(lyra_decoder* decoder, - int num_samples) { - auto r = decoder->decoder->DecodeSamples(num_samples); - if (!r) { - return nullptr; - } - auto p = new lyra_vector_s16(); - p->vec = std::move(*r); - return p; -} -void lyra_decoder_destroy(lyra_decoder* decoder) { - delete decoder; -} - -size_t lyra_vector_s16_get_size(lyra_vector_s16* v) { - return v->vec.size(); -} -int16_t* lyra_vector_s16_get_data(lyra_vector_s16* v) { - return v->vec.data(); -} -void lyra_vector_s16_destroy(lyra_vector_s16* v) { - delete v; -} -} diff --git a/third_party/lyra/lyra.h b/third_party/lyra/lyra.h deleted file mode 100644 index 124d0a1a..00000000 --- a/third_party/lyra/lyra.h +++ /dev/null @@ -1,27 +0,0 @@ -#ifndef LYRA_H_INCLUDED -#define LYRA_H_INCLUDED - -#include -#include - -extern "C" { - -struct lyra_decoder; -struct lyra_vector_s16; - -lyra_decoder* lyra_decoder_create(int sample_rate_hz, - int num_channels, - const char* model_path); -bool lyra_decoder_set_encoded_packet(lyra_decoder* decoder, - const uint8_t* encoded, - size_t length); -lyra_vector_s16* lyra_decoder_decode_samples(lyra_decoder* decoder, - int num_samples); -void lyra_decoder_destroy(lyra_decoder* decoder); - -size_t lyra_vector_s16_get_size(lyra_vector_s16* v); -int16_t* lyra_vector_s16_get_data(lyra_vector_s16* v); -void lyra_vector_s16_destroy(lyra_vector_s16* v); -} - -#endif diff --git a/third_party/lyra/patches/android_tensorflow.patch b/third_party/lyra/patches/android_tensorflow.patch deleted file mode 100644 index 6a441506..00000000 --- a/third_party/lyra/patches/android_tensorflow.patch +++ /dev/null @@ -1,34 +0,0 @@ -# org_tensorflow 用の Android 向けパッチ - ---- a/third_party/cpuinfo/cpuinfo.BUILD -+++ b/third_party/cpuinfo/cpuinfo.BUILD -@@ -257,7 +257,7 @@ - config_setting( - name = "android_arm64", - values = { -- "crosstool_top": "//external:android/crosstool", -+ "crosstool_top": "@android_toolchain//:toolchain", - "cpu": "arm64-v8a", - }, - visibility = ["//visibility:public"], - ---- a/tensorflow/BUILD -+++ b/tensorflow/BUILD -@@ -111,7 +111,7 @@ config_setting( - {}, - ), - values = if_oss( -- {"crosstool_top": "//external:android/crosstool"}, -+ {"crosstool_top": "@android_toolchain//:toolchain"}, - {}, - ), - visibility = ["//visibility:public"], -@@ -230,7 +230,7 @@ config_setting( - ), - values = dict( - if_oss( -- {"crosstool_top": "//external:android/crosstool"}, -+ {"crosstool_top": "@android_toolchain//:toolchain"}, - ), - cpu = "arm64-v8a", - ), diff --git a/third_party/lyra/patches/android_xnnpack.patch b/third_party/lyra/patches/android_xnnpack.patch deleted file mode 100644 index ddf99578..00000000 --- a/third_party/lyra/patches/android_xnnpack.patch +++ /dev/null @@ -1,13 +0,0 @@ -# XNNPACK 用の Android 向けパッチ - ---- a/BUILD.bazel -+++ b/BUILD.bazel -@@ -13925,7 +13925,7 @@ - config_setting( - name = "android_arm64", - values = { -- "crosstool_top": "//external:android/crosstool", -+ "crosstool_top": "@android_toolchain//:toolchain", - "cpu": "arm64-v8a", - }, - ) diff --git a/third_party/lyra/patches/lyra.patch b/third_party/lyra/patches/lyra.patch deleted file mode 100644 index 982245e6..00000000 --- a/third_party/lyra/patches/lyra.patch +++ /dev/null @@ -1,14 +0,0 @@ -# WebRTC が lite しか利用していないので、それに合わせて lyra_config.proto も lite モードにする -diff --git a/lyra_config.proto b/lyra_config.proto -index 86ffe2f..ff6ac42 100644 ---- a/lyra_config.proto -+++ b/lyra_config.proto -@@ -14,6 +14,8 @@ - - syntax = "proto2"; - -+option optimize_for = LITE_RUNTIME; -+ - package third_party.lyra_codec; - - // Main message to check version, including weights and bitstream, diff --git a/third_party/lyra/patches/use_exceptions_tensorflow.patch b/third_party/lyra/patches/use_exceptions_tensorflow.patch deleted file mode 100644 index 5c3af740..00000000 --- a/third_party/lyra/patches/use_exceptions_tensorflow.patch +++ /dev/null @@ -1,13 +0,0 @@ -diff --git a/tensorflow/lite/build_def.bzl b/tensorflow/lite/build_def.bzl -index 43015747773..d361e6f6c47 100644 ---- a/tensorflow/lite/build_def.bzl -+++ b/tensorflow/lite/build_def.bzl -@@ -42,7 +42,7 @@ def tflite_copts(): - }) + select({ - clean_dep("//tensorflow:windows"): [], - "//conditions:default": [ -- "-fno-exceptions", # Exceptions are unused in TFLite. -+ # "-fno-exceptions", # Exceptions are unused in TFLite. - ], - }) - diff --git a/third_party/lyra/toolchain/android/BUILD.tpl b/third_party/lyra/toolchain/android/BUILD.tpl deleted file mode 100644 index e425b7ee..00000000 --- a/third_party/lyra/toolchain/android/BUILD.tpl +++ /dev/null @@ -1,151 +0,0 @@ -load("@bazel_tools//tools/cpp:unix_cc_toolchain_config.bzl", "cc_toolchain_config") - -package(default_visibility = ["//visibility:public"]) - -filegroup( - name = "empty", - srcs = [] -) - -cc_toolchain_config( - name = "android_arm64_v8a_toolchain_config", - cpu = "arm64-v8a", - compiler = "clang", - toolchain_identifier = "android_arm64_v8a_toolchain", - host_system_name = "Android arm64-v8a", - target_system_name = "Android arm64-v8a", - target_libc = "libc", - abi_version = "local", - abi_libc_version = "local", - cxx_builtin_include_directories = [ - '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/lib64/clang/%{clang_version}/include', - '%sysroot%/usr/include', - '%sysroot%/usr/local/include', - "%{webrtc_include_dir}/buildtools/third_party/libc++abi/trunk/include", - "%{llvm_dir}/libcxx/include", - ], - tool_paths = { - "ar": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-ar', - "cpp": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang++', - "gcc": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/bin/clang', - "ld": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/bin/lld', - "nm": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-nm', - "strip": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-strip', - "llvm-cov": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/llvm-cov', - "objdump": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objdump', - "objcopy": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-objcopy', - "dwp": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/bin/llvm-dwp', - "llvm-profdata": '%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/llvm-profdata', - }, - compile_flags = [ - "-fstack-protector", - # All warnings are enabled. - "-Wall", - # Enable a few more warnings that aren't part of -Wall. - "-Wthread-safety", - "-Wself-assign", - # Disable problematic warnings. - #"-Wunused-but-set-parameter", - # has false positives - "-Wno-free-nonheap-object", - # Enable coloring even if there's no attached terminal. Bazel removes the - # escape sequences if --nocolor is specified. - "-fcolor-diagnostics", - # Keep stack frames for debugging, even in opt mode. - "-fno-omit-frame-pointer", - - "--target=aarch64-none-linux-android%{android_api}", - "-D__ANDROID_API__=%{android_api}", - ], - dbg_compile_flags = [ - "-g", - ], - opt_compile_flags = [ - # No debug symbols. - # Maybe we should enable https://gcc.gnu.org/wiki/DebugFission for opt or - # even generally? However, that can't happen here, as it requires special - # handling in Bazel. - "-g0", - - # Conservative choice for -O - # -O3 can increase binary size and even slow down the resulting binaries. - # Profile first and / or use FDO if you need better performance than this. - "-O2", - - # Security hardening on by default. - # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases. - "-D_FORTIFY_SOURCE=1", - - # Disable assertions - "-DNDEBUG", - - # Removal of unused code and data at link time (can this increase binary - # size in some cases?). - "-ffunction-sections", - "-fdata-sections", - ], - # conly_flags = [], - cxx_flags = [ - "-isystem%{llvm_dir}/libcxx/include", - "-isystem%{webrtc_include_dir}/buildtools/third_party/libc++abi/trunk/include", - "-std=c++17", - "-nostdinc++", - "-D_LIBCPP_ABI_NAMESPACE=Cr", - "-D_LIBCPP_ABI_VERSION=2", - "-D_LIBCPP_DISABLE_AVAILABILITY", - "-fexperimental-relative-c++-abi-vtables", - "-fexceptions", - ], - link_flags = [ - "-Wl,-no-as-needed", - "-Wl,-z,relro,-z,now", - "-B", "%{llvm_dir}/clang/bin/", - "-L", "%{webrtc_library_dir}", - "--target=aarch64-none-linux-android%{android_api}", - ], - # archive_flags = [], - link_libs = [ - "-lwebrtc", - "-lpthread", - "-lm", - ], - opt_link_flags = [ - "-Wl,--gc-sections", - ], - unfiltered_compile_flags = [], - coverage_compile_flags = [], - coverage_link_flags = [], - supports_start_end_lib = False, - builtin_sysroot = "%{android_ndk}/toolchains/llvm/prebuilt/linux-x86_64/sysroot", -) - -cc_toolchain( - name = "cc_compiler_android_arm64_v8a_clang", - all_files = ":empty", - ar_files = ":empty", - as_files = ":empty", - compiler_files = ":empty", - dwp_files = ":empty", - linker_files = ":empty", - objcopy_files = ":empty", - strip_files = ":empty", - supports_param_files = 0, - toolchain_config = ":android_arm64_v8a_toolchain_config", - toolchain_identifier = "local_android_arm64_v8a", -) - -cc_toolchain_suite( - name = "toolchain", - toolchains = { - "arm64-v8a": ":cc_compiler_android_arm64_v8a_clang", - }, -) - -config_setting( - name = "android_arm64", - values = { - "crosstool_top": "@android_toolchain//:toolchain", - "cpu": "arm64-v8a", - }, - visibility = ["//visibility:public"], -) diff --git a/third_party/lyra/toolchain/android/toolchain_configure.bzl b/third_party/lyra/toolchain/android/toolchain_configure.bzl deleted file mode 100644 index e4e36591..00000000 --- a/third_party/lyra/toolchain/android/toolchain_configure.bzl +++ /dev/null @@ -1,38 +0,0 @@ -def _impl(repository_ctx): - if not ('ANDROID_NDK_HOME' in repository_ctx.os.environ and - 'ANDROID_API' in repository_ctx.os.environ): - return - - if not ('CLANG_VERSION' in repository_ctx.os.environ and - 'BAZEL_LLVM_DIR' in repository_ctx.os.environ and - 'BAZEL_WEBRTC_INCLUDE_DIR' in repository_ctx.os.environ and - 'BAZEL_WEBRTC_LIBRARY_DIR' in repository_ctx.os.environ): - return - - android_ndk = repository_ctx.os.environ['ANDROID_NDK_HOME'] - android_api = repository_ctx.os.environ['ANDROID_API'] - clang_version = repository_ctx.os.environ['CLANG_VERSION'] - llvm_dir = repository_ctx.os.environ['BAZEL_LLVM_DIR'] - webrtc_include_dir = repository_ctx.os.environ['BAZEL_WEBRTC_INCLUDE_DIR'] - webrtc_library_dir = repository_ctx.os.environ['BAZEL_WEBRTC_LIBRARY_DIR'] - repository_ctx.template( - "BUILD", - repository_ctx.attr.src, - { - "%{android_ndk}": android_ndk, - "%{android_api}": android_api, - "%{clang_version}": clang_version, - "%{llvm_dir}": llvm_dir, - "%{webrtc_include_dir}": webrtc_include_dir, - "%{webrtc_library_dir}": webrtc_library_dir, - }, - False - ) - - -android_toolchain_configure = repository_rule( - implementation = _impl, - attrs = { - "src": attr.label(executable = False, mandatory = True), - } -) diff --git a/third_party/lyra/toolchain/linux_x86_64/BUILD.tpl b/third_party/lyra/toolchain/linux_x86_64/BUILD.tpl deleted file mode 100644 index 59476df0..00000000 --- a/third_party/lyra/toolchain/linux_x86_64/BUILD.tpl +++ /dev/null @@ -1,255 +0,0 @@ -load("@bazel_tools//tools/cpp:unix_cc_toolchain_config.bzl", "cc_toolchain_config") - -filegroup( - name = "empty", - srcs = [] -) - -# cc_toolchain_config は -# https://github.com/bazelbuild/bazel/blob/7b88517ba64434821d388e2490fa3fee2bb95437/tools/cpp/unix_cc_configure.bzl -# の実装を参考にして記述 - -cc_toolchain_config( - name = "linux_x86_64_toolchain_config", - cpu = "x86_64", - compiler = "clang", - toolchain_identifier = "linux_x86_64_toolchain", - host_system_name = "Linux x86_64", - target_system_name = "Linux x86_64", - target_libc = "libc", - abi_version = "local", - abi_libc_version = "local", - cxx_builtin_include_directories = [ - "%{llvm_dir}/clang/lib/clang/%{clang_version}/include", - "/usr/include/x86_64-linux-gnu", - "/usr/include", - "%{llvm_dir}/libcxx/include", - ], - tool_paths = { - "ar": "%{llvm_dir}/bin/llvm-ar", - "cpp": "%{llvm_dir}/bin/clang++", - "gcc": "%{llvm_dir}/bin/clang", - "ld": "%{llvm_dir}/bin/lld", - "nm": "%{llvm_dir}/bin/llvm-nm", - "strip": "%{llvm_dir}/bin/llvm-strip", - "llvm-cov": "llvm-cov", - "objdump": "objdump", - }, - compile_flags = [ - "-fstack-protector", - # All warnings are enabled. - "-Wall", - # Enable a few more warnings that aren't part of -Wall. - "-Wthread-safety", - "-Wself-assign", - # Disable problematic warnings. - #"-Wunused-but-set-parameter", - # has false positives - "-Wno-free-nonheap-object", - # Enable coloring even if there's no attached terminal. Bazel removes the - # escape sequences if --nocolor is specified. - "-fcolor-diagnostics", - # Keep stack frames for debugging, even in opt mode. - "-fno-omit-frame-pointer", - ], - dbg_compile_flags = [ - "-g", - ], - opt_compile_flags = [ - # No debug symbols. - # Maybe we should enable https://gcc.gnu.org/wiki/DebugFission for opt or - # even generally? However, that can't happen here, as it requires special - # handling in Bazel. - "-g0", - - # Conservative choice for -O - # -O3 can increase binary size and even slow down the resulting binaries. - # Profile first and / or use FDO if you need better performance than this. - "-O2", - - # Security hardening on by default. - # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases. - "-D_FORTIFY_SOURCE=1", - - # Disable assertions - "-DNDEBUG", - - # Removal of unused code and data at link time (can this increase binary - # size in some cases?). - "-ffunction-sections", - "-fdata-sections", - ], - # conly_flags = [], - cxx_flags = [ - "-isystem%{llvm_dir}/libcxx/include", - "-std=c++17", - "-nostdinc++", - "-D_LIBCPP_ABI_NAMESPACE=Cr", - "-D_LIBCPP_ABI_VERSION=2", - "-D_LIBCPP_DISABLE_AVAILABILITY", - ], - link_flags = [ - "-Wl,-no-as-needed", - "-Wl,-z,relro,-z,now", - "-B", "%{llvm_dir}/bin/", - ], - # archive_flags = [], - link_libs = [ - "-lpthread", - "-lm", - ], - opt_link_flags = [ - "-Wl,--gc-sections", - ], - unfiltered_compile_flags = [], - coverage_compile_flags = [], - coverage_link_flags = [], - supports_start_end_lib = False, - builtin_sysroot = "", -) - -cc_toolchain( - name = "cc_compiler_linux_x86_64_clang", - all_files = ":empty", - ar_files = ":empty", - as_files = ":empty", - compiler_files = ":empty", - dwp_files = ":empty", - linker_files = ":empty", - objcopy_files = ":empty", - strip_files = ":empty", - supports_param_files = 0, - toolchain_config = ":linux_x86_64_toolchain_config", - toolchain_identifier = "local_linux_x86_64", -) - -cc_toolchain_config( - name = "linux_aarch64_toolchain_config", - cpu = "aarch64", - compiler = "clang", - toolchain_identifier = "linux_aarch64_toolchain", - host_system_name = "Linux aarch64", - target_system_name = "Linux aarch64", - target_libc = "libc", - abi_version = "local", - abi_libc_version = "local", - cxx_builtin_include_directories = [ - "%{llvm_dir}/lib/clang/%{clang_version}/include", - "%{sysroot}/usr/include/aarch64-linux-gnu", - "%{sysroot}/usr/include", - "%{sysroot}/usr/include/aarch64-linux-gnu/c++/10", - "%{sysroot}/usr/include/aarch64-linux-gnu/c++/10/aarch64-linux-gnu", - "/usr/aarch64-linux-gnu/include", - "/usr/include", - ], - tool_paths = { - "ar": "%{llvm_dir}/bin/llvm-ar", - "cpp": "%{llvm_dir}/bin/clang++", - "gcc": "%{llvm_dir}/bin/clang", - "ld": "%{llvm_dir}/bin/lld", - "nm": "%{llvm_dir}/bin/llvm-nm", - "strip": "%{llvm_dir}/bin/llvm-strip", - "llvm-cov": "llvm-cov", - "objdump": "objdump", - }, - compile_flags = [ - "-fstack-protector", - # All warnings are enabled. - "-Wall", - # Enable a few more warnings that aren't part of -Wall. - "-Wthread-safety", - "-Wself-assign", - # Disable problematic warnings. - #"-Wunused-but-set-parameter", - # has false positives - "-Wno-free-nonheap-object", - # Enable coloring even if there's no attached terminal. Bazel removes the - # escape sequences if --nocolor is specified. - "-fcolor-diagnostics", - # Keep stack frames for debugging, even in opt mode. - "-fno-omit-frame-pointer", - - "--target=aarch64-linux-gnu", - ], - dbg_compile_flags = [ - "-g", - ], - opt_compile_flags = [ - # No debug symbols. - # Maybe we should enable https://gcc.gnu.org/wiki/DebugFission for opt or - # even generally? However, that can't happen here, as it requires special - # handling in Bazel. - "-g0", - - # Conservative choice for -O - # -O3 can increase binary size and even slow down the resulting binaries. - # Profile first and / or use FDO if you need better performance than this. - "-O2", - - # Security hardening on by default. - # Conservative choice; -D_FORTIFY_SOURCE=2 may be unsafe in some cases. - "-D_FORTIFY_SOURCE=1", - - # Disable assertions - "-DNDEBUG", - - # Removal of unused code and data at link time (can this increase binary - # size in some cases?). - "-ffunction-sections", - "-fdata-sections", - ], - # conly_flags = [], - cxx_flags = [ - # "-isystem%{llvm_dir}/lib/clang/%{clang_version}/include", - # "-isystem/usr/aarch64-linux-gnu/include", - "-isystem/usr/aarch64-linux-gnu/include/c++/10", - "-isystem/usr/aarch64-linux-gnu/include/c++/10/aarch64-linux-gnu", - "-std=c++17", - "-nostdinc++", - "-D_LIBCPP_ABI_NAMESPACE=Cr", - "-D_LIBCPP_ABI_VERSION=2", - "-D_LIBCPP_DISABLE_AVAILABILITY", - ], - link_flags = [ - "-Wl,-no-as-needed", - "-Wl,-z,relro,-z,now", - "-B", "%{llvm_dir}/bin/", - "--target=aarch64-linux-gnu", - ], - # archive_flags = [], - link_libs = [ - "-lpthread", - "-lm", - ], - opt_link_flags = [ - "-Wl,--gc-sections", - ], - unfiltered_compile_flags = [], - coverage_compile_flags = [], - coverage_link_flags = [], - supports_start_end_lib = False, - builtin_sysroot = "%{sysroot}", -) - -cc_toolchain( - name = "cc_compiler_linux_aarch64_clang", - all_files = ":empty", - ar_files = ":empty", - as_files = ":empty", - compiler_files = ":empty", - dwp_files = ":empty", - linker_files = ":empty", - objcopy_files = ":empty", - strip_files = ":empty", - supports_param_files = 0, - toolchain_config = ":linux_aarch64_toolchain_config", - toolchain_identifier = "local_linux_aarch64", -) - -cc_toolchain_suite( - name = "toolchain", - toolchains = { - "k8": ":cc_compiler_linux_x86_64_clang", - "aarch64": ":cc_compiler_linux_aarch64_clang", - }, -) diff --git a/third_party/lyra/toolchain/linux_x86_64/toolchain_configure.bzl b/third_party/lyra/toolchain/linux_x86_64/toolchain_configure.bzl deleted file mode 100644 index 2bb07c51..00000000 --- a/third_party/lyra/toolchain/linux_x86_64/toolchain_configure.bzl +++ /dev/null @@ -1,26 +0,0 @@ -def _impl(repository_ctx): - if not ('CLANG_VERSION' in repository_ctx.os.environ and - 'BAZEL_LLVM_DIR' in repository_ctx.os.environ): - return - - clang_version = repository_ctx.os.environ['CLANG_VERSION'] - llvm_dir = repository_ctx.os.environ['BAZEL_LLVM_DIR'] - sysroot = repository_ctx.os.environ['BAZEL_SYSROOT'] if 'BAZEL_SYSROOT' in repository_ctx.os.environ else '' - repository_ctx.template( - "BUILD", - repository_ctx.attr.src, - { - "%{clang_version}": clang_version, - "%{llvm_dir}": llvm_dir, - "%{sysroot}": sysroot, - }, - False - ) - - -webrtc_clang_toolchain_configure = repository_rule( - implementation = _impl, - attrs = { - "src": attr.label(executable = False, mandatory = True), - } -)