問題タブ [samplegrabber]

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 に答える
1377 参照

c++ - DirectShow Sample Grabber が呼び出されていますが、コールバックの「this」が NULL です

アプリケーションで Web カメラから画像を取得するために、DirectShow フィルターグラフの基本的な実装に取り​​組んでいます。ドキュメントを読み、簡単な実装を作成しました。このグラフを作成します: device --> samplegrabber -> nullrenderer.

可能なすべての結果値をチェックしていますが、SDK からエラーは発生しません。

問題:

どういうわけか、コールバックは正しく呼び出されていますが、コールバック関数内にコードを追加するたびに (これは SampleCB と BufferCB の両方でカウントされます)、アプリケーションが静かにクラッシュします。

BufferCB にブレークポイントを追加しましたが、'this' が 0x0000000 / NULL であることがわかります。グラフを作成するときにすべての結果値をチェックするので、私の推測では、グラフの設定は正しく、この問題は COM に関連している可能性があります。しかし、これは単なる推測です。

Windows 7.0 SDK には、ISampleGrabber インターフェイスのインターフェイスを含む qedit.h が用意されていないため、このファイルを自分で作成し、関連するインターフェイスを追加しました (内容は、グーグル検索中に投稿のどこかにありました)。

ドキュメントから saveGraph 関数をコピーして、GraphEdit でグラフをテストできるようにしました。レンダー ノードを追加すると、自動的に色変換ノードが GraphEdit によって編集されることがわかります。レンダラーでグラフを実行すると、(graphedit で) Web カメラからの画像を見ることができます。

関連するすべてのコードをこの要点に貼り付けました (コールスタック トレース + 変数を含む)

これをデバッグする方法や、このエラーが何であるかを知っている人はいますか? COM関連でしょうか?

更新:私のメンバーにアクセスしようとしたときのコールスタック ISampleGrabberCB

ありがとう

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

directshow - C#およびVB.NETでのSampleGrabberBufferLenサイズのバリエーション

メディアサブタイプが設定されていないISampleGrabberCB.BufferCBのBufferLenのサイズが、異なるプログラミング言語から呼び出された場合に異なる必要がある理由はありますか?

C#アプリとVB.NETアプリがあり、どちらも時計をオフにして、SampleGrabberにメディアサブタイプを設定せずに、できるだけ速くグラフを実行します。コードは同じです。C#アプリでは、サンプルがグラバーを通過するたびにBufferLenのサイズが異なります(予想どおり)。VB.NETアプリでは、BufferLenは一定の固定値です。

たとえば、グラフで1280 x 720のビデオを実行する場合、VBコードのBufferLenのサイズは常に1,382,400です(ビデオデコーダーの出力ピンが12ビットのNV12形式を示しているため、これは理にかなっています)。C#コードでは、BufferLenのサイズは低い値と高い値の間で大きく異なります。

なぜこれが起こるのか誰かが知っていますか?

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

c++ - DirectShow で 2 台のカメラを表示できない

別のスレッドで実行される 2 つの DirectShow グラフを使用して、ストリーミング ビデオを表示し (別の VMR 9 を使用)、2 つの Web カメラからフレームをキャプチャします (Sample Grabber を使用)。1 つは内蔵 Web カメラ (HP TrueVision HD) で、もう 1 つは USB ポートに接続された Creative VF0520 です。他の USB ポートは使用されていません。

問題は、Creative カメラがオンになる (LED が点灯する) が、ストリームが流れないことです。内蔵 Web カメラを無効にしても問題は解決しません。ただし、Creative cam が接続されている唯一のカメラであるデスクトップで実行している場合、Creative cam は機能します。

このプログラムは、各カメラが 1 台しか接続されていない場合に機能します (Creative VF0520 は、デスクトップに接続された唯一のカメラである場合に機能します)。

この問題は、キャプチャ フィルターを使用したモニカー バインドから発生する可能性があると思われます。MSDNから変更されたコードを使用しています。これは、複数のカメラのキャプチャ フィルターにモニカーをバインドする正しい方法ですか?

次に、モニカーを含むベクターにアクセスして、キャプチャ フィルターにバインドします。

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

c++ - iSampleGrabber、コールバック メソッド。コードは機能しますが、愛が必要でしょうか?

わかった。これで、isamplegrabber コールバック メソッドが機能し、データを opencv に取り込むことができました。しかし、これは私にとってまったく新しいものであるため、コードが「正しい」かどうかフィードバックを得たいだけです。

最初に私のコードで(インターネットから)私は持っています:

その後、インターネットの助けを借りて、これを挿入しました。

そして私は使用します:

すべてが機能しますが、私は疑問に思います。コールバック メソッド用に新しいクラスを作成する必要がありますか? 「#pragma region...」ですべてのメソッドを確認できます。それらのメソッドをコールバックに使用できませんか?

質問:

1: sampleCB/bufferCB メソッドにそのクラス「fakeCallback」が必要ですか? または、最初のコード部分のメソッドを何らかの方法で使用できますか?

2:「仮想」 - メソッド。このメソッドは「上書き」できることを意味しますか? メソッド sampleCB と bufferCB を使用して、クラス fakeCallback を作成するときに私が行っていることは何ですか?

ありがとう!

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

c++ - ISampleGrabber はビデオ フレームを特定の mediaType に変換できますか?

