2016-06-21 3 views
2

理由を使用するために強制サードパーティのDirectShowフィルタ:サードパーティのフィルタでカスタムアロケータを使用するカスタムアロケータ

私はNUMAシステムを持っており、フィルタはパフォーマンスの問題で間違ったNUMAノード結果にメモリを割り当て、ドロップ持ちますカメラから受信した画像。

私の現在のアプローチ:

私はすべてのフィルタを反復処理し、その入力端子はアロケータを持っている場合はそれらを求める関数を書きましたよ。次に、私はこのアロケータに特別なアロケータインターフェイスを依頼し、最後にインターフェイスが見つからなければ新しいカスタムアロケータを作成し、以前のアロケータと同じプロパティを適用します。次に、入力ピンのNotifyAllocatorを呼び出して、新しいアロケータについて通知します。

私はこの機能をグラフビルディングで別々の時間に呼び出そうとしました。現在はIMediaControl::Pauseの直後で、IMediaControl::Runの直前ですが、私のカスタムアロケータはサードパーティのフィルタでは使用されていません。サンプルは間違ったNUMAノードに存在します。

また、IMediaControl::Pause呼び出し中に作成されたスレッドを追跡して、スレッドアフィニティを正しいCPUに変更するため、通常は実行中のCPUのNUMAノードに割り当てる必要があるように、これらのDirectShowフィルタには正しいNUMAノードが必要です。

答えて

0

アロケータは、NotifyAllocatorで上書きできません。出力ピンは、使用するアロケータを決定し、内部的にポインタを格納し、入力ピンに通知します。アロケータは、少なくともピンが接続されている状態ではなく、外部で置き換えることはできません。

一部のフィルタは、独自のアロケータに依存しており、他のフィルタを使用することはできません。アロケータを置換するための一般的な解決策はありません。特定のフィルタは、出力ピンがアロケータに特定の要件を持たず、ピア入力ピンに適切なインスタンスを提供するように要求するという事実によって騙される可能性があります。

+0

私はそれを推測していましたが、どのようにサンプルが同じNUMAノードにあることを確認できますか?アロケータ・インタフェースまたは 'ALLOC_PROPERTIES'は、この種のプロパティを保証するオプションを持っていません。 多分、スレッドの親和性にもっと集中するべきですが、これは100%の作業の解決策ではありません。 –

+0

NUMAについて何も知らない、既にビルドされたフィルタを使用して確実に達成できるかどうかはわかりません。カスタムフィルタを実行するオプションが増えるはずです。自然にアロケータを選択すると、作成したスレッドやスレッドをさらに制御できるようになります。 –

+0

私たちが話しているサードパーティフィルタは、この場合のビデオ圧縮フィルタです。初期の計画では、カスタム圧縮フィルタを作成するのではなく、インストールされている圧縮フィルタからユーザーが選択できるようにしました。 私が考えることができる唯一の他のソリューションは、すべての処理がビデオメモリで行われていることです。しかし、私が正しく覚えていれば、私はMFTのすべてを書き直す必要があります。 –

関連する問題