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/
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なりで受けるのもアリですね。 誰かが効率的で高品質なもの作っているはずですので、できれば避けたいですね。