• ベストアンサー

DirectShowでのfilterの作り方

スマートデバイス上で動かす動画処理プログラムを作ろうと思っています。 WindowsMobile 5.0 の機器なのですが、DirectShowのフィルタを自作すれば、目的が達成できるのではないかと考えています。 フィルタは C++ で作るしかないのですよね。。 Windows での開発自体が始めてのため、プロジェクト種類の選択時点で迷っている始末なのですが、参考にすると良いサイトなどがあれば教えてください。

質問者が選んだベストアンサー

  • ベストアンサー
  • R32C
  • ベストアンサー率39% (115/290)
回答No.1

まず、ご質問の解説サイトのURLを紹介します。 ですが、たぶん難しいと思います。 もっと初歩的なDirectShowの解説本(やさしく解説されています)も紹介します。それとあわせてみればわかると思います。 CQ出版 はじめての動画処理プログラミング Win32APIとDirectXで実践する動画処理の基礎 ISBN978-4-7898-4300-3

参考URL:
http://www22.ocn.ne.jp/~telmot/programing/directshow/HowToCreateDirectShowFilter.htm
tthe_mine
質問者

お礼

遅くなりましたがありがとうございました。 参考にします。

関連するQ&A

  • DirectShowで・・・

    VC++でのゲーム開発をしているのですが、就職用に動画を最初に流すプログラムを組んでいます。 リリースビルドをかけてexeファイルを起動してみました。 DirectShowを使ってaviファイルを流しているのですが、開発環境のあるところで起動すると、動画が表示されるのですが、環境のないところで起動すると音声は流れているのですが、映像がながれてきません。 ライブラリの問題かと思い、strmiids.libフォルダのなかにいれて起動したのですが、結果は同じでした。 どうかご助力をお願いします。

  • Windows7でDirectShowを使おうとしているのですが・・・

    Windows7でDirectShowを使おうとしているのですが・・・ こんにちは、今、プログラムのことで困っていまして、もしわかる方がいらっしゃったら教えていただきたいのですが・・・ 【解決したい問題】 WindowsXPで使っていたプログラムをWindows7で実行させた時、DirectShowの、IMixerPinConfigの生成に失敗する。 【詳細】 先日、新しいパソコン(Windows7)を買って、前のパソコン(WindowsXP)で使っていた、動画を再生するプログラムを、Windows7で使おうとしたのですが、プログラムが起動してすぐにエラーが出てしまい、使うことが出来ませんでした。 そのプログラムは、「VB.NET FrameWork 2.0」で作成したプログラムで、「DirectShow」を使ってDVDから動画を再生しているのですが、ソースをステップごとに追いかけて調べてみると、アスペクト比を変更して、動画の黒い帯(レターボックス)を取るために使用していた、「IMixerPinConfig」というオブジェクトの生成が失敗していました。 「IMixerPinConfig」の生成に使っているのは、「DvdGraphBuilder」というクラスの「GetDvdInterface」という関数で、引数に「IMixerPinConfigのGUID」と、「取得したオブジェクトの格納用の変数」を渡していて、正常に処理されていれば、戻り値で0が返ってくるところが、&H80004002という値が返ってきて、out側の結果は、Nothingで返ってきたため、恐らくそこが原因なのだろうという所はつきとめました。 そして、DirectShowのソースを見ていくと、残念ながら、関数の中身は見ることが出来ませんでしたが、「GetDvdInterface」では、GUIDから、オブジェクトの取得を行っているのではないかと推測したので、問題が発生している箇所の前後で、同じ処理を使って、「IDvdInfo」、「IDvdControl」、「IBasicAudio」等の取得も行ったのですが、こちらは正常に処理されました。 ただ、正常に処理されはしたのですが、ブレークを打って確認しても、それぞれのGUIDの値が、「IMixerPinConfig」も、正常に処理された「IDvdInfo」等の値も、両方Emptyという表示になっていたので、何がなんだかわからなくなりまして・・・ 恐らくGUIDの読み込みで失敗しているのか、GUIDが登録されていないかのどちらかだとは思ったのですが、調べる方法もよくわからず・・・ 代替案も色々試してみたのですが、思うような動作をしてくれず、八方ふさがりの状態になってしまったので、投稿させていただきました。 どうか、よろしくお願いいたします。

  • DirectShowで静止画出力

    Windows XP + Platform SDKで開発をしています。 DirectShow経由でRGB24bitの画像データを画面出力したいと思うのですが やはりFilterを自作しなければならないのでしょうか? 状況としては720X480ピクセルで各ピクセルRGBがそれぞれ8bitの24bitデータがメモリ上に既に存在していて静止画の連番のようになっています。それをDirectShow経由で動画として出力しようとしています。 Direct3Dを使っての画面出力は出来るのですがDirectShowにはどの様に持って行けば良いのでしょうか? もし参考になるURL等がありましたら、教えていただけると大変助かります。 宜しくお願いします。

  • directshowのイベント処理

    こんにちは。 現在「directshow」を使って動画再生プログラムを作っています。 再生、停止などはできています。 そこで質問があるのですが、ムービーを再生しているウィンドウで処理(マウスクリックやキー入力)を取得したいときはどうすればよろしいのでしょうか? ムービー再生中に画面上でクリック(もしくはキー入力)することでムービーを停止したいと思っているのですが、なかなかうまくいきません。 どなたかご教授いただければ幸いです。 よろしくお願いします。

  • USBキャプチャーデバイスを使用するには?

    非常に困っています よろしくお願い致します USBキャプチャーデバイスのサウンドキャプチャーを使用して、DirectShowとC++Builderでサウンドをキャプチャーしようと試みてます しかし、サウンドをUSBキャプチャーデバイスから入力しても、サウンドが鳴りません。 WindowsMedeiaEncoderを使用すると、サウンドのキャプチャーは行えるため、ハード的な接続には問題が無いと思います ただ、自作ソフトではサウンドが鳴りません、しかし、一度だけ自作ソフトでサウンドをキャプチャーする事が出来たのですが、Windowsを再起動したらキャプチャーできなくなりました。 Windowsのプログラムで、USBデバイスを使用する際に、何か初期化処理的な物が必要なのでしょうか? USBキャプチャーデバイスを使用したいことをWindowsに知らせるとかの処理が必要なのでしょうか? ドライバー系にお詳しい方、御教授よろしくお願いします

  • 猫用の機器の開発

    猫用の機器の開発が、子供用の機器の開発や安全に貢献すると思い取り組んでいます。 知っている範囲では、 首輪型ウェアラブルデバイス Catlog https://www.makuake.com/project/catlog/ などがすでにあるようです。 あなたは、どんな電子機器なら猫用に欲しいですか? 猫中心設計で猫のためを考えています。 飼い主のためでも結構です。それが最終的に猫にも恩恵があれば。

    • 締切済み
  • WinAPI Directshow 動画

    WindowsプログラミングでDirectshowを使って動画処理をしています。 最終的には、動画処理した結果をウィンドウに順に表示させていくプログラムを作りたいです。 そのため、まずは、下の手順のようなプログラムを現在作っています。 (1) 動画を1フレームごとに取り込む (2) 情報をビットマップに書き出す (3) ビットマップを読み込む (4) ウィンドウに描画する (5) (1)~(4)を繰り返す プログラムはVisualStudio2005を使い、ウィンドウズアプリケーションで作成しています。 ウィンドウにビットマップが表示されてほしいのですが、何も表示されません。 2週間悩んでいますが、解決しません;; 以下にソースを貼らせていただきますので、アドバイスいただきたいです。 ※ソースの量が多いので、WM_TIMER, WM_PAINTの部分を中心に載せています。  (その他の部分は、最初から書かれているソースからほぼ変更していないです)  なお、WM_TIMER部分については、文字数の関係から別アカウントから回答1に書かせていただきます。 ----------------------- <追加グローバル宣言> int douga_flag=0; //メニューで動画処理を選ぶと1になります IGraphBuilder *pigb = NULL; /* フィルタグラフ用 */ IMediaControl *pimc = NULL; IMediaSeeking *pims = NULL; IBaseFilter *pibf = NULL; /* サンプルグラブ用 */ ISampleGrabber *pisg = NULL; IVideoWindow *pivw =NULL; AM_MEDIA_TYPE amt; HRESULT hr; OAFilterState fs; long n; LONGLONG nn1, flame_number; CImage1 gazou; /* ビットマップ画像のクラス */ // gazou.width(横サイズ), gazou.height(縦サイズ), gazou.bmmap_data(画像情報の入った配列) /* 動画→lpBmpDataに情報がはいる */ typedef struct { HINSTANCE hi; int x; // 表示開始位置 int y; HWND hwnd; // 自分のウィンドウハンドル BYTE *lpBmpData; // BMPのデータ部分 BITMAPINFOHEADER bih; } IMG0; IMG0 img00; ----------------------- <WndProc(主に WM_PAINT のソース)> LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { int wmId, wmEvent; int id, ww, hh; PAINTSTRUCT ps; HBITMAP hBmp, hBmpOld; BITMAP bmp_info; HDC hdc, hdc_mem; switch (message) {  ...省略... case WM_TIMER: //文字数の関係から別アカウントから回答1に書きます break; case WM_PAINT: hdc = BeginPaint(hWnd, &ps); hdc_mem = CreateCompatibleDC(hdc); hBmp = LoadBitmap(hInst, TEXT("bitmap.bmp")); GetObject(hBmp, (int)sizeof(BITMAP), &bmp_info); ww = bmp_info.bmWidth; hh = bmp_info.bmHeight; hBmpOld = (HBITMAP)SelectObject(hdc_mem, hBmp); BitBlt(hdc, 0, 0, ww, hh, hdc_mem, 0, 0, SRCCOPY); SelectObject(hdc_mem, hBmpOld); DeleteDC(hdc_mem); DeleteObject( hBmp ); // ロードしたビットマップを削除する EndPaint(hWnd, &ps); break; ...省略... }

  • ゲームのサンプル動画を作りたいのですが・・・

    このたび、自作ゲームのサンプル動画を取りたいのですが、いろんなソフトウェア(WinShot、劇場版あれ等)を使用してもうまくいきません(フレームレートが低すぎ、画面汚すぎ、サウンドがずれすぎ・・・) そこで、自作ゲームに手を加えて動画を残すようにしたいのですが、やり方がまたよく分かりません・・・ DirectX8を使用しているのですが、動画として残したい場合、DirectShowって使えるのでしょうか? または、サーフェス(テクスチャでもいいのですが)の内容をBMPか何かでとりあえず保存し、後で何かのAPIとかで動画化するのでしょうか・・・ どちらにしても難しそうで手に負えません・・・ とにかく、ゲーム画面とその効果音を動画として残せればいいんです(別にプログラムしなくても) 何かいい方法ないでしょうか。回答をお待ちしています。

  • システムを作るにあたり、SQLServerのCALの数え方が良くわから

    システムを作るにあたり、SQLServerのCALの数え方が良くわからず困っています。 想定しているシステムは下記のようなものです。 1.2台のサーバと1台のクライアントPCと100台の計測機器があります。 2.1台のサーバにSQLServerをインストールします。 3.もう1台のサーバには自作サーバプログラムをインストールします。 4.クライアントPCには自作クライアントプログラムをインストールします。 5.2台のサーバと1台のクライアントPCはEthernetで接続されており、   自作サーバプログラムと自作クライアントプログラムのみEthernetを経由し   てSQLServerにアクセスします。 6.自作サーバプログラムは定期的に独自の通信方式で計測機器(100台)に   接続し、計測データを回収します。 7.自作サーバプログラムは計測機器から回収した計測データを数値データに   変換しながらSQLServerに蓄積します。 8.SQLServerに蓄積したデータは、クライアントPCの自作クライアントプログ   ラムから参照します。 9.クライアントPCを使用するオペレータは2名です。   このオペレータ2名が自作クライアントプログラムで帳票を作成し5名の   エンドユーザに配布します。 質問1 ここでデバイスCALの場合、デバイスは  自作サーバプログラムがインストールされているサーバ  自作クライアントプログラムがインストールされているサーバ の2つと考えれば良いでしょうか? または、100台の計測機器もSQLSeverにアクセスするデバイスとして カウントされるのでしょうか? 質問2 ここでユーザCALの場合、ユーザは  自作サーバプログラム  オペレータ2名 と考えれば良いでしょうか? またはエンドユーザ5名もユーザとしてカウントされるのでしょうか? 計測機器がカウントされないならデバイスCALにしたいと思っています。 計測機器は増える可能性がありますがサーバ、クライアントPCはそれ程 増えないと考えているため。 上記の質問1、質問2について回答をお願いいたします。

  • スキン化する方法を教えてください

    動画プレーヤーを開発中なのですが、VC++で作ったプログラムにスキン(自作bmp)を利用したいのですが、どうしたら良いかわかりません。ぜひ、教えてください。

専門家に質問してみよう