問題タブ [dxva]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
2 に答える
761 参照

c# - DXVA デコーダーがソフトウェア デコードに戻ったかどうかを確認する方法

https://msdn.microsoft.com/en-us/library/windows/desktop/dd797815%28v=vs.85%29.aspxから

制約では、「DXVA アクセラレーションの最大保証解像度は 1920 × 1088 ピクセルです。より高い解像度では、基盤となるハードウェアでサポートされている場合、デコードは DXVA で行われます。それ以外の場合は、デコードはソフトウェアで行われます。」

デコードがソフトウェアで行われていることを検出する方法はありますか?

4K H264 ビデオをデコードしようとすると、AMD グラフィック コントローラに問題が発生します。

ハードウェアが 4K デコードをサポートしていないことはわかっており、理論的にはソフトウェアにフォールバックする必要があります。ただし、本来の目的に関係なく、多くの破損したフレームや黒いフレームが表示されることがわかりました。

DXVA が SW デコードに戻ったかどうかを検出できることを期待しています。その場合、DXVA をまったく使用しようとせず、代わりに完全なソフトウェア パスを使用します。

ありがとうございました

0 投票する
1 に答える
706 参照

directx - ID3D11VideoDevice::CreateVideoDecoderOutputView が失敗する

DrectX11 の ID3D11VideoDecoder インターフェイス ( https://msdn.microsoft.com/en-us/library/windows/desktop/hh447766(v=vs.85).aspx ) を介して H264 ストリームをデコードできるアプリケーションを開発しています。 ID3D11VideoDevice::CreateVideoDecoderOutputView メソッドでスタックし、E_INVALIDARG を返すだけで失敗します。はい、何百万もの理由が考えられますが、例外的に一般的な理由はありますか? ID3D11VideoDecoder によるデコードを示す利用可能なサンプルはありますか (私は見つけていません)? 失敗する可能性が最も高いと思われるコードの部分は次のようになります。

ありがとうございました

0 投票する
1 に答える
942 参照

h.264 - ID3D11VideoDecoder を使用した H264 ストリームのデコード

DirectX11 とインターフェイスhttps://msdn.microsoft.com/en-us/library/windows/desktop/hh447766%28v=vs.85%29.aspxで H264 生ストリームをデコード (およびレンダリング) しようとしています。残念ながら、私は DXVA PictureParameters バッファーの送信に行き詰まりました。つまり、ID3D11VideoContext::SubmitDecoderBuffers は常に E_FAIL を返します。これは非常に不可解です。エラー コード E_FAIL から、自分が間違っていると結論付けられない可能性があるため、このインターフェイスを使用して H264 ビットストリームをデコードする例はありますか? そのような例は非常に役に立ちます。

0 投票する
1 に答える
910 参照

c++ - 実行時の不一致 DXVA ハードウェア ビデオ デコード

現在、DXVA API と FFmpeg フレームワークを使用して H264 ビデオ ストリーム ファイルのハードウェア アクセラレーションによるデコードを実装するプロジェクトに取り組んでいます。

GPU デコードについて調査を行い、VLC のハードウェア アクセラレーションの実装に基づいてコードを作成しました。私の理解では、FFmpeg で DXVA を使用するには、DirectXVideoDecoder を初期化し、AVCodecContext にいくつかのコールバック関数を実装する必要があります。デコード プロセスは FFmpeg 関数avcodec_decode_video2()で行われ、各フレームはav_read_frame()で解析されます。デコードされたフレームはグラフィック メモリに保存され、Direct3D を使用して表示されます。

:GetTickCount()関数を使用して各プロセスの時間を計測しようとしたところ、1550 フレームのビデオのプログラムの実行時間は 35000 ミリ秒であり、表示関数に 90% の時間がかかり、デコード関数に 6% の時間がかかっていることに気付きました。

しかし、表示処理をコメントアウトして、各フレームのデコードのみを実行するコードを実行しようとすると、同じビデオの合計デコード時間は驚くべきことに 25,000ms に増加し、合計時間の 94% を占めました。デコード関数のコードは次のとおりです。

この奇妙な動作の原因は何でしょうか? 私の推測では、:GetTickCount() の誤った使用の可能性があるか、または DXVA ハードウェア アクセラレーションによるデコード プロセスに関係している可能性があります。長い投稿で申し訳ありません。ご意見やご提案をお待ちしております。前もって感謝します。

0 投票する
1 に答える
4917 参照

h.264 - DX11 と DXVA2 の使用

DX11 と DXVA2 を使用して、h264/h265 ビデオ (iframe が 1 つだけ) のデコードをテストしようとしています。これは Windows 7 上にあるため、11.1 機能セットと 9.3 を備えた 2 つの d3d11 デバイス間で相互運用する必要があると思われます。私の質問は、h264 ファイルをロードして DXVA を使用してデコードするためのサンプルが大幅に不足しているため、DXVA にフィードしてデコードするデータをレイアウトする方法についてのガイドがあるかどうか疑問に思っていました。これを読みました Directx 11およびWindows 7でハードウェアアクセラレーションビデオ/H.264デコードを使用するにはどうすればよいですか? https://msdn.microsoft.com/en-us/library/windows/desktop/hh162912(v=vs.85).aspxと同様ですが、上記の方法に関するガイドはありません。

ありがとう

0 投票する
1 に答える
4316 参照

c++ - FFMPEG と DXVA2

Qt を使用して Windows で FFMPEG I コードを使用して IP カメラ (fullHD H264) 用のプレーヤーを作成しました。

  • live555でパケットを取得しました。
  • ffmpegでデコード
  • SDLで表示します。

しかし、「遅い」CPU では、ビットレートが高すぎる場合や 1080p を処理できない場合、多くの遅延が発生します。

DXVA2 でハードウェア アクセラレーションを試して、特に最も遅い CPU でパフォーマンスが向上するかどうかを確認したいと思っています。

しかし、私は本当に進む方法がわかりません。--enable-dxva2 と --enable-hwaccel=h264_dxva2 を使用して FFMPEG をビルドする必要がありますか? または Zeranoe ビルド Direct X を使用したことがありません。Direct X の知識が必要ですか、または --enable-dxva2 および --enable-hwaccel=h264_dxva2 を使用した ffmpeg が必要ですか?

ありがとうございました

編集 :

こんにちは、この投稿を使用して、FFMPEG を使用したハードウェア アクセラレーションを支援 します

でパケットをデコードします

デコードされたフレームを取得しています

変換してみた

バッファをQimageにコピーします

私は自分の写真を手に入れましたが、多くのアーティファクトがあり、数秒後にセグメンテーション違反が発生しましたdxva2_retrieve_data_call(pCodecCtx, pFrame, &gotPic, &packet);

編集:問題は解決しました。取得する前に画像を取得したかどうかを確認しませんでした。しかし、私のデスクトップ コンピュータ (Intel Core i5 650、4GB RAM、ATI HD5800) ではパフォーマンスが非常に悪く、CPU を 5% 消費し、RAM を 3 倍消費し、多くの破損したフレームを消費します。新しいコンピューターの方が優れていますが、ソフトデコーダーの方が優れています。hwaccel が有効な場合、dxva2_retrieve_data_call と sws_swale は多くの時間を消費します ...

Qt で NV12 画像を表示する方法はありますか (sws_scale 変換なし)、dxva_retrieve_data_call を最適化する方法はありますか?

0 投票する
1 に答える
4835 参照

c++ - フレームをデコードして取得するためにffmpegでDXVA2を使用する方法

Windowsでffmpegを使用してH264ストリームをハードウェアアクセラレーションでデコードする方法に関する簡単な例を検索しましたが、見つかりませんでした。ハードウェアアクセラレーションを実現するには、ffmpeg で dxva2 を使用する必要があることを知っています。

投稿で提供されているサンプル プロジェクトのおかげで、CPU で ffmpeg を使用して H264 をデコードし、NV12 形式を RGBA に変換して、フレームを bmp ファイルとして保存できます。

dxva2 に関するヘルプを得るために、次の投稿で提供されている内容に従いました

dxva2 で正常にデコードできると思います。ただし、デコードされたフレームを取得して RGBA 形式に変換し、bmp ファイルとして保存しようとすると、ソース ポインターに関するエラーが発生します。

次のようにフレームをデコードして取得します。

出力フレームを次の場所にフィードします。

次のエラーが表示されます。

[swscaler @ 030c5c20] 不正な src イメージ ポインター

明らかに何かがおかしいのですが、pFrameYuv->data何が原因かわかりません。

DXVA2 でデコードされた NV12 フレームを sws_scale で RGBA に変換するにはどうすればよいですか?

0 投票する
1 に答える
2976 参照

video - DirectShow、Media Foundation、DXVA、何?

ビデオのレンダリングに DirectShow を使用するアプリケーションの修正を任されています。古いアプリケーションは正常に動作しますが、古くなっています。

私はゲームのバックグラウンドを持っているので、そのようにアプローチする必要があると考えました. さまざまな手法を使用して多数のプロトタイプを作成した後、ビデオからテクスチャへのレンダリングを引き出し、DirectX を使用してすべてのクライアントの要求を満たすことができると確信していました。

しかし、私は今、どのテクニックを使うべきかを選ばなければならないところに来ており、これ以上迷うことはありません.

  • DirectShow
  • メディア財団
    • メディア セッション (< Windows 8)
    • メディア エンジン (> Windows 8)
  • DXVA1
  • DXVA2
  • DXVA-HD

DirectShow は明らかに最も古いものですが、利用可能なコーデックの量が非常に多いため、依然として十分に機能します。

メディア ファンデーションは Windows Vista で導入され、Windows 8 までは「メディア セッション」と呼ばれるものがあり、その後「メディア エンジン」が導入されました。私が正しい場合、コーデックは MFT と呼ばれますか? free-codecs.com のようにこれらを利用できるサイトは実際にありますか?

これら 2 つの手法に加えて、ビデオ デコードを GPU にオフロードできる DXVA があります。現在、私は3つの異なるタイプに出くわしました。DXVA1 は XP 以降の実装であり、DXVA2 は新しい API です。しかし、DXVA-HDとは何ですか?DXVA2 よりも新しいものですか、それとも同等の名前ですか?

私は本当に Media Foundation に移行したいと思っています。すぐに使用できるコーデックは、クライアントが使用したいフォーマットで非常にうまく機能します。私が懸念しているのは、コーデックを入手するのがいかに簡単かということだけです... Windows 8 以降のデフォルトのメディア プレーヤーには、DirectShow と MF の両方のレンダリング パスがまだあり、その場でそれらを交換しますか、それとも Microsoft は DirectShow を完全に廃止しますか?

また、DXVA がどのように機能するのか、よくわかりません。基本的にゲーム内でビデオをレンダリングしたい場合、すべてのレンダリングを実際に GPU で実行し、アプリケーション ロジックを CPU に保持することは理にかなっていますが、メディアを使用してそれを利用する方法の良い例を実際に見つけることができません財団。これは主に、DXVA2 と DXVA-HD の違いがわからないことが原因です。Windows 7 SDK には、3 つの実装すべてのサンプルが付属しています...

誰かが私の質問に太字で答え、誤った情報を修正し、適切な例 (DirectX + Media Foundation + DXVA など) を教えてくれたら、本当に感謝しています! 「Windows 7 SDK のこれら 3 つの例を組み合わせて、必要なものを取得する」のと同じくらい簡単です。

課題全体の目標は、アプリケーションを再び最高の形にすることであり、DirectShow がすでに持っているように、次の 10 年間続くテクニックを確実に選択したいと考えています :P