directshow がどのように機能するかを説明しているインターネットで、この素敵な例を見つけました。

http://alax.info/trac/public/browser/trunk/Utilities/SetLifeCamStudioResolutionSample/SetLifeCamStudioResolutionSample.cpp

この例では、2 つのサンプルグラバーがあります。1 つは NON-RGB グラバーと呼ばれ、もう 1 つは RGB グラバーと呼ばれます。

最初のもの: (NON-RGB)

2番目: (RGB)

メソッド「setmediatype()」は、「RGB」バージョンでのみ使用されます。しかし、私は疑問に思います。MSDN ページでは、setmediatype() が、サンプル グラバー フィルターの入力ピンで使用できるデータの種類を示していると書かれています。また、メディア タイプを設定せずにサンプル グラバーを使用できるのであれば、なぜそれを何かに設定する必要があるのでしょうか?

質問:

サンプル グラバーは、何らかの種類のメディア変換を行いますか?

サンプル グラバーのメディア タイプを設定する必要があるのはなぜですか?

カムのメディア タイプが MJPG に設定されていて、サンプルグラバーでメディア タイプを RGB24 に設定すると、どうなりますか?

あるものを別のものと使用することで、パフォーマンスに違いはありますか? ソフトウェアのパフォーマンス (fps) を向上させるには、サンプル グラバーの 1 つを削除する必要がありますか?

ありがとう!

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

winapi - directshow でリアルタイムの解像度を取得するには?

DirectShow で SamleGrabber の現在の解像度を取得するには?

以下のコードを試しましたが、うまくいきません。得られる値は常に 1920x1080 ですが、ソースの解像度は 1920x1080 から 1680x1050 に変更されています。

0 投票する
0 に答える
290 参照

windows-ce - DirectShow を使用して Windows CE 7 フレーム グラバーを作成する必要があります。

DirectShow を使用して Windows CE 7 フレーム グラバーを作成する必要があります。インターネット上のすべての例は、非推奨ですが、まだ利用可能な ISampleGrabber のカスタム実装を指しています。機能するソリューションが必要です。このリンクから解決策を試しましたが、ここにリンクの説明を入力しましたが、うまくいきませんでした。Windows CE 7 を搭載した私の BeagleBoard (Arm 8) では、ISampleGrabber は単に登録されていません。

私は何をすべきか?他の良い例はありますか?

もう 1 つの要件は、最も応答性の高いカメラ キャプチャを可能にすることです。多くの情報源が ISampleGrabber の使用を指摘していますが、これは推奨されていません。

0 投票する
0 に答える
166 参照

.net - Ctrl+Alt+Del の後、DirectShow ISampleGrabberCB が停止する

directshow グラフを作成してレンダリングしました。グラフ自体は にレンダリングされてISampleGrabberCBおり、すべて問題ありません。

ただし、Ctrl+Alt+Del を押すと、BufferCBonISampleGrabberCBが呼び出されなくなります。グラフを確認しましたが、まだ実行中です。なぜISampleGrabberCB動作しなくなったのですか?

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

c++ - サンプルグラバー フィルターを使用したオーディオ/ビデオ同期の問題

動画の再生に DirectShow を使用しています。ビデオ/オーディオ データを変更し、自分のアプリですべてを自分でレンダリングします。そのため、SampleGrabber フィルターと NULL レンダラーを使用しています。

ムービーを巻き戻すと (IMediaSeeking インターフェイスを使用)、問題が発生します。オーディオはビデオより大幅に遅れます (数秒の遅れ)。

サンプル グラバー フィルタを含むムービー グラフ

A/V 同期の基本とタイムスタンプを理解しています。レンダー フィルターが表示時間に応じてフレームをドロップする可能性があることは理解しています。

しかし、SampleGrabber フィルターは単にすべてのデータを受け取るのではないでしょうか? SampleCB コールバックで既に同期されているオーディオ/ビデオ データを取得することはできますか?

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

c# - DirectShow .NET を使用して SampleGrabber から FFT を計算する

DirectShow .NET を使用してプロジェクトを開発しています。スペクトル アナライザーのビジュアルを作成する "WPF サウンド ビジュアライゼーション ライブラリ" というライブラリを統合しようとしています。

ビジュアルを機能させるには、プレーヤーに次の 2 つのメソッドを実装する必要があります。

  • GetFFTData(float[] fftDataBuffer) - 現在の FFT データをバッファに割り当てます。

    備考:バッファ内の FFT データは、実数の強度値のみで構成されている必要があります。これは、FFT アルゴリズムが複素数を返す場合 (多くの場合と同様)、次のようなアルゴリズムを実行することを意味します。 for(int i = 0; i < complexNumbers.Length / 2; i++) fftResult[i] = Math.Sqrt (complexNumbers[i].Real * complexNumbers[i].Real + complexNumbers[i].Imaginary * complexNumbers[i].Imaginary);

  • GetFFTFrequencyIndex(int frequency) - 特定の周波数の FFT データ バッファー内のインデックスを取得します。

編集: 私は既に SampleGrabber を追加し、そのコールバックを GetFFTData (まだテストされていません) に統合しました。しかし、GetFFTFrequencyIndex メソッドを統合するにはどうすればよいでしょうか。

このクラスに役立つメソッドを追加しました。

どうもありがとう!