Skip to content

AMD AMF ハードウェアエンコーダ/デコーダのサポートを追加 #380

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 19 commits into
base: develop
Choose a base branch
from

Conversation

voluntas
Copy link
Member

@voluntas voluntas commented Aug 7, 2025

H.264/H.265/AV1 の AMD AMF ハードウェアエンコーダを利用可能にする実装を追加。

主な変更点:

  • CMake オプション USE_AMF_ENCODER で有効化可能
  • Windows では DirectX 11、Linux では Vulkan を利用
  • Windows および Ubuntu (22.04/24.04) x86_64 でサポート
  • buildbase.py と run.py に AMF SDK インストール処理を追加
  • --disable-amf オプションで無効化可能

実装内容:

  • src/hwenc_amf/ に AMD AMF エンコーダ/デコーダ実装を追加
  • MomoVideoEncoderFactory/MomoVideoDecoderFactory に AMD AMF 統合
  • RTCManager での AMF コンテキスト初期化処理を追加
  • VideoCodecInfo::Type::AMD を追加

H.264/H.265/AV1 の AMD AMF ハードウェアエンコーダを利用可能にする実装を追加。

主な変更点:
- CMake オプション USE_AMF_ENCODER で有効化可能
- Windows では DirectX 11、Linux では Vulkan を利用
- Windows および Ubuntu (22.04/24.04) x86_64 でサポート
- buildbase.py と run.py に AMF SDK インストール処理を追加
- --disable-amf オプションで無効化可能

実装内容:
- src/hwenc_amf/ に AMD AMF エンコーダ/デコーダ実装を追加
- MomoVideoEncoderFactory/MomoVideoDecoderFactory に AMD AMF 統合
- RTCManager での AMF コンテキスト初期化処理を追加
- VideoCodecInfo::Type::AMD を追加
@voluntas voluntas changed the title [ADD] AMD AMF ハードウェアエンコーダ/デコーダのサポートを追加 AMD AMF ハードウェアエンコーダ/デコーダのサポートを追加 Aug 7, 2025
AMD AMF サポート追加の詳細情報を CHANGES.md に追記:
- 対応プラットフォームの明記 (Windows/Ubuntu x86_64)
- ビルドオプションとCMakeオプションの説明
- AMF SDK バージョン情報 (v1.4.35)
- VideoCodecInfo への AMD タイプ追加について言及
C++ SDK の実装に合わせて、AMF SDK のソースファイルを直接コンパイルする方式に変更。
これにより Ubuntu での Vulkan パッケージ依存を削除し、ビルドエラーを解消。

変更内容:
- AMF SDK のソースファイル (AMFFactory.cpp 等) を直接コンパイル対象に追加
- インクルードパスを ${AMF_ROOT_DIR}/amf に統一
- Linux での不要な Vulkan pkg-config チェックとリンクを削除
独自の AMFFactoryHelper クラス定義を削除し、AMF SDK の AMFFactoryHelper 型を直接使用するように変更。
これにより型の不一致によるコンパイルエラーを解消。
Sora C++ SDK の実装に合わせて、プラットフォーム固有のスレッド実装ファイルを追加:
- Windows: ThreadWindows.cpp
- Linux: ThreadLinux.cpp

また、GitHub Actions の Ubuntu ビルドに libxfixes-dev パッケージを追加
@@ -171,7 +171,7 @@ jobs:
# Intel Media SDK のために libva-dev, libdrm-dev を入れる
DEBIAN_FRONTEND=noninteractive sudo apt-get -y install libva-dev libdrm-dev
# スクリーンキャプチャあたりのためのパッケージを入れる
DEBIAN_FRONTEND=noninteractive sudo apt-get -y install libxrandr-dev libxdamage-dev libxcomposite-dev libxtst-dev
DEBIAN_FRONTEND=noninteractive sudo apt-get -y install libxrandr-dev libxdamage-dev libxfixes-dev libxcomposite-dev libxtst-dev
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

なぜ libxfixes-dev が必要のなったのかわかっていない。

