DirectShowと戦うスレ Part 3
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2008/03/19(水) 16:36:49メソッドのデッドロックとか、わけわからん現象多くないすか。
このスレに怒りやテクをぶつけましょう。
過去スレ
Part 2 http://pc11.2ch.net/test/read.cgi/tech/1162913156/
Part 1 http://pc8.2ch.net/test/read.cgi/tech/1026666092/
0002デフォルトの名無しさん
2008/03/19(水) 16:37:12Win32API質問箱 Build63
http://pc11.2ch.net/test/read.cgi/tech/1204600558/
くだすれDirectX(超初心者用)part.3
http://pc11.2ch.net/test/read.cgi/tech/1193605500/
【C++】 DirectX初心者質問スレ Part16 【C】
http://pc11.2ch.net/test/read.cgi/tech/1202634347/
DirectX総合スレ (Part8)
http://pc11.2ch.net/test/read.cgi/gamedev/1205306118/
0003デフォルトの名無しさん
2008/03/19(水) 16:38:05MSDN Microsoft DirectX9.0 DirectShow
http://msdn.microsoft.com/library/ja/DirectX9_c/directx/htm/directshow.asp
DirectX ホームページ
http://www.microsoft.com/japan/windows/directx/
MSDN ホームページ
http://www.microsoft.com/japan/msdn/
MSDN ライブラリ
http://msdn.microsoft.com/library/ja/
MSDN 2 ライブラリ
http://msdn2.microsoft.com/ja-jp/library/
Geekなページ DirectShowプログラミング [VC++]
http://www.geekpage.jp/programming/directshow/
あひるのホームページ DirectShowをよりよく使いたい人たちのサイト
http://hammer.prohosting.com/%7Earabo/DirectShow.shtml
Windowsでビデオキャプチャを作るため参考資料まとめ
http://www1.bbiq.jp/kougaku/link_videocap.html
奈良高専 土井研究室 動画あれこれ
http://wwwdoi.elec.nara-k.ac.jp/html/jisyu/doga/index.html
東京理科大 Kato Laboratory プログラミングキャプチャ
http://www.katolab.ee.kagu.sut.ac.jp/programing/capture.htm
京大川嶋氏 DirectShowのビデオキャプチャプログラミング
http://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html
M.Oshikiri's HomePage
http://www.geocities.jp/konbiki/tips/index.html
DirectShowを利用した透明ウィンドウでのビデオ再生
http://codezine.jp/a/article/aid/322.aspx
http://www.google.com/
0004デフォルトの名無しさん
2008/03/20(木) 22:29:49ttp://www.shader.jp/xoops/html/masafumi/directx9/DShow/dshow001.htm
上のページを参考にsdk8.1のtexture3dのソースを変えて音が出るようになったのですが、
//WMVとかMPEG2とか
hr = m_pGB->RenderFile(wFileName,NULL);
if(FAILED(hr))
return hr;
if(!bSound)
{
// 無音
hr = IAudio->put_Volume(-10000);
}
else
{
//音の出力
hr = IAudio->put_Volume(0);
}
WMVとかMPEG2を読み込む処理に飛んでbSoundが1(音を鳴らす)の
場合、テクスチャにムービーを描画せず、新たに画面が出てそちらに
描画してしまいます。bSoundが0のときはテクスチャに描画できます。
知りたいのはsdk9.0の場合はそのような問題はありますか?ということです。
0005デフォルトの名無しさん
2008/03/21(金) 11:30:57//AVIとかMPEG1とかVFWでいけるやつ
//オーディオトラックを再生しない場合 NO_AUDIO_RENDERER を定義
if(!bSound)
{
// If no audio component is desired, directly connect the two video pins
// instead of allowing the Filter Graph Manager to render all pins.
CComPtr<IPin> pFTRPinIn; // Texture Renderer Input Pin
// Find the source's output pin and the renderer's input pin
if (FAILED(hr = pCTR->FindPin(L"In", &pFTRPinIn)))
{
Msg(TEXT("Could not find input pin! hr=0x%x"), hr);
return hr;
}
// Connect these two filters
if (FAILED(hr = m_pGB->Connect(pFSrcPinOut, pFTRPinIn)))
{
Msg(TEXT("Could not connect pins! hr=0x%x"), hr);
return hr;
}
}
0006デフォルトの名無しさん
2008/03/21(金) 23:18:450007デフォルトの名無しさん
2008/03/22(土) 23:40:250008デフォルトの名無しさん
2008/03/24(月) 15:14:07サンプル読んでないんで違ってるかもしれんけど、
IVideoWindow使って、
videoWindow.put_AutoShow(DsHlp.OAFALSE);
とかでウィンドウ非表示に出来ない?
0009デフォルトの名無しさん
2008/03/24(月) 17:15:38基底クラスCBaseVideoRendererがないため作成できません。
C++ならstreams.hにあるのですが、C#の場合どうしたらいいのでしょうか?
0010デフォルトの名無しさん
2008/03/24(月) 17:45:37C++/CLIでBaseClassesをマージしながらラッパーを自前で書くか。
0011デフォルトの名無しさん
2008/03/24(月) 22:47:170012デフォルトの名無しさん
2008/03/24(月) 23:52:181.Webカメラの制御と動き検知による録画
・DirectShowでWebカメラからキャプチャ
・キャプチャの前後フレームの赤部分を比較して動き検知
・動きを検知したらStreamBufferで数秒前まで遡って一定時間録画
・録画後別スレッドで、MPEG4に変換
・フレームを適当に間引いて、JPEG保存 ⇒ ☆
2.上記☆のJPEG画像をクライアント(Webブラウザ)に配信
・NetworkStreamで、リクエストを受けてコンテンツをひたすら返す
上記の2の部分がもっといい方法があるはずと悩んでいます
WindowsMediaエンコーダーで出来るWebカメラのストリーミング配信
(クライアント側はMediaPlayerで見るやつ)が本来やりたいことなんです
色々検索してると
ttp://www.microsoft.com/japan/msdn/directx/techart/ds_wm_faq.aspx に
「Windows Media Encoder は、キャプチャに DirectShow を使用します」
と書いてあるじゃないですか…
どうやって DirectShowの最終出力をWindowsMediaEncorderに渡して
ネットワークストリーミングさせればいいのでしょうか?
助けてぇぇぇ >_<
0013デフォルトの名無しさん
2008/03/25(火) 04:27:08なるほど。そういう方法がありますか。
ところでCOWってなんですか?ググってみたんですが、牛のcowばかり出てきて今いち分かりませんでした。
DShowLibのソースコードにそれと近いものってどれにあたりますかね?
0014デフォルトの名無しさん
2008/03/28(金) 21:47:000015デフォルトの名無しさん
2008/03/29(土) 01:07:540016デフォルトの名無しさん
2008/03/30(日) 16:10:13サンプルプログラム(DirectShowSamples-2007-JulyのDESCombine-2005.sln)において、
トラックを作成する際にIAMTimelineObjであるpTrack1ObjからキャストによりIAMTimelineTrackをモジュールスコープの変数m_Trackに取得しています。
public Group(AMMediaType mType, IAMTimeline pTimeline, double fps)
{
int hr;
hr = m_pTimeline.CreateEmptyNode( out pGroupObj, TimelineMajorType.Group);
DESError.ThrowExceptionForHR(hr);
try
{
//(省略)
m_Track = (IAMTimelineTrack)pTrack1Obj;
}
finally
{
Marshal.ReleaseComObject(pGroupObj);
}
//Marshal.ReleaseComObject(pTrack1Obj); // Released as m_VideoTrack in dispose
}
ここで、一番最後にコメントアウトされているMarshal.ReleaseComObject(pTrack1Obj); がなぜコメントアウトされているのかがちょっと理解できずにいます。
ttps://www.microsoft.com/japan/msdn/directx/japan/dx8/DES.aspx でC++でのサンプルが掲載されておりこのサンプルにおいては、
pTrack1Obj->Release();として開放しています。
ちょっとソースの修正を加えつつ、コメントアウトをはずしたプログラムを走らせるとトラックにソースを追加するAddメソッドの以下の行、
hr = m_Track.SrcAdd( pSource1Obj );
で「基になる RCW から分割された COM オブジェクトを使うことはできません。」
というエラーが発生し、すでに開放されてしまっているというような動作をしてしまいます。
調べてみると、一応両者ともに「参照カウントをデクリメント」するという動作で同じだと思われるのですが、
C++でのRelease()メソッドとC#のMarshal.ReleaseComObject()の動作は違うものなのでしょうか?
00179
2008/03/31(月) 00:12:12どうもです。
結局、レンダリングフィルタのみC++で書いてC#からCOMとして読み込むことにより解決しました。
答えてくれた皆さんありがとうございました。
■ このスレッドは過去ログ倉庫に格納されています