- 1 名前:デフォルトの名無しさん [2006/11/08(水) 00:25:56 ]
- 前スレ
pc8.2ch.net/test/read.cgi/tech/1026666092/
- 82 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 13:36:05 ]
- >>81
DirectX でレンダリングした結果を動画ファイルにしたいってこと? それってソースフィルタ書くことになるわけだけど、ソースフィルタ書くってのは DirectShow のアレコレの中でも非常に難しいことなので、覚悟してやってくれ。 あとプッシュにするかプルにするかは勝手に選べるわけでもないんで、 その辺の理解も必要(パーサが対応してる方じゃないとそもそもグラフが組めない)。 漏れならWMF SDKで WMV にするなぁ。 あと万が一もし単に画面に動画を出したいだけなら、DirectXだけでそのままやれば十分。 ってかDirectShowのレンダラもDirectXで描いてるわけで。
- 83 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 15:58:15 ]
- WMF SDKは日本語のドキュメントが公開されてないっぽいので躊躇してたが
実際インストールしてマニュアル見たらこっちのほうが簡単そう >>82ありがとうございました
- 84 名前:デフォルトの名無しさん [2006/11/28(火) 19:34:50 ]
- 62ですが動画サイズ変換フィルタでしました
ありがとうございました なぜGetMediaTypeの中に出力Pinの設定をかくのか未だ謎。 まぁもう少し使い勝手(入力画像サイズの自動判断など)よくしたら ソースとバイナリうpします 今後の為にも
- 85 名前:デフォルトの名無しさん [2006/11/28(火) 19:36:21 ]
- う〜〜〜ん 何をしたいのか よくわからん。
DirectXで描画したイメージを100%忠実に取り出すことなんて そもそもできるのか?
- 86 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 22:49:29 ]
- > なぜGetMediaTypeの中に出力Pinの設定をかくのか未だ謎。
ココわからないと、この先しんどいと思われ
- 87 名前:デフォルトの名無しさん [2006/11/28(火) 23:01:47 ]
- >>86
GetMediaTypeは上流ストリームの設定を取るインターフェースだけではなく 下流ストリームの接続の設定も取るしくみなのかしら? だとしたらPinそれぞれにMediaTypeを取れるインターフェースを作ってもらいたいものよね
- 88 名前:デフォルトの名無しさん [2006/11/28(火) 23:52:18 ]
- >>87
だからそうなってるだろ?
- 89 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 17:43:12 ]
- >>84
後学の為の資料としてソースうpしてくれるなら ソースは直接書き込んだ方がいいかも。 うpろだだと後々検索でこのスレ見た人とかは拾えないから。 >>85 DllInjectionでDirect3D乗っ取ってフロントバッファを取得して、 それを直接DirectShowに流して動画キャプチャソフトを作りたいんじゃないかな? 俺は>>83じゃないからわからんけど。質問見た感じそんな所じゃないかなーと思った
- 90 名前:デフォルトの名無しさん [2006/11/29(水) 19:49:16 ]
- >>89
わかりました。 えいちてぃーえむえるにしてソースをどこかに貼りますね。 ただまだ解決出来ない問題がありますので暫くかかると思うけど… 画面の解像度変更すると出力Pinとレンダラの間に中間フィルタ「Colorコンバータ」が何故か入る (´・ω・`) 中間フィルタさえはいらなきゃちゃんと表情されるのに…
- 91 名前:デフォルトの名無しさん [2006/11/30(木) 02:41:37 ]
- >>89
フロントバッファと画面イメージって必ずしも同じじゃないんじゃ? よくわからんけど。。。
- 92 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 22:47:39 ]
- >>91
え、BeginScene()とEndScene()の間のレンダリング結果が Present()によってバックバッファからフロントバッファに Blt(あるいはFlip)されると思ってたけど、違う?
- 93 名前:デフォルトの名無しさん [2006/12/07(木) 14:28:29 ]
- class CGrabCB: public CUnknown, public ISampleGrabberCB
{ ・ ・ ・ とコールバックとかいうのをすると、下記のようなエラーがでるのですが どうすればよいのでしょうか? .\AAA.cpp(489) : error C2504: 'CUnknown' : 定義されていない基本クラスが宣言されています。 .\AAA.cpp(492) : error C2501: 'CGrabCB::DECLARE_IUNKNOWN' : 識別名を宣言するのに、型が指定されていません。 .\AAA.cpp(1057) : error C2259: 'CGrabCB' : 抽象クラスをインスタンス化できません。 次のメンバが原因です : 'HRESULT IUnknown::QueryInterface(const IID &,void ** )' : 純粋仮想関数は定義されていません。 c:\Program Files\Microsoft Platform SDK\Include\Unknwn.h(113) : 'IUnknown::QueryInterface' の宣言を確認してください。 'ULONG IUnknown::AddRef(void)' : 純粋仮想関数は定義されていません。 c:\Program Files\Microsoft Platform SDK\Include\Unknwn.h(117) : 'IUnknown::AddRef' の宣言を確認してください。 'ULONG IUnknown::Release(void)' : 純粋仮想関数は定義されていません。 c:\Program Files\Microsoft Platform SDK\Include\Unknwn.h(119) : 'IUnknown::Release' の宣言を確認してください。
- 94 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 14:38:30 ]
- まず、CUnknownはどこから出てきた?
仮にCUnknownがIUnknownのメソッドを実装するクラスとして存在したとしても、 C++ではCGrabCBがCUnknownを継承しただけでは、 ISampleGrabberCBのIUnknownのメソッドを実装したことにはならないはず。
- 95 名前:デフォルトの名無しさん [2006/12/07(木) 14:51:07 ]
- 実はうまくできてるパソコンがあって、別のPCでも動かそうと思ったら、
このエラーが出てしまって。前も出たのですがどうやって修正したのか忘れてしまった 次第です。 やり方は ttp://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html を真似しました。
- 96 名前:93 [2006/12/07(木) 14:59:05 ]
- streams.hをインクルードし忘れてました。。
で、インクルードすると C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlconv.h(1000) : error C2084: 関数 'LPDEVMODEA AtlDevModeW2A(LPDEVMODEA,const DEVMODEW *)' は既に本体を持っています。 C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlconv.h(548) : 'AtlDevModeW2A' の前の定義を確認してください C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlbase.h(6683) : warning C4193: #pragma warning(pop) : 一致する '#pragma warning(push)' がありません またエラーが出てきてしまいました。前はこれでうまく言ったのですが・・
- 97 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 22:24:56 ]
- DirectShowでWEBカメラ映像を表示するプログラムを作ったのですが、
TVチューナーの付いたパソコンだとTV映像が表示されてしまいます。 なんとかWEBカメラに限定させることはできないでしょうか?
- 98 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:08:23 ]
- 今、WMVを無圧縮AVIにするプログラムを作っているのですが
(最終的に別のソフトでxvidでmp4にする予定) 出力されるAVIが映像の再生時間だけ2倍になってしまいます (音は普通に再生) Directshowでの調整がうまくいかなかったので一度AVI作成後にRateとScaleとMicroSecPerFrameを調整して AVI状態ならずれの修正はできたのですが、それをmp4に変換すると再生がおかしくなってしまい 原因がつかめなかったのでDirectshowでAVI作成するところまでもどってきたのですが Grapheditでマスターストリーム指定で30秒くらいのファイル一個だけですがうまくいったので<wmv9 IConfigAviMuxをソースに追加してみてSetMasterStreamが成功はしているのですが 結果に反映されてくれません。 ソースは以下のようなものなのですがどこがいけないのでしょうか ------------------------------------------------------------------------- IGraphBuilder*pGraph= NULL; ICaptureGraphBuilder2*pBuilder= NULL; IBaseFilter*pSrc= NULL; IBaseFilter*pMux= NULL; IBaseFilter*pAudioDec= NULL; IBaseFilter*pAVIDec= NULL; IPin*pPinIn= NULL; IPin*pPinOut= NULL; IMediaSeeking*pSeek= NULL; IMediaSeeking*pRate= NULL; IMediaEvent*pMediaEvent= NULL; IMediaControl*pMediaControl; longevCode;
- 99 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:08:55 ]
- CoInitialize(NULL);
CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&pGraph); CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void **)&pBuilder); IBaseFilter *pAVIMux =NULL;//+id{CLSID_AVI mux}_GUID pAVIMux = searchFilter(pGraph, L"AVI Mux" ); IConfigInterleaving *pConf = NULL; IConfigAviMux *pConfMux = NULL; pGraph->AddFilter(pAVIMux, L"AVI Mux"); LONG lo = -1; pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, OutputFile, &pMux, NULL)); pBuilder->GetFiltergraph(&pGraph)); pGraph->AddSourceFilter( InputFile, L"SourceFilter", &pSrc)); pAVIDec = AVI Decompressorフィルタ取得 pAudioDec = WMAudio Decoder DMOフィルタ取得 pGraph->AddFilter(pAVIDec, L"AVI Decompressor"); pGraph->AddFilter(pAudioDec, L"WMAudio Decoder DMO"); pPinOut = GetPin(pSrc, PINDIR_OUTPUT); pPinIn = GetPin(pAudioDec, PINDIR_INPUT); pGraph->Connect(pPinOut, pPinIn); pBuilder->RenderStream( NULL, NULL, pSrc, pAVIDec, pMux );
- 100 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:10:19 ]
- pBuilder->RenderStream( NULL, NULL, pSrc, NULL, pMux );
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl); pGraph->QueryInterface(IID_IMediaEvent, (void **)&pMediaEvent); pMux->QueryInterface(IID_IMediaSeeking, (void**)&pSeek); CLSID id; pAVIMux->GetClassID(&id); CoCreateInstance(id, NULL, CLSCTX_INPROC, IID_IConfigAviMux, (void **)&pConfMux); pAVIMux->QueryInterface(IID_IConfigAviMux, (void**)&pConfMux); pConfMux->QueryInterface(IID_IConfigAviMux, (void **)&pAVIMux); pConfMux->GetMasterStream(&lo); pConfMux->SetMasterStream(1); pConfMux->GetMasterStream(&lo); if (pMediaControl->Run() == S_OK) { 途中経過表示など } //終了処理 if(pRate != NULL) pRate->Release(); if(pConf != NULL) pConf->Release(); if(pAVIMux != NULL) pAVIMux->Release(); if(pConfMux != NULL) pConfMux->Release(); if(pAudioDec != NULL) pAudioDec->Release(); if(pAVIDec != NULL) pAVIDec->Release(); if(pGraph != NULL) pGraph->Release(); if(pBuilder != NULL) pBuilder->Release();
- 101 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:11:22 ]
- if(pSrc != NULL) pSrc->Release();
if(pMux != NULL) pMux->Release(); if(pMediaEvent != NULL) pMediaEvent->Release(); if(pSeek != NULL) pSeek->Release(); if(pMediaControl != NULL) pMediaControl->Release(); if(pPinIn != NULL) pPinIn->Release(); if(pPinOut != NULL) pPinOut->Release(); CoUninitialize(); ----------------------------------------------------------------------- いろいろ試行錯誤していたので少し読みにくくてもうしわけありません。
- 102 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:21:22 ]
- CLSID id;
pAVIMux->GetClassID(&id); CoCreateInstance(id, NULL, CLSCTX_INPROC, IID_IConfigAviMux, (void **)&pConfMux); pAVIMux->QueryInterface(IID_IConfigAviMux, (void**)&pConfMux); pConfMux->QueryInterface(IID_IConfigAviMux, (void **)&pAVIMux); の辺りを主にいじっていました(コードを実行する場所をかえたりなども)
- 103 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:33:02 ]
- >>98-102
WMV: 各サンプルにタイムコードあり AVI: 各サンプルにタイムコードなし とかこのあたりの問題はOK?
- 104 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:42:49 ]
- AVI→mp4の変換がうまくいかなかずに調べていて自分で出力済みのAVIを
いじるのは無理と判断しまして、Directshowで出力前設定をいじれば勝手に それをはさんでくれるのではないかと思いまして(Grapheditではうまくいったので) 動画関係をいじりはじめたのがつい最近なので色々調べはしましたが 細かいところはよくわかっていないと思います
- 105 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:46:28 ]
- 「AVI→mp4の変換がうまくいかなかずに」
↓ 「AVI→mp4の変換がうまくいかずに」 が誤字なのとそのあとの調べたものを書きそこねました 自分で無理だと判断↓原因がタイムコードです
- 106 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:56:38 ]
- GraphEditではどんなフィルタ構成になった?
- 107 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:57:30 ]
- >>97 ソースをWEBカメラになるように明示的に指定すればいいんじゃね?
- 108 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 20:26:13 ]
- >107
そういうのって、どこかで指定できましたっけ? 接続してるカメラを列挙してるから カメラ以外は入ってこないと思ってたんですが。
- 109 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 22:20:47 ]
- なんかフレームの持続時間が意識されていないような気がするけどどうだろう。
>>103氏の懸念していることに近いけど。 入力のWMVと出力されたAVIの総フレーム数は一致しているだろうか。 また、それぞれのフレームレートはどうなっているのかな? その辺の具体的な数値があった方が状況を確認しやすいと思う。
- 110 名前:98 mailto:sage [2006/12/12(火) 10:44:27 ]
- GraphEditでは
WMVファイル →WMAudioDecoderDMO →AVIMux →FileWriter →WMVideoDecoderDMO →AVIDecompresser→ となっています 変換結果は フレームレートは両方30fpsなのですが、 出力されたAVIのフレーム数は1723です(WMVのほうは調べ方がちょっとわからなかったです) 再生時間がWMV時点で28.7秒でAVIにすると57.4秒で丁度綺麗に2倍になる感じです フレームの持続時間のほうはフレームレートの調整程度しか意識していませんでしたので また少し自分でも調べてみようと思います。
- 111 名前:98 mailto:sage [2006/12/12(火) 10:55:08 ]
- 出力済みAVIファイルは下のようにヘッダを書き換えればAVI状態ではうまく再生できたのですが
mp4に変換するとファイルによって色々な症状がでて3個ほどサンプルを試した内では ひとつもまともに再生できませんでした。 dwAudioTime = (double)dwAudioLength * dwAudioScale / dwAudioRate; dwMicroSecPerFrame = dwAudioTime / dwVideoLength * 1000000.0+0.5; dwVideoRate = 1000000L; dwVideoScale = dwMicroSecPerFrame;
- 112 名前:98 mailto:sage [2006/12/12(火) 11:05:27 ]
- 3連続で書いてすいません。
書き換えた部分はstrhヘッダ(ストリームタイプがvids)の rateとscale、avihヘッダのmicrosecperframeです
- 113 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 11:10:40 ]
- >>110
>フレームレートは両方30fpsなのですが、 出力されたAVIのフレーム数は1723です 30fpsで1723フレームなら、57秒ちょっとで合ってるじゃないですか。 GraphEdit で WMV ファイルを再生して、ビデオレンダラのプロパティで再生フレーム数を見れば おおむねのフレーム数がわかると思います。それでフレーム数を確認してみてください。 それから、WMV はフレーム毎にタイムスタンプが付いていますから(≒フレームの時間的間隔が 一定ではない)、デコードして AVIMux で結合という簡単な処理では決して正しい AVI ファイルは 出来ないということも理解する必要があります。
- 114 名前:98 mailto:sage [2006/12/12(火) 13:05:01 ]
- 指示いただいた通りGraphEditでフレーム数確認したところ861フレームでした
WMV(変換元ファイル)のほうは28秒ちょっとなので57秒でフレームが丁度2倍になっている感じですね >それから、WMV はフレーム毎にタイムスタンプが付いていますから(≒フレームの時間的間隔が >一定ではない)、デコードして AVIMux で結合という簡単な処理では決して正しい AVI ファイルは >出来ない やはりちょっとヘッダー部などをいじった程度だと無理でしたか Directshowのフィルターがその辺の処理をやってくれるのではないかと 甘く見ていました
- 115 名前:98 mailto:sage [2006/12/12(火) 13:17:20 ]
- あと、AVIDecompressorのあとにビデオレンダラにつなげるとその時点では
まともに再生されるのですが、AVIMuxでファイル保存できるようにするときに タイムスタンプが抜かれてしまうのでしょうか?
- 116 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 16:42:29 ]
- >>115
AVI 形式のファイルは、メディアフォーマットで指定された同一持続時間の サンプルがずらーっと並ぶだけというようなフォーマット。 なので正しいフレームレートでかつ1フレームの欠落もないデータじゃないと 正常に再生できない。 変換元ファイルを走査して、真のフレームレートを計算してWMV側で落ちている フレームも捏造して自分でmuxするとかやり方はあるような気がするけれども、 絵と音がずれないAVIファイルを作るのはとても難しいです。
- 117 名前:98 mailto:sage [2006/12/12(火) 19:17:37 ]
- やはり、自分でやるしかないとなると相当むずかしいみたいですね
とりあえずWMVファイルを調べてその最小公倍数分のフレームレートをAVIファイルに設定、 フレームの余計な部分に空フレーム挿入などで試してみようと思います。 途中で挫けそうですが、もしうまくいったら報告だけでもさせていただきます。 …WMVとかに使っているコーデックで圧縮かかってるとその別ソフトが読み込んでくれないから大変です...orz 色々教えていただいてありがとうございました。
- 118 名前:デフォルトの名無しさん [2006/12/21(木) 21:42:10 ]
- ボコノン教授
どこみても質問に回答してる。 ネ申ですか?それともM$の中の人ですか?
- 119 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 00:43:59 ]
- 教徒だろw
- 120 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 08:57:53 ]
- >>119
教徒と言う事は宗教団体さんみたいなもんなんすね。 DirectShow究めるためにボコノン教に入ってみたいかも
- 121 名前:デフォルトの名無しさん [2006/12/23(土) 17:14:46 ]
- パーサー(スプリッタ)フィルタを自作したいのですが、
参考になるサンプルなどありますか? 情報が少なくて困っています。 変換フィルタはいくつか作成したことがあります。
- 122 名前:いつでもどこでも名無しさん mailto:age [2006/12/23(土) 23:31:06 ]
- YUY2の16bit列をRGB16bit列に変換したいのですが、便利な関数またはフィルタありませんか?
- 123 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 00:00:48 ]
- >>121
ソースがプルなのかプッシュなのかによりスプリッタの挙動が大きく異なるわさ プッシュなら来たサンプルバラして後方にポンポコ投げろや プルなら入力ピン繋がった時点でソース先読みして各種情報提供してやるとか色々とアレ 年末ゆえ酒飲んでて上手く得ないけど、まあ察しろ 出力ピンに関してはINFTeeのサンプルが参考になるよ >>122 変換式ならググればゴロゴロみつかるし、後は自分でやってもたいしたことないだろ がんばれー
- 124 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 00:01:47 ]
- 上手く得ないけど → 上手く言えない タイプミスうぜー
- 125 名前:デフォルトの名無しさん [2006/12/27(水) 20:37:01 ]
- >>123
変換を自作したがいちピクセル単位でやると遅くてつかいものにならんかったよ。 そこで私は 趣味→オーブンしーぶい(ただだけど配布できない)仕事→あいぴーぴー(よっしゃでかえるレベル) を使った。一個関数呼ぶだけだった
- 126 名前:122 mailto:age [2006/12/28(木) 02:18:06 ]
- >>123
変換式は見つかりました。でもSSE命令とか使いたいところです。 アセンブラ画像処理プログラミング って本買ってきたので頑張ります >>125 OpenCVやIPPの場合、どんな関数使えばいいですか? 正にIplImageが欲しいです
- 127 名前:122 mailto:age [2006/12/28(木) 02:23:55 ]
- >>125
OpenCVって配布できないんですか? journal.mycom.co.jp/news/2006/11/08/360.html e-words.jp/w/BSDE383A9E382A4E382BBE383B3E382B9.html BSDライセンスってことですが
- 128 名前:122 mailto:age [2006/12/28(木) 02:57:28 ]
- IPPの関数は見つかりました。しかしOpenCVのcvHoughLines2が使いたいので
OpenCVで変換する関数を是非教えて下さい
- 129 名前:122 [2006/12/28(木) 09:22:06 ]
- >>123
アドバイスありがとうございます。 ソースフィルタはFile Source(Async)です。 とりあえず、空の変換フィルタ(CTransformFilter)を作成し、 ソース→空フィルタと接続して解析しようと思ったのですが、 「同じトランスポートをサポートしていない為、ピンを接続できません。0x80040266」 というエラーが起こり、接続することすらできません…
- 130 名前:121 [2006/12/28(木) 09:23:06 ]
- ↑121でした。
- 131 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 12:47:29 ]
- >>129
FileSource にTransformFilterがそのまま接続可能(かも)と思う時点で 知識が少なすぎて説明とか不可能なレベル。 SDK の DirectShow のドキュメントを先頭からちゃんと読むべし (大した分量じゃないでそ)。
- 132 名前:デフォルトの名無しさん [2006/12/30(土) 08:42:31 ]
- #define D3D_DEBUG_INFO
が定義されているとムービー再生時に VMR9のRenderlessが無視されてActiveMovie Windowが ポップアップで出てくるんだけど、これ抑制させる方法ないでしょうか?
- 133 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 18:38:31 ]
- どこの何の話?
- 134 名前:デフォルトの名無しさん [2007/01/05(金) 01:08:09 ]
- お、スレッド落ちてたの直ったのか。
>>127>>128 オープンしーぶいの話し少し待ってもらってもいいか? 仕事始まれば家に帰るからさ ライセンスの話は多分私が間違えていると思う。 ただインターネットの書き込みで気になるのがあった それを張り付けますよ〜。
- 135 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 11:16:08 ]
- 落ちてたんじゃなくてサーバ移転しただけじゃないのかな
- 136 名前:デフォルトの名無しさん [2007/01/09(火) 19:46:03 ]
- [MSDN Online 更新情報] December 2006 DirectX SDK が公開されました。 [DirectX] (2006-12-22 09:00)
www.microsoft.com/japan/msdn/directx/downloads.aspx
- 137 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 20:55:30 ]
- かなり前にインスコ済みなんだが
- 138 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 21:07:56 ]
- December 2006 DirectX SDK
DirectShow関係で何か変わってます?
- 139 名前:デフォルトの名無しさん [2007/01/10(水) 00:15:22 ]
- VMRってWin2KではDirectX9.0およびビデオカードがサポートしていればサポートするよ、
見たいな事言ってるけど実際Win2Kではどうですか? ぶっちゃけウインドレスモードが欲しいだけなんですが。 オーバーレイとかDirect3Dで描画なんたらとかじゃなく
- 140 名前:デフォルトの名無しさん [2007/01/10(水) 07:56:14 ]
- 【ネガティブ派遣根性チェック】
3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。 □派遣先の社員の意見にはたとえ間違っていても反対しない □派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい □自社に仕事を持ち帰れるように言われるとムカつく □自社で仕事なんてできるわけがない □派遣/受託の差異を指摘する人間はムカつく □派遣先には仕事だけでなく自分のプライベートについても指示して欲しい □自分の月額金額を知らない □派遣先社員より自分の生涯収入が低いのは当然だ □派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ □今のプロジェクトが終わっても同じ派遣先に常駐したい
- 141 名前:デフォルトの名無しさん [2007/01/12(金) 02:18:08 ]
- ネガティブ派遣社員(σ´Д`)σゲッツ!!
正社員なんだが仕事の為なら派遣さんにも尻尾ふりますよ。寧ろ俺が最下層。 OctoberではVC6のサポートしていたんだが、December 2006 DirectX SDK は打ち切ったようだね。 「.dws」と言うプロジェクトファイルがなくなっとる
- 142 名前:デフォルトの名無しさん [2007/01/12(金) 02:48:15 ]
- 正社員は「自分の仕事のため」に尻尾ふり
派遣は「切られないため」に尻尾ふり
- 143 名前:デフォルトの名無しさん [2007/01/15(月) 03:19:51 ]
- 変換フィルタの自作しているんですけど、
上流フィルタの出力pinにたとえばVGAの解像度を優先接続して欲しいん ですが、そんなことって可能でしょうか? msdn.microsoft.com/library/ja/default.asp?url=/library/ja/dnwmt/htm/grabbersample.asp このページをみながら「EnumMediaType」と「GetMediaType」はオーバーライド したんですが、 まだ接続しきっていないせいか上流フィルタの出力pinに解像度の情報が乗っていない。。 できないのかな?
- 144 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 13:44:33 ]
- >>143
GetMediaType で解像度入れたメディアタイプを返せばいいんじゃない?
- 145 名前:デフォルトの名無しさん [2007/01/15(月) 16:31:10 ]
- >>144
回答ありがとうございます。 そのあたりを嗜好錯誤してかつできませんでした。 解像度を返すにはCMediaType->Formatのポインタが必要ですがそこが 空になっているんです。
- 146 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 16:54:48 ]
- >>145
それは当たり前でソ。フォーマットタイプによってpbFormatの先の構造体のサイズは変化するんだから、 事前にアロケートしてもらうのは無理。>>145が自分で SetFormat & SetFormatType してあげないと。
- 147 名前:デフォルトの名無しさん [2007/01/15(月) 17:15:08 ]
- >>146
できました。 優先的に上流フィルタの解像度を選んでくれるようになりました。
- 148 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 08:27:54 ]
- Direct3D9+VMR9 Renderlessモードでビデオ画像を表示しているのですが
60fpsで描画すると(SetTexture→DrawPrimitiveUP→Present) フルスクリーンモードでDirectShowが固まってしまいます。(デコードが停止) 同じような問題に遭った方いらっしゃいますか? フルスクリーンでもビデオに合わせて30fps程度に落としたり (ソースは典型的な29.97fps)、ウィンドウモードにすると問題は無いんですけども・・・。 VGAは NVIDIA GeForce4MX , DirectX9 2006-feb ドライバは ForceWare 93.71 (2006年11月2日) WHQL認定 です。
- 149 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 01:45:21 ]
- RenderFileでディスク上のmp3が鳴らせる、というとこまでわかりました。
メモリ上のmp3を鳴らす場合、ソースフィルタをどうにかこうにか、 と言うことのようですが、それ以降さっぱりわかりません。 なにかいいサンプルがあったら教えてください。
- 150 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 04:40:47 ]
- >>149
C:\Program Files\Microsoft Platform SDK\Samples\Multimedia\DirectShow\Filters\Async\MemFile と、よく知らないのに返答してみる・・・
- 151 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 10:57:19 ]
- >>149
まず標準的なPCにプレインストールされているMP3デコーダフィルタがある、と仮定すると それが何なのかGraphEdtで調べる。 次にそのMP3デコードフィルタとつながるソースフィルタを自作する。 そしてソースフィルタがそのMP3デコーダフィルタに対してどのようなメディアタイプで接続できるのか調べる。 メディアタイプがわかったらそのメディアタイプにあった形式に、メモリ上のデータとやらを加工してMP3デコーダに渡す。 フィルタ作ったことが無いなら相当大変だよ。
- 152 名前:149 mailto:sage [2007/01/19(金) 03:05:59 ]
- レスありがとうございます。
サンプルも151もまるで理解できないのでとりあえずDirectShowを1から勉強してます。
- 153 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 04:54:19 ]
- 最終的にどういう条件で何がしたいのかを書いたほうがいいかもよ。
他の選択肢があるかもしれんし。。。
- 154 名前:デフォルトの名無しさん [2007/01/19(金) 23:55:04 ]
- MPEG3Layer-3デコーダ
これが標準にインストールされてるデコーダだよ。 このデコーダ通ったストリームがWAVEファイルみたいな生な音声ファイルになってるからそこに変換フィルタを自作してやればいいよ。 意外と簡単にいけるかもしれん…
- 155 名前:デフォルトの名無しさん [2007/01/24(水) 10:52:40 ]
- ttp://mobiquitous.com/programming/usbcamera.html
この↑ページをみながらDirectShowLibを使ってC#で USBのマイク&カメラ(LogicoolのQcam10.0)からの入力をCaptureGraphBuilderを使って MuxAVI経由でAVIファイルとして保存しているのですが、 フィルタグラフマネジャIGraphBuilderのRun(),Stop()およびIFileSinkFIlterのSetFileName()を使って、 Run 5秒間保存 Stop 保存先変更 Run 5秒間保存 Stop 保存先変更・・・ と繰り返すと、できあがったファイルは 1つ目、所望のものが得られた 2つ目、映像が〜5秒フリーズして5秒後から再生される。音声は再生直後から5秒までにちゃんと入っている 3つ目、映像が〜10秒フリーズして再生される。音声は同上 のようになっていて、どうもVideoのほうの時間がおかしいのですが、 そこをうまく扱えるような方法があったら教えてください。
- 156 名前:デフォルトの名無しさん [2007/01/24(水) 12:34:32 ]
- それQCAMのバグだと思ってる。
厳密に言うとMediatimeの初期化をしてくれてないからそうなる。 カメラの後に「Smart Tee」繋いで、さらにフレビューピンに繋いだら?
- 157 名前:155 [2007/01/24(水) 17:57:20 ]
- ありがとうございます!
とりあえずそれでやってみます!
- 158 名前:155 [2007/01/24(水) 20:43:33 ]
- GraphEditでも再現できる現象だと(いまさらながら)わかったのですが、
>>156さんの >>カメラの後に「Smart Tee」繋いで、さらにフレビューピンに繋いだら? のおっしゃるように VideoSource->SmartTee->PreviewPin->AviMux->FileWriter とつないだら、Runできずに The graph could not change the state. タイムスタンプがこのサンプルに設定されていません。(Return code:0x80040249) と出て行き詰まっています。 知識不足でお聞きしたいのですが、 タイムスタンプがないのはバグなのでしょうか、 それとも当然の動きで設定になにか必要なのでしょうか・・? もともと連続でファイルを区切って数秒間の音声付き映像をキャプチャできれば違う方法でもよく、 いちいちGraphBuilderを解放してまた作るとうまくいくことはいくんですが、 それでは解放と作成に時間がかかるのでもっと早くできる方法を探していて 上記155みたいな試行錯誤してます。
- 159 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 20:47:14 ]
- >>158
previewピンからの出力にはタイムスタンプがつかないのがDirectShowのお約束です。 >いちいちGraphBuilderを解放してまた作るとうまくいくことはいくんですが、 QCAMのフィルタだけDisconnectして取り除いて作り直して挿入して接続するとか。
- 160 名前:デフォルトの名無しさん [2007/01/24(水) 20:58:38 ]
- そうそう。そのタイムスタンプを付けないのがプレビユーピンなんだ。
で、なんでそうしろといったかと言うと キャプチャピンとプレビューピン両方にレンダラ繋いで再生→停止を繰り替えすとわかる。 キャプチャピンに繋いだ方は画像が流れて来なくなる以前に5秒再生してたら5秒間固まる。 これはQCAMがタイムスタンプを初期化してないからだと思う。 多分自分でスタンプ情報作ってやればよかったと思うけどソースが会社なんだ… コンブライアンスが厳しい
- 161 名前:155 [2007/01/24(水) 22:07:33 ]
- >>159,>>160
ご返答ありがとうございます。 なるほど。 タイムスタンプが設定されていません。はPreviewPinより下流のFilterが発していたことがわかっていませんでした。(恐らくFileWriter?) >キャプチャピンに繋いだ方は画像が流れて来なくなる以前に5秒再生してたら5秒間固まる。 まさにそのとおりです。 >多分自分でスタンプ情報作ってやればよかったと思うけどソースが会社なんだ… >コンブライアンスが厳しい っということは諦めるかタイムスタンプを自分で打つfilterを作るかでしょうか・・キビシイですね とりあえず>>159さんの >QCAMのフィルタだけDisconnectして取り除いて作り直して挿入して接続するとか。 をやってみます。
- 162 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 23:03:55 ]
- 外で携帯打つと手がかじかんでまともに文入力できてないな俺w
フレビューピン、コンブライアンスワラタ
- 163 名前:155 [2007/01/25(木) 08:21:37 ]
- 現在、問題がどういうわけか再現しなくなって直ってしまったので嬉しいような複雑な気分です。
たぶん(としかいえないのがつらいのですが)Qcam10.5をインストールした後に直ったと思われるので、 Qcam側の原因が自動的に解決されたのだろうと解釈しています・・ いろいろと本当にありがとうございました。
- 164 名前:155 [2007/01/25(木) 08:23:22 ]
- >>162
携帯だったのですね 感謝してます
- 165 名前:162 mailto:sage [2007/01/25(木) 18:45:16 ]
- 最新のカメラドライバを入れる事でこの問題が解決されるのですね。
どうもありがとう。自分も試してみますm(__)m
- 166 名前:デフォルトの名無しさん mailto:あげ [2007/01/26(金) 20:48:07 ]
- DirectSHOWと直接は関係ない質問かと思いますが、教えてください。
変換フィルタにてRGB24ビットのIMediasampleを扱っているのですが、 カメラから入ってきた画像に線を書いてレンダラに渡したいと思ってます。 DIB形式のBMP画像に直接線を描く関数を探しております。 なにが難しいと思っているかというと、デバイスコンテキストが得られない事で、「LineTo」などを代表するWinAPIが使えない事です。 みなさんはどのように画像の加工をしているのでしょうか? やっぱりオーバーレイとかですか?
- 167 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 00:44:03 ]
- 生のRGBデータ配列を渡してHBITMAPを返すようなWin32APIがあったはず。
それをメモリデバイスコンテキストでセレクトしてやればGDIで描画できるんじゃないかな。
- 168 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 01:10:27 ]
- >>167
ありがとうございます。 www.greenwood.co.jp/~k-aki/pc/directshow_movie/directshow_movie.html#h-7 ↑このページのレンダラ処理に>>167さんのおっしゃるようなことが書いてあったため 試して見ます ちなみにこんなソース // ビデオ ヘッダーへのポインタを獲得する。 const VIDEOINFOHEADER *pVideoHeader = (const VIDEOINFOHEADER *)pMediaType->pbFormat; // ビデオ ヘッダーには、ビットマップ情報が含まれる。 // ビットマップ情報を BITMAPINFO 構造体にコピーする。 ZeroMemory(&m_bitmapInfo, sizeof(m_bitmapInfo)); CopyMemory(&m_bitmapInfo.bmiHeader , &(pVideoHeader->bmiHeader) , sizeof(BITMAPINFOHEADER)); // ビットマップ ヘッダーから DIB を作成し、バッファへのポインタを獲得する。 HBITMAP hBitmap = CreateDIBSection(0, &m_bitmapInfo, DIB_RGB_COLORS, &m_buffer, NULL, 0); if(hBitmap){ m_hdc = CreateCompatibleDC(NULL); SelectObject(m_hdc, hBitmap);
- 169 名前:デフォルトの名無しさん [2007/02/05(月) 11:52:49 ]
- msdn.microsoft.com/library/ja/default.asp?url=/library/ja/directx9_c/directx/htm/creatinganaudiocapturegraph.asp
ここを参考に、DirectShowLib + C#で、 waveレンダラを マイク--> tee --> スピーカ(default audio renderer) --> wavDest(wavFilter) --> file writer(sinkFilter) なる構成で作ろうとしています。(GraphEditではできました。) 上記URLによるとcaptureGraphBuilderが使えないので、FindPinとフィルタグラフマネジャのconnectを使って つなげていこうとしています。 しかし、実行時に、各Filterを作ってAddFilterをした後に、つなげる段階でエラーが出てしまいます。 エラーの出る場所 //wavDest(wavFilter) --> file Writer(sinkFilter) wavFilter.FindPin("Out", out outPin); sinkFilter.FindPin("in", out inPin); graphBuilder.Connect(outPin, inPin);//ここでエラー0x80040217 他のフィルターの結合はすべてGraphEditによるデバッグ(?)で確認しましたが、 最後のファイル書き込み部分がつながりません。 なにかヒントをいただけたらよいのですがどうでしょうか・・
- 170 名前:169 [2007/02/05(月) 11:53:51 ]
- ちなみに
wavFilterは Guid id = new Guid("3C78B8E2-6C4D-11D1-ADE2-0000F8754B99"); Type comType = Type.GetTypeFromCLSID(id); object comObject = Activator.CreateInstance(comType); wavFilter = (IBaseFilter) comObject; sinkFIlterは sinkFilter = (IBaseFilter)new FileWriter(); sinkSetFilter = (IFileSinkFilter) sinkFilter; AMMediaType mediaInfo = new AMMediaType(); mediaInfo.majorType = MediaType.Audio; mediaInfo.subType = MediaSubType.PCM; sinkSetFilter.SetFileName(sinkFileName, mediaInfo); こんな感じでやっております。
- 171 名前:169 mailto:sage [2007/02/05(月) 21:45:12 ]
- 自己レスです。
sinkSetFilter.SetFileName(sinkFileName, null); にしたらできました。 なんでやろ
- 172 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 19:24:44 ]
- DirectShowのフィルタプロジェクトを作成できるアドインか何か、
むかしここかどこかに貼ってあった気がするんだけど、 誰か知りませんか?
- 173 名前:デフォルトの名無しさん [2007/02/07(水) 12:21:04 ]
- >>172
「拡張ストアド プロシージャーDLL」 これで作っちゃだめなの? 自分はいつもこれで作って、 〇「proc.c」を削除 〇「stdafx.c」にStreamヘッダを追加 〇追加インクルード 〇モジュール定義 〇ライブラリ追加 をしていた。これがめんどいです?
- 174 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 13:28:32 ]
- >>69
有り難うございます。 あちらで聞いた方が良かったですか。でも、今から同種の質問を飛ばすとマルチですし。 やはり、October 2004かsummer 2003ですか。試してみます。 私もVC6やめたいところですが、色々としがらみと要望がありまして。 未だにVC6の需要があるので困ります。
- 175 名前:174 mailto:sage [2007/02/07(水) 13:30:27 ]
- すみません、DirectX初心者質問スレ宛を誤爆しました。
- 176 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 15:53:05 ]
- >>173
ありがとうございます。めんどいとかじゃなくて そのやり方を知りませんでした。 参考になりました。
- 177 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 16:14:12 ]
- と思ったけど、2005には拡張ストアド〜がありませんでした。
Sampleを改造することにします。
- 178 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 16:17:44 ]
- さがしてみたらここにありましたがVC6用でした。
hammer.prohosting.com/~arabo/DirectMediaWz.shtml
- 179 名前:デフォルトの名無しさん [2007/02/07(水) 19:02:10 ]
- え〜2005無料版でもほとんど一緒なのあるよ
ぶっちゃけDLL作るプロジェクトならなんでも可 まぁ結局新規プロジェクトでフィルタ作れるようになってもサンプル改造に落ち着くんだけど
- 180 名前:デフォルトの名無しさん [2007/02/08(木) 08:58:22 ]
- DirectShow使う開発で一番多く使われているプログラム言語ってVC2003かな?
VC6…DirectXサポート切れていて最新の盛り込みできない VC2005無料版…リソースエディタがないため扱いづらい VC2005…普及してる? C#…これ自体存在が微妙 VB…本格的にやるには不向き 他…資料がなさすぎね??
- 181 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 11:44:35 ]
- >>180
VC2005無料版はいろいろ難関がありそうだよね。 ただVC2003のプロジェクト(非DirectShow)をコンバートしただけなのに PlatformSDKのセッティングとか初めてだと面食らう。 なぜかウチの環境だとPlatformSDKのツリーがVc7の下にあって・・・。 近いうちにVC2005導入予定だけど、普及の問題は別として開発しやすいのかな?
- 182 名前:デフォルトの名無しさん [2007/02/09(金) 00:09:39 ]
- プログラムからビデオキャプチャを行わせることに挑戦しています。
プレビューで使われる画像サイズやフレームレートをプログラムから 指定する方法は無いでしょうか。 IVideoWindow等でウィンドウを小さくする等だと転送するデータは変わらないので 負荷が下がらないと思うので駄目だと思います。それとも変わるのでしょうか。 IPropertySetStorageで色々設定できるダイアログが表示されるが これって使う人の立場で考えると 製品によってダイアログが違うので説明が大変だし 変にいじって品質を落としたりする可能性があって嫌なんだが これしかないのでしょうか。
|

|