- Momo 独自の AMF 実装 (src/hwenc_amf/) を削除
- Sora C++ SDK の AMF 実装を src/sora-cpp-sdk/ 以下に配置
- CMakeLists.txt のソースパスを更新
- namespace を momo:: から sora:: に変更
- include パスを Sora C++ SDK のものに変更
- amf_video_codec.cpp/h は Sora C++ SDK の VideoCodecCapability 機能用
- Momo では VPL でも同様のファイルを使っていないため AMF でも不要
- CMakeLists.txt から amf_video_codec.cpp を削除
- エンコーダだけでなくデコーダもサポートしていることを明記
- Sora C++ SDK の AMF 実装を取り込んだことを追記
@voluntas
Copy link
Member Author

voluntas commented Aug 7, 2025

!opus レビューして

Copy link

github-actions bot commented Aug 7, 2025

Claude finished @voluntas's task —— View job


レビューを行いました。

タスクリスト

  • CLAUDE.md を確認してレビューガイドラインを理解する
  • AMD AMF 実装のコアファイルをレビューする
  • 既存のビデオエンコーダ/デコーダファクトリとの統合を確認する
  • ビルドシステムの変更を確認する
  • 包括的なレビューフィードバックを提供する

レビュー結果

🔴 重大な問題

1. AMD AMF デコーダーの統合が未完了

  • src/rtc/momo_video_decoder_factory.cpp に AMF デコーダーの実装が完全に欠落している
  • AMF ヘッダーファイルの include、条件付きコンパイル、GetSupportedFormats()Create() での処理が必要

🟡 中程度の問題

1. エラーハンドリングの不一致

  • src/sora-cpp-sdk/src/hwenc_amf/amf_video_encoder.cpp:544 でエラー時に AMF_FAIL を返しているが、WebRTC の規約に従うべき

2. メモリタイプの選択

  • src/sora-cpp-sdk/src/hwenc_amf/amf_video_encoder.cpp:388memory_type_ が固定値で設定されているが、設定可能にすることを検討すべき

3. 未使用コードのコメントアウト

  • エンコーダー/デコーダーの実装に大量のコメントアウトされたコードが存在する(profile/level 設定など)
  • 削除するか、必要なら有効化すべき

🟢 良い点

1. 適切な抽象化

  • AMF の実装が Impl パターンで適切に抽象化されている
  • WebRTC のインターフェースに正しく準拠している

2. プラットフォーム対応

  • Windows (DirectX 11) と Linux (Vulkan) の両方に対応
  • 条件付きコンパイルが適切に使用されている

3. コーデック対応

  • H.264、H.265、AV1 の主要コーデックに対応
  • 各コーデックの特性に応じた適切な設定

📝 改善提案

1. デバッグログの削除

  • amf_video_decoder.cpp:113RTC_LOG(LS_ERROR) は INFO レベルにすべき

2. マジックナンバーの定数化

  • amf_video_decoder.cpp:105300 などのマジックナンバーを定数化すべき

3. エラーメッセージの統一

  • RETURN_IF_FAILED マクロのエラーメッセージ形式を統一すべき

4. リソース管理

  • polling_thread_ の停止条件をより明確にすべき

✅ 確認事項

  • libxfixes-dev の依存関係について .github/workflows/build.yml:174 にコメントがあるが、原因調査が必要
  • CHANGES.md の内容と実装の整合性は確認済み

総評

AMD AMF エンコーダーの実装は概ね良好だが、デコーダーの統合が未完了である点が最も重要な問題。この問題を解決しない限り、機能が不完全な状態でリリースされることになる。

- test/test_sora_mode_amd_amf.py を修正
  - VP9 エンコードテストを除外(VP9 はデコードのみサポート)
  - encoderImplementation/decoderImplementation を "AMF" に修正
  - VP9 デコード専用テスト test_vp9_decode_only を追加
- e2e-test.yml と e2e-test-only.yml に AMD AMF のジョブを追加
  - セルフホステッドランナーで AMD AMF テストを実行するよう設定
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

1 participant