1 名前:デフォルトの名無しさん [2008/06/22(日) 18:38:21 ] DirectShowプログラマーのみなさん。 メソッドのデッドロックとか、わけわからん現象多くないすか。 このスレに怒りやテクをぶつけましょう。 関連スレ Win32API質問箱 Build67 pc11.2ch.net/test/read.cgi/tech/1212931246/ くだすれDirectX(超初心者用) part.3 pc11.2ch.net/test/read.cgi/tech/1193605500/ 【C++】 DirectX初心者質問スレ Part17 【C】 pc11.2ch.net/test/read.cgi/tech/1207702556/ DirectX総合スレ (Part8) pc11.2ch.net/test/read.cgi/gamedev/1205306118/ 【PureVideo】DirectX Video Acceleration【AVIVO】 pc11.2ch.net/test/read.cgi/tech/1178285897/
4 名前:デフォルトの名無しさん [2008/06/28(土) 14:08:40 ] 初カキコ失礼します 今、DirectShowを使用して 画面の一部を切り出して表示する システムを制作していまして それでシステムの参考に ship.nime.ac.jp/~osawa/focusShare/ このサイトの「Focus Share」で使用されている DirectShowフィルターをGraphEditで動かしてみたいのですが うまく動かすことが出来ずに困ってます ちなみに開発環境は Visual C++ 2008 EE、Platform SDK 2003 SP1、DirectX 9.0b SDK です ご教授の程、よろしくお願いします。
5 名前:デフォルトの名無しさん [2008/06/29(日) 21:24:11 ] 過疎ってるなw
6 名前:デフォルトの名無しさん mailto:sage [2008/07/02(水) 22:26:47 ] 1乙 ってか、自分でも立てようかと思ったけど、 すぐ落ちるとイヤなので様子見してた・・・ >>4 とりあえずどのフィルタを使ってどんな症状なのか 説明してくれないと困るぞ ざっと試してみたけどVideo Extraction Filterを使おうとしてるのかな? ソース見てないからよく分からないけど、確かにちょっとおかしい。 ffdshowで出力フォーマットをいろいろ変えてみたが、 入力可能な正しいフォーマットはなんじゃろな。 暇があったら後でソース見てみる
7 名前:デフォルトの名無しさん [2008/07/02(水) 22:53:12 ] ageとくぜよ
8 名前:デフォルトの名無しさん [2008/07/05(土) 13:56:15 ] hage
9 名前:デフォルトの名無しさん [2008/07/17(木) 21:43:58 ] 9
10 名前:デフォルトの名無しさん [2008/07/26(土) 18:42:31 ] あへ
11 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 04:16:12 ] 過疎と戦うスレ
12 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 04:22:15 ] DirectShowはもう終わりだというのか・・・!
13 名前:デフォルトの名無しさん mailto:sage [2008/07/27(日) 11:30:33 ] M$が何考えてるかわからん
14 名前:デフォルトの名無しさん mailto:sage [2008/07/29(火) 19:32:10 ] DirectShowを使って動画から映像だけ抜き出してwmvに変換するプログラムを作成しようと思ってます。 まずフィルタグラフをどう構築すればいいのかと思ってGraphEditで試しているのですが WM ASF WriterのAUDIOピンを繋がないとエラーになってしまいます。 無音声のwmvファイルを作成する場合AUDIOピンに何をつっこめばいいのでしょうか?
15 名前:デフォルトの名無しさん [2008/07/31(木) 23:57:26 ] cygwin上で,DirectShowを使う方法ご存知の方いらっしゃいますか? DirectXに関しては以下のページの方法でcygwinから動かすことできました. d.hatena.ne.jp/yanma_4/20080308/1204961113 しかし私の環境の場合,DirectShowは,DirectX SDK内でなく,Platform SDKに入っているためか, 大量のエラー(IID_ICreateDevEnumが定義されていない等,Directshowの変数が見えないというエラー)が出ました. www.okisoft.co.jp/esc/vs-exp/index.html#Cygwin 上記のページを見たところ, 『.NET Framework 2.0 SDK をインストール してある場合, Cygwin からも C# コンパイラや各種ツールを利用できます』 とあった為,これをインストールしたものの,エラーの数は減りませんでした. どなたかわかる方いらっしゃいましたら,御教授宜しくお願いします.
16 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 03:55:12 ] >>14 確かにエラーになるね。 適当なAudio Capture Sourceを突っ込めば無音のwmvを作ることはできるけど、 ビデオ終端で自動終了できない・・・。 >>15 SDLにDirectShowのラッパーはないんじゃない?
17 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 03:58:31 ] あ、.NETがCygwinから使えるならRCW経由でDirectShowを使えるような気がするな。 誰か試してみない?
18 名前:15 [2008/08/01(金) 18:26:19 ] >>16 さん >>17 さん レスポンスありがとうございます. support.microsoft.com/kb/436361/ja 頂いたヒントを頼りに,このページを見つけました. ありがとうございました.
19 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 22:15:35 ] Windows SDK (Platform SDK)入れて、その中のVC++コンパイラ使えばいいだろって気もするが。
20 名前:15 [2008/08/01(金) 22:42:59 ] >>19 正論です. カメラを他の装置と同時に使う事情から, cygwinで動かせたら嬉しいと考えてます.
21 名前:15 [2008/08/01(金) 22:49:04 ] cygwin ↓ .NET Framework 2.0 SDK ↓ Directshow.NET 2.0(ラッパー) ↓ Directshow 17さんの言うとおり, 上記の道が考えられますが…,難しいですね. もう少し頑張ってみます.
22 名前:デフォルトの名無しさん mailto:sage [2008/08/01(金) 23:35:21 ] 簡単にやるならVS使えよ
23 名前:デフォルトの名無しさん mailto:sage [2008/08/03(日) 14:23:16 ] >>16 レスどうもです。 プログラム組んでみようと思いますが、 GraphEditだからだめだってことはないんでしょうね。 もう少し悩んでみます。
24 名前:デフォルトの名無しさん mailto:sage [2008/08/04(月) 01:24:00 ] すみません。 yahooチャットのビデオに自作のDirectshowフィルタを挟んで 効果を付けてみたいのですが可能ですか? 例えば文字スーパーを流すようにしてみるとかしてみたいのですが・・・ yahooチャットのビデオがどのようなフィルタ構成になっているかわからず 出力メディアタイプとかわからないです。 接続に関してはインテリジェント接続になっていてくれさえすればメリット値を変更で なんとかできないかなって思っています
25 名前:デフォルトの名無しさん [2008/08/05(火) 08:54:08 ] Win標準のVideo Rendererって、 アスペクト比が4:3と16:9のものしかまともに再生されないけど、 CIFみたいな中途半端なサイズのせいなの? それとも適切なパラメータを出力ピンに設定していないから? 誰かわかりませんか。形式はyv12です。
26 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 13:44:37 ] yv12
27 名前:デフォルトの名無しさん [2008/08/05(火) 23:10:13 ] yv12に限らず、フレームバッファの確保の仕方次第で レンダラ側で確保されるバッファのサイズが変わってくるんだね。 ffdshowはどうやってそこらへんを上手く処理してるんだろう…
28 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 23:26:51 ] 1ピクセル単位で任意のサイズ使えるぜ?
29 名前:デフォルトの名無しさん [2008/08/05(火) 23:50:25 ] 出力ピンに設定している画像サイズがわかるツールつくったぜ? >>24 答えてくれたら放出するよ
30 名前:デフォルトの名無しさん [2008/08/06(水) 08:51:59 ] >>28 あれ。そうなんですか… GetMediaTypeで伝えるだけじゃだめなのかな。 Transformが呼ばれる時点で既にpOutには変更されたサイズが入ってしまってるんだけど… もしかして再接続を適切に処理してないからでしょうか。
31 名前:デフォルトの名無しさん [2008/08/06(水) 23:34:37 ] ROT使って、どうつながってるか覗いてみるとか。 などと適当に書いてみる。 ↓やりかた ttp://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html#addtorot
32 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 00:10:51 ] 相武沙希がかわいすぎてDirectShow
33 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 14:52:12 ] >>24 あれは動画と言うより静止画で、鯖から要求されたときに jpc(Jpeg2k)形式の1フレームの画像ファイルを送ってるだけなので やろうとしてることを実現したければ、webcam画像取り込み、加工、 エンコード、パケット送信まで丸ごと作っちゃうか ビデオ入力デバイスとしてwebcamの画像を横取り、加工する何かを 作るしかないと思う。←たぶんやりたいのはこっち? jpcは写真とかは得意だけど文字とかはボケボケになった気がする。 丸ごと作っちゃうパターンだと圧縮率変えれば文字も綺麗に見えるけど、 受信側のデコードで負荷がかかりすぎて PCがフリーズする視聴者続出させた記憶があるw
34 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 20:39:02 ] >>33 そうですか。 単純にキャプチャフィルタと画像送信フィルタ構成で出来ているとばっかり 思っていました。 画像を横取りできたとしてもエンコード、パケット送信までは作れないから 諦めかな? んで、フィルタの放出はした方がいいかい?
35 名前:デフォルトの名無しさん mailto:sage [2008/08/07(木) 21:07:02 ] いらん
36 名前:デフォルトの名無しさん [2008/08/08(金) 21:10:57 ] じゃあ、俺の妹(高校生)の寝顔は? (´・ω・`)? 俺の脳内妹かわいいよ
37 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 13:27:03 ] aviファイルの画像と音声を抜き出したいんだけど、どこかにサンプルがないかな? Video for windows の例はいくつか見つかるんだけどね。 詳しい方、よろしくお願いします。
38 名前:37 mailto:sage [2008/08/11(月) 13:46:21 ] 補足 業務で使うので、ツールではなくやり方が知りたい。 画像の抜き出しは見つけた。音声の抜き出し方がわからない。 以上、よろしくお願いします。
39 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 14:40:41 ] しばらくGraphEditで遊んでみれば分かる。
40 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 14:45:13 ] こんなゆとりを飼っている会社も大変だな
41 名前:デフォルトの名無しさん mailto:sage [2008/08/11(月) 18:58:30 ] でも3ヶ月後はお前らぶち抜いてるかもよ そういうもんだ
42 名前:デフォルトの名無しさん mailto:sage [2008/08/12(火) 00:30:53 ] それも癪なので教えないでおこう
43 名前:デフォルトの名無しさん mailto:sage [2008/08/14(木) 11:43:50 ] >1参照
44 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 14:26:53 ] DirectShowを使った録画アプリケーションをサービスとして実装し、 ログインしていない時に録画できるようにする事は可能なのでしょうか? 例えばプレビューは無しでもデスクトップがないとグラフを構築できないといったような制限はあるのでようか?
45 名前:デフォルトの名無しさん mailto:sage [2008/08/17(日) 14:34:26 ] なんでその程度の試す手間を惜しむの?
46 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 23:00:32 ] CheckTransformに渡ってくるレンダラからの要求サイズで絵を作って渡しているのに、 YV12形式だとQCIFだけ横幅がおかしく表示されます…
47 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 12:37:30 ] DirectShowの質問です。 ムービーの動画をテクスチャに移して加工した上で表示させたいと思い、 ネット上のサンプルを読み漁ってとりあえず組んでみたのですが 以下の疑問点が発生しました。 どなたかわかる方が居ましたら、答えていただければありがたいです。 1. ムービーファイルの画像を「1枚ずつ」「任意のタイミングで」取得する方法はありますか? 現在のコードでは、DirectDrawに再生させておいて 描画時にテクスチャを取得して再生する、という構造になっています。 おそらく別のスレッドで再生させているのだとは思いますが このシステムでは、負荷でメインスレッドのFPSが落ちた場合などに 当然ながら同期のズレが発生してしまいます。 (動画とメインループのフレームの比率が変化してしまうため) アプリ側から任意のタイミングでフレームを進めることはできますでしょうか? 2. 実際に再生させるルーチンまでは作れたのですが 動画ファイルの読み込みに250msほど時間がかかってしまいます。 特にIGraphBuilderのRenderFileメソッドが非常に重く、 ここだけで200ms持って行かれてしまいます。 これはムービーファイルを再生する上で回避できない時間なのでしょうか? ちなみに、ムービー形式はサンプルに沿ってwmvを使用しています。 DirectShowというと、マイナーでネット上のサンプルも少ないというイメージで 触っている人が少ないかもしれないかと思うのですが、わかる方が居ましたら よろしくお願いいたします。
48 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 13:04:32 ] レンダラの出力がテクスチャになるようなフィルタを作る。 手動でフィルタ接続が速いかも
49 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 13:25:09 ] デフォルトのフィルタを使った場合、 変換が二度手間になっているような認識でいいのでしょうか? ありがとうございました。ちょっと色々とやってみます。
50 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 11:00:10 ] >>47 homepage1.nifty.com/nekora/soft/howto/avi.html 張るのが遅かったな
51 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 18:50:07 ] DirectShowでマルチチューナに対応したTVクライアントを書こうとして最初で躓いてしまいました。 あるBDAチューナデバイスAがサポートするチューニング空間を列挙する方法が知りたいのですが、 何かいい方法はないでしょうか?
52 名前:デフォルトの名無しさん mailto:sage [2008/09/29(月) 23:27:51 ] COMの質問なのか COMは分かってるけど適当なAPIが見つからないのか APIも分かってるけど挙動がおかしいのか、などなど
53 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 08:23:24 ] >>52 COMはだいたいは大丈夫だと思います。 適当なAPIが見つかりません。 PNDIR_INPUTのAM_MEDIA_TYPEをみると、 majortype = KSDATAFORMAT_TYPE_BDA_ANTENNA subtype = MEDIASUBTYPE_None formattype = FORMAT_None であって、接続可能なピンかどうか判断できませんでした。 ネットワークプロバイダの出力ピンをみても、同様でAM_MEDIA_TYPEだけでは 判断できないようですが、ほかの方法が思いつきません。
54 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 19:58:20 ] CBaseVideoRendererを使って テクスチャにレンダリング、DirectXで表示という いわゆるムービーテクスチャー方式で再生しているのですが Vistaのフルスクリーン時のみフリーズする現象にぶち当たってます VistaウインドウモードやXPでは問題ないようなのですが・・・ DoRenderSample内のテクスチャのロックが 癌なような気がしないでもないですが対処法がわかりません なにか解決方法はありますか?
55 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:04:13 ] デバッグしろ
56 名前:デフォルトの名無しさん mailto:sage [2008/09/30(火) 20:09:22 ] リモートデバッグ環境がないので フルスクリーン時のデバッグができないのです
57 名前:デフォルトの名無しさん mailto:sage [2008/10/01(水) 00:43:59 ] マルチスレッドのフラグ立ててデバイス作っていないのに、複数のスレッドでアクセスしてデッドロックしている感じもする。 つーか、お前の環境なんて知ったこっちゃない。マルチモニタでやるなりログ出力するなり好きにしろ。 最低限の道具も揃えられないようだと話にならない。
58 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 02:02:13 ] VB.net2005でDirect Show を使用し動画から音声を抽出→音声波形を作成 ということをしたいのですが,どのようにしたらよいのでしょうか? Direct Showの使い方もわからず,教えていただけないでしょうか?
59 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 02:12:40 ] まずはC++を使ってください。C++以外の言語でDirectShowを扱うのは愚かな行為です。 次にサンプルやドキュメントを読んで基本的な仕組みを理解してください。
60 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 03:05:24 ] >>59 さん ありがとうございます,VC++でやるのが普通なのですか・・・ vb.netでやるのが仕事の条件だったもので結構探してみたんですがなかったのはそういことだったんですね. ありがとうございます.
61 名前:デフォルトの名無しさん mailto:sage [2008/10/02(木) 16:19:48 ] >>60 .NET(C#) で GUI とグラフ作成・制御、C++ でフィルタの画像処理という 組み合わせなら .NET 初めての身にもそこそこ作り易かった記憶があります。 ・.NET から DirectShow を扱うためのライブラリ ttp://directshownet.sourceforge.net/ Platform SDK 内の DirectShow サンプルのほとんどが C#で書き直されているので、グラフ作成・制御方法の参考になるでしょう。 当然ながら Unmanaged なリソースを扱うので Marshalling の面倒をイヤというほど味わうことになるのは覚悟して下さい。 また、フィルタを .NET で書くことも可能らしいです…。(実際にやったことはありませんが) ・C# で DirectShow フィルタのプロトタイプを作成 ttp://www.codeproject.com/KB/directx/prototypingdsfilters.aspx パフォーマンスに問題があるのであくまでプロトタイプの作成に 留めた方がよいそうです。本番の時はC++で。
62 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:00:16 ] その辺のいろいろな手間考えるとまあ>>59 だろうなあ
63 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 00:10:43 ] >>61 さん ありがとうございます. 皮がvb.net2005で作らざるを得ないのでできれば閉じた環境で作りたかったもので・・・ とりあえず,真剣に無理そうならvc++でdllを作成するという方向になるかと思われます.
64 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 01:49:27 ] .NET環境はCOMの扱いが面倒なんで、結局C++なDLLでやって値だけ得るのがいい。 VSなら言語やモジュールが分かれていてもシームレスにデバッグできるよ。 GUI(C#)+DLL(C++)も簡単。
65 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 09:19:05 ] 最新のDirectX SDKをインストールしたのですが GraphEditが見当たらないのですがどこにあるのでしょうか?
66 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 10:14:06 ] 今はWindows SDK for VISTAのほうにあるんじゃないかな。
67 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 10:40:23 ] なんですとー!
68 名前:デフォルトの名無しさん mailto:sage [2008/10/03(金) 11:04:46 ] msdn.microsoft.com/ja-jp/library/cc352285.aspx このBDAサンプルが動く地デジ・ワンセグチューナってありますか?
69 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 18:22:12 ] DirectShowつかって、Form上に動画を表示しています。 その画面上にlabelやtextboxを表示したいのですが、動画の下に隠れて(?)しまってみえません。 隠れない方法はあるのでしょうか? VS2005 C#です。
70 名前:デフォルトの名無しさん mailto:sage [2008/10/07(火) 19:16:19 ] コントロールを最前面に移動させるとかフォームじゃなくてパネルにして最背面にするとか
71 名前:69 mailto:sage [2008/10/07(火) 19:55:08 ] >>70 できました!!!!!!ありがとうございます。
72 名前:デフォルトの名無しさん [2008/10/08(水) 04:24:48 ] おいおい このまま終了か?あげとくぞ
73 名前:デフォルトの名無しさん [2008/10/08(水) 14:33:08 ] このスレは書き込み少ないんで、age推奨でもいいかもしれんね
74 名前:デフォルトの名無しさん [2008/10/14(火) 13:29:15 ] すいません質問です DirectShowを使用してWMVファイルを再生する際にはWMAudio Decoder DMOとWMVideo Decoder DMO を使用するとよいというのはRender Media Fileを使って理解しました. その上で再生するのとは別個にWMAをファイルとして保存したいのですがWMAudio Decoder DMOの次のフィルターをどのようにすればよいのでしょうか?
75 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 12:19:37 ] 質問で申し訳ないんですがDirect show file reader プラグインのファイルを何度も解凍してもいくつかのファイルがエラーしかでません ds_inputとds_input.auiと読んでね、が解凍できたのですがこれは正常なんでしょうか? それとも解凍できてないファイルがあるのかファイル自体がエラーおこしてるのか教えていただけるとありがたいです
76 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 14:12:50 ] DTV板に池
77 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 14:17:18 ] 「読んでね」は読んだのか?
78 名前:デフォルトの名無しさん [2008/10/24(金) 04:53:39 ] 質問です. Windows SDK v6.1 + VS 2005 Academic Editionを使用しています. DirectShowのSample Filterをビルドしてみたところ以下のエラーが出てビルドが通りません. 解決策はないのでしょうか?
79 名前:78 mailto:sage [2008/10/24(金) 04:58:55 ] 1>wavdest.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall CTransformInputPin::CTransformInputPin(wchar_t const *,class CTransformFilter *,long *,wchar_t const *)" (??0CTransformInputPin@@QAE@PB_WPAVCTransformFilter@@PAJ0@Z) が 関数 "public: __thiscall CWavDestFilter::CWavDestFilter(struct IUnknown *,long *)" (??0CWavDestFilter@@QAE@PAUIUnknown@@PAJ@Z) で参照されました。 このようなerror LNK2019が合計4個で増した.
80 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 12:27:28 ] >>79 DirectShow 基底クラス(自分でビルドする必要あり) がリンクされてない 場所は SDK のフォルダから上記クラス名で検索をかけてみればすぐに見つかる
81 名前:79 mailto:sage [2008/10/24(金) 17:53:57 ] インクルードディレクトリして C:\Program Files\Microsoft SDKs\Windows\v6.1\Samples\Multimedia\DirectShow\BaseClasses を追加で指定したのですが,これだけではないのでしょうか?
82 名前:デフォルトの名無しさん mailto:sage [2008/10/24(金) 18:26:56 ] そこにソリューションのファイルあるだろう ビルドしてみそ。Vistaだと別の場所にする必要がある。 そこでできたlibをリンク
83 名前:デフォルトの名無しさん [2008/10/26(日) 13:38:07 ] SampleGrabberでオーディオを取得して、加工しています。 ムービーの場合は、BufferCB()には、1フレーム分のデータがくるので、 加工などは、とてもし易いのですが、オーディオの場合、同じ44100Hz16Bitステレオのデータでも、 非圧縮のWAVEと、MP3、WMAなどの圧縮データでは1回ごとのBufferCB()に流れてくるPCMの データ量は違うようです。 例えば3秒のデータを取得したいのですが、 IMediaControl->Run(); IMediaEvent->WaitForCompletion(3000, &evCode); で、確かにデータは取得できるのですが、実時間待つので リアルタイム処理ができません。 どうすれば実時間より短い時間で正確に3秒分のPCMデータを取得できますか?
84 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 13:59:49 ] 3秒分だけをリアルタイム処理したいの? ソースは何を想定してるの?
85 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 14:40:40 ] クロック無視してデータをなるべく早く流したいときはフィルタグラフのIMediaFilter::SetSyncSourceにNULLを渡す。 ヘルプのReference Clocksを参照。 しかし>>83 のWaitForCompletionの使い方は何か勘違いしてる予感。
86 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 22:34:40 ] シューティングゲームなどで複数の効果音を連続で再生させるような場合、 DirectShowは不向きですか?
87 名前:デフォルトの名無しさん mailto:sage [2008/10/26(日) 23:54:02 ] DirectSound or OpenALでおk。つーか調べろ。
88 名前:デフォルトの名無しさん [2008/10/27(月) 03:21:32 ] >>84 3秒と書いたのは、任意の時間分のデータを取得したかったので、 とりあえず3秒としただけなんです。 エフェクト用のバッファが0.5秒なら0.5秒だったりします。 ソースはDirectShowで処理できる任意の音楽データです。 >>85 Reference Clocksを参照してみます。 IMediaEvent->WaitForCompletion(3000, &evCode); には特に意味はありません。 IMediaEvent->WaitForCompletion(INFINITE, &evCode);ですべてのデータを取得していたのですが、 例を3秒としたので、単純に書いてみました。 >>84 ,85 返信をありがとうございました。
89 名前:79 mailto:sage [2008/10/27(月) 19:00:43 ] >>82 ありがとうございました。おかげでそのエラーはなくなりました。 ただ、今度は エラー 1 error C2146: 構文エラー : ')' が、識別子 'pName' の前に必要です。 c:\program files\microsoft sdks\windows\v6.1\samples\multimedia\directshow\baseclasses\refclock.h 80 エラー 103 error C2327: 'CBaseReferenceClock::LPCTSTR' : 型名、スタティック、または列挙子ではありません。 c:\program files\microsoft sdks\windows\v6.1\samples\multimedia\directshow\baseclasses\sysclock.h 25 のようなエラーが大量に出てきてしょんぼりな事態に陥りましたorz これは該当するコードの部分を修正するほかないんですよね?
90 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 19:31:08 ] >>89 LPCTSTR がどこのヘッダで定義されているか検索してみるよろし
91 名前:デフォルトの名無しさん mailto:sage [2008/10/27(月) 21:33:00 ] どんどんすれ違いな方向へ・・・
92 名前:メモ mailto:sage [2008/11/01(土) 16:20:51 ] MSDN Forums ≫ Software Development for Windows Vista ≫ DirectShow Development Discuss how to develop DirectShow applications using the API provided in the Windows Platform SDK forums.microsoft.com/MSDN/ShowForum.aspx?ForumID=129&SiteID=1
93 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 18:42:42 ] 79の書き込みを見てビルドしてみたんだが,なんかビルド通らねえな 文字セットもマルチバイト文字セットを使用するにしたし, Windows.hもインクルードしたんだが・・・ refclock.hの80/139/178/166とsyclock.hの25行目でエラー出る 何が問題なんだろう・・・ そして79の子は投げたのだろうか?
94 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 19:30:21 ] >>79 ってサンプル? >>82 だけど、実際にビルドできるの確認して書いたんだけど。
95 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 19:31:09 ] >>93 マジですか Ver6.0 しか使ってなかったので 帰宅したら 6.1 で試してみよう
96 名前:94 mailto:sage [2008/11/05(水) 19:31:47 ] ググってみたけど、Dshow.hが複数あって別のやつがincludeされてた、というのがあったが
97 名前:95 mailto:sage [2008/11/06(木) 02:30:35 ] WindowsSDK Ver6.1 + VisualStudio2005 Standard SP1 で >>79 がビルドを試みたと思われるサンプルフィルタ(WavDest)をビルドしてみた。 ・ソリューションに「追加のプロジェクト」で BaseClasses.vcproj を追加 ・WavDest→BaseClasses の依存関係を設定 という操作は別途行ったが、Debug/Release ビルドしたところ特にエラーもなくビルドできた。 graphedit でも動作することを確認。 BaseClasses をマルチバイト版の構成(Debug_MBCS/Release_MBCS) でビルドしようとすると WavDest 側がUNICODE版の構成しかないので >>79 のようなリンクエラーが出るのは当たり前。 >>89 >>93 のコンパイルエラーはこちらでは再現できず。(謎) >>96 の通り別バージョンのヘッダが混じってると確かに起きそうな気はするが…。
98 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 00:23:02 ] BaseClassesのStreams.hをインクルードしたつもりが 別のStreams.hがインクルードされてしまっていたことがあった(>>93 みたいなコンパイルエラーが出てたはず) BaseClassesが先頭になるように、インクルードの優先順も見直してみるといいかもね。
99 名前:93 mailto:sage [2008/11/07(金) 14:21:42 ] 文字セットがUNICODE版じゃなかったのが問題だったぽい.騒がしてすまん 後,BaseClassesを先頭に持ってくるようにしたら,すんなりとコンパイルできた とりあえず,BaseClassesは先頭に持ってこないとコンパイルエラーでるっぽい. >>79 へ 97氏がやってるようにして,すべての文字セットがUNICODEであることを確認して, 追加のインクルードディレクトリでBaseClassesを先頭にしたらコンパイルは通るともう.
100 名前:sage [2008/11/21(金) 15:23:39 ] DirectShowでデコードした動画をOpenGLのテクスチャに流し込むプログラムを書いています。 CBaseVideoRendererを派生させてOpenGLのテクスチャを更新する自作フィルタを作成し、 それは動作しているのですがパフォーマンスに不満があります。 OpenGLでのテクスチャのアップデートにはPBOを使用しているのですが、この場合アップデー トを行うバッファはOpenGL側から指示されます。 一方、CBaseVideoRendererのDoRenderSample()メソッドでは、デコードされたデータへの ポインタは前段のデコーダーから与えられます。 そのため、DoRenderSample(IMediaSample * pSample)内でpSample->GetPointer()で得られた バッファからPBOのバッファへのmemcopy()を行う必要があり、結構なオーバーヘッドとなっ ています。 OpenGLから与えられたバッファアドレスを前段のデコーダの書き出しバッファとして指定で きれば、この無意味な転送はなくなると思うのですが、こういった指定をする方法はないで しょうか? IMediaSampleではPutPointer()は使えなくなっているようですが、なにかうまくデコーダの バッファをレンダラ側から扱う方法は無いものでしょうか?
101 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 15:51:52 ] >>100 ピッチの指定ができなかったから結局は自前コピーが必要かもしれない。 自前のアロケータ(ISampleAllocator)を返してやればそれを使ってくれることもあるけど使用するとは限らない。 個人的にはFBOのほうが好きだ。PBOよりパフォーマンスがいい気がする。 まあこのくらいのメモリコピーなんて気にするな。こういう状況はよくあること。
102 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 19:24:32 ] >>101 情報ありがとうございます。 無理っぽいですか・・。 とりあえず、教えていただいたアロケータ関連を調べてみます。 運よくつかってくれればラッキーってことで。 処理すべき、動画のサイズが4K用と馬鹿にならないサイズなので少しでも オーバーヘッドが減るとうれしいんです。MediaPlayerClassicあたりだと そこそこのフレームレートで再生されていますし。 あと、ここでする話しじゃないですけど、PBOを使用しているのは、 テクスチャとしてポリゴンに貼り付けて使いたいからです。 FBOでもテクスチャの転送用として使えるんでしょうか?
103 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 20:51:18 ] ふと思ったけどPBOじゃなくて普通に受け取ったサンプルのバッファでglTexSubImage2Dするのが簡単だな。コピー量同じじゃね? FBOは主にオフスクリーンレンダリング用途だけど↑の理由から使う意味があんまりない。どっちかというと逆の用途用。 以前ベンチマークしてみたことがあるんだが、FBO実装のほうが速い結果を得た。 ついでに将来的にPBOは消えるというかサポートされなくなる話も聞いたり。
104 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 21:05:44 ] IBasicVideo の GetCurrentImage を使って、 ビデオのワンフレームをビットマップとして保存しようと思っているのですが、 ソースが mpeg2 の場合だと何故か真っ黒なビットマップしか取得できません。 ソース、取得するフレームの位置、mpeg2 video decoder を色々変えて試してみたのですが、 結果は変わりませんでした。 ソースが avi, wmv, mpeg1 の場合は正常なビットマップを取得でることを確認済みです。 このことについて何かご存知の方おられましたらご教示お願いします。 試した mpeg2 video decoder は次のものです。 MpegVideoDecoder PIXELA, Cyberlink Video/SP Decoder
105 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 23:01:46 ] 上に便乗なんですが、GetCurrentImageでバッファサイズを取得すると40バイトほど大きくなってしまいます。 まあ、使った動画がどちらも160×112の動画なので、他の場合はどうなるのか分からないんですが この大きくなってしまうのは何が原因と考えられるのでしょうか?
106 名前:デフォルトの名無しさん mailto:sage [2008/11/21(金) 23:46:52 ] >>102 OpenGLは詳しくないんで>>103 氏のコメントで正しいんでしょうが、 >>101 でも触れられている通りデコーダがテクスチャのピッチ通りに データを吐けるとは限らない(というか多分無理)ので、 デコーダから直接書き出すのはかなり難しいでしょう。 (デコーダもデコーダでいろいろ高速化の制約を受けてたりするし) >>104 IBasicVideo::GetCurrentImageはいろいろ制約が多いそうなので、 ちょっと面倒でもSampleGrabberを使ってみることをお勧めする。 なあに、慣れれば大したことないから。 (参考) ttp://www.geekpage.jp/programming/directshow/samplegrabber.php あと、サンプルのDumpフィルタベースで自前キャプチャフィルタを作ったこともある。 SampleGrabberより敷居高いのでお勧めしないけどw >>105 IBasicVideo::GetCurrentImageのドキュメント読むべし。 > メソッドが成功すると、バッファには BITMAPINFOHEADER 構造体、Win32 BITMAPINFO 構造体に定義されている > パレット エントリおよびビット マスクを含む DIB イメージ全体が書き込まれる。 だぞ。 40バイトってBITMAPINFOHEADERのことじゃないか?
107 名前:104 mailto:sage [2008/11/22(土) 00:22:43 ] >>106 情報ありがとうございます。 自前で作られたフィルタは IBasicVideo や ISampleGrabber を使うより効率よさそうですね。 うらやましい限りです。 実は ISampleGrabber を使ったことがあります。 そのときは、参考ページの geek さんの方法と同じく、 ISampleGrabber を RGB24 で SetMediaType しました。 すると、ソース が mpeg2 で video decoder が Cyberlink の場合だと、 ISampleGrabber が繋がらなかったのであきらめてしまいました。 Cyberlink の output pin が RGB 出力に対応していないのが原因というところまでは分かりました。 再び質問で申し訳ありませんが、 [Cyberlink S/P decoder] -> [ISampleGrabber] ↑を実現するためにはどうするのがいいでしょうか? 1. video decoder と ISampleGrabber の間に適当な color space converter をかます 2. ISampleGrabber の入力ピンの対応フォーマットを増やす(例えば YUY2) 3. それ以外の何か
108 名前:106 mailto:sage [2008/11/22(土) 00:43:00 ] >>107 CyberlinkのデコーダとSampleGrabberはどうやって繋いだんでしょう? ピン同士を繋いで勝手にColor Space Converterが挿入されなかったとしたら Color Space Converterが受け入れられないYUVフォーマットで出力されている可能性がありますね。 Cyberlinkのデコーダがサポートしている出力フォーマットを知るのが先決ですかね。 とりあえずDumpフィルタをデバッグビルドして、grapheditで接続してみる、 そのときgrapheditのプロセスにアタッチしてDumpフィルタのCheckMediaTypeでbreakかけて 待ち伏せればサポートしている出力ピンのメディアタイプが分かるかも。 (もっと楽な方法もありそうですが、言葉にするほど面倒なことでもないです) YUV→RGBを自前でできるならYUY2なりYV12なりで受けるのもアリですね。 ところでgrapheditでCyberlinkのデコーダ使って普通にMPEG-2を再生できてます?
109 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 00:49:41 ] >>107 RGB32
110 名前:104 mailto:sage [2008/11/22(土) 01:31:07 ] >>106 > ところでgrapheditでCyberlinkのデコーダ使って普通にMPEG-2を再生できてます? 改めて確認したところ正常に再生できています。 > CyberlinkのデコーダとSampleGrabberはどうやって繋いだんでしょう? GraphBuilder に SmapleGrabber を追加し、RenderFile しました。 > Cyberlinkのデコーダがサポートしている出力フォーマットを知るのが先決ですかね。 Cyberlinkのデコーダがサポートしている出力フォーマットは下記の graphedit による方法で調べました。 (おっしゃる通りに CheckMediaType で調べるべきでした。) graphedit 上で Cyberlink のデコーダが含まれる形でグラフを作成し、 Cyberlink のデコーダの output pin に繋がっている接続を解除させます。 Cyberlink のデコーダの output pin を右クリックし、pin propertis を選択、 現れる Preferred Media Types と書かれたタブの内容から Cyberlinkのデコーダがサポートしている出力フォーマットを判断してしまいました。 > YUV→RGBを自前でできるならYUY2なりYV12なりで受けるのもアリですね。 誰かが効率的で高品質なもの作っているはずですので、できれば避けたいですね。
111 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 14:50:54 ] Geekなページを参考にDirectShowを勉強してみようと思ったのですが、 『GraphEdit』が見つかりません もしかして、今はGraphEditは無いのでしょうが?
112 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 15:14:16 ] >>111 今はDirectShowもGraphEditもWindows SDKに入ってる。 www.microsoft.com/downloads/details.aspx?FamilyID=e6e1c3df-a74f-4207-8586-711ebe331cdc
113 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 15:33:03 ] あ・・・れ・・・? もしかしてインストールするのを間違えたという事なんでしょうか? アンインストールはSDKのフォルダを削除すればいいんですよね?
114 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 16:13:20 ] SDKのbinの中にあるよ
115 名前:デフォルトの名無しさん mailto:sage [2008/11/22(土) 21:48:46 ] 若干スレ違いかもしれませんが、お邪魔します。 他人の作ったVMRを利用した動画再生ソフトの再生画面に、自前の絵・文字を合成したい場合、 CoCreateInstanceをAPIフックして、IBaseFilterが作成される時にIVMRMixerBitmapを勝手に作成 という流れで問題はないでしょうか? 試してみたところ、一応思い通りには動いてくれているようなのですが、 APIフックやDirectShowに対する知識があまりないため、もっと簡単にやる方法があるんじゃないかとか、 この方法だと(予期せぬ)問題が生じるんじゃないかとか思っているのですが、 そのあたりのご意見いただければ幸いです。
116 名前:105 mailto:sage [2008/11/22(土) 22:45:15 ] >>106 どうもありがとうございました。コピペしたのでそこに気づいてませんでした・・・ww
117 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 00:41:02 ] DirectShowにもっと簡単にやるという概念などない ひたすら泥臭い
118 名前:106 mailto:sage [2008/11/23(日) 00:42:04 ] >>110 乗りかかった船ついでに、ちょっと調べみた。 手元にあったDVDソフトがPowerDVD 6(for OEM)で確かに[Cyberlink S/P decoder]が インストールされました。 ざっくり確認したところ、SubType = {1B81BE0C-A0C7-11D3-B984-00C04F2E73C5} すなわち DXVA_ModeMPEG2_C というフォーマットで出力されるようです。 私もまだ勉強不足ですが、DXVAに依存した形式なのか、自分の過去の経験でも 普通のYUVフォーマットとしては扱えなかった気がします。 おそらく、DXVAでYUV→RGB変換をするコードを書けば解決するような気がしますが、 まあ、ちょっと面倒かもしれませんねえ。 (個人的にはDXVAでYUV→RGB変換するモジュールを自作したいところなんですが)
119 名前:デフォルトの名無しさん mailto:sage [2008/11/23(日) 04:07:11 ] デコーダのハードウェアアクセラレータの設定を切ると大丈夫、 とかないかな。
120 名前:106 mailto:sage [2008/11/23(日) 07:28:16 ] ソレダ!! 後でやってみよう
121 名前:106 mailto:sage [2008/11/24(月) 00:28:42 ] いやはや、普通に "Use Hardware Accelerator" というオプションがありましたな。 それを切ればYUY2で接続することができました。 [Cyberlink S/P decoder]のプロパティ設定方法については調べていません。 おそらくIPropertyBagインターフェイスが実装されていると思うんですがどうなんでしょう? では、おやすみなさいませ
122 名前:104 mailto:sage [2008/11/26(水) 01:13:25 ] 106 さん、色々と調べてくださりありがとうございます。 私なりに解決方法を模索した結果、 CBaseVideoRenderer から派生したとある video renderer を カスタマイズすることで問題を解決させました。 その video renderer は私が望んでいた大抵の条件を満たすものとなりました。 出処と詳細については申し訳ありませんが記せません。 SampleGrabber を使わなかった理由は、 これにもいくつかの制限があったからです。 ttp://msdn.microsoft.com/en-us/library/ms786693(VS.85).aspx
123 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 10:14:41 ] フィルタを登録する時はどうすればいいんですか? CComPtr<IBaseFilter> WAVE_Filter; WAVE_Filter.CoCreateInstance(CLSID_MPEG1Splitter); // ここでエラー DS_graph->AddFilter(WAVE_Filter, _T("aaaa"); フィルタ CLSIDの項目をいれたんですが、)が無いとか言われるんです。
124 名前:デフォルトの名無しさん mailto:sage [2008/12/01(月) 10:16:07 ] すいません)がありませんでした
125 名前:デフォルトの名無しさん [2008/12/03(水) 04:22:24 ] オーディオデータをファイルに書き込むにはどうすればいいですか? RenderFileでグラフを作成した後Default DirectSound Deviceを FileWriterフィルタに置き換えてRunする AddSourceFilter追加、FileWriterフィルタ追加、この2つをConnectで自動補間接続後Run 繋がるフィルタが無いと言われてしまいます。流れを教えてください。 今のところこれが一番きれいですが、無いと言われてつながりません。 お願いします。教えてください。 CComPtr<IGraphBuilder> DS_Graph; CComPtr<IMediaControl> DS_Control; CComPtr<IMediaEvent> DS_Event; CComPtr<IBaseFilter> DS_Source; CComPtr<IBaseFilter> DS_FileWriter; CComPtr<IFileSinkFilter> DS_FileSink; hr = CoInitialize(NULL); hr = DS_Graph.CoCreateInstance(CLSID_FilterGraph); hr = DS_Graph.QueryInterface<IMediaControl>(&DS_Control); hr = DS_Graph.QueryInterface<IMediaEvent>(&DS_Event); hr = DS_Graph->AddSourceFilter(fullPath, L"Source", &DS_Source);// ソースフィルタの追加 CComPtr<IPin> p; hr = DS_Source->FindPin(L"Output", &p);// ソースの出力ピン hr =DS_FileWriter.CoCreateInstance(CLSID_FileWriter); hr = DS_FileWriter.QueryInterface<IFileSinkFilter>(&DS_FileSink); hr = DS_FileSink->SetFileName(L"E:\\WavFile.wav", NULL); hr = DS_Graph->AddFilter( DS_FileWriter, L"FileWriter" );// ライタフィルタの追加 CComPtr<IPin> pin; hr = DS_FileWriter->FindPin(L"in", &pin);// ライタの入力ピン hr = DS_Graph->Connect(p, pin);// ピン接続 hr = DS_Control->Run();
126 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 04:46:50 ] FileWriterは AVI ファイル用だったきがす。mux挟まないと駄目。 Waveファイル出力フィルタは標準で存在しない。SDKに WavDest というサンプルがある。 まずはドキュメントを一通り読むことだ。
127 名前:デフォルトの名無しさん mailto:sage [2008/12/03(水) 06:45:19 ] ためしにAVIMuxを間に入れたらAVIのファイルコピーができあがりました。 ずっと行き止まりで助かりました。 ありがとうございました。
128 名前:デフォルトの名無しさん [2008/12/10(水) 21:39:36 ] 再生中の動画から静止画をキャプチャしてDirect3Dのテクスチャに書き込みたいんですが、 どうやって画像を取得すればいいですか?なるべく高速に動作する方法を使いたいです。 ビデオウィンドウも表示されないようにしたいです。
129 名前:デフォルトの名無しさん mailto:sage [2008/12/10(水) 21:44:02 ] GraphEditで色々遊んでみな
130 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:06:21 ] MSのDirectShowのドキュメントは何処にあるんですか? MSDNで検索してもいいんですが、インターネットに接続できないことが多いので・・・
131 名前:デフォルトの名無しさん mailto:sage [2008/12/13(土) 22:38:15 ] >>130 英語でよければ つ WindowsSDK 日本語が必要なら つ ttp://www.microsoft.com/downloads/info.aspx?na=47&p=1&SrcDisplayLang=ja&SrcCategoryId=&SrcFamilyId=4b9b1752-6f6c-440e-816c-35d247570ae4&u=details.aspx%3ffamilyid%3d1419557B-95CB-475E-9ED1-6817B3B9CB0A%26displaylang%3dja
132 名前:デフォルトの名無しさん [2008/12/14(日) 16:41:58 ] すいません。質問です mpeg2デコーダの出力ピンがDirectX Video Acceleration (DXVA)でビデオレンダラに接続されている状態で、 自作した変換フィルタをその出力ピンとビデオレンダラの間に接続したいのですが、何か方法ありますか? 変換フィルタの入力ピンのMediaのSubTypeがRGBやYV12では接続できませんでした DXVAのビデオアクセラレーションが効いている状態では変換フィルタを接続することはできないということでしょうか?
133 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 20:49:49 ] GraphEditで色々遊んでみな
134 名前:130 [2008/12/14(日) 21:26:54 ] >>131 ありがとうございます。Windows SDKのWeb Installで Documantation→Win32 and COM を選択すればOKですね? すいません、また質問です。 Windows Headers and Libraries→HeaderFilesとx86 Libraries を選択しておけば問題ないと思ったんですが、IA64やx64のLibrariesや .NET Development Toolsも入れろといってきましたが無視して大丈夫ですか? これを入れる前に、前のバージョンはプログラムの追加と削除から削除したはずなのに C:\Program Files\Microsoft SDKs\Windows\V6.0 C:\Program Files\Microsoft SDKs\Windows\V6.0A が残っていたので手動削除しましたが、これも間違ったことをしたのではないかと不安です。
135 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 21:36:45 ] >>133 GraphEditでいろいろ遊んでみました DXVAを使うmpeg2デコーダの場合は「接続に必要な中間フィルタの組み合わせが見つかりませんでした」で変換フィルタが接続できませんでした DXVAを使わないmpeg2デコーダにすれば変換フィルタを入れられるのですが、ハードウェアの再生支援がなくなるのでCPU負荷が高くなります・・・ DXVAを使うデコーダのメリット値が一番高い場合、自動的な組み合わせではなく、変換フィルタと接続できるデコーダを自力で探さないといけないのが少々面倒ですね H264のデコーダでもDXVAが使われることがあるので、DXVAに対応させるように変換フィルタを組み合わせるのは結構大変ですねオワタ\(^O^)/
136 名前:130 mailto:sage [2008/12/14(日) 22:02:30 ] Streams.hも探しているんですが無いです・・ いったい何処にあるんだ亜!
137 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 22:32:15 ] >>136 Streams.h は Microsoft Platform SDK のサンプルの下にあるよ 例)C:\Program files\Microsoft SDKs\Windows\v6.0\Samples\Multimedia\DirectShow\BaseClasses サンプルを要らないと思って消すと見つからなくなるわな
138 名前:デフォルトの名無しさん mailto:sage [2008/12/14(日) 23:00:23 ] >>130 こんなとこで、クダまいてないで、ググったほうが早いぞ。 手当たり次第に見ていけば環境構築について書いたHPくらいすぐ見つかるじゃろ。 というか、テンプレの関連サイトくらいは全部のぞいとくべし。
139 名前:130 mailto:sage [2008/12/15(月) 23:49:30 ] すいません、どうすればいいか分かりません・・ ------ ビルド開始: プロジェクト: d3dsetup9, 構成: Release Win32 ------ コンパイルしています... cl : コマンド ライン warning D9035 : オプション 'Wp64' の使用は現在推奨されていません。今後のバージョンからは削除されます。 movietex.cpp .\movietex.cpp(30) : warning C4995: '_vsntprintf': 名前が避けられた #pragma として記述されています。 .\movietex.cpp(30) : warning C4995: '_vsnprintf': 名前が避けられた #pragma として記述されています。 .\movietex.cpp(30) : warning C4996: '_vsnprintf': This function or variable may be unsafe. Consider using _vsnprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(358) : '_vsnprintf' の宣言を確認してください。 main.cpp d3dsetup9.cpp .\d3dsetup9.cpp(260) : warning C4995: 'sprintf': 名前が避けられた #pragma として記述されています。 .\d3dsetup9.cpp(260) : warning C4996: 'sprintf': This function or variable may be unsafe. Consider using sprintf_s instead. To disable deprecation, use _CRT_SECURE_NO_WARNINGS. See online help for details. C:\Program Files\Microsoft Visual Studio 9.0\VC\include\stdio.h(366) : 'sprintf' の宣言を確認してください。 2ddraw9.cpp コードを生成中... リンクしています... movietex.obj : error LNK2019: 未解決の外部シンボル "public: __thiscall CBaseVideoRenderer::CBaseVideoRenderer(struct _GUID const &,char const *,struct IUnknown *,long *)" (??0CBaseVideoRenderer@@QAE @ABU_GUID@@PBDPAUIUnknown@@PAJ@Z) が関数 "public: __thiscall CMovieTexture::CMovieTexture(struct IUnknown *,long *)" (??0CMovieTexture@@QAE@PAUIUnknown@@PAJ@Z) で参照されました。 Release/MovieTexture.exe : fatal error LNK1120: 外部参照 1 が未解決です。 ビルドログは "file://d:\MovieTexture\Release\BuildLog.htm" に保存されました。 d3dsetup9 - エラー 2、警告 6
140 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 23:56:01 ] ttp://www.shader.jp/xoops/html/masafumi/directx9/DShow/dshow001.htm これをビルドしたいだけなんですが、リンクでよく分からないエラーが出ます。 まずatlbase.hが無いといわれたので、 ATLをWinDDKからとってきて、 Streams.hをサンプルからとってきて、 strmbase.libもビルドしてVC++ディレクトリに設定しました。 それでもまたエラーが出るので /NODEFAULTLIB:libcmt.libを設定しました。 これから先どうすればいいんでしょか・・?これはググっても全然分かりません。
141 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 23:57:16 ] C/C++でプログラム書いたことあるのか???
142 名前:デフォルトの名無しさん mailto:sage [2008/12/15(月) 23:58:03 ] >>135 mpeg2デコーダとDXVAの間に自作フィルタ入れたいんだよね? サンプルでさ、NullNullフィルタだかNullInPlaceだか名前忘れたけど 何にもしないフィルタがあるんだわさ。 そいつを改造してmpeg2デコーダとDXVAに入れてみるといいよ。 改造内容はどのメディアタイプで繋がるのかログでも吐かせりゃいいべさ。
143 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 00:01:12 ] 言い忘れた。 >mpeg2デコーダの出力ピンがDirectX Video Acceleration (DXVA)でビデオレンダラに接続されている状態で 一回接続させた後に接続解除して、Nullフィルタ繋ぐんだわさ
144 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 00:08:28 ] >>139 C++かVSスレで質問しろ。
145 名前:デフォルトの名無しさん mailto:sage [2008/12/16(火) 01:55:37 ] >>139 Expressだとatlmfcがないから無理
146 名前:130 mailto:sage [2008/12/16(火) 15:07:14 ] >>144 そうすることにします・・ 皆さん回答ありがとうございました。
147 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 23:37:26 ] フレーム単位でシークするのってどうやるの? SetTimeFormatでTIME_FORMAT_FRAMEを指定したら E_NOTIMPLが帰ってきて使えないんだが
148 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 23:56:16 ] 自分でフレーム数をMediaTimeに変換してシークする。 かな。
149 名前:147 mailto:sage [2008/12/22(月) 22:57:00 ] >>148 遅れたがサンクス。
150 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 23:05:39 ] ・再生処理に使う時間が充分あれば等速で再生し、 間に合わない場合は再生速度を遅くする (つまり、一切フレームスキップをしないようにしたい) ・音声をリアルタイムに加工、出力する この2つを実現するにはどうする?
151 名前:デフォルトの名無しさん [2008/12/22(月) 23:06:15 ] かなり下がったし、age
152 名前:デフォルトの名無しさん mailto:sage [2008/12/22(月) 23:49:58 ] C++で作ったフィルタをC#から使うのってどうやるの? 検索しても出ない
153 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 00:29:33 ] >>152 フィルタを使うじゃ抽象的過ぎてわからんよ。
154 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 00:43:57 ] 手とり足とりということです
155 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 21:00:54 ] DShow.NETがあるやん。
156 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 21:33:31 ] もちろん、DirectShow自体COM Interopでもなんとかなるはず。
157 名前:152 mailto:sage [2008/12/23(火) 22:01:42 ] 1.CBaseVideoRendererを派生させてOpenGLのテクスチャに ムービーを書き込むクラスをC++で作る 2.C#でWindows FormsでGUIを作る 3.C#でDirectShow、OpenGLを初期化 DirectShowでグラフ構築時に1.で作ったフィルタを入れる というようなことがしたい。のだがCOMに対応したDLLの作り方が 分からない。 C#でDirectShowを使うのにはDirectShow.NETを使うつもり。
158 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 22:24:21 ] COMに対応したDLLってのは1のことか? SDKのサンプルの改造じゃだめなの?
159 名前:152 mailto:sage [2008/12/23(火) 22:46:59 ] ・・・どのサンプル?
160 名前:デフォルトの名無しさん mailto:sage [2008/12/23(火) 22:50:45 ] SampVidとかだけど。
161 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 22:33:25 ] "C# DirectShow"でgoogle検索すると山ほど見つかるわけだが。 何を迷ってる?
162 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 00:38:38 ] DirectShowに関係ないところで迷ってるぽい
163 名前:デフォルトの名無しさん mailto:sage [2008/12/25(木) 01:33:09 ] 質問なのですが、HDVをDirectShowでキャプチャすることはできますでしょうか?
164 名前:152 [2008/12/27(土) 22:12:10 ] >>160 やってみた strmbase.lib(dllsetup.obj) : error LNK2001: 外部シンボル ""class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)" は未解決です。 strmbase.lib(dllentry.obj) : error LNK2001: 外部シンボル ""class CFactoryTemplate * g_Templates" (?g_Templates@@3PAVCFactoryTemplate@@A)" は未解決です。 strmbase.lib(dllsetup.obj) : error LNK2001: 外部シンボル ""int g_cTemplates" (?g_cTemplates@@3HA)" は未解決です。 strmbase.lib(dllentry.obj) : error LNK2001: 外部シンボル ""int g_cTemplates" (?g_cTemplates@@3HA)" は未解決です。 C:\Documents and Settings\ \My Documents\Visual Studio 2008\Projects\FilterDLL\Release\FilterDLL.dll : fatal error LNK1120: 外部参照 2 が未解決です。 必要そうなコードのをSampVid.cppからコピーしたけどビルドできん・・
165 名前:デフォルトの名無しさん [2009/01/02(金) 21:25:16 ] 1フレーム目を表示させてすぐ一時停止状態にするのって どうやるの?
166 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 22:21:16 ] 目と指と反射神経を鍛える
167 名前:デフォルトの名無しさん mailto:sage [2009/01/02(金) 23:19:34 ] 普通にImediaControl::Runするとビデオが進んでしまうので そうさせない方法を
168 名前:デフォルトの名無しさん mailto:sage [2009/01/03(土) 00:07:03 ] Pauseでええやん。
169 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 14:21:02 ] ライブストリーミングを保存するために 動画を再生しながらファイルにも出力しようと思っているのですが SampleGrabberで可能なのでしょうか? Web上のサンプルは静止画を切り抜くものばかりで使い方がよくわかりません・・・
170 名前:デフォルトの名無しさん [2009/01/06(火) 14:40:49 ] 指定フレームの画像を抽出しようと以下のようにすると MediaSeeking->SetPositions( ¤t, AM_SEEKING_AbsolutePositioning, &stop, AM_SEEKING_AbsolutePositioning ); ::Sleep( 50 ); // ←これないとフレーム移動する前の画像になる SampleGrabber->GetCurrentBuffer( &DIBBufferSize, (long *)DIBBuffer ); 間にSleepを入れないと指定フレームの画像にならなのですが もっと早く取る方法あったら教えてください。
171 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 15:10:32 ] >>169 可能です。 ただ、ファイル出力処理で滞ると当然コマが飛びます。 再生優先かファイル出力優先かによってコールバック内の実装をよく考えるべし。 >>170 IMediaControl::GetState()で必要最低限のウェイトを入れられると思います。 デバッグ中ならとりあえずINFINITEを入れてもいいでしょう。
172 名前:169 mailto:sage [2009/01/06(火) 16:03:26 ] >>171 ありがとうございます 現在 ttp://www.geekpage.jp/programming/directshow/samplegrabber.php こちらのページを参考にしているのですが BMPではなくそのままの動画ファイルにするには どういった部分を変更すればよいのでしょうか?
173 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 16:38:33 ] >>172 あー、ごめん、別に自前のメモリにビットマップが欲しいわけなじゃないのね。 じゃあ、この辺りを参考にしてみてはどうでしょう? VBで書いてあるけど、大体意味は分かるでしょう。 ttp://www.geocities.co.jp/SiliconValley/7406/tips/dshow/dshow3.html 簡単に説明すると、入力データを Infinite Pin Tee Filter で分岐させて、 Video Renderer と AVI Mux につっこむ。 ピンのつなぎ方が分からなければ、またそのときに。
174 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 17:01:41 ] >>171 ありがとうございます。 IMediaControl::GetState()で最低限のウェイトにできました。 所でこれはやっぱりウェイトを入れないとダメなものなんですか?
175 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 17:51:04 ] >>174 フィルタグラフ自体は別のスレッドで動いているものなので、 スレッド間で同期をとることを考えると仕方のないことですね。
176 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:12:26 ] >>175 そうなんですか。 ちなみに、最初のフレームから最後のフレームまで 順番に画像を抽出したい場合は>>170 以外の方法でもっと効率がいいやり方はありますか?
177 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:41:58 ] なんか知らんが、普通にエンコードする時の様にフィルタ繋げるだけでいいんでね?
178 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:50:35 ] やりたい事は、最初のフレームから最後のフレームまで順番に 画像を取り出すだけなんですけどね。特に動画を再生する必要はないんですが
179 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 18:55:56 ] >>176 毎フレームSetPositionsをするのは確かに効率が悪いです。 可能であればSampleGrabberのコールバックを使った方がいいでしょう。 自分は以下の記事を参考にしてコールバック処理を実装しました。 ttp://codezine.jp/article/detail/322 GetCurrentBufferに比べると結構面倒ですけどねw しかし結局自分はSampleGrabberの実装を捨てることになってしまいましたorz (まあどうでもいいことですが)
180 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 19:13:34 ] >>179 ありがとうございます。 参考にさせて頂きます〜
181 名前:169 mailto:sage [2009/01/06(火) 19:14:29 ] >>173 度々ありがとうございます VBはいまいち理解できてないのですがVC++の場合ですと ttp://www.geekpage.jp/programming/directshow/video-capture-save-avi.php こちらのページの入力をビデオカメラから動画ファイルに変更するということでよろしいのでしょうか? 的外れな質問でしたらすみません
182 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 19:41:19 ] >>181 そこにはキャプチャデバイスからAVIファイルに直接保存する方法が書いてありますが、 169さんの場合対象が(ネットワーク上の)ファイルからの再生だとすると あまり参考にならないと思います。 とりあえず>>173 で挙げたページと同じようにGraphEditでフィルタを繋いでみて、 自分の意図している動作をさせられるか、を確認してはいかがでしょうか。 ほな。
183 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 21:14:22 ] こちらはDirectShowについては全く無知な素人です。 板違いな質問かもしれませんが、ことはDirectShowに関わる問題なようなので、お詳しい皆さんお助けください。 「Virtual PC」上で、NHKオンデマンドからDLしたWMVファイルをWMPで再生を試みたところ、「DirectShow フィルタ グラフに存在しないピンに操作を実行しようとしました」と表示され、再生できませんでした。 OSはXP、WMPのバージョンは10です。 解決法について、ご教示のほど願います。
184 名前:167 mailto:sage [2009/01/06(火) 22:10:41 ] >>168 RunしてすぐにPauseするという事? ttp://www.shader.jp/xoops/html/masafumi/directx9/DShow/dshow001.htm を参考にレンダラー作ったんだけど RunしてすぐにPauseすると一回もレンダリングが行われないで ポーズしてしまう・・・
185 名前:169 mailto:sage [2009/01/06(火) 22:23:50 ] >>182 ライブストリーミングの場合はアドレスが「IP :ポート番号」になるので GraphEditではどうやってソースとして指定できるのかがわかりません 再生することはできたので 要は再生している動画を別ファイルに保存するというようなことをしたいのですが 簡単な方法などないでしょうか? 何度も質問ばかりで申し訳ありません
186 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:40:19 ] >>184 DoRenderSampleで初回のフレームが到着したかどうかチェックして ポーズをかけてみたらどうでしょう? (やり方としてマットウかどうかはよく分かりませんが) >>185 File Source (URL) で・・・、と思ったけどこれで直接URL指定する方法が分かりませんね。 一応適当なテキストファイルにアドレスを書いて File Source (Async) で開くと 勝手に ASX File Parser が繋がってFile Source (URL) で開きなおしてくれるっぽい・・・。 こっち(↓)みてコード書いた方が早いかも。 ttp://www.geekpage.jp/programming/directshow/renderfile-url.php
187 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:13:37 ] ちょいと質問なんですが。 DirectShowがまだ何かに統合する前に作ったソフトがあるのですが これ今でもDirectX9にしても普通にコンパイルできて動画がみれるのですが コンパイルできてるなら特にSDKとかなくてもいいんですよね?
188 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:30:51 ] VFWでコーディングされているのではないかとエスパー 試しにコードの一部でもうpしてみれ
189 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:50:36 ] >>188 あ、エスパー的な質問でしたか。 とりあえずファイルをオープンするところをうpります bool Open( const char *chrFileName ) { if( FAILED(CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&GraphBuilder )) ) return false; if( FAILED(GraphBuilder->QueryInterface( IID_IMediaControl, (void **)&MediaControl )) ) return false; if( FAILED(GraphBuilder->QueryInterface( IID_IMediaEventEx, (void **)&MediaEventEx )) ) return false; if( FAILED(GraphBuilder->QueryInterface( IID_IMediaSeeking, (void **)&MediaSeeking )) ) return false; if( FAILED(GraphBuilder->QueryInterface( IID_IVideoWindow, (void **)&VideoWindow )) ) return false; if( FAILED(GraphBuilder->QueryInterface( IID_IBasicAudio, (void **)&BasicAudio )) ) return false; if( FAILED(CoCreateInstance( CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **)&BaseFilter )) ) return false; if( FAILED(BaseFilter->QueryInterface( IID_ISampleGrabber, (void **)&SampleGrabber )) ) return false; GraphBuilder->AddFilter( BaseFilter, L"Grabber" ); AM_MEDIA_TYPE mt; ZeroMemory( &mt, sizeof( AM_MEDIA_TYPE ) ); mt.majortype = MEDIATYPE_Video; mt.subtype = MEDIASUBTYPE_RGB24; mt.formattype = FORMAT_VideoInfo; if( SampleGrabber->SetMediaType( &mt ) != S_OK ) return false; WCHAR buff[512]; ::ZeroMemory( buff, sizeof( buff ) ); ::MultiByteToWideChar( CP_ACP, 0, chrFileName, strlen(chrFileName), buff, sizeof(buff) ); if( FAILED(GraphBuilder->RenderFile( buff, NULL )) ) return false; if( PlayWnd != NULL ){ VideoWindow->put_Owner( (OAHWND)PlayWnd ); VideoWindow->put_WindowStyle( WS_CHILD|WS_CLIPSIBLINGS ); if( FormWnd && MediaEventEx->SetNotifyWindow( (OAHWND)FormWnd, WM_GRAPHNOTIFY, 0 ) != S_OK ) return false; }
190 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:51:27 ] if( SampleGrabber->GetConnectedMediaType( &mt ) == S_OK ){ pVideoHeader = (VIDEOINFOHEADER *)mt.pbFormat; BITMAPINFO BitmapInfo; ZeroMemory( &BitmapInfo, sizeof( BitmapInfo ) ); CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), sizeof( BITMAPINFOHEADER ) ); hBitmap = CreateDIBSection( 0, &BitmapInfo, DIB_RGB_COLORS, &DIBBuffer, NULL, 0 ); DIBBufferSize = mt.lSampleSize; SampleGrabber->SetBufferSamples( TRUE ); } if( MediaSeeking->SetTimeFormat( &(TIME_FORMAT_FRAME) ) != S_OK ) return false; return true; } こんな感じなのですが・・・
191 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 12:49:42 ] おおう、エスパー失敗w 普通にDirectShowね。 「まだ何かに統合する前」てActiveMovie時代のことを言ってるのかな? 当時はActiveMovie SDKのインストールが必要でしたね。 Visual Studio .NET 2003辺りならPlatform SDKのサブセットみたいなのが 同梱されていたと思うので、特にSDKを追加する必要はないはず。 2005以降だとEEであればPlatform SDKかWindows SDKのインストールは 必要になると思いますです、ハイ。
192 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 13:17:20 ] >>191 これDirectShow使うのに必要なのって ヘッダファイル DShow.h QEdit.h と strmiids.lib とDirectXがインスコされていればいいだけですよね?
193 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 13:34:24 ] >>192 プログラムとしてインクルード/リンクすべきファイルはそんなもんですが、 各ヘッダからやはり別のWindows(Platform) SDKに含まれるヘッダを インクルードしている形跡もあるので、注意は必要かと思います。 まあ、コンパイルしてみれば分かることですけどね。
194 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 13:40:56 ] >>193 あ、そっか、そうですよね。 とりあえず今は普通にコンパイルが通るって事は 以前にインスコしたのがあるからなんですね。
195 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 18:04:57 ] Visual Studio 2008 Standard EditionってSDK入れないとダメですか? 何かExpressは同封されてるって書いてるんですが・・・
196 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 18:17:50 ] されてるって書いてあるのに何故インストしない? BaseClassesの方ならStandardのSDKにすら入ってないよ。 いつもどうり別途Windows SDKが必要。
197 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 18:22:57 ] ExpressじゃなくてStandardだから。 Standardはどうなのか知りたかった
198 名前:184 mailto:sage [2009/01/09(金) 21:51:03 ] >>186 なるほど DoRenderSample() { ... rendered = true; ... } movie->play(); while(!movie->isRendered()) { } こんな感じ?確かにあまりまっとうじゃない・・ ttp://www.geekpage.jp/programming/directshow/samplegrabber-3.php 画像の取得はCBaseVideoRendererで、1フレーム目でとめるのには SampleGrabberを使うということはできるのかな
199 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 22:34:33 ] >>184 そのままの意味だ。RunしないでPause。
200 名前:デフォルトの名無しさん mailto:sage [2009/01/09(金) 22:37:33 ] ttp://msdn.microsoft.com/ja-jp/library/cc356923.aspx つか、全部書いてあるだろ。ドキュメントくらい読め。
201 名前:184 mailto:sage [2009/01/09(金) 23:53:34 ] しかし なにもおこらない Runして初めて表示される・・
202 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 00:58:38 ] oops!レンダラ自作してるのか。悪かった。 Pauseでポスターフレーム出す処理はレンダラが実装する必要があるんだわ。 void OnReceiveFirstSample(IMediaSample *pMediaSample) { DoRenderSample(pMediaSample); } これ追加するとよかばってん
203 名前:デフォルトの名無しさん mailto:sage [2009/01/10(土) 08:09:02 ] おー、OnReceiveFirstSampleってそうやって使うんか。 184じゃないけどthx
204 名前:169 mailto:sage [2009/01/12(月) 19:29:05 ] とりあえずGraphEditを使ってみた結果 ttp://sageuploader.if.land.to/cgi-bin/1upload/src/sage1_8271.jpg このようにすることでライブストリーミングが保存できました あとはこれをプログラムで書くだけなのですがピンのつなぎ方がよくわかりません 再生の場合は ttp://www.geekpage.jp/programming/directshow/renderfile-url.php にあるように pMediaControl->RenderFile(URL); pMediaControl->Run(); という風にすればよいというのはわかるのですがこの場合はどうすればよいのでしょう? SetOutputFileNameとRenderStreamを使えばよいのかな?と考えてはいるのですが サンプルがビデオキャプチャからの取得方法ばかりで こういった場合にどのような記述をすればよいのかわかりません
205 名前:デフォルトの名無しさん [2009/01/12(月) 22:51:43 ] これ使って作ったツールはWindows2000でも動くかな?
206 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 01:18:52 ] >>204 RenderFilleやっちゃいかん。 ソースフィルタ(URL)をフィルタグラフに登録したあと、 出力ピンを列挙してAVI Muxに1つずつ接続すればおk たぶん。 あ、あとファイル出力も手動で指定してフィルタ繋いでね。
207 名前:169 mailto:sage [2009/01/13(火) 06:56:07 ] >>206 ありがとうございます 以下のようなプログラムを作ってみたのですが ttp://uploaders.ddo.jp/upload/1mb/src/1up5294.txt コンパイルすれば通るものの実行してもファイルが作成されません これはピンのつなぎ方などが間違っているのでしょうか?
208 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 12:50:40 ] なんでエラー値をチェックしないの?
209 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 16:10:02 ] >>206 さんのアドバイスが理解されていない・・・・
210 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 17:18:19 ] >>208 チェックしてみましたがどこもエラーは返ってきませんでした >>209 すいません・・・ >>206 と ttp://msdn.microsoft.com/ja-jp/library/cc352330.aspx の辺を参考にしてやってみたんですがどの辺がおかしかったでしょうか? ソースフィルタ(URL)をフィルタグラフに登録、というのは pGraph->AddSourceFilter(URL, L"Source Filter", &pSrc); 出力ピンを列挙してAVI Muxに1つずつ接続 というところはRenderStreamを2回行ってみたのですが 根本的に間違っていたりしたらすみません・・・
211 名前:169 mailto:sage [2009/01/13(火) 18:38:16 ] あー見返すとなんか滅茶苦茶ですね 一から書き直してきます
212 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 19:57:05 ] okwave.jp/qa4625143.html
213 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 20:29:46 ] サンプルをビルドして動いたからと言って 安易に一歩踏み込むとすぐに樹海に迷い込むのがDirectShow。
214 名前:169 mailto:sage [2009/01/13(火) 22:44:13 ] 以下のように作り直してみたのですが、 ttp://uploaders.ddo.jp/upload/1mb/src/1up5301.txt AddFilterからどうしてもNULLポインタが返ってきたり GetPinがコンパイルをとおらずPin同士の接続ができなかったりしますが とりあえずそれらの部分を除外して実行した結果 localhost:7144/test.avi のようなファイルは保存に成功できました。 しかしライブストリーミングの場合は解像度と再生時間はきちんとできた動画が作成されたのですが 再生しようとしても再生されない動画ファイルでした やはりAddFilterやPinの接続がきちんとできていないことが原因なのでしょうか? GraphEditでは簡単にできても実際に作るのは難しいものなのですね 単に私が駄目なだけかもしれませんが
215 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 22:55:51 ] 確かに、GraphEditの様子をそのままコードにしてくれるツールがあったら欲しいな。
216 名前:デフォルトの名無しさん mailto:sage [2009/01/13(火) 23:37:12 ] >>214 MSDNの通りにプログラムが書けてない。 IGraphBuilderはCoCreateInstanceしない。 ICaptureGraphBuilder2からGetFiltergraphで取得する。
217 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 01:01:13 ] >>216 なるほど hr=CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC_SERVER,IID_ICaptureGraphBuilder2, (void **)&pBuilder); hr=pBuilder->GetFiltergraph(&pGraph); こういうことですね しかしこうやってもGetPinがコンパイルを通らないのは変わらず そこをコメントアウトして実行すると hr=pGraph->AddFilter(pAVIMux,L"AVI Mux");の部分で 例外が出て終了する様になりました これもコメントアウトしたばあいは前回と変わらず解像度と再生時間のみ正しい 再生されない動画ファイルが作成されるだけでした・・・
218 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 01:21:22 ] なんだそのGetPinってのはどこからでてきた?自作メソッドなのか?
219 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 01:38:19 ] >>218 これ使ってピン同士を接続するのかなと思ってコピペしてきたら ただの自作メソッドでした 早とちりしてすみません 削っても動かないことに変わりはないのですが・・・
220 名前:デフォルトの名無しさん mailto:sage [2009/01/14(水) 01:42:46 ] >>219 もう少し頑張って勉強してからまたおいで。 エスパーじゃないから、そんなんでコンパイル通らないとか言われても困るわ。
221 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 15:41:50 ] VideoWindow->put_OwnerでVFW_E_NOT_CONNECTEDが返ってくるのですが・・・ if( FAILED(CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&GraphBuilder )) ) return false; if( FAILED(GraphBuilder->QueryInterface( IID_IMediaControl, (void **)&MediaControl )) ) return false; if( FAILED(GraphBuilder->RenderFile( buff, NULL )) ) return false; if( FAILED(GraphBuilder->QueryInterface( IID_IVideoWindow, (void **)&VideoWindow )) ) return false; if( VideoWindow->put_Owner( (OAHWND)PlayWnd ) == S_OK ){ ←ここでS_OKにならない VideoWindow->put_WindowStyle( WS_CHILD|WS_CLIPSIBLINGS ); if( FormWnd && MediaEventEx->SetNotifyWindow( (OAHWND)FormWnd, WM_GRAPHNOTIFY, 0 ) != S_OK ) return false; } PlayWnd をNULLにしてもS_OKにはなりませんでした。 何が原因でしょうか?
222 名前:221 mailto:sage [2009/01/15(木) 19:18:33 ] 対象コンピュータをx64にしてたらエラーがでてx86にすると正常に通りました>< ちなみに上記のコードの後に読み込みと同時に1フレーム目を表示されようと MediaSeeking->SetPosition ←上のコードには書いてないですが今はQueryInterfaceしてます MediaControl->StopWhenReady(); VideoWindow->Visible( OATRUE ); を入れたのですが、何故か1回目の読み込み時には表示されず 2回目以降に表示されるのですが、何が原因ですか?
223 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 22:57:20 ] C++で作ったフィルタをC#で使いたいんですが 作ったフィルタをregsvr32で登録しないで使う方法ってありますか? 登録するのは(ユーザーにとって)面倒だし クラスの型がIBaseFilterにしか出来ないので アプリケーション側からデータを渡したり出来ません。
224 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 23:06:15 ] その程度の事もわからないお前には無理だ。 C#のCOMのラッピングのメカニズムも理解できていないんだろ?
225 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 23:08:01 ] Wevdestサンプルで、RenderFileで作成したグラフを最後のDefault DirectSound Deviceだけ切り離して付け替える時 RemoveFilterに失敗します。処理は正常なのですが、RemoveFilterはなぜ失敗なんでしょうか? この行をいれないとRunで失敗するので入れてるんですが、失敗してるのに意味があるんでしょうか? CComPtr<IBaseFilter> DS_DefaultDirectSoundDevice; hr = DS_graph->FindFilterByName(L"Default DirectSound Device", &DS_DefaultDirectSoundDevice); hr = DS_DefaultDirectSoundDevice->FindPin(L"Audio Input pin (rendered)", &pin_DefaultDirectSoundDevice); hr = pin_DefaultDirectSoundDevice->ConnectedTo(&pin_DefaultDSDeviceTo); hr = pin_DefaultDSDeviceTo->Disconnect(); hr = DS_graph->RemoveFilter(DS_DefaultDirectSoundDevice); hr = DS_graph->ConnectDirect(pin_DefaultDSDeviceTo, pin_WaveDest_In, NULL);
226 名前:デフォルトの名無しさん [2009/01/15(木) 23:39:31 ] もはや時代はMediaFoundation
227 名前:デフォルトの名無しさん mailto:sage [2009/01/15(木) 23:52:39 ] >>225 エラーコードは何ぞ? 試してないから外してるかもしれないけど、 pin_DefaultDSDeviceToをReleaseしてないから、ってなオチはない?
228 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 00:01:29 ] hr = pin_DefaultDSDeviceTo->Disconnect(); hr = pin_DefaultDirectSoundDevice->Disconnect();
229 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 00:43:07 ] エラーなくなりました。 フィルターを削除する時繋いであったピンを解除。 繋ぎ換えるのにも解除後接続ですね。覚えました 意外と融通きかないんですね・・・ ありがとうございました。
230 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 03:43:18 ] wmvが登場したとき wmvのコンテナに対応したソースフィルタを 書けと言われたときはくらくらと眩暈がした。
231 名前:デフォルトの名無しさん [2009/01/16(金) 12:36:29 ] ふうん
232 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 13:31:35 ] 1フレーム毎にイベントを取りたいのですが イベント通知コードは何になるんですか?
233 名前:221 mailto:sage [2009/01/16(金) 15:57:23 ] >>222 で最初のフレームが表示sれないって話なんですが どうやら一瞬表示してるみたいで VideoWindow->Visible( OATRUE );の下にSleep( 1000 );と入れると 1秒間最は初のフレームを表示して、1秒後に消えてしまいます。 そして2回目に>>221 を走らせた時はずっと最初のフレームを表示した状態になります 何が原因でしょうか・・・
234 名前:221 mailto:sage [2009/01/16(金) 16:11:44 ] わかりました。 どうやらStatic Textに描画されてるのがまずかったみたいです。 Picture Controlにしたら消えなくなりますた。。。 なにこれ・・・
235 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 17:00:57 ] Windowsの描画の基本的な所を理解していないのが問題
236 名前:デフォルトの名無しさん mailto:sage [2009/01/16(金) 17:10:21 ] >>235 が基本を教えてくれるそうです。 では、どうぞw
237 名前:デフォルトの名無しさん mailto:sage [2009/01/17(土) 01:24:29 ] 他人が理解できる説明の仕方を意識しよう。あと、日本語を学べ。
238 名前:デフォルトの名無しさん [2009/01/19(月) 09:02:44 ] ではまず国語辞典を勉強したらよろしいでしょうか?わかりません><
239 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 16:28:00 ] 単語を覚えるだけでは言語を会得できないな。 日本語でも英語でもプログラミング言語でも。
240 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 17:49:44 ] GetConnectedMediaTypeでVFW_E_NOT_CONNECTEDが返って来るのですが原因は何でしょうか? その前にやってるSetMediaTypeはちゃんとS_OKが返ってきてます。
241 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 18:22:51 ] VFW_E_NOT_CONNECTED だから 繋げろ!
242 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 18:30:15 ] >>241 言い忘れてましたが、VFW_E_NOT_CONNECTEDが出るのはGetConnectedMediaTypeだけで 他は普通にOKなので動画の再生はできています。
243 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 18:51:39 ] 再生にサンプルグラバは関与してますか? そうでなければ別にサンプルグラバが繋がってなくても再生に支障はありませんよ。 少々面倒でもROTを登録して外部からフィルタグラフを覗けるようにしておくと デバッグが便利ですよ。
244 名前:243 mailto:sage [2009/01/19(月) 18:52:57 ] × ROTを登録 ○ ROTに登録
245 名前:デフォルトの名無しさん mailto:sage [2009/01/19(月) 19:03:42 ] >>243-244 やりたい事はと言うと、再生して指定フレームの画像をbmpとして保存したかったのです。 その為にサンプルグラバでAddFilter後にビデオヘッダを取得したりと・・・ とりあえずGraphEditでみてみようとおもいます・・・ ちなみに、同じソースを別PCで動かすとGetConnectedMediaTypeでエラーはでませんし 正常にbmpファイルに落とすことができています。
246 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 00:24:24 ] >指定フレーム フレームで指定ってできるんだっけ? ○番目のフレームとか。
247 名前:デフォルトの名無しさん mailto:sage [2009/01/20(火) 00:41:20 ] つSetPositions とはいえ、TIME_MEDIA_TIMEしか使えないストリームだと ちょっと難しいけど。
248 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 22:49:54 ] SetPositionsって時間指定じゃん
249 名前:デフォルトの名無しさん mailto:sage [2009/01/21(水) 23:40:38 ] TIME_FORMAT_FRAMEを指定してから使うよろし。 >>247 でも書いてるけど、すべてのストリームでTIME_FORMAT_FRAMEが使えるとは限らない。 本格的にやるならDESを使うんですかね。 自分はやったことないので分からないですが。
250 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 15:56:17 ] コーデックの関係でSampleGrabberでの画像抽出ができずBasicVideoを使っているのですが BasicVideoのGetCurrentImageで画像を取ると3秒もかかってしまうのですが これをもっと早く取る方法ってありますか?
251 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 16:27:45 ] ムリポ 「コーデックの関係でSampleGrabberでの画像抽出ができず」辺りを もう少し詳しく話した方が、いい話が聞けるかもよ?
252 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 16:56:00 ] >>251 そうですね。失礼しました。 カノープス社のコードックであれしてるaviファイルから静止画を取りたいのですが これが何故かSampleGrabber->GetConnectedMediaTypeでエラーになるんです。 ちなみにほかのaviファイルでは正常に静止画が取得できています。 それで試しにBasicVideoで静止画と取ってみたら取れたのですがこれが遅くて・・・
253 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 17:57:02 ] 小出しはやめてね
254 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 18:04:39 ] カノープスのコーデックといってもHQとかMJPGとかいろいろある
255 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 18:11:38 ] HQです。 今色々試してたんですが、SetMediaTypeするときの サブタイプをMEDIASUBTYPE_RGB32にすると GetConnectedMediaTypeでエラーが出ずに通ったのですが・・・ これすると、映像がさかさまになってる・・・
256 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 21:17:22 ] >>255 さかさまってビットマップか?
257 名前:デフォルトの名無しさん mailto:sage [2009/01/22(木) 21:44:12 ] --------------------------------------------------------------------------- 可能な限り速くコマ送りするのってどうするんですか? IVideoFrameStepを使うと1倍速以上にはならないし、逆方向には進めません。 独自レンダラでレンダリングした画像を 加工して1コマずつ連番BMP出力したいだけなんですが。 (将来的にはDirectShowを使った出力も実装したいが、取りあえずBMPで) >>255 memcpyを使って画像を自力で反転するしかないのでは。 (画像の横幅*4byteのサイズでコピーを繰り返す) 4byteなのはMEDIASUBTYPE_RGB32で32bitの画像と指定したからです。 もしRGB24なら3byteです。
258 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 00:52:55 ] >>255 BITMAPINFOHEADERか何かで上下反転してるかどうかの判定は 可能じゃなかったかな? >>257 SampleGrabberを使ってた時の経験だけど、SetSyncSource(NULL)では うまくいかなくて、SetRateで適当に100倍くらいを設定して全力取得したり したことはあります。ただ、コーデックによってはうまくいかないかも。
259 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 09:47:42 ] MIDIをWAVEに変換する方法はあるんでしょうか? 再生される以上どこかで電圧値に置き換わってると思うんですが、サウンドボードで変換されてるんですか? MIDIデフォルトOUTを置き換えても不可能でしょうか?WAVE関連のものに置き換えできませんでした
260 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 10:15:08 ] >>256 いえRGB32にすると映像の方がさかさまになるんですよ。 RGB24にすると映像は正常なのですがGetConnectedMediaTypeでエラーになりまふ >>258 あ、そうなんですか? ちょっとヘルプみてみます。
261 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 10:32:57 ] >>260 取得できたAM_MEDIA_TYPEからBITMAPINFOHEADERを引っ張り出して biHeightの正負を見てみそって。 一応ココ(↓)見とき。 ttp://msdn.microsoft.com/ja-jp/library/cc352308.aspx ttp://msdn.microsoft.com/ja-jp/library/cc371307.aspx ttp://msdn.microsoft.com/ja-jp/library/cc352096.aspx フォーマットによって成功したりしなかったりはColor Space Converterが 途中に入るかどうかによるのかもしれん。
262 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 10:38:29 ] >>261 ありがとうございます。 しかしbiHeightが負で判別できた場合はどうやって映像を正常に表示できるんでしょうかこれ。
263 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 10:56:49 ] ん? レンダリング結果も上下反転してるの? BMPに保存したときだけじゃなくて?
264 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 11:02:18 ] BMPファイルのヘッダの高さもそのままマイナスにすれば普通は問題ない まれに対応していないソフトもある
265 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 11:32:50 ] >>263-264 静止画は正常で動画の方が逆になるんですよね・・・ でもRGB24にすると動画は正常になるけど GetConnectedMediaTypeでエラーになって・・・
266 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 12:47:44 ] それがDirectShowの仕様です
267 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 18:26:01 ] 全フレームの画像を取得したいのですが SetPositionsでフレームを移動して取ると時間がかかるので もっと効率的な方法はどうしたらいいですか?
268 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 20:41:02 ] >>259 WavDestとFileWriterでよかばってん >>267 ストリーム流しながらのサンプルグラバでよかばってん
269 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 20:52:30 ] ばってん何?
270 名前:257 mailto:sage [2009/01/23(金) 22:24:25 ] >>258 SetRateは(貴方が書いているように)コーデックによっては使えないので・・ SetSyncSource(NULL)しても再生は別スレッドで行われているのに どうやって レンダリング→BMP出力→レンダリング→BMP出力→... のように同期させられるんでしょうか。
271 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 22:27:17 ] 基本的な事だけどpushとpullモデル理解しているか?
272 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 22:37:32 ] >>257 サンプルグラバとNullRenderer使えよ
273 名前:257 mailto:sage [2009/01/23(金) 23:17:54 ] >>271 push??pull? ttp://unkar.jp/read/pc11.2ch.net/tech/1162913156 色々調べてみたら、これがヒットしました。 ・・・ソースフィルタを作って加工したデータをこのフィルタに送るんでしょうか
274 名前:デフォルトの名無しさん mailto:sage [2009/01/23(金) 23:20:49 ] MSのドキュメントも読んでいないなんて死んだほうがいい
275 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 11:38:54 ] >>268 ダメです、MIDIParsaとWevDestがつながりません。 pMediaType->SetType(&MEDIATYPE_Midi); の変更もしてみたんですがダメです。グラフエディタでつながらないと出ます お願いします
276 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 13:47:34 ] >>275 情報少なすぎてわかるわけがないよ。エスパーじゃないし。 わかるように書いてよ。
277 名前:デフォルトの名無しさん mailto:sage [2009/01/24(土) 15:04:31 ] MIDIのトランスフォームフィルタを自作するか見つけてくる必要がある。
278 名前:デフォルトの名無しさん mailto:sage [2009/01/25(日) 17:51:50 ] まったく作れそうな気がしません 音源はどこから引っ張ってくればいいんですか?
279 名前:267 mailto:sage [2009/01/26(月) 11:45:44 ] >>268 再生しながらはどのようにゲットすればいいですか? イベントですか? でもイベントでは1フレームずつ入ってこなかったしなあ
280 名前:デフォルトの名無しさん mailto:sage [2009/01/26(月) 18:15:47 ] コールバックですよコールバック このスレでも何度か話題に出てるんで探してみれ
281 名前:デフォルトの名無しさん [2009/01/29(木) 21:59:01 ] COutputQueueを使ってコマ送りって可能?
282 名前:デフォルトの名無しさん [2009/01/30(金) 13:26:27 ] サンプルグラバのGetCurrentBufferで静止画を取得する時に 動画サイズのまんまではなくて縮小して取得したい時はどうしたらいいですか?
283 名前:デフォルトの名無しさん mailto:sage [2009/01/31(土) 15:50:00 ] 自分で縮小でも拡大でも好きにすればいいんじゃない?
284 名前:デフォルトの名無しさん [2009/02/02(月) 03:20:48 ] 複数の音楽ファイル(mp3とWMA)の一部ずつ(サビの部分)を繋いで、一つのWAVにしたいのですが、 どう作ればいいのか判りません。 最初の曲は、サビまでシークしてしてから、WAVEファイルにはできているようです。 ですが、2曲目を処理しようとすると、グラフを停止しないと、接続できないという現状です。 例えば、2つの曲をフェードインアウトで繋げる処理はどう書けばいいのでしょうか? なにかヒントやサンプルなど教えてもらえるとありがたいです。
285 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 04:29:59 ] 高校の物理をちゃんと勉強していれば簡単な事なんだけどね
286 名前:デフォルトの名無しさん mailto:sage [2009/02/02(月) 10:56:55 ] DESじゃないのん?
287 名前:デフォルトの名無しさん [2009/02/03(火) 01:16:38 ] >>286 DESってDirectshow編集サービスのことですよね。 ちょっと調べてみます。 ありがとうございました。
288 名前:デフォルトの名無しさん [2009/02/05(木) 14:32:39 ] 質問です。 MP4ファイルの頭に5Kほどのデータを付加したファイルを再生する フィルターをASyncサンプルに手を加えて作りました。 GraphEditではファイルを選択して、VideoRendererとPIN接続すると、 MP4Splitterとffdshow codecが間に入り再生できます。 このファイルをGraphEditにD&Dするとはじかれます。 これをIGraphBuiderでグラフを作って再生したいのですが、 どうしても自作フィルターとMP4SplitterとのConnectで CANNOT_CONNECTが帰ってきてしまいます。 自作フィルタにファイルパスを与えてグラフに追加するという、 GraphEditでの動作をどのようにプログラムしていいのかわかりません。 方法をご存知の方、ご教授ください。 ベースとするフィルタを間違えているのでしょうか?
289 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 15:14:59 ] デバッグすりゃ原因がわかるだろ
290 名前:デフォルトの名無しさん [2009/02/05(木) 15:17:29 ] >>289 知らないならレスしないで下さい。ウザいだけです。。
291 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 16:01:11 ] 俺もデバッグすりゃ原因が分かると思う。
292 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 16:50:34 ] IGraphBuilder::RenderFile() を使っちゃってる、に1票 ・・・じゃないよね。 自作フィルタはちゃんと自前でCoCreateInstanceしてる?
293 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 16:51:15 ] あ、メリット値を適切に設定してるなら別ね。
294 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 17:14:08 ] GraphBuilderに自作SourceFilterとVideoRendarerだけ追加したら 後はRendaerFileでいいんじゃないの? そうすりゃMP4Splitterとffdshow codecが勝手に間に入るだろ
295 名前:デフォルトの名無しさん mailto:sage [2009/02/05(木) 23:36:50 ] LONGLONG tmp = (LONGLONG)(frame * Renderer->getATPF()); pMediaSeeking->SetPositions(&tmp,AM_SEEKING_AbsolutePositioning, NULL,AM_SEEKING_NoPositioning); AverageTimePerFrameを使ってシークするのって駄目なんですか? たまに思った位置にシークできないファイルがあります。
296 名前:デフォルトの名無しさん [2009/02/07(土) 01:54:57 ] ISampleGrabberについての質問です。 DirectShowでmp3を再生中にISampleGrabberのGetCurrentBufferを行うと、 再生中の場所の波形データが取得できると思うのですが、 毎回GetCurrentBufferを行っても、1秒間に約3回ほどしか取得するデータに変化がありません。 リアルタイムに現在再生中の場所の波形データを取得するにはどうしたらよいのでしょうか。
297 名前:デフォルトの名無しさん mailto:sage [2009/02/07(土) 15:37:21 ] oshiete1.goo.ne.jp/qa4695764.html okwave.jp/qa4600803.html
298 名前:デフォルトの名無しさん [2009/02/08(日) 10:12:29 ] >>297 ありがとうございます。 解決しました。
299 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 11:17:10 ] 質問したなら、どう解決したのか書いて欲しい。 それにしてもマルチポストなんて今時珍しいね。 回答が付いているところにも驚いた。
300 名前:デフォルトの名無しさん [2009/02/08(日) 13:21:49 ] 初歩的な質問ですが キャプチャーボードにチューナ・S端子・コンポジットがあるのですが その切り替えはDirectShowでできるのでしょうか? カメラで入力した映像を解析ソフトを作ってみたのですがWebカメラでは物足りなくて 手元にあったボードを使ってみたのですが初期でチューナーになってしまうので お願いします
301 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 16:32:30 ] 映像解析ソフトを作るとはハイレベルだ
302 名前:デフォルトの名無しさん mailto:sage [2009/02/08(日) 17:28:15 ] >>300 つ Crossbar
303 名前:300 mailto:sage [2009/02/08(日) 17:55:56 ] できるんですね。ありがとうございます
304 名前:デフォルトの名無しさん [2009/02/09(月) 09:54:17 ] 2つの動画を同時再生したいんですが、2回同じ表示手続きをしないとダメですか?
305 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 10:42:16 ] グラフ2つ作れば良いだけの話では?
306 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 11:58:32 ] >>305 あ、すみません。 そこの所をもうちょっと教えてください。 どこか参考になるサイトとかもあったらお願いしまふ
307 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 12:54:37 ] >>306 1つのソースでレンダラ2つ出したいならスプリッタを使う。 別々のソースを表示したいならグラフビルダ2つ用意する。
308 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 13:45:22 ] >>307 別の動画を再生したいからグラフを2つ作るんですね。 それで再生とかする場合はMediaControlも2つですよね?
309 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 15:24:10 ] 質問です。 IMediaDet::get_StreamLength() および get_FrameRate() で得られた値を使って 非圧縮AVIファイルの総フレーム数を取得するコードを書いていますが、 あるVista環境にて総フレーム数を間違うことがあります。 (822フレームと算出してもらいたいところ、830となったりします。) 何か特殊なフィルタがインストールされているのではないかと思うのですが、 客先環境のため、簡単にチェックできません。 とりあえず不具合回避策は準備したので緊急度は低いのですが、 このようなことが起こるケースについて何かご存知の方がいらっしゃいましたら、 ご教示ください。
310 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 16:11:46 ] >>308 いえす
311 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 16:16:20 ] >>310 ですよね。 と、言う事はやはり再生等に必要なアレは2つずつ用意しないといけないんですね。 ちなみに、同じコールバック関数を呼ぶようにした場合ってどっちの動画か見分ける術ってありますか?
312 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 16:24:04 ] >>311 アレじゃわかんない。 コールバックって何よ。ISampleGrabberCB::SampleCBだったら パラメータのIMediaSample で区別ができるかもしれない。 が、流す動画による。
313 名前:デフォルトの名無しさん mailto:sage [2009/02/09(月) 16:27:03 ] >>312 BufferCBを使ってるんです>< ちなみにアレとは MediaControl、MediaEventEx、SampleGrabber、VideoWindowです。。。
314 名前:デフォルトの名無しさん [2009/02/19(木) 17:11:04 ] クズ共ちょっと教えてください。 XP64ビットOSでVC2009で32ビット用でコンパイルすると正常に動画再生ができるが 64ビット用でコンパイルすると音だけでて映像が表示されないんです。 お前達のようなゴミにはわからないかもしれませんが宜しくお願いします。
315 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 17:16:53 ] VC2009
316 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 17:26:03 ] コーデック
317 名前:デフォルトの名無しさん [2009/02/19(木) 17:33:45 ] 思ったとおり役に立たないクズしかいないですね
318 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 17:35:46 ] >>316
319 名前:デフォルトの名無しさん mailto:sage [2009/02/19(木) 23:58:51 ] ここはエスパー板じゃないんで、314の期待するような能力者は居ません。 もうちょっとヒントが多ければ優秀な推理マニアが現れるかもね。
320 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 00:53:51 ] だからさ、64bitプロセスには64bit版コーデックが要るんだよ。
321 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 02:26:18 ] 知ってるがおまえの程度がAA略
322 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 08:21:22 ] 64ビットアプリにゃ64ビットDLL(この場合コーデック)が必要という常識も知らず クズ呼ばわりってどんだけおめでたいんだ・・・。 コピペ厨房の俺でさえ知ってるわ。
323 名前:デフォルトの名無しさん [2009/02/20(金) 09:56:16 ] >>322 その程度の知識しかないから役立たずのクズって言ってるの だから知らないならレスするなって
324 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 10:14:37 ] 64bit Windowsが普及しない原因を知ってれば、 容易に気が付くだろ。知識なんかほとんどいらね。 バカじゃねーの?
325 名前:デフォルトの名無しさん [2009/02/20(金) 10:36:15 ] 知らないからって必死になるなって
326 名前:デフォルトの名無しさん mailto:sage [2009/02/20(金) 11:09:56 ] >>314 が必死になってるのか。
327 名前:デフォルトの名無しさん [2009/02/24(火) 11:30:20 ] VideoWindow->put_OwnerにHBitmapを与えて再生した時に ウィンドウフレーム無しの動画が画面上に表示されるのですが これHBitmapだからそのまま変換して画像としてファイルに保存できますか?
328 名前:デフォルトの名無しさん [2009/02/24(火) 12:05:30 ] ISampleGrabbberCBコールバックのBufferCBで受け取るDIBデータを 指定したサイズで受け取るにはどうしたらいいですか?
329 名前:328 [2009/02/24(火) 15:01:36 ] 現状では動画のオリジナルサイズになっているのですが これをVideoWindowで再生させてるウィンドウサイズと同じ大きさにしたいです
330 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 16:02:56 ] リサイズ機能なんてねーよw 普通はレンダーが勝手に表示サイズ合わせるだろ
331 名前:328 mailto:sage [2009/02/24(火) 16:08:50 ] そうですか。やっぱり無いですか・・・
332 名前:デフォルトの名無しさん [2009/02/24(火) 22:55:54 ] すみません。最近ARIBの仕様書がWebで閲覧できることをしったので、 地デジチューナーからSI情報を取得して、中身をさわってみたいと 思いました。 DirectShowでそんなかんじのことができるのでしょうか? (SIのパースまで、という意味ではなく、データセクションが 抜ければ十分うれしいです) 参考になるURLなどございましたらご教授の程お願いできますでしょうか? よろしくお願いいたします。
333 名前:デフォルトの名無しさん mailto:sage [2009/02/24(火) 23:33:05 ] >328 質問の内容を十分理解せず、脊髄反射的回答しちゃうけど、 動画のリサイズはDESでできた気がするデス。
334 名前:328 mailto:sage [2009/02/25(水) 10:01:30 ] >>333 あ、すみません。 DESってどんなのでしょうか? 何か参考になるサイトとかあったら教えてください><
335 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 00:27:55 ] Directshow Editing Servicesの略DES。 この辺を参考にすると良いDES。 ttp://msdn.microsoft.com/ja-jp/library/ms867700.aspx ttp://msdn.microsoft.com/ja-jp/library/dd148668.aspx ほとんど329しか読まずに応えてしまったけど、 ・ソースそのものが変化してしまう ・再生中にサイズを変えるとかは不可能 なんで要注意。
336 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 01:13:01 ] 質問失礼します。 4chの音声を同期を取りながら再生する方法を一週間ほど考えているのですが、やり方が全くわかりません。 2つのオーディオチャンネルを結合して、ステレオにするフィルタはCodeZineで見つけたので作ってみました。 ただ、これだと(当然ですが)LとRから再生されてしまうので・・・。 単純にLとL、RとRを加算して一つのステレオとして出したいのですが、どうすれば良いのでしょうか? お知恵を貸して下さい、よろしくお願いします。
337 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 02:20:38 ] 意味がわからん
338 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 08:40:43 ] Codezineのサンプルソースをベースに、そういうフィルタをつくればいいじゃん。
339 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 10:39:12 ] ミキシングしたいとか?
340 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 15:19:59 ] 最終的に何がしたいのだろうね? 自分でMTRつくりたいのか?w
341 名前:デフォルトの名無しさん mailto:sage [2009/02/26(木) 15:27:11 ] >>340 お前みたいなクズはレスするな。
342 名前:デフォルトの名無しさん [2009/03/18(水) 03:08:51 ] あげ ミキシングしたいのかな?質問が意味不明
343 名前:デフォルトの名無しさん [2009/03/18(水) 14:10:56 ] 有識者の皆様に質問です。 デバッグビルド時にフィルタグラフをROTに登録しています。 ttp://msdn.microsoft.com/ja-jp/library/cc370087.aspx 以前は普通に GraphEdit から "Connect to Remote Graph" で接続できていたのですが、 今日久しぶりに当該コードをメンテナンスしようとしたら接続できなくなっていました。 [症状] - "Connect to Remote Graph" でリストには表示される。 - 選択してOKをクリックしても、何もグラフ上に表示されず。 - 再度 "Connect to Remote Graph" でリストを表示すると、見えなくなっている。 - デバッグ実行でも、コマンドラインからの実行でも症状変わらず。 この問題について、何か心当たりのある方はいらっしゃいますか?
344 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 15:17:56 ] >>343 Vista で実行して困っているのなら msdn.microsoft.com/en-us/library/ms787252.aspx
345 名前:343 mailto:sage [2009/03/18(水) 16:45:18 ] >>344 ありがとうございます。 環境書いてませんでした。OSはXP(32bit)です。 念のためこの環境でも proppage.dll を登録してみましたが、やはり変わりませんでした。 なお、ひとつ間違いがありました。 pROT->Register() の第1引数になぜか 0 を指定してました。 ROTFLAGS_REGISTRATIONKEEPSALIVE に変更することで、何度 "Connect to Remote Graph" を 選択してもリストに "pid 0xXXX(ddd) IFilterGraph = XXXXXXXX" が出てくるようにはなりました。 ただ、やはり選択→OKしてもフィルタ構成は表示されません。うーむ・・・。 ちなみに、Windows SDK 6.0A/6.1 に含まれる GraphEdt ではリストにすら 表示されませんでした。 指定すべきモニカの文字列フォーマットが変わってたりするのでしょうか・・・。
346 名前:343 mailto:sage [2009/03/18(水) 17:07:55 ] 解決しました。 きっかけはこちら。 ttp://questionbox.jp.msn.com/qa1612988.html quartz.dll を登録したら治りました。 ええー、quartz.dll ってデフォルトで登録されてませんでしたっけ?って感じですが・・・。 なお、この状態なら Windows SDK 6.0A/6.1 に含まれる GraphEdt でも接続できました。 でもタイミングによってなぜか Runtime Error が出ます。 どうもお騒がせしました。
347 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 17:11:09 ] >>345 regsvr32 "C:\WINDOWS\system32\quartz.dll"
348 名前:デフォルトの名無しさん mailto:sage [2009/03/18(水) 17:11:39 ] orz
349 名前:デフォルトの名無しさん [2009/03/19(木) 02:31:25 ] 347 明日はいいことあるさ
350 名前:デフォルトの名無しさん [2009/03/23(月) 11:02:01 ] RenderFileの戻りが遅いのですがこれを早くする方法を教えてください
351 名前:デフォルトの名無しさん [2009/03/23(月) 11:53:31 ] なぜ遅いか考えたことある?
352 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:24:34 ] 俺のRenderFileは早いよ
353 名前:デフォルトの名無しさん [2009/03/23(月) 13:13:05 ] 早くする方法があったら教えてください
354 名前:デフォルトの名無しさん [2009/03/23(月) 13:17:47 ] お前、馬鹿だろ
355 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:05:10 ] 「RenderFileの戻りが遅い」と判断する根拠がよく分からないよ。 サンプルプログラムやWMPに比べて異常に遅いと体感できる、 もしくは実測してこうだった、などの比較はできてますか? とりあえずエスパーで二つほど。 ・インストールされているコーデック(パック)を片っ端からアンインストールする ・予め使うことが予定されているフィルタをフィルタグラフに登録しておく あとはもう少し詳しい状況を教えてもらえれば、他にも何か言えることがあるかも。
356 名前:デフォルトの名無しさん [2009/03/23(月) 15:23:29 ] RenderFile関数から抜けてくるまで2秒くらいかかります。 早くする方法があったら教えてください
357 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:25:57 ] 速くするためには、まず何の理由で遅いのかを調べようぜ
358 名前:デフォルトの名無しさん [2009/03/23(月) 17:56:43 ] RenderFileの戻りが遅い理由って舞い糞ソフトに聞けばいいんですかね? 関数の内部事情なんて僕には検討もつきませんが。 っていうか、知らない人はレスしないで下さい。ウザイだけですよっと。
359 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 18:11:52 ] うちじゃ2秒もかからないからな。 お前のとこだけで遅いのに理由がわかるわけないだろう。
360 名前:デフォルトの名無しさん [2009/03/23(月) 18:16:06 ] ごめん2秒じゃなかった1秒ちょいだった ちなみにファイルサイズは4GBくらい まあ、どうせお前らの持ってるエロ動画なんて100MB前後だろ?
361 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 18:35:09 ] お前の持ってるちんこ同士がけこーんしてるような動画は1ビットも要りません
362 名前:デフォルトの名無しさん [2009/03/23(月) 18:51:50 ] どうせDVDでも引っこ抜いて4GBなんだろ、
363 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:02:34 ] しかたないなあ。 たまたまシンプルな再生プログラム書いてたのでテストしてみたよ。 6GB超のAVIファイルを RenderFile() に突っ込んで要した時間は 169[ms] でした。 はい、次の情報どうぞ。
364 名前:デフォルトの名無しさん [2009/03/23(月) 19:05:04 ] すんませんでしたとしか言いようがありませんよ んー、とりあえずお前らのソースみてやるからスレに貼ってください。
365 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:15:01 ] HRESULT SimplePlay(LPCWSTR lpwstrFile) { CComPtr<IGraphBuilder> m_pGraph; CComQIPtr<IMediaControl, &IID_IMediaControl> m_pControl; CComQIPtr<IMediaEvent, &IID_IMediaEvent> m_pEvent; HRESULT hr = CoInitialize(NULL); if (FAILED(hr)) return hr; hr = m_pGraph.CoCreateInstance(CLSID_FilterGraph); if (FAILED(hr)) return hr; hr = m_pGraph.QueryInterface(&m_pControl); if (FAILED(hr)) return hr; hr = m_pGraph.QueryInterface(&m_pEvent); if (FAILED(hr)) return hr;
366 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:16:22 ] DWORD tTmp = timeGetTime(); hr = m_pGraph->RenderFile(lpwstrFile, NULL); tTmp = timeGetTime() - tTmp; if (FAILED(hr)) return hr; hr = m_pControl->Run(); if (FAILED(hr)) return hr; for (;;) { long code = 0; hr = m_pEvent->WaitForCompletion(0, &code); if ((FAILED(hr) && hr != E_ABORT) || code == EC_COMPLETE) { break; } }
367 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 19:17:27 ] CoUninitialize(); return S_OK; } >>365-367 まとめてみてください。 RenderFile()を抜けた後の tTmp の値を教えてね。 エラー処理に関するコメントは No thank you です。
368 名前:デフォルトの名無しさん [2009/03/23(月) 19:24:45 ] >>365-367 ありがとうございます。 やってることはお前いや貴様と一緒ですね やっぱその他の環境の問題なんですかねこれ。 あ、ちなみにOSはXP64ですよですよ。 もうちょい調べてみます。わざわざありがとうございました、
369 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:34:07 ] EnumPins グラフ 構築 で検索
370 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 10:53:26 ] つーか情報の小出しに付き合ってられんわ
371 名前:デフォルトの名無しさん [2009/03/24(火) 11:38:52 ] >>370 みたいな奴って知らないのにレスするタイプだよね
372 名前:デフォルトの名無しさん [2009/03/24(火) 11:47:37 ] >>371 みたいな奴って煽りのしかレスできないタイプだよね
373 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 11:50:58 ] 最初の情報は遅いってだけ 次に2秒かかると出て 次に4GBと出て 自分のソースは出さずに人に要求して それからOSがXP64と出た で、>>355 のレスには何も反応していない。 これで原因分かるのに間抜けだよな。
374 名前:デフォルトの名無しさん [2009/03/24(火) 12:26:25 ] 単細胞って幸せだと思った
375 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 14:44:08 ] 最初の書き込みでゴミって判るのに、反応する奴がいるのが不思議
376 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 14:59:53 ] 過疎るくらいなら枯れ木も山の賑わいくらいに思ってた方がいいかな、と思って。 不快だったらゴメンね。
377 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 15:05:55 ] ごめんねほんと
378 名前:デフォルトの名無しさん [2009/03/26(木) 15:17:44 ] 動画を1フレームずつSetPositionsで動かして コールバックで画像を取るのを作っているんですが 最初の1,2フレームでコールバックが来ないときがあるのですが 何が原因ですか?
379 名前:デフォルトの名無しさん mailto:sage [2009/03/27(金) 08:11:59 ] ヒント:CODEC
380 名前:デフォルトの名無しさん [2009/03/28(土) 13:59:38 ] SonicStageについてくるフィルタを使って、Atrac3(oma)の再生がやりたいんですが デバッガで実行するとRenderFileの所で、「現在の場所のソースコードを表示できません」と出て止まってしまいます。 デバッガ無しで普通に実行すると問題なく再生できるんですが、原因分かる方いますか? mp3やaviなどその他のファイルはデバッガでも問題ないです。 環境はVCEE2008、XP32SP3、DXSDK(April 2007)です。 もしかしたらソニーがリバエン対策でアンチデバッグしかけてるのかな?とか妄想したりしてます…
381 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 14:16:28 ] よくわからんけど、そのフィルタがデバッグビルドされてて、ブレークするけどソースがないからそうなるとか?
382 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 14:58:48 ] >>381 デバッグビルドですか、それは考えて無かったです しかし、ブレークした後続行をするとAVが発生してしまうのです
383 名前:デフォルトの名無しさん mailto:sage [2009/03/28(土) 23:53:54 ] 単純にソースの置いてあるパスの問題じゃねーの? デバッカで動かす時、ソースファイル(再生したいファイル)どこに置いてる? そんな基本的ミスする奴がDirectShowいじるわけねーか。
384 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:12:25 ] >>383 >mp3やaviなどその他のファイルはデバッガでも問題ないです。 なのでパスの問題ではないです 寧ろ存在しないパス渡してもエラー吐かないみたいですが できればSS入れている方で試された方いましたら情報頂けるとありがたいです
385 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:40:47 ] ヒント;プロジェクトのプロパティ
386 名前:デフォルトの名無しさん mailto:sage [2009/03/29(日) 00:45:43 ] 「現在の場所のソースコードを表示できません」は問題そのものじゃないでしょ。 デバッグビルド時に有効になるASSERTか何かで引っかかってるんでは? 根本的な問題が何かはよく分からんですが・・・。
387 名前:デフォルトの名無しさん [2009/04/01(水) 14:50:10 ] DirectShowで動画のオープン、クローズを繰り返すと オープンとクローズ(GraphBuilderの破棄)にだんだん時間がかかるようになってしまいます。 2回目はだいたい200ms(前のをreleaseしてopenするまでの時間)なのですが、 これを20回もすると1秒はかかるようになってしまいます。 更に繰り返すとどんどん増えていくのですが、どうしたら増えずに一定で保てますか?
388 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:03:39 ] >>387 >>365-367 で示したコードで m_pGraph.CoCreateInstance() から CoUninitialize() の手前までを forループでグルグル回してみたけど、特にGraphBuilderの破棄に時間がかかるような現象は 起きませんでした。(m_pGraph, m_pControl, m_pEventはループ終端で自力Releaseすること) ・>>365-367 のコードで使用されているファイルを再生するとどうなりますか? ・>>365-367 のコードとそちらのコードの違いがあれば簡単に教えてください。 ・もし手持ちに複数のPC環境がある場合、どこで実行しても同じ結果ですか?
389 名前:デフォルトの名無しさん [2009/04/01(水) 18:07:43 ] こちらにDxVA1.0をバリバリ利用してるぜ、という猛者はいらっしゃいますか? DxVA2.0だと大体メドは立ってるんですが、DxVA1.0で自由に表示位置や タイミングをコントロールする(自前のテクスチャにデコード結果を書き出す) 方法がいま一つ分かりません。 VMR9のメソッドをこうすれ、等アドバイスをいただけないでしょうか。
390 名前:デフォルトの名無しさん mailto:sage [2009/04/01(水) 18:08:04 ] >>388 試験ありがとうございます。。。 C++Builder2007を使っていたのですが、 どうやらデバッグモードでコンパイルしてるexeだと>>387 の現象になるみたいでした。 リリースモードでコンパイルしたexeでは現象は出ませんでした。 ほんとすんませんでした。
391 名前:388 mailto:sage [2009/04/01(水) 18:33:43 ] >>390 えー、自分とこもDebugビルドでテストしてますがね。 C++Builder2007でどうなるかまでは試せませんが・・・。
392 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 15:51:54 ] コールバック(BufferCB)で画像を取得してるのですが 2フレーム目のSampleTimeが0になる時があります。 どういう場合に0になりますか?
393 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 18:48:56 ] 環境もフィルタグラフの状態も書かずに答えられる人は神だけ
394 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 10:17:53 ] 環境とフィルタグラフを書いただけで答えられる人は神だけ
395 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:06:23 ] 全部書かかれてて答えられる人はただの人。 というわけでただの人向けに書いてください。
396 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:33:49 ] わからない奴に限ってうだうだうるせー事言うよね。
397 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 17:02:29 ] >>392 サンプルタイムはパーサがつけることが多いから、グラフ構成は 記しておいた方が良いね。 1フレーム目は0じゃないの?
398 名前:デフォルトの名無しさん [2009/04/05(日) 12:50:56 ] 遺憾の意はイカン
399 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:45:33 ] IGraphBuilder::RenderFile()にファイル名を指定すればファイルを読み込ませることは できるんですが、バッファ上に置かれたファイルを読み込ませるにはどうしたらいいですか?
400 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:14:10 ] IGraphBuilder::Render()で
401 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:50:46 ] IGraphBuilder::Render()についてMSDNで調べて見ましたがバッファのデータを渡す方法が分かりませんでした 以下MSDNから引用 RenderFile メソッドは、ファイル名からデフォルトの再生グラフを作成する。 内部的には、このメソッドは AddSourceFilter を使って適切なソース フィルタを探し、 Render を使ってグラフの残りを作成する。 引用ここまで 要するにAddSourceFilterでソースフィルタ構築してソースフィルタの出力ピンを Renderに渡して中間フィルタや出力フィルタを構築って事だと思うんですが、 AddSourceFilterに指定できるのもファイル名のみでバッファのポインタを渡せる場所がありませんでした
402 名前:デフォルトの名無しさん [2009/04/07(火) 14:11:59 ] ソースフィルタ作ればいいじゃん
403 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 15:24:48 ] 知らないならレスしないで下さい。ウザいだけです。
404 名前:デフォルトの名無しさん [2009/04/07(火) 17:00:09 ] まだ春休みか?それとも頭の中はずっと春休みなのか?>>403
405 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 17:16:34 ] >>403 またお前か
406 名前:デフォルトの名無しさん [2009/04/07(火) 17:55:26 ] またお前らか
407 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 17:56:15 ] またおれか
408 名前:デフォルトの名無しさん [2009/04/07(火) 18:11:00 ] またお前らだ
409 名前:デフォルトの名無しさん [2009/04/08(水) 00:18:18 ] >>403 ゆとり、って奴ですか?
410 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 16:51:10 ] は?
411 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 17:58:55 ] 株式会社 ゆとり
412 名前:デフォルトの名無しさん mailto:sage [2009/04/08(水) 18:05:15 ] は?
413 名前:デフォルトの名無しさん [2009/04/09(木) 16:22:04 ] なあブタ共ちょっと教えてくれや RenderFileで動画読み込んでからGraphBuilderとかを破棄せずにまた RenderFileで読み込んでもいいのか?ああん?
414 名前:デフォルトの名無しさん mailto:sage [2009/04/09(木) 16:54:58 ] ブヒヒ
415 名前:デフォルトの名無しさん [2009/04/09(木) 17:29:35 ] ブタがっ!このブタがああゅ!
416 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 00:07:53 ] >>413 大丈夫、OK、全然、ほんとだってwww
417 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 10:19:39 ] >>413 いいよ、CPU負荷とか気にしないなら あ、動画支援機能は1本限定、これ豆知識な 飛べない豚より
418 名前:デフォルトの名無しさん [2009/04/10(金) 10:25:30 ] >>416-417 おお、きちんとできたぜ! これいちいちcreateやreleaseしなくていいから早くて最高だぜ! お前達ブタって知識はないけどたまには役に立つんだんだなwww
419 名前:デフォルトの名無しさん [2009/04/10(金) 13:45:09 ] 動画のオープン、クローズを繰り返すと毎回391回目でRenderFileがエラーになるのですが何が原因なのでしょうか? タスクマネージャのメモリ使用量を見てるとちゃんと開放されてないみたいで、どんどん使用量が増えているので そこら辺が問題だとおもうのですが、以下のソースでどこがダメですか? Open( ) { // ↑省略 CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&GraphBuilder ); GraphBuilder->QueryInterface( IID_IMediaControl, (void **)&MediaControl ); GraphBuilder->QueryInterface( IID_IVideoWindow, (void **)&VideoWindow ); CoCreateInstance( CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **)&BaseFilter ); BaseFilter->QueryInterface( IID_ISampleGrabber, (void **)&SampleGrabber ); GraphBuilder->QueryInterface( IID_IMediaSeeking, (void **)&MediaSeeking ); GraphBuilder->AddFilter( BaseFilter, L"Grabber" ); GraphBuilder->RenderFile( filename, NULL ); SampleGrabber->SetCallback( (ISampleGrabberCB *)mySGcall, 1 ); // ↓省略 } Close( ) { MediaSeeking->Release( ); SampleGrabber->Release( ); BaseFilter->Release( ); VideoWindow->Release( ); MediaControl->Release( ); GraphBuilder->Release( ); }
420 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 18:30:00 ] インタフェースの解放はよさそう。 RenderFileコール時のエラーコード値はいくつ?
421 名前:デフォルトの名無しさん mailto:sage [2009/04/10(金) 23:26:17 ] 映像と音声の両方をサンプルグラバで取得したいんですがうまくいきません。 どうしてでしょうか?どちらか片方だけならうまくいきます。 ソースフィルタ→サンプルグラバ(Video)→レンダラ(video) \→サンプルグラバ(Audio)→レンダラ(Audio)のように接続しようとしています // GraphにSampleGrabber Filterを追加 pGraphBuilder->AddFilter(pSampleGrabberFilterV, L"Sample Grabber(Video)"); pGraphBuilder->AddFilter(pSampleGrabberFilterA, L"Sample Grabber(Audio)"); // ソースフィルタを追加 IBaseFilter *pSrc; if (FAILED(hr = pGraphBuilder->AddSourceFilter(fileName, L"Source", &pSrc))) { printf("AddSourceFilterに失敗:%d\n", hr); return false; } ConnectFilters(pGraphBuilder, pSrc, pSampleGrabberFilterV); if (FAILED(hr = ConnectFilters(pGraphBuilder, pSrc, pSampleGrabberFilterA))) { printf("ConnectFiltersに失敗:%d\n", hr); return false; } //NullRendererフィルタを生成、挿入 CoCreateInstance(CLSID_NullRenderer,NULL,CLSCTX_INPROC,IID_IBaseFilter,(LPVOID *)&pNullRendererV); CoCreateInstance(CLSID_NullRenderer,NULL,CLSCTX_INPROC,IID_IBaseFilter,(LPVOID *)&pNullRendererA); ConnectFilters(pGraphBuilder, pSampleGrabberFilterV, pNullRendererV); ConnectFilters(pGraphBuilder, pSampleGrabberFilterA, pNullRendererA);
422 名前:デフォルトの名無しさん mailto:sage [2009/04/21(火) 15:02:53 ] 遅レスですが。 どこでエラーが起きてるんでしょうか? エラーコードは?
423 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 13:06:44 ] 教えて下さい。 ほとんど全くのDirectShow初心者です。 ビデオ編集ソフトを作りたいと思っています。 そこで、複数のビデオを合成するトランジションフィルターみたいなものを 作りたいのですが、Sample Grabberみたいなものを使って、それぞれ1フレームずつ 持ってきて、例えばα合成してやるみたいな方法が一般的なのでしょうか? それとも、2つを入力を持つトランジションフィルタを作って、グラフでつないで レンダリングして終わり? 速度的に前者は厳しいように思いますが、フィルターの形で実装しないで済む分、 作りやすいのかなと思ったり。 どういう実現方法が一般的でしょうか?
424 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 13:18:56 ] >>423 あれこれ一からココで教えるのもナンなので、このスレでも何度か名前が挙がっている とりあえずDES(DirectShow編集サービス)についてお勉強するとよろしいかと。 ttp://msdn.microsoft.com/ja-jp/library/dd148668.aspx "DirectShow DES"でググるだけでもアルファブレンディングのサンプルを 公開しているサイトに行き当たりますが、まずはDirectShowを使って 多少なりともプログラムが書けるようになってからの方が理解しやすいでしょう。
425 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 13:30:26 ] >>424 すばやいご回答、有難うございます!! 勉強します!!
426 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 14:31:50 ] たびたびすみません。 DESのサンプルを見ようと思い、色々探したんですが、 DirectShowって、今はDirectX→Platform SDK(Windows SDK)に移動してますよね? DESのサンプルは、DirectX 9.0 Extrasのものでいいのでしょうか?
427 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 14:54:48 ] >>426 基本的にはExtrasでも問題ないと思うけど、VisualStudio 2005以降でのコンパイルでひっかかった気がする。 手作業で修正すればいいと思うけど。 たしかWindows SDKにも収録されてたと思うんだけどなあ、なかった? この辺とか(↓) Windows SDK 6.1(英語版) ttp://www.microsoft.com/downloads/details.aspx?FamilyID=f26b1aa4-741a-433a-9be5-fa919850bdbf&DisplayLang=en Windows SDK 6.0.6000(日本語版) ttp://www.microsoft.com/downloads/details.aspx?FamilyID=7614FE22-8A64-4DFB-AA0C-DB53035F40A0&displaylang=ja Windows 7対応で 7.0.7000.0.4011 ってのがでてるねえ・・・。
428 名前:デフォルトの名無しさん mailto:sage [2009/04/22(水) 15:07:08 ] どもども。 VS2008ではコンパイル通らなかったです。 Windows SDKの中を探したのですが、見つからず...orz もうちょっと探してみます。 有難うございます!!
429 名前:デフォルトの名無しさん [2009/04/23(木) 23:55:43 ] C#からDirectShowを使って動画を表示するソフトを作成しているのですが、 再生中の動画上に文字をオーバーレイする方法がわからず苦慮しています。 再生自体は下記のページと同じようなやり方で行っているのですが、 お知恵を貸してください。よろしくお願いします。 ttp://www.independence-sys.com/weblog/item/88
430 名前:デフォルトの名無しさん mailto:sage [2009/04/24(金) 00:09:01 ] DirectShow.Netに丁度良いサンプル込みであるよ
431 名前:デフォルトの名無しさん [2009/04/24(金) 01:33:37 ] >>430 サンプルのDxTextが使えそうです。 どうもありがとうございました!
432 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 04:21:26 ] わけもわからずサンプルをつぎはぎしながらC#で動画プレーヤーを作ってます。 現在、ActiveMovie Windowという子ウインドウで動画が再生できるとこまで来ました。 そのウインドウがアクティブの状態でキーボードから再生や停止やらの操作をしたいと 思うのですが、キーダウンのイベントをどう設定すればいいのかわかりません。 IVideoWindowのput_MessageDrainでForm1.Handleを指定してはみたのですが キーボード入力を転送してくれるものの、子ウインドウを移動させようとしても 親ウインドウが代わりに動いたりするので困ってしまいます。 ActiveMovie Windowに対するキーダウンイベントのやり方、 もしくはMessageDrainでキー入力だけ転送するようなやり方を どなたかご教授ください。
433 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 06:27:36 ] 引き続き質問なのですが、一部のWMVファイルが自作プレーヤーで再生できません。 再生できないファイルの音声コーデックは Windows Media Audio 9.1 Professional 192 kbps, 48 kHz, 2 channel 24 bit 1-pass CBR となっています。自作プレイヤー以外では問題なく再生できています。 ちなみに、下記の記述をすっとばすと音声なしの状態でファイルの再生が可能です。 IBaseFilter audioFilter = (IBaseFilter)new DSoundRender(); hr = m_FilterGraph.AddFilter(audioFilter, "DirectSound Renderer"); IPin pinOut = DsFindPin.ByDirection(sourceFilter, PinDirection.Output, 0); hr = m_FilterGraph.RenderEx(pinOut, AMRenderExFlags.RenderToExistingRenderers, IntPtr.Zero); Marshal.ThrowExceptionForHR(hr); 自作プレーヤーは、DirectShow.NetのサンプルのDxPlayを元に作ってます。 DxPlayというサンプルは画面キャプチャができるけど音声がならなかったのでその辺のソースを 上記の記述のように貼り付て偶然、音がなるようになりましたが理屈は微塵もわかりません。
434 名前:432 mailto:sage [2009/04/26(日) 07:02:42 ] >>433 の質問変えたほうがいいかもと思い直しました。 DirectShow.Net の Samples\Players\DxPlay で音声を ちゃんと再生するにはどう記述すればよいのでしょうか? 自分はjavascriptくらいしかまともに触ったことがなく C++のソースを参考にC#に直すことができません。 IntPtrって何?hrって変数は何してるの?という調子で C#初心者の自分にはDirectShow.Netはさっぱりです。 それと、>>432 の件ですがSetWindowForegroundで常に 最前面に表示させることで中途半端に自己解決しました。
435 名前:デフォルトの名無しさん mailto:sage [2009/04/26(日) 22:44:00 ] PlayWndを元に作った方がいいんじゃないか。 >>434 DirectShowのドキュメントと相互運用マーシャリングのドキュメントを一通り読んだほうがいいよ。
436 名前:432 mailto:sage [2009/04/27(月) 08:15:49 ] PlayWndのほうが実用的なカタチにととのっており ずっと構造も簡単でそうしたかったのですが PlayWndで静止画保存ができませんでした。 DirectShow.Net以外に静止画保存の手段があれば というか、せめてNETでまともにDirectXが扱えてれば ド素人が苦労しなくて済むのに…
437 名前:デフォルトの名無しさん mailto:sage [2009/04/27(月) 11:19:49 ] とりあえずC#ちゃんと書けるようになってから愚痴れよ・・・
438 名前:デフォルトの名無しさん [2009/05/15(金) 11:02:29 ] 再生してるAVIの特定の1フレームから 短形を切り出してアルファ付きのtgaファイルとして保存したいのですが どうやったら良いのでしょうか?
439 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 11:10:14 ] ggrks
440 名前:デフォルトの名無しさん mailto:sage [2009/05/15(金) 11:40:18 ] 短形ってナニよ?思わずググってしまった。 とりあえずDirectShowにビットマップ保存をする単純なサービスはない。 もしまだググってないならとりあえずココでも見てみよう。 ttp://www.geekpage.jp/programming/directshow/samplegrabber.php TARGAに落とすとなるとさらに面倒だよ。 VMR9のレンダーレスモードにしてD3DXのサービス関数でTARGAに落とすとか? 32ビットBMPで保存してオフラインでBMP→TARGA処理する方が楽そうだな。 あ、.NETでヤルってのも楽そうね。(Image型を使う)
441 名前:デフォルトの名無しさん [2009/05/15(金) 14:08:47 ] >>439 ありがとうございます 参考にしながら頑張ってみる
442 名前:デフォルトの名無しさん [2009/05/28(木) 11:58:51 ] 動画再生時に音声だけを遅らせて再生することはできますか?
443 名前:デフォルトの名無しさん mailto:age [2009/05/29(金) 14:20:37 ] nullnullフィルタを元にカスタムフィルタを作りたいと思っています。 IGraphBuilder::AddFilter で キャプチャデバイスと nullnull フィルタを 追加しておいてから、ICaptureGraphBuilder2::RenderStream すると 問題なく終了するのですが、nullnullフィルタを RenderStream の後に 追加して、IGraphBuilder の Disconnect と Connect で挿入すると デバッグモード終了時に、nullnull.axに3オブジェクトがアクティブで 残っていると出ます。参照カウント管理が不正なためだと思うのですが Disconnect と Connect でフィルタを挿入しているサンプルがどこかに ありましたら教えてもらえませんでしょうか?
444 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 15:13:53 ] >短形 矩形じゃねーの? だとしてもどうして短形になったのか…
445 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 15:19:28 ] >>444 質問と関係ないレスならしないでほしい。ウザ杉
446 名前:443 mailto:sage [2009/05/29(金) 18:26:57 ] 自己レスです IPin::QueryPinInfo で取得した PIN_INFO の pFilter を Release していませんでした お騒がせしました
447 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 18:31:09 ] 2週間も前のレスに今さらレスするとかもうね。しかもどうでもいい内容だし >>443 サンプル中をDisconnectやConnectで検索はしてみたの? ・・・と思ったら解決していた
448 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:58:15 ] 現在、SDKは最新の(多分)Microsoft Windows SDK v6.1、Microsoft DirectX SDK(March 2009)、VisualStudio2005 pro という環境で、DirectShowを試しています、 ISampleGrabber インターフェイスっていうのがありますが、MSDNを読みますと (msdn.microsoft.com/ja-jp/library/cc369550.aspx ) ヘッダー : Qedit.h をインクルードすること。このヘッダー ファイルは、バージョン 7 以降の Microsoft® Direct3D® ヘッダーとは互換性がない。 ライブラリ : strmiids.lib を使うこと。 との記述があります。 最新のSDKでは、ISampleGrabberインターフェースは無くなってしまったのでしょうか、または互換性のある、関数が定義されていうのでしょうか?詳しい人教えてください。
449 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 03:25:58 ] あんま詳しくない俺が答えてもいいかい? qedit.hでググるとわかるが、そのまま#includeしてもエラーがでて使えないってだけ。 詳しくは自分で調べてくれ
450 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 06:17:59 ] >>449 Thx、その件の対応は下記urlを参考に行い、エラーは出ていないが ttp://social.msdn.microsoft.com/forums/en-US/windowssdk/thread/ed097d2c-3d68-4f48-8448-277eaaf68252/ こうしとけば、OKってこと?
451 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 07:21:39 ] どのレスを参考にしたかわからないけど、どの方法でも大丈夫そうだからOKだと思う というか、なぜわざわざ英語を。英語得意じゃないんだから困った MSDNか。公式フォーラムだからか。
452 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 10:03:08 ] >>451 Thx そうそう、公式フォーラムだったんで、俺も英語あまり良く分からないけど、参考にしました。 そして、やってみました To compile qedit.h you must install the DirectX 9 SDK, to obtain the dxtrans.h header. マニフェストをリソースにコンパイルしています... Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0 Copyright (C) Microsoft Corporation. All rights reserved. との結果です、要約すると、コンパイラが、DirectX 9 SDKをインストールして、dxtrans.h もインクルーズしているような意味合いですね。 qedit.hの498行でコメントアウトして外したdxtrans.hをインクルーズするなんて、複雑な仕組みですよね?? COMの事をあまりよく知らないので、昨日からDirectShowのライブラリィを作っています、こんな調子で今日中にできるかな(^^;
453 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 20:18:07 ] GraphEditを使って、USBカメラのデータを、ASF形式で出力しWMPで見たいのですが、手順を教えてくださいませ。
454 名前:デフォルトの名無しさん [2009/06/12(金) 17:08:38 ] VB.NETでDirectShowで動画を再生しながら 他の処理も行っていると動画が遅くなります。 しかし他の処理の中でDebug.Writelineで イミディトウィンドウに文字を出し続けていると 動画が遅くならない謎の現象になっています。 これだとリリース出来ません。なにか知っている人が いたら教えてもらえないでしょうか?
455 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 17:17:41 ] 再生を別スレッドに別けるとか
456 名前:454 mailto:sage [2009/06/15(月) 12:33:45 ] 455さんお返事ありがとうございます 別スレッドの中でWhileでDoEventsを呼び続けると なんとかなりそうでした。まだわかりませんが。 全体の処理時間は少し遅くなりました。
457 名前:デフォルトの名無しさん mailto:sage [2009/06/24(水) 13:54:47 ] DirectShow編集サービス(DES)で、ファイルへレンダリング出来なくて困ってます。 流れ的には以下の様な感じで、Runの後にWaitForCompletion()内で例外発生。。 ・IRenderEngineをCoCreateInstance()で作る。 ・pRenderEngine->SetTimelineObject()でTimelineをセットする。 ・pRenderEngine->ConnectFrontEnd()呼び出し ・ICaptureGraphBuilder2をCoCreateInstance()で作る。 ・pRenderEngine->GetFilterGraph( &pGraph ); ・pBuilder2->SetFiltergraph(pGraph); ・pBuilder2->SetOutputFileName(&MEDIASUBTYPE_Avi..)で出力先指定 ・TimelineのGroupのOuputPinを、Builder2でRenderStream() ・IMediaEvent、IMediaControl取得 ・Run() ・IMediaEventのWaitForCompletionで、例外発生...orz ウィンドウへのレンダリングは成功しています。 最終的にはスマートレンダリングしたいのですが、ISmartRenderEngineの 使い方がほとんど資料が無くて困っています。
458 名前:デフォルトの名無しさん [2009/06/25(木) 16:05:52 ] 1フレーム毎の音声データを取得する方法をおしえてください
459 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 00:04:24 ] >457 うろ覚えで役に立つか分からんけど… ・直接RenderStreamへ接続したら駄目だったはず。(MUXが必要。) ・Timelineを生成するまでの各段階でのエラー判定で色々悩まされた記憶がある。
460 名前:デフォルトの名無しさん mailto:sage [2009/06/26(金) 15:39:02 ] >>459 ありがとうございます。 DESは資料が少なくて困りますよねー。 またよろしくです。
461 名前:デフォルトの名無しさん mailto:sage [2009/07/08(水) 11:02:38 ] ファイルの変換をしたい。 ICaptureGraphBuilder2::SetOutputFileName()って、MUXを返すけど、 任意のMUXを指定したい場合は、どうするのかな? AddFilterでMUXとSinkを設定するの?
462 名前:デフォルトの名無しさん [2009/07/09(木) 00:58:42 ] DirectShowでフィルタを作っているんですが、 フィルタを生成時にモーダレスダイアログを表示するサンプルありませんか? アプリではないため親ウィンドウが存在せず、 hWndも取れないしインスタンスハンドラも取れないもんでやり方ちょっと難しいっす。
463 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:12:59 ] >>462 コンストラクタかCreateInstanceかQueryInterfaceかでモードレスダイアログを 作るなりポップアップするなりすればいいんでないの? もしかしてプロパティページの実装の仕方を聞いてる?
464 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 01:16:47 ] 普通にそのスレッドでメッセージループ作って回せば? 窓の作り方知っていれば特に難しい事でないけど。
465 名前:デフォルトの名無しさん [2009/07/09(木) 01:31:07 ] プロパティページではないです。ちなみにプロパティページは楽に作れます。 こんすとらくたでモーダレスダイアログ作りたい。 ですが、いまいちわからず… デスクトップからハンドラ引っ張ってメッセージループ処理に飛ばそうとして失敗しました。 そこで参考サイトをみて見比べようと思った次第です
466 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 10:12:12 ] メッセージループ処理はどう書いてますか? ウインドウは作れてるけどウインドウを うまく動かせないとかなら、 メッセージループ処理に問題があるかもしれない。 もう少し問題点を詳しく書いてみたら?
467 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 12:18:57 ] DirectShow編集サービスでTimelineをMPEG2でレンダリング出力したいのですが、うまく出来ません。 ICaptureGraphBuilder2::RenderStream()に、MPEG2のエンコーダーを指定してます。 Muxは、最初はSetOutputFileName()で返ってきたのを使っていましたが、エラーとなったため、 MPEG2のMuxerとMPEGのFileWriterを作り、2つのピンを繋いで、そのMuxを渡していますが、 やっぱりRenderStream()でE_FAILが返ってきます。 Encoder、Muxer、FileWriterは、GraphEditで繋いで動くのは確認しています。
468 名前:467続き mailto:sage [2009/07/09(木) 12:20:03 ] IRenderEngine* pRenderEngine; 事前に作ってあります ICaptureGraphBuilder2* pBuilder2; 事前に作ってあります pRenderEngine->SetTimelineObject( pTimeline ); pRenderEngine->ConnectFrontEnd(); IGraphBuilder* pGraph; pRenderEngine->GetFilterGraph( &pGraph ); m_pBuilder2->SetFiltergraph(pGraph); // File Writer作成 CComPtr<IBaseFilter> DS_FileWriter; CComPtr<IFileSinkFilter> DS_FileSink; DS_FileWriter.CoCreateInstance(CLSID_MpegFileWriter); DS_FileWriter.QueryInterface<IFileSinkFilter>(&DS_FileSink); DS_FileSink->SetFileName(L"c:VideoTest.mpg", NULL); pGraph->AddFilter( DS_FileWriter, L"MPEG File Writer"); // Mux作成 CComPtr<IBaseFilter> DS_Mux; DS_Mux.CoCreateInstance(CLSID_MPEG2_Muxer); pGraph->AddFilter( DS_Mux, L"MPEG2 Muxer"); // ピン接続 CComPtr<IPin> p, pin; DS_Mux->FindPin(L"Output", &p); // Muxerの出力ピン DS_FileWriter->FindPin(L"Input", &pin);// Writerの入力ピン pGraph->Connect(p, pin); // ピン接続 (続く)
469 名前:467続き mailto:sage [2009/07/09(木) 12:21:43 ] // グループ内をループし、出力ピンを取得する。 long NumGroups; pTimeline->GetGroupCount(&NumGroups); for (int i = 0; i < NumGroups; i++) { IAMTimelineGroup* pGroup = NULL; pTimeline->GetGroup((IAMTimelineObj**)&pGroup, i); IPin *pPin; if (pRenderEngine->GetGroupOutputPin(i, &pPin) == S_OK) { CComPtr<IBaseFilter> DS_Compressor; if(i == 0){ // Videoグループ用のコンプレッサフィルタを作成する。 DS_Compressor.CoCreateInstance(CLSID_MPEG2_Compressor); } // ピンを接続する。 hr = m_pBuilder2->RenderStream(NULL, NULL, pPin, DS_Compressor, DS_Mux); ←これがE_FAIL SAFE_RELEASE(pPin); } }
470 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 13:08:26 ] DESは使ったことないので見当違いかもしれませんが、 DS_Compressorをフィルタグラフに登録(AddFilter)してないのは問題ないんですか?
471 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 14:23:02 ] >>470 それです、それでした!! とりあえずエラーなしでMPEG2ファイル書き出せました!! 自分でAddFilterしなくちゃダメなんですねー。 有難うございますーm(__)m
472 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 01:23:12 ] 質問です DirectShowでGeekなページを参考に動画再生をするプログラムを作りました www.geekpage.jp/programming/directshow/change-rate.php 参考URLでは『put_Rateの引数を2.0などに変更すると倍速再生になります。 put_Rateの引数に負の値(マイナスの値)を渡すと巻き戻し再生になります』 とありますが、 put_Rateの引数を負の値にしても大部分のフィルタは逆再生をサポートしていないため実行されません。 そこでIMediaSeekingかIMediaPositionを用いて巻き戻しをするプログラムを作りたいのですが、 どうすればよいのやら困っています。 何か良い考えはないでしょうか? 是非知恵をおかしください!
473 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 02:03:09 ] DirectShowのスレでも質問したのですが、スレの勢いを考えてこちらにも質問させていただきます。 DirectShowでGeekなページを参考に動画再生をするプログラムを作りました www.geekpage.jp/programming/directshow/change-rate.php 参考URLでは『put_Rateの引数を2.0などに変更すると倍速再生になります。 put_Rateの引数に負の値(マイナスの値)を渡すと巻き戻し再生になります』 とありますが、 pMediaPosition->put_Rate(0.5); のput_Rateの引数を負の値にしても大部分のフィルタは逆再生をサポートしていないため実行されません。 そこでIMediaSeekingかIMediaPositionを用いて、または用いなくてもいいのでdirectshowで 動画の巻き戻しをするプログラムを作りたいのですが、どうすればよいのやら困っています。 何か良い考えはないでしょうか? 是非知恵をおかしください!
474 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 02:04:06 ] 誤爆しました。すみません
475 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 04:43:47 ] どんな動画をどんな風に逆再生するのかわからんけど 自前で逆再生をサポートしたフィルタを作成するか、 適当に逆方向にシークさせていくかぐらいしかないんじゃない? てかマルチポスト・・・
476 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 10:41:06 ] Pause状態にしておいて、10秒、9秒、8秒…てな感じにシークしていけばいいんじゃない? 逆方向再生をサポートしてない限りスムーズには出来ない。
477 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 11:19:00 ] なぜ「大部分のフィルタは逆再生をサポートしていない」のかよく考えてください。 キーワードは「MPEG」「フレーム間予測」・・・ これらを理解した上で、あなたならどのように逆方向再生を実現しますか? たぶんMPEG系ではTIME_FORMAT_FRAMEが使えないので、 1枚ずつシークとか難しいと思います。
478 名前:デフォルトの名無しさん mailto:sage [2009/07/10(金) 14:11:33 ] MPEGならSBE以外でもビデオアナライザフィルタは使えるのかな。 使えてもかなりガックリな結果しか得られないけど。
479 名前:デフォルトの名無しさん [2009/07/10(金) 19:57:34 ] >>466 未だフィルタでモーダレスダイアログを表示するプログラムが出来ない ので教えてください。 詰まっている箇所はインスタンスハンドルの取得だと思います。 コンソールアプリにて以下のソースでダイアログが表示することを確認。 main() { printf("ddd"); g_hDlg = CreateDialog( NULL, (LPCTSTR)IDD_DIALOG1, NULL,(DLGPROC)DlgProc); ShowWindow( g_hDlg, SW_SHOW ); } これをそのままDirectShowサンプルのNULLフィルタに移植 CNullNull::CNullNull(TCHAR *tszName, LPUNKNOWN punk, HRESULT *phr) : CTransformFilter(tszName, punk, CLSID_Algorithm) { g_hDlg = CreateDialog( NULL, (LPCTSTR)IDD_DIALOG1, NULL,(DLGPROC)DlgProc); ShowWindow( g_hDlg, SW_SHOW ); } すると「g_hDlg」は0になりメッセージループ処理には飛びません
480 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 00:32:58 ] そんだけわかってなんで、リファレンスを読まないの? NULLって何?アフォ? そしてスレ違い
481 名前:デフォルトの名無しさん [2009/07/11(土) 01:19:00 ] >>480 反応ありがとうございます。 コーディングする前からDirectShowフィルタでの インスタンスハンドルの取得方法を悩んでいました。 CreateDialogの3つめの引数NULLの hWndはデスクトップを親にするために0でいいと思う。 1つめの引数はインスタンスハンドルを書けばいいのですが 何を書いたらよいかわかりません。 普通WinAPIではWinMainの引数として与えられていたり GetWindowLong、GetModuleHandleなどで取得できます。 しかしFilterでは出来ないのです。 よかったら取得方法を教えてください。
482 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 01:23:23 ] IDD_DIALOG1 のあるモジュールのハンドルに決まってるだろ。
483 名前:デフォルトの名無しさん [2009/07/11(土) 09:27:25 ] >>482 IDD_DIALOG1 のあるモジュールのハンドル これがわかりません。 IDD_DIALOG1はフィルタ自身が持っています。 メッセージボックスやオープンCVの窓は表示出来る。なんでダイアログが上手くいかないんだろう
484 名前:デフォルトの名無しさん mailto:sage [2009/07/11(土) 10:43:05 ] たしかdllmainの引数に入ってるからそれをどっかに保存すればいい 正直フィルタにダイアログを生成させる仕様から考え直したほうがいいと思うけど
485 名前:デフォルトの名無しさん [2009/07/11(土) 14:30:36 ] >>484 ありがとう。確認してみます。 仕様についてはデバッグ用であり、グラフエディット上でパケットモニタしたいと考えてました。 フィルタで枠実装しておけばアプリケーションで問題あっても容易にデバッグできるから…
486 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 12:06:25 ] 質問です。 ハードディスク上ではなく、メモリ上に(ごく小さい)AVIファイルを読み込んでから 再生させたいと思っているのですが、ソースフィルタには何を使えば良いでしょうか? もしくは、IGraphBuilder::RenderFile()で直接メモリを指定する方法などは ありますでしょうか?
487 名前:デフォルトの名無しさん mailto:sage [2009/07/13(月) 12:42:37 ] msdn.microsoft.com/ja-jp/library/cc354489.aspx これの互換フィルタ作ればいい
488 名前:486 mailto:sage [2009/07/13(月) 13:18:35 ] >>487 それを見てMemFileってサンプルがあったのを思い出しました。 多分それを使えばOKです。 どうもありがとうございました!
489 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 15:56:39 ] 自分のウィンドウ内に再生表示したいのだが、 IGraphBuilder::put_Owner()が、E_NOINTERFACEを返して来て、 別のウィンドウが開いてしまう、何故だろう? hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, reinterpret_cast<void **>(&pGraphBuilder)); hr = pGraphBuilder->QueryInterface(IID_IVideoWindow, (LPVOID *)&pVideoWindow); hr = pVideoWindow->put_Owner((OAHWND)hWnd); <- E_NOINTERFACE hWndは、自分(Dialog)のハンドル。
490 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 16:15:59 ] BDAチューナからの生(MPEG2-TS)データを取得するアプリを作成したく、graphedtで 試行錯誤してます。(DirectShow初挑戦) まず、グラバを作成する代わりに"Infinit Pin Tee"+"Dump"(SDKのサンプル)を用いて DVB-S Network Provider ↓ DVB-S Tuner ↓ DVB-S Capture ↓ Infinit Pin Tee → Dump → ファイル ↓ MPEG2 Demultiplexer ↓ BDAMPEG2 Transport Information Filter の構成で、生TSデータを(ファイルに)取得するところまではできました。 が、ここで問題発生。記録したデータを見ると、所々でデータが欠落しています。 一度Runした後に"MPEG2 Demultiplexer"/"BDAMPEG2 Transport Information Filter" を削除してRunすれば、欠落の無いデータが録れることから、これらの処理が重く Captureからの出力がブロックされデータが失われているのではないかと予想して います。 アドバイスいただきたいのは、 (1) 欠落原因の確認のため、CaptureとTeeの間にバッファリング(FIFO)してくれる ようなフィルタを入れたいが、既存の物で何か良い物は無いか? (2) 以上全体を通して、間違いやもっと良い方法は無いか? の2点です。 よろしくお願いいたします。
491 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 16:22:50 ] >>489 普通はレンダラから、IVMRWindowlessControl や IVMRWindowlessControl9 で設定する。
492 名前:デフォルトの名無しさん mailto:sage [2009/07/17(金) 23:55:12 ] >>490 そもそもTeeを通さず直接Dumpして欠落無いか確認した?
493 名前:490 mailto:sage [2009/07/18(土) 00:18:46 ] >>492 Demultiplexer/Transport Information Filterが無いとチューニングが行えない(「Microsoft統合 チューニングモデル」参照)ため、Dumpを接続するには必ずTeeが必要になります。 いったんチューニングが行われた後、Demultiplexer/Transport Information Filterを削除する とデータ欠落が無くなるのは前記のとおり確認しています。(これが「Teeを通さず直接Dump」 と実質的に同じ状態と思われます。)
494 名前:デフォルトの名無しさん mailto:sage [2009/07/18(土) 00:59:10 ] あとはGraphEditじゃ無理だろうがDemux通したあとのPID指定したのをDumpするとか。
495 名前:デフォルトの名無しさん [2009/07/19(日) 01:11:24 ] スレ違いかもしれないのですが デコードされた、PCM(5.1ch)を、PCM(2ch)*3に分割すうような 動作をするフィルターを探しています。 用途は、ステレオ*10の出力はあるけど、5.1ch出力は出来ない オーディオカードから5.1chを吐かせたいのです 何かよいフィルタ(スプリッタ?)はごぞんじないでしょうか?
496 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 01:38:29 ] スレ違で、しかもやろうとしている事の意味がわからない。そんなへんてこストリームを再生してもまともな音響にならないと思うが・・・。 仮にpinを3つに分岐させたとして、どうやってレンダラに繋ぐんだ? ステレオ*10ってのがまず謎だ。
497 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 01:50:08 ] ffdshowフィルタを使ったプログラムをくみたいのですが、 フィルタの作り方わかる方、教えてください。 まずこれ↓をやりたいのですが・・・ input.avi -> スプリッタ -> ffdshowデコーダ -> ffdshowエンコダ ->mux ->out.avi
498 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 02:03:45 ] >>497 フィルタの作り方、っていうのが何か勘違いされているような・・・ とりあえずGraphEdtで自分のやりたいことができてますか?
499 名前:497 mailto:sage [2009/07/19(日) 02:09:44 ] >>498 GraphEditではできています。 それをプログラム上で再現したいのですが、CLSIDなど どう設定してよいかがわかりません。
500 名前:デフォルトの名無しさん [2009/07/19(日) 02:15:38 ] >>496 レンダラを ステレオ1,ステレオ2,ステレオ3 に割り振るだけだと思うのですが www.m-audio.jp/products/jp_jp/Delta1010LT.html www.synthax.jp/fireface-800.html www.musetex.co.jp/index.php?option=com_content&task=blogcategory&id=2&Itemid=338 こういう、ステレオ出力が10系統とか15系統ついている奴です あと、後段でディレイをかけるので問題はないです
501 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 13:27:21 ] >>497 既存のフィルタを組み合わせるだけならフィルタを作る必要は無い なんにせよ大体のことは>>2 あたりを見るだけで事足りる それでもわからないことがあったらまた聞きにきな
502 名前:497 mailto:sage [2009/07/19(日) 14:08:05 ] >>501 ありがとうございます。 一応、ここ↓を参考にして、 ttp://geocities.yahoo.co.jp/gl/akt_trade/view/200906 このようにコーディングしてみたのですが、 CoCreateInstance(CLSID_FFDSHOW, NULL,CLSCTX_INPROC_SERVER, IID_IffDecoder, (void**)&iff); ヘッダはどうしたらよいのか・・・・ そもそもこのコードがあっているのでしょうか?
503 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 15:11:26 ] >>502 そのページには >この辺は、海外のffdshowのソース?みたいなところを漁ったら出てきます。(ライセンス的にどうなのかはわかりません) って書いてあるからどうやらヘッダはffdshowのソースからとってきてるみたい 使うならちゃんとライセンス確認してから使うこと ただffdshowっていろんなバージョンがあったと思うけど互換性は大丈夫なのかな
504 名前:497 mailto:sage [2009/07/19(日) 15:36:47 ] >>503 なるほど、ありがとうございます。 もう少し調べてみます。 普通、ffdshowのフィルタはプログラム上からはあまり使わない感じなんですかね?
505 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 17:52:17 ] >>504 というよりもエンコーダ/デコーダを特定のものに固定することが少ないんじゃないかな ffdshow固有の機能を使いたいというなら別だけどね そうでなくて単にAVIを変換したいというだけならこことか見てみるといいかも AVI ファイルの再圧縮 ttp://msdn.microsoft.com/ja-jp/library/cc370561.aspx
506 名前:497 mailto:sage [2009/07/19(日) 22:19:55 ] >>505 ありがとうございます。 考えていたのはaviファイルをリサイズ、音量操作などをしてから再圧縮保存したいと考えていたので 多機能のffdshowをプログラム上で使えれば楽かなっと思っていました。
507 名前:デフォルトの名無しさん mailto:sage [2009/07/19(日) 22:37:00 ] 編集フィルタ標準であるやん
508 名前:497 mailto:sage [2009/07/19(日) 23:37:59 ] >>507 本当ですか? 調べなおしてみます・・・
509 名前:デフォルトの名無しさん mailto:sage [2009/07/21(火) 12:46:44 ] >>491 Thanks!
510 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 00:30:28 ] キャプチャデバイスからの映像を再生するアプリを作っているのですが、 開発が進むにつれて、ブルースクリーンになってOS毎落ちるようになりました。 フィルタ群を一度切り離して、キャプチャデバイスやVMRを切り替えて再度接続する、 という動作をさせるようにしてから落ちるようになりました。(何度か繰り返していると起こる) 原因としては何が考えられそうでしょうか?? はっきりは分からなくても、怪しく感じるところでも良いので、ご助言お願いします。 ピンのアロケータのデータがうまく解放されていないのでしょうか? また、それを確認もしくは解消する術はあるのでしょうか? [ 落ちるときの詳細 ] 1. グラフを停止 ( pMediaControl->Stop() ) 2. AVIデコンプレッサや色空間フィルタ、VMRのピンを切断 3. キャプチャデバイスと繋がっているスマートティーフィルタを削除 ( pGraphBuilder->RemoveFilter( xxx ) ) 4. キャプチャデバイスをグラフから削除 ( pGraphBuilder->RemoveFilter( xxx ) ) 5 キャプチャデバイスをグラフに追加 ( pGraphBuilder->AddFilter( xxx ) ) 6. フィルタグラフを再構築 ( pGraphBuilder->RenderStrem( xxx ) ) 7. ビデオ転送矩形を設定 8. グラフを再生 ( pMediaControl->Run() )
511 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 01:55:00 ] 再生側でOS落ちるのはレアだから、ソースフィルタ側のドライバの問題でない? テンプレート使っていないなら、参照カウンタあたりが怪しいけど。 破棄されているのに、更にReleaseしてアドレスがたまたま有効なために不正にコードが実行されてしまったケースを想定。 チェックが甘い実装だとこのケースで落ちそうな気がする。
512 名前:510 mailto:sage [2009/07/27(月) 02:14:56 ] >>511 ありがとうございます。 >ソースフィルタ側のドライバの問題でない? その可能性もあると思います。 使っているキャプチャボードがIntensityProとSAA7103-TVPCIなのですが、 IntensityProのほうはドライバがあまり安定していないという報告をよく聞きますし。 >破棄されているのに、更にReleaseして 一応、以下のようなSAFE_RELEASEマクロでそういったことが起こらないよう心がけています SAFE_RELEASE( x ) { if( x ) { ( x )->Release(); ( x ) = NULL; } } しかし、Releaseし忘れの恐れは残りますが・・・(慎重にチェックはしているものの(汗)) もう一つ、少し心配なのが、>>510 の3番のスマートティーフィルタのフィルタグラフからの削除です。 このスマートティーはインテリジェント接続により生成されるもので、 基本的にはDirectShow側で生成、解放等の管理をしてくれていると思うのですが、 それに対してアプリ側でRemoveFilterするのは問題ないのだろうか?と・・・ しかし、>>511 さんのご意見通り、ドライバの問題が有力な気がします。 もう一枚キャプボがあるので、怪しいIntensityProを外して他の2枚で切替を行うテストをして、 問題がないかを試してみようと思います。 ドライバのせいにできれば、アプリ作成者側としては気が楽になりますので期待してます(笑) どうもありがとうございました。
513 名前:デフォルトの名無しさん mailto:sage [2009/07/27(月) 03:52:51 ] CComPtrとかで参照を自動化してやると間違いが起きないぜって話
514 名前:510 mailto:sage [2009/07/28(火) 00:37:34 ] よく調べてみると、参照カウントが予想外の挙動をしていました。 例えば、 pCaptureGraphBuilder->FindInterface( &PIN_CATEGORY_CAPTURE, 0, pCapDev, IID_IAMStreamConfig, ( void** )&pConfig ) として、pConfigの参照カウントを調べてみると、1ではなく、いきなり2や6になったりするんです。 キャプチャデバイスフィルタ(上のpCapDev)も、 pMoniker->BindToObject()では1上がるだけですが、その直後のpGraphBuilder->AddFilterで 3とかになったりしました。 ここらへんが悪さをしていたようで、どうしたものかと思いましたが、 >>513 さんが教えてくださったCComPtrに変えたところ、うまくいきました! CComPtrを使うと、 ttp://www.hamusuta.net/openbbs/pc/prg/wtl.html#msg9 に書いてあるように、使いまわし利用ができず、プログラムが止まります。 これで問題箇所が分かる上、xxx.Release()とすればちゃんと 解放(おそらく参照カウントを必要なだけ複数下げてくれている)してくれます。 この対処をした後はブルースクリーンクラシュは起こらなくなり、安定して動いています。 とてもよい解決策を教えてくださって、ありがとうございました!
515 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 00:58:01 ] ReleaseよりNULL入れるほうが安全。 CComPtr以外にBoostでもテンプレートがあったきがす。 最初から入っているCComPtr使うほうが楽だけどね。
516 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 01:10:54 ] 直接関係ないけど、CComPtrで使いまわす場合はDetachするとよか
517 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 02:23:30 ] >>514 いやCComPtr::Releaseは参照カウント一つしか減らさないぞ…。ヘッダファイルにソース書いてあるから読んでみるといい。 まぁ元のプログラムで参照カウントの増減おかしかったのが正しくなったんだろう。 なんにせよCComPtrを使っておくのは正しい対処だ。 >>515 CComPtrにNULL代入するのとCComPtr::Releaseは全く同じことしかやらないような。
518 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 03:19:00 ] >>517 NULLの代入とReleaseが同じなのはその通りだけど、 hoge.Release();は、間違えてhoge->Release();としてもコンパイルが通ってしまうから 避けるべきだと>>515 は考えているのだと思う。
519 名前:デフォルトの名無しさん mailto:sage [2009/07/28(火) 08:29:06 ] いつからかわからないけど、 CComPtrで ->AddRef と ->Release はコンパイル通らないようになってるよ。 確かVC6の頃は通ってたな。
520 名前:510 mailto:sage [2009/07/29(水) 01:35:32 ] ダメです!再びブルースクリーン炸裂です・・・ CComPtrを使う前よりは耐性(?)は増したか・・・と思うと、 再起動直後、数回のデバッグ起動でガチャン・・・ CComPtrを以ってしても敵わないとは・・・恐るべしDirectShow・・・! >>516 具体的にはどうするのでしょうか?? Detachだと、CComPtrが対象生ポインタの所有権を棄却するだけで、 解放は施されないようですが・・・ >>517 たしかにそうでした(汗) となると、例の参照カウント異常上昇分を抑え切れてない可能性もありますね・・・ >>519 その通りで、->Releaseのほうはコンパイラに怒られました。 一度、怪しいCOMポインタについては、CComPtrを使わず、ソフト終了寸前に、 参照カウントが0になるまでRelease()を繰り返すといった方法を試してみようと思います。
521 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 02:11:03 ] >>参照カウントが0になるまでRelease()を繰り返すといった方法を試してみようと思います。 これはやってはいけない。そもそもAddRedやReleaseの返す値は使用してはいけないルールです。 参照値なんて自分で作ったもの以外は基本的にわからんよ。 再利用すると挙動不審になるデバイスなんでね。破棄して再生成してしまえ。 実行時間が同じくらいなら安定した方法で手抜き実装。
522 名前:デフォルトの名無しさん mailto:sage [2009/07/29(水) 07:27:54 ] BMDSDKだとキャプチャフィルタは削除せずにグラフ変更やっているみたいだから それに沿ったら?
523 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 19:39:32 ] avi(音声あり)とwavファイルを多重化してaviに保存したいのですが、 directshowの既存のフィルタでプログラムできますか? aviの音声そのままでwavの音声も重ねたいのですが・・・
524 名前:デフォルトの名無しさん mailto:sage [2009/08/02(日) 21:26:39 ] GraphEditで作れるか試せばいいだろ
525 名前:510 mailto:sage [2009/08/03(月) 07:37:49 ] >>521 ありがとうございます! 確かに怖いですねw >実行時間が同じくらいなら安定した方法で手抜き実装。 DirectShowって、フィルタ開発とかを除けば、基本的に時間を気にしないといけないところは 少ないですし、おっしゃる通り、遠回りでも、じじぐさくても、安定するように組むのがセオリーのようですね。 >>522 ありがとうございます! その方法でやってみました。 はじめは、それでもOS毎落ちる事態は発生していましたが、どうもセットで生成されるスマートティー を削除するのがよくないようで、これも残すようにし、再接続の際はスマートティー(在れば)から 接続してグラフを構築するようにしたところ・・・ついにブルースクリーンが出ないようになりました!! 何度も再接続を繰り返し、それまでであればほとんど落ちていたような回数でもぜんぜん落ちる 気配がありません。 みなさん、良いご助言を下さり、ありがとうござました!!
526 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 16:14:48 ] 自分はCanonのHV10っていうDVカメラしか持ってないんですが IVideoWindow::SetWindowPosition で、ソース画像の1/2以下の Windowエリアに割り当てると描画しなくなります(SetWindowPosition はS_OKを返します) その後 SetWindowPosition で再設定しても描画されず、グラフを再作成するしかないようです。 他のDVカメラでも画像の1/2以下に割り当てると同じようなことが起きますか? Windowリサイズ時に(ソース画像の1/2+1)ピクセル以上に割り当てるようにしていますが この1/2で他のDVカメラに通用するのかが知りたいです。
527 名前:デフォルトの名無しさん mailto:sage [2009/08/07(金) 21:26:16 ] サンプルグラバについて、 SetOneShot( true ) でワンショットモードにしてから再生しているのですが、 いつまでたってもグラフが停止しません。 (キャプチャデバイスからのライブソースです) ワンショットモードでは、サンプルを1枚受け取ると、グラフを停止するとmsdnにも書いています。 WaitForCompletion( INFINITE, &evCode ); を挿入し、この関数から返ってくるのを待っても、一向に返ってこず、再生が続いたままになります。 とりあえず、Sleep( 100 )として対応していますが、 このようなことをせず、ちゃんとサンプルの受信が完了したのを確認してから サンプルを取得できるようにするにはどうすればよいでしょうか??
528 名前:デフォルトの名無しさん mailto:sage [2009/08/08(土) 03:19:27 ] Intensityをお持ちの方にお聞きしたいのですが、 入力設定を「HD 1080 PsF 24」にして、グラフ構築ができるでしょうか? GraphEditを使ったのですが、自分の場合、どのフィルタも繋がらりません・・・ 「接続に必要な中間フィルタの組み合わせが見つかりませんでした。」 のエラーメッセージが出てしまいます。 構築ができる方や、実際にPS3などからの24p出力を取り込められている方が おられましたら、フィルタグラフの構成を教えてください。 よろしくお願いします。
529 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 00:56:04 ] プログラムを終了する際は、すべてのフィルタをグラフから削除(RemoveFilter)すべきでしょうか? また、そのときは、インテリジェント接続で自動的に生成されたフィルタについても、 アプリ側で検索して削除すべきでしょうか? 削除しなくても問題は(一見)起こっていませんが、行儀よく終わる方法を知りたいと思いました。
530 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 01:10:00 ] >>528 メディアサブタイプがHDYCのはずだから、Blackmagic Designe DecoderDMO挟んでみるとか >>529 自分で追加したフィルタと、グラフを解放するだけで問題ない、はず。
531 名前:デフォルトの名無しさん mailto:sage [2009/08/10(月) 11:31:03 ] >>529 後片付けのためにRemoveFilterを使う必要はない
532 名前:529 mailto:sage [2009/08/10(月) 12:26:12 ] >>530 >>531 ありがとうございます! 安心しました。
533 名前:528 mailto:sage [2009/08/11(火) 07:26:53 ] >>530 ありがとうございます。 しかし、24fps設定ではBlackmagic Design Decoder (DMO)すら繋がりませんでした(汗)
534 名前:デフォルトの名無しさん [2009/08/14(金) 23:40:51 ] 有識者の皆様にご教授願いたいことがあります。 カメラとマイクそれぞれのキャプチャピンから別々にデータを拾って保管しておき、 あとでそれらをプッシュソースフィルタからAVIMUXフィルターで合体させ、AVIファイルを作ろうと思っています。 キャプチャピンから拾うデータはIMediaSampleのデータ(GetPointer)と開始時間と終了時間(GetTime(Start,Stop))です。 問題は、20秒くらいのAVIデータを作成すると、2秒くらい画像が縮んでいることです。 取得時に実時間を画像に描画していますので、それを見ていると、18秒くらいで20秒目の画像まで来てしまいます。 音声は割りと正確に入っていまして、画像が停止した状態から+2秒できっちり20秒ぶん出来ています。 かなりの時間を割いて調べましたが、良い資料にめぐり合いません。 ちなみに、カメラから取ったデータを仮に(AvgTimePerFrame=)10fpsとすると、GetTimeで取得したStartとStopの間は0.1秒ぶん(1000000)ですが、 データとデータの間が必ずしも連続ではありません。1つ目のデータのstopが100000として、次のデータのstartが102000とかだったりします。(本当は100000が理想ですよね) ですので、10フレーム分のデータの最初のstartから最後のstopまでが1秒以上になっているようです。(カメラがコマ落ちしているようです。) (長くなりましたので分割いたしました。次のレスに続きます。)
535 名前:デフォルトの名無しさん [2009/08/14(金) 23:43:08 ] データなどを10個おきに確認したところ、1秒間に10個データを必要とするならば、ちょうど、コマ落ちの遅延分が画像の短縮と同じ割合のような感じでした。 音声のデータは、0.5秒おきに正しく取得できているので、問題がないようです。Stopから次のStartとの間が連続しています。 同じカメラとマイクを直接AVIMUXフィルタに繋げてAVIファイルを作成すると、きちんとしたAVIが出来上がりますので、コマ落ちなどはIMediaSample.SetTimeでちゃんとフレーム補間されるものと思っていましたが、 違うのでしょうか? 直接つなげた場合と、いったんデータを横取りした場合と、何が違うのでしょうか? ただし、かといって、MediaSample.SetTimeをでたらめな数値にするとだめなことから、一応SampleTimeは参考にされているようですね。 一応、今回はコマ落ち分のフレームを直前のフレームで代用して、サンプルタイムを調整して姑息的に対応しようと思っています。しかし、これが正しい方法でしょうか?きちんとした使い方を知っておきたいのです。 AVIMUXの正しい使い方、同期の取り方等を教えていただける方を待望しております。 八方ふさがりで、このスレに期待しております。 よろしくお願いします。
536 名前:デフォルトの名無しさん mailto:sage [2009/08/15(土) 02:00:15 ] 試しに自分でサンプルに時間設定してみれば?または取得時間とサンプルの時間差を計測するとか。 オーディオのタイマーとビデオで使われるタイマーが別なのはよくあること。 本来ずれないものだが、ずれる環境もある。
537 名前:デフォルトの名無しさん [2009/08/15(土) 10:26:39 ] >>536 早速のアドバイスありがとうございます。 サンプルの取得時の時間は、カメラやマイクが起動してからの時間なので、 AVIMUXにかけるときには、各々の頭のタイミングが0になるように各サンプルの時間を差し引いています。 具体的には、画像の取得開始が50000なら、取得したデータの各サンプルの時間を50000減じてからAVIMUXに送っています。 音声データも同じです。ただ、起動時間にずれがあるので、開始が60000とかになります。 しかし今回の問題は、開始時間がずれているのではなく、徐々にずれていくのです。 ビデオでたとえますと、音はそのまま、画像は早送り(0.05倍速くらいの微妙)です。 タイマーは同じPCにマイクとカメラを接続してますので、同じだと思います。 >>534-535 で疑っているのは、 カメラでリアルタイムに取得した画像は、10fpsとしても、1秒に10枚取れるときもあれば、8枚や9枚しか取れないときもあります。 10秒で100枚ほしいところ、結局90枚しか取れなかったということが普通にあります。 それをAVIMUXに入れたときにはきっちり10fpsでレンダリングされて9秒しか動画が得られない。 取得時間はきちんとしていますが、AVIMUXであいまいに処理されているんじゃないかと、 疑っています。
538 名前:デフォルトの名無しさん [2009/08/15(土) 11:13:17 ] ちなみにAVIMUXのインターリーブのモードはINTERLEAVE_NONEでした。 これをINTERLEAVE_CAPTUREやINTERLEAVE_FULLにしましたら、固まりました。 このモードはソースがプッシュだとだめでしょうか? カメラやマイクなどのキャプチャフィルタはプッシュだと思うんですが。 私のAVIMUXに対する期待は、AVIMUXに1秒間に何枚送ろうが、サンプルに付けたタイムを元に、 適当に表示時間を調整してくれることです。 これが過大な期待なのかどうか、機能の正確なところが知りたいです。 よろしくおねがいします。
539 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 03:36:37 ] GraphEdit のフィルタ挿入選択ダイアログボックスの様に、フィルタの登録情報を取得する方法を探しています。 具体的には、その中でもPIN情報を取得する方法です。条件としてフィルタの生成は行いません。 何か情報がありましたらお知らせください。
540 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 17:39:59 ] directshowって動画をフレーム単位で表示したり総フレーム数や現在の表示フレームナンバーとかで再生制御できる?
541 名前:デフォルトの名無しさん mailto:age [2009/08/22(土) 18:37:12 ] トランスフォームフィルタのCheckTransformについて質問です。 CheckTransform( const CMediaType *mtIn, const CMediaType *mtOut ) この mtIn と mtOut ですが、 [ UpstreamFilter ][ Out ] -> [ A:In ][ TransformFilter ][ B:Out ] -> [ C:In ][ DownstreamFilter ][ Out ] 上図でいえば、それぞれはA〜Cのどれに対応するのでしょうか? mtOutはBに違いないと思います。 mtInに関しては、MSDNの例を見ている限りはAを指していそうに思うのですが、 他の個人Webサイトの例などを見ていると、C(ダウンストリーム側が提示)と取れるような記述もありました。 よろしくお願いします。 m(_ _)m
542 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 20:07:31 ] ソース読めよ
543 名前:541 mailto:age [2009/08/24(月) 22:04:59 ] >>542 ありがとうございました。 m(_ _)m
544 名前:デフォルトの名無しさん [2009/08/24(月) 23:26:02 ] SampleGrabberを使ってAviUtlのDirect Show File Readerっぽいもの(Aviutl用ではありませんが) を作りたいんですが、うまくいきません。 なるべく速度が低下しないように、 ・動画の1フレーム目を読み出した後、2フレーム目の読み出しが要求されたときは IMediaControlのRunを呼び出して再生を再開→すぐ一時停止 ・1フレーム→10フレームのように読み出すときだけシークする ようにしたいんですが、一回Runを呼び出すと、SetOneShotをtrueにしても、サンプルグラバのコールバックで IMediaControl→Pauseを呼び出してもちゃんと止まっていないようなのです。 ポーズした後もBufferCBが呼び出されてるし、 映像だけをデフォルトレンダラに変更してウィンドウを動かすと勝手に映像が進みます。 どうすればいいでしょうか? *.flv→FLV Splitter→MP3のデコーダー→SampleGrabber(Audio)→NullRenderer FLV Splitter→ffdshow Video Decoder→SampleGrabber(Video)→NullRenderer
545 名前:デフォルトの名無しさん [2009/08/27(木) 01:13:50 ] >>543 Aだろ 説明ではアップストリームを基準にトランスフォームフィルタの説明してるんじゃないかな
546 名前:541 mailto:age [2009/08/27(木) 07:50:01 ] >>545 やはりそうですよね。 ありがとうございました。 m(_ _)m
547 名前:デフォルトの名無しさん mailto:age [2009/08/29(土) 20:45:44 ] Directshowでプログラムを組んだのですが、開発したPC(Microsoft SDKが入っている)以外のPCだと、 .netFrameworkをインストールしないと「構成が正しくない」というようなエラーが出て立ち上がりませんでした。 Directshowプログラムを動かすには.netFrameworkのインストールが必須なのでしょうか? それとも、Directshowとは関係ないAPIによるものでしょうか? Ole系関数やatlcomcli.hの関数が怪しいかと思うのですが・・・
548 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 21:00:17 ] 要るわけない。
549 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 21:21:29 ] >>547 まさかCLRプロジェクトにしていないよな? そうでなければ、本当に必要なのは.NET FrameworkではなくVisual C++ランタイムだと思う。 2005 www.microsoft.com/downloads/details.aspx?familyid=766a6af7-ec73-40ff-b072-9112bab119c2&displaylang=ja 2008 www.microsoft.com/downloads/details.aspx?familyid=2051a0c1-c9b5-4b0a-a8f5-770a549fd78c&displaylang=ja
550 名前:547 mailto:age [2009/08/30(日) 09:39:39 ] >>548 やはりそうでしたか(汗) >>549 >まさかCLRプロジェクトにしていないよな? いえ、Win32プロジェクトで作成していますし、プロジェクトのプロパティでも 「共通言語ランタイムサポートを使用しない」にしています。 .netテクノロジーは噛んでいないはずですよね。 >そうでなければ、本当に必要なのは.NET FrameworkではなくVisual C++ランタイムだと思う。 URLを教えてくださってありがとうございます。 今はソフトを作り直していて、余計なAPIなどが関わっていないか注意しているので、 これが完成したら、配布テストとしてVisual C++ランタイムでちゃんと動作するか試したいと思います。 どうもありがとうございました。
551 名前:名無しさん@そうだ選挙に行こう [2009/08/30(日) 11:53:25 ] フレームワークはいらないよ。インストール必要なライブラリーを仕事で洗い出したから間違いないよ
552 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 12:34:19 ] >550 Dependency Walkerかdumpbinで、依存してるdllを洗い出してみるのが手っ取り早いと思うよ。 というか>549の言ってるように、Visual C++ランタイムが無いだけだと思うんだが… Win32プロジェクトでも純粋にWinAPIだけで組むか、ライブラリをスタティックリンクにしない限り ランタイムが必要になる。(Cの標準関数(printf等)ですらアウト)
553 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 18:56:04 ] 今気づいたんだがDirectShowのビデオレンダリングってクロマキー合成なのな 1.メディアプレイヤーで動画を再生 2.ペイントでキャンバスをRGB(16,0,16)で塗りつぶす 3.ペイントをメディアプレイヤーの上に重ねると下の動画が透けて見える XPクラシックモード&WMP11で確認
554 名前:デフォルトの名無しさん mailto:sage [2009/09/01(火) 19:19:38 ] >>553 ビデオオーバーレイを使ってるときはそうなるかもね。
555 名前:547 mailto:age [2009/09/01(火) 19:36:24 ] >>551 そうでしたか。 .netFrameworkはインストールを要求するには大掛かりで憚られるので、 避けたいと思っていましたし、よかったです。 ありがとうございます。 >>552 便利なツールを教えてくださってありがとうございます。 これで調査して適切なライブラリを洗い出します。
556 名前:デフォルトの名無しさん mailto:sage [2009/09/03(木) 23:48:43 ] >>547 コンパイラはVisualStudioか? 7月28日にATLに当たったセキュリティパッチの影響で、 dllが足りていても更正が正しくないと出ることがあるぞ。 もしそれだったら、最新版の再頒布パッケージ入れないと動かないぞ。 www.microsoft.com/japan/technet/security/bulletin/MS09-035.mspx
557 名前:デフォルトの名無しさん mailto:sage [2009/09/04(金) 01:03:29 ] VisualStudioのインストーラープロジェクトで依存洗い出してインストーラー作ってくれるけど、 そういうのは使えないのか?
558 名前:デフォルトの名無しさん mailto:age [2009/09/04(金) 20:28:26 ] 変換フィルタを作っているのですが、720x480を入力し、そのままのメディアタイプでVMR7 に 出力すると、 ttp://kissho.xii.jp/1/src/1jyou90085.png こんなふうにおかしな映像が出力されてしまいます。 しかし、自作変換フィルタ後にAVIデコンプレッサを介してVMR7に接続すると、 正しく映像が出力されました。 AVIデコンプレッサは幅768にアラインしているのでしょうか? その場合、それと同様のことを変換フィルタに組み込むには、 具体的にどこにどう実装すればよいのでしょうか? よろしくお願いします。
559 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 14:04:16 ] >>558 VMRのメディアタイプのbiWidth見れば分かるが、768とかになってるはず。 >その場合、それと同様のことを変換フィルタに組み込むには、 変換時にアライン分飛ばせばいい。
560 名前:558 mailto:age [2009/09/05(土) 16:13:23 ] >>559 なるほど! ありがとうございました!
561 名前:デフォルトの名無しさん [2009/09/06(日) 14:49:43 ] 訳あってdirectshowを学ばなければならなくなった者です なかなか良い書籍やサイトが見つからないのですが、みなさんはどうやって勉強しているのでしょうか?
562 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 15:09:36 ] >>561 SDKのサンプルとドキュメント1択。
563 名前:デフォルトの名無しさん [2009/09/09(水) 12:44:39 ] 例えばデスクトップをキャプチャしてaviで保存するアプリを作ったとする このとき無圧縮だったり、そのほかのコーデックで圧縮したりするようにするにはどうすればいいんだ? どのフィルタの部分でそのコードを書く?のだね 初心者だから教えてみてみ
564 名前:デフォルトの名無しさん mailto:sage [2009/09/09(水) 13:37:02 ] >>563 VFW使え。それが一番簡単。
565 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 02:21:14 ] >564 VFWはファイルサイズ2G以下の壁が… 正直grapheditのが簡単な希ガス。
566 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 02:32:51 ] vfwはビデオコーデックの機能だけだカス
567 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 16:53:30 ] DirextShow初心者なのですが、 H264のaviファイルの各コマ画像を連続で取り出すことって 簡単に出来るのでしょうか・・・ 対応コーデック(フィルタ?)を入れれば再生は簡単に出来そうですが、、
568 名前:デフォルトの名無しさん [2009/09/10(木) 18:36:40 ] directshowでビデオからの映像をグレイスケールにして二値化するにはどうしたらよいのでしょう
569 名前:デフォルトの名無しさん mailto:sage [2009/09/10(木) 18:54:40 ] >>567 余裕 >>568 フィルタ作れ
570 名前:デフォルトの名無しさん mailto:sage [2009/09/13(日) 22:09:06 ] >>568 EZRGB24っていうサンプルが参考になるよ
571 名前:デフォルトの名無しさん [2009/09/16(水) 03:11:58 ] 二値化フィルターくらい簡単なら作ったげよか? 輝度でばっさり二値化するのでいいのか? 色で判断して二値化するほうがいいの? 閾値はどうする?プロパティページで変更出来るようにしたい? スライス方式って上下限の閾値ってのもあるぞ お好みを指定してくれ。 後、ソースはやらん
572 名前:デフォルトの名無しさん mailto:sage [2009/09/17(木) 02:03:11 ] >>571 適応的二値化でお願いします cvAdaptiveThreshold()を呼び出すだけより格段に速いやつを
573 名前:デフォルトの名無しさん [2009/09/17(木) 09:11:36 ] 周囲の環境から最適に二値化するやつか。 それはまんどくさ
574 名前:デフォルトの名無しさん [2009/09/18(金) 22:24:21 ] cvAdaptiveThreshold()より改善するのは仕事でないと嫌だが、 まんま使うとかはダメなのか? 仕事として受けるなら設計書とソース提出するよ
575 名前:デフォルトの名無しさん mailto:sage [2009/09/19(土) 17:35:55 ] 自力で高速化してみます ありがとうございました
576 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 14:06:10 ] Visual C++ 2008 を使用しています。 Microsoft SDKs\Windows\v6.1\Samples\multimedia\directshow\baseclasses にある Streams.h をインクルードしたら IReferenceClockTimerControl が定義されてないと出ました。 これはどういった対処をすれば良いのでしょうか?
577 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 14:10:05 ] まずはビルドしろよ糞が
578 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 16:46:07 ] 基本的な事を知らずにDirectShowに手を出すと泣くよ。 俺が昔そうだったから保障するw
579 名前:デフォルトの名無しさん mailto:sage [2009/09/22(火) 23:12:02 ] >>576 ヘッダー全部もってこい。 もしくはちゃんとパスを通せばおk
580 名前:デフォルトの名無しさん mailto:sage [2009/09/28(月) 21:56:54 ] >>576 MicrosoftSDKや、DirectX SDKと、VC++のヘッダファイルで同名のがあるから インクルードの順番も注意しろ。
581 名前:デフォルトの名無しさん [2009/10/09(金) 14:15:28 ] TChartShapeでchasVertLineにしてマークを表示させてるのですが マークが上と下(Y1とY0)に2つ表示されてしまいます これを上1つ(Y1)だけ表示されるのにはどうしたらいいですか?
582 名前:デフォルトの名無しさん mailto:sage [2009/10/09(金) 14:16:09 ] あ、すんません。 誤爆してしまいました
583 名前:デフォルトの名無しさん [2009/10/11(日) 07:36:37 ] 同機種のwebカメラを2つ繋げてもグラフエディットでは1つしか表示されない。 調べてみるとPCによってはちゃんと表示されるものもある(カメラのドライバーは同じ物を使用) USBコントローラの数が関係してるのかと思うんだけどわからない。 ここには解説出来るような人いる?
584 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 07:47:51 ] いません
585 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 13:33:39 ] やっぱり難しいよね。ごめんなさい
586 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:14:54 ] 態度が気に食わないので教えない
587 名前:デフォルトの名無しさん mailto:sage [2009/10/11(日) 14:30:02 ] ttp://img.f.hatena.ne.jp/images/fotolife/T/TamTam/20091004/20091004201621.jpg
588 名前:デフォルトの名無しさん mailto:sage [2009/10/12(月) 21:08:27 ] >>586 >>587 態度を改めます。私程度の力ではわからないため お願いします教えてください。 【質問】 同機種のカメラ複数台接続してGrapheditで1個しか表示されない カメラドライバの問題でなく「PC側によって」使えるものと 使えないものがあるが、何が違うのかわかりません。 【現在わかっている事】 ノートPCの一部ではUSBコントローラが複数あり 別々のUSBポートにつないでいれば同機種のWebカメラでも 利用可能。 また、ググると下記の記述があり私が試してみた感じ同じ考えです。 ・同じ型番でもドライバが対応していれば大丈夫 ・同じメーカーでも型番が違えば大丈夫 ・片方のカメラにUSBハブを挟めば大丈夫 ・メーカーが違えば大丈夫 blogs.yahoo.co.jp/honebuto_honebuto/28960469.html よろしくお願いします。
589 名前:デフォルトの名無しさん mailto:sage [2009/10/16(金) 21:17:21 ] >>578 よくあるパターンだがDirectShowに限らず初心者はその「基本的なこと」が何なのかすら判らないことが多い で、ググってもそういう事が書いてあるページがなかなか見つからない罠。結果挫折する・・・
590 名前:デフォルトの名無しさん [2009/10/17(土) 01:48:31 ] キャプチャーカードやカメラの画像サイズの設定で 入力1080と720などの切り替えをしたいのですが、 DirectShow では IAMStreamConfig を使ってできましたが、 WindowMediaEncoderSDK いわゆるWMEncoderLib.dll系を使って できないでしょうか?
591 名前:誰か助けて。 [2009/10/18(日) 21:37:48 ] ISampleGrabberを利用して画面キャプチャを行っています。 mpeg2をビットマップにすることは出来ましたが、 Webカメラで撮影して保存したファイルでは失敗します。 Webカメラの設定ではYUV2で保存されるようで、そのファイルのプロパティーで見ると MS-YUV(16ビット)と書かれていました。この場合、グラバのSetMediaType()には 一体何を与えればいいのでしょうか? なお、現状で、 media_type.majortype = MEDIATYPE_Video; media_type.subtype = MEDIASUBTYPE_RGB24; media_type.formattype = FORMAT_VideoInfo; を与えています。 これだと、GetCurrentBuffer()で失敗します。 そこまでは全部成功します。戻り値はVFW_E_WRONG_STATEでした。
592 名前:誰か助けて。 [2009/10/18(日) 21:40:53 ] なお、フレーム読み込み箇所は次の通りにしています。 this->seeking->SetPositions(&ulc,AM_SEEKING_AbsolutePositioning,&ulc, AM_SEEKING_AbsolutePositioning ); // 1フレームレンダリング、完了を待つ while(this->control->StopWhenReady() != S_OK){} // レンダリング完了を待つ(不要か?) OAFilterState fs; this->control->GetState( INFINITE, &fs); // バッファを取得 this->grabber->GetCurrentBuffer( (long*)&this->media_type.lSampleSize, (long*)**this->load_buffer);
593 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 22:53:11 ] >>591 〜>>592 です。 解決してないけど解決しました。 どうもよくわかりませんが、そのムービーファイルの数フレームだけ、 GetCurrentBuffer()でVFW_E_WRONG_STATEが返ってくるようです。 しょうもないので、GetCurrentBuffer()でエラーが返ってきても無視すると うまく行くようになりました。こんなんでええんだろうか・・・
594 名前:デフォルトの名無しさん [2009/10/18(日) 23:13:12 ] ピクセルフォーマットやメディアタイプを理解せずに、ISampleGrabberを使える事にびっくりした。 >Webカメラで撮影して保存したファイルでは失敗します。 このファイルがどんなファイルなのか、作っているGraphがどうなっているのか、等が分からないと、答える事は難しい。 よく分からないんだったら、IVMRWindowlessControl::GetCurrentImageあたりを使ったほうが無難だと思う。