Intel Software Developer Day インテル メディア SDK 概要 2011 年 7 月 15 日インテル株式会社ソフトウェア & サービス統括部アプリケーション エンジニア 竹内康人 1
本日の内容 インテル メディア SDK 構成と疑似コード まとめ 2
インテル メディア SDK - 最適化されたソリューション インテル メディア SDK 共通 API を介して インテル プロセッサー インテル クイック シンク ビデオ インテル HD グラフィックスや将来のインテル アーキテクチャーに最適化されたメディア ライブラリーにアクセス可能 ISV メディア アプリケーション インテル メディア SDK API ( エンコード, デコード, ビデオ プロセス ) インテル プロセッサー 最適化されたメディア ライブラリ インテル GMA 4500HD 最適化されたメディア ライブラリー ** インテル HD グラフィックス最適化されたメディア ライブラリー 第 2 世代インテル Core プロセッサー最適化されたメディア ライブラリー 将来のインテル アーキテクチャー最適化されたメディア ライブラリー ソフトウェア ライブラリー ハードウェア ライブラリー ** インテル Media SDK 1.0 1.5 のみ 3
開発者の利点 パフォーマンス インテル プロセッサーに最適化インテル ハードウェアで高速化カスタムフィルターで拡張可 効率性 HW & SW 両方に共通 API でアクセス可能コードを簡略化可能複雑な DXVA2 コードからの解放 将来性 今日のインテル HD グラフィックスは元より将来のグラフィックス製品 アーキテクチャーもサポート 4
インテル メディア SDK ロードマップ 2010 2011 2012 2013 マルチコア プロセッサー メディア アクセラレータ 2010 インテル Core プロセッサー最大 6 コア 12 スレッド インテル HD グラフィックス HW デコードによるデコードパフォーマンスの向上 第 2 世代インテル Core プロセッサー最大 6 コア 12 スレッド コア数の増加とパフォーマンスの向上を維持 インテル クイック シンク ビデオ HW エンコード HW デコード MSS と price/power の両方でリーダーシップ Ivy Bridge* パフォーマンスリーダシップ Ivy Bridge プロセッサー グラフィックスメディア パフォーマンスの向上 将来の Gen プラットフォームパフォーマンスリーダシップ 次世代プロセッサー グラフィックスメディア パフォーマンスの向上 インテル メディア SDK (API, ソフトウェア ライブラリー サンプルソースコード ドキュメント ) 1.5 特徴 : インテル HD グラフィックス対応 Windows* Vista /Win7 Decode & VPP MFTs 2010 年 5 月 2.0 特徴 : 編集 H.264 &MPEG-2 HW エンコード CPU/GPU ロードバランスカスタムVPP プレミアムコンテンツ Gold Q4 10 3.0 特徴 : IVB, 3D & ビデオ会議 MVC S3D エンコード / デコード... サポートするCodecを追加.. ビデオ会議機能 OpenCL* サンプル進化したデバッグツールパフォーマンスの向上画質の向上 Gold Q2 11 ハードウェア リリースに先立ちソフトウェア機能を実装 4.x 特徴 : 新たな利用シーンに対応 サポートする OS を追加 サポートするインテル プラットフォームを追加 計画中 5 * 開発コード名 製品の計画 リリース スケジュール 仕様は通知なく変更される場合がございます OpenCL と OpenCL ロゴは Apple Inc. のトレードマークで Khronos. の許可の元使用されています
インテル Media SDK 2.0 の主な機能 ビデオエンコーダー ビデオデコーダー ビデオ プロセシング フィルター その他 サポート OS サンプルコード H.264, MPEG-2 H.264, MPEG-2, VC-1 Deinterlacing, Inverse Telecine, Resizing, Color Conversion, Scene Change Detection, Denoising, Frame Rate Conversion, Brightness, Contrast, Hue, Saturation Control, Sharpening Media Foundation Transforms CPU/ プロセッサー グラフィックスロードバランスユーザー定義フィルタープレミアムコンテンツ対応用開発パッケージ ** Microsoft* Windows* 7 (32 and 64-bit) Microsoft* Windows* Vista* (32 and 64-bit) コンソール, DirectShow*, Media Foundation*, トランスコード アプリケーション 6 **RSNDA の締結が前提
インテル Media SDK 3.0 の新機能 トランスコード機能拡張 パフォーマンスの向上 画質向上 Opaque Memory の導入で実装がよりシンプルに MVC エンコード / デコード ステレオ 3D ビデオ会議機能向けの機能拡張 Dynamic Bitrate Control 構造安定性 ( エラー耐性向上 ) エラー検知とレポート機能 低レイテンシー : 応答時間の向上 OpenCL* サンプル 次世代のインテル Core プロセッサーへ最適化 7 OpenCL and the OpenCL logo are trademarks of Apple Inc. used by permission by Khronos.
本日の内容 インテル メディア SDK 構成と疑似コード まとめ 8
インテル メディア SDK の構成 API 構成要素 DECODE: VPP: ENCODE: USER: ピュア ビデオストリームのデコード非圧縮ビデオフレームのプロセスピュア ビデオストリームのエンコード個々のアプリケーションに特有なアルゴリズムをプラグイン コールバックで統合 使用例 : 再生 DECODE 再生 トランスコード DECODE VPP ENCODE 複合トランスコード DXVA2 Decoder VPP ENCODE カスタム処理 DECODE Custom Filter ENCODE 9
トランスコードの疑似コード 1 // セッションの初期化 2 session Init(SW/HW/AUTO) 3 4 // DECODE, VPP, ENCODE の初期化 5 decode DecodeHeader(bitstream, [out] InitParam_d); 6 decode Init(InitParam_d); 7 vpp Init(InitParam_v); 8 encode Init(InitParam_e); DECODE VPP ENCODE セットアップ 9 // トランスコード 10while (bitstream) { 11 decode DecodeFrameAsync(bitstream, [out] frame_d, [out] sync_d); 12 vpp RunFrameVPPAsync(frame_d, [out] frame_v, [out] sync_v); 13 encode EncodeFrameAsync(frame_v, [out] bitstream, [out] sync_e); 14 core SyncOperation(sync_e); 15 } トランスコード 16 // パイプラインのクローズ処理 17 encode Close(); 18 vpp Close(); 19 decode Close(); 20 // セッションクローズ 21 session Close(); クローズ処理 10
セッションと優先順位 1 // セッションの初期化 2 session Init(SW/HW/AUTO) 3 4 // DECODE, VPP, ENCODEの初期化 5 decode DecodeHeader(bitstream, [out] InitParam_d); 6 decode Init(InitParam_d); 7 vpp Init(InitParam_v); 8 encode Init(InitParam_e); 9 10 // トランスコード 11while (bitstream) { 12 decode DecodeFrameAsync(bitstream, [out] frame_d, [out] sync_d); 13 vpp RunFrameVPPAsync(frame_d, [out] frame_v, [out] sync_v); DECODE VPP ENCODE 実行対象 (HW, SW, AUTO) をセッションごとに指定 スループットを最大限に向上させるには複数のセッションを活用 リソースを有効活用するにはセッションを共有 共有セッションの優先順位を設定 14 encode EncodeFrameAsync(frame_v, 共有セッション [out] bitstream, [out] sync_e); SW セッション 15 core SyncOperation(sync_e); 16 } DECODE VPP ENCODE 17 HW セッション 18 // パイプラインのクローズ処理 DECODE VPP ENCODE 19 encode Close(); 20 vpp Close(); 21 decode Close(); 22 23 // セッションクローズ 24 session Close(); 複数の共有セッションの有効利用によってプラットフォームのパフォーマンスを最大限活用できる 11
パラメーター構成 12 1 // セッション初期化 2 session Init(SW/HW/AUTO) 3 4 // DECODE, VPP, ENCODE の初期化 5 decode DecodeHeader(bitstream, [out] InitParam_d); 6 decode Init(InitParam_d); 7 vpp Init(InitParam_v); 8 encode Init(InitParam_e); 9 10 // トランスコード 11 while (bitstream) { 12 decode DecodeFrameAsync(bitstream, [out] frame_d, [out] sync_d); 13 vpp RunFrameVPPAsync(frame_d, [out] frame_v, [out] sync_v); 14 encode EncodeFrameAsync(frame_v, [out] bitstream, [out] sync_e); 15 core SyncOperation(sync_e); 16 } 17 18 // パイプライン クローズ処理 19 encode Close(); 20 vpp Close(); 21 decode Close(); 22 23 // セッション クローズ 24 session Close(); DECODE VPP ENCODE 初期化時に必要な機能ブロックを構成する Configure building block at initialization メモリー o Memory/Frame / フレーム サーフェイス割り当て Surface allocation 機能ブロック o Initialize (HW/SW) を初期化 building block Reset パラメーター最適化の為のリセットも可能 possible for limited parameter fine-tuning Destroy building block after use 利用済み機能ブロックの破壊
トランスコード パイプライン 1 // セッション初期化 2 session Init(SW/HW/AUTO) 3 4 // DECODE, VPP, ENCODE 初期化 5 decode DecodeHeader(bitstream, [out] InitParam_d); 6 decode Init(InitParam_d); 7 vpp Init(InitParam_v); 8 encode Init(InitParam_e); 9 10 // トランスコード 11 while (bitstream) { 12 decode DecodeFrameAsync(bitstream, [out] frame_d, [out] sync_d); 13 vpp RunFrameVPPAsync(frame_d, [out] frame_v, [out] sync_v); 14 encode EncodeFrameAsync(frame_v, [out] bitstream, [out] sync_e); 15 core SyncOperation(sync_e); 16 } 17 18 // クローズ処理 19 encode Close(); 20 vpp Close(); 21 decode Close(); 22 23 // セッションクローズ 24 session Close(); 非同期の DECODE/VPP/ENCODE 関数 トランスコード パイプライン形成の為にデータポインターを渡す 実行順序を確定する為 データ依存性を自動チェック パイプラインの最後で同期処理が必要 DECODE VPP ENCODE 13
トランスコードのデータフロー インテル クイック シンク ビデオを最大限活用するため DECODE, VPP,ENCODE の処理を並列化 トランスコード パイプラインに queue を実装 ENCODE 後に DECODE を継続的に実行する様にスケジュールする 必要不可欠でなければ同期処理を遅らせる 次のフレーム 同期 DECODE VPP ENCODE queue queue queue パフォーマンス向上には並列実行を! 14
MVC トランスコード疑似コード 1 // セッションの初期化 2 session Init(SW/HW/AUTO) 3 4 // DECODE, VPP, ENCODE 初期化 5 decode DecodeHeader(bitstream, [out] InitParam_d); 6 SetTargetViews (InitParam_d, InitParam_v, InitParam_e); 7 decode Init(InitParam_d); 8 vpp Init(InitParam_v); ビュー情報の設定 9 encode Init(InitParam_e); ターゲットビューを構成 10 11 // トランスコード 12while (bitstream) { 13 decode DecodeFrameAsync(bitstream, [out] frame_d, [out] sync_d); 14 vpp RunFrameVPPAsync(frame_d, [out] frame_v, [out] sync_v); 15 encode EncodeFrameAsync(frame_v, [out] bitstream, [out] sync_e); 16 core SyncOperation(sync_e); 17 } 18 19 // パイプラインのクローズ処理 20 encode Close(); 21 vpp Close(); 22 decode Close(); 23 24 // セッションのクローズ 25 session Close(); MVC DECODE VPP MVC ENCODE 15
Opaque Memory タイプ メモリーバッファーとDirectX* サーフェイスを抽象化ランタイムにSDKライブラリーがネイティブバッファーへマッピング Before After SW/HW? HW SW システムメモリーバッファー割り当て DirectX* Surfaces 割り当て NULL バッファポインターでフレームを割り当て DECODE/VPP/ENCODE 初期化 Allocator Callbacks DECODE/VPP/ENCODE 初期化 プログラミングの簡略化とパフォーマンス向上を同時に! 16
本日の内容 インテル メディア SDK 構成要素と疑似コード まとめ 17
インテル メディア SDK まとめ 特徴 高速なコーデック スレッド化等によりインテル Core プロセッサーに最適化 インテル プロセッサー グラフィックス HW/SW 向け共通 API で実装可 インテル Core プロセッサー ( ソフト実装 ) インテル クイック シンク ビデオとインテル HD グラフィックス 将来のインテル アーキテクチャー 多機能かつ柔軟に設計された API ビデオ処理 ユーザー定義のフィルターにより拡張可能 利点 インテル ハードウェア上で最大限のパフォーマンスを発揮 レガシー その他の x86 サポート コードサイズ 分岐の縮小 将来のハードウェアをサポート ハードウェア特有の機能にアクセス可 簡単な API 迅速なアプリケーション開発が可能 18
Download, Integrate, Accelerate まずはインテル メディア SDK をダウンロード! Visual Adrenaline メンバーは無料! デベロッパー プログラムへの参加も無料 自動的に次世代のプラットフォームに対応 www.intel.com/software/mediasdk インテル メディア SDK で将来のインテル アーキテクチャーに向けての準備を! 19
20 Q&A
最適化に関する注意事項 インテル コンパイラー 関連ライブラリーおよび関連開発ツールには インテル製マイクロプロセッサーおよび互換マイクロプロセッサーで利用可能な命令セット ( SIMD 命令セットなど ) 向けの最適化オプションが含まれているか あるいはオプションを利用している可能性がありますが 両者では結果が異なります また インテル コンパイラー用の特定のコンパイラー オプション ( インテル マイクロアーキテクチャーに非固有のオプションを含む ) は インテル製マイクロプロセッサー向けに予約されています これらのコンパイラー オプションと関連する命令セットおよび特定のマイクロプロセッサーの詳細は インテル コンパイラー ユーザー リファレンス ガイド の コンパイラー オプション を参照してください インテル コンパイラー製品のライブラリー ルーチンの多くは 互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます インテル コンパイラー製品のライブラリー ルーチンの多くは 互換マイクロプロセッサーよりもインテル製マイクロプロセッサーでより高度に最適化されます インテル コンパイラー製品のコンパイラーとライブラリーは 選択されたオプション コード およびその他の要因に基づいてインテル製マイクロプロセッサーおよび互換マイクロプロセッサー向けに最適化されますが インテル製マイクロプロセッサーにおいてより優れたパフォーマンスが得られる傾向にあります インテル コンパイラー 関連ライブラリーおよび関連開発ツールは 互換マイクロプロセッサー向けには インテル製マイクロプロセッサー向けと同等レベルの最適化が行われない可能性があります これには インテル ストリーミング SIMD 拡張命令 2( インテル SSE2) インテル ストリーミング SIMD 拡張命令 3( インテル SSE3) ストリーミング SIMD 拡張命令 3 補足命令 (SSSE3) 命令セットに関連する最適化およびその他の最適化が含まれます インテルでは インテル製ではないマイクロプロセッサーに対して 最適化の提供 機能 効果を保証していません 本製品のマイクロプロセッサー固有の最適化は インテル製マイクロプロセッサーでの使用を目的としています インテルでは インテル コンパイラーおよびライブラリーがインテル製マイクロプロセッサーおよび互換マイクロプロセッサーにおいて 優れたパフォーマンスを引き出すのに役立つ選択肢であると信じておりますが お客様の要件に最適なコンパイラーを選択いただくよう 他のコンパイラーの評価を行うことを推奨しています インテルでは あらゆるコンパイラーやライブラリーで優れたパフォーマンスが引き出され お客様のビジネスの成功のお役に立ちたいと願っております お気づきの点がございましたら お知らせください 改訂 #20110307 24 24