[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 2chのread.cgiへ]
Update time : 05/09 10:56 / Filesize : 216 KB / Number-of Response : 647
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

DirectShowと戦うスレ Part 2



1 名前:デフォルトの名無しさん [2006/11/08(水) 00:25:56 ]
前スレ
pc8.2ch.net/test/read.cgi/tech/1026666092/

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で色々設定できるダイアログが表示されるが
これって使う人の立場で考えると
製品によってダイアログが違うので説明が大変だし
変にいじって品質を落としたりする可能性があって嫌なんだが
これしかないのでしょうか。


183 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 01:31:30 ]
>>182
自分でカメラの出力pinに対して要求だせばいいよ
MSDNのヘルプみるよろし


184 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 02:20:04 ]
>>183
プレビューが
[キャプチャ]->[レンダラ]
という接続なので要求の出し方わかりません


185 名前:183 mailto:sage [2007/02/09(金) 08:20:34 ]
×カメラ
〇キャプチャー

でした。誤解させてしまったかもしれませんすみません。
で、キャプチャのピンのプロパティーページにて解像度やフレームレートをかえられるのであれば

そのピンに対して「EnumMediaType」、メディアタイプの列挙型を受けとればよいです。
列挙型のなかにピン接続したいタイプがあれば接続させます。

私はフィルタ内制作ばかりやっているのでフィルタグラフ用の具体的な関数名までわかりませんが、「Free Mail」と言うSNSサイトにくれば過去ログに貴方と同じ質問の回答があります


186 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 13:29:55 ]
>>182
IAMStreamConfig

187 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 14:00:20 ]
私は流れ設定です

188 名前:デフォルトの名無しさん [2007/02/09(金) 19:51:15 ]
流れ設定ってなんですか?



189 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 01:59:59 ]
IAMNewAboutDirectShow


190 名前:デフォルトの名無しさん [2007/02/11(日) 02:17:48 ]
YUVで映像が流れてるとき「IMediaSample」には
どんな形で入ってるんですか?
RGBTRIPLEしか構造体ワカランス(´・ω・`)

191 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 23:20:45 ]
YUVにも色々あるわけだが

192 名前:デフォルトの名無しさん [2007/02/12(月) 00:04:10 ]
>>191
はい。IYUV、I420の2つでお願いします。
どちらもU値とV値が四分の一に圧縮されていてMediaSubTypeは違っていても中身は同じフォーマットだと思います。

193 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 01:29:29 ]
質問の意味が良くわからないが、IMediaSampleからデータにアクセスするには
IMediaSample::GetPointer(), IMediaSample::GetActualDataLength()というメンバ関数を通してバッファにアクセスできる。
ただし幅や高さなどの情報はAM_MEDIA_TYPEという構造体に収められていて、
これはIMediaSampleからは限定的な用途でしか取得できない。
その用途とはメディアタイプがダイナミックに変化したことをダウンストリームに伝えるという用途である。
そのため、IMediaSampleにはGetMediaTypeという気の利いた名前のメンバ関数があるが、
この関数を通してAM_MEDIA_TYPEが取得できるのはメディアタイプがダイナミックに変化した瞬間だけであり、
取得できるのは変化した後のメディアタイプである。
常に今流れているサンプルのAM_MEDIA_TYPEが取得することはできない。





194 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 01:47:42 ]
>>192
ネットで調べたところ、どうやらプレーンぽいなあ。

最初にYプレーン
次に縦横がそれぞれ1/2に縮小されたU
次に縦横がそれぞれ1/2に縮小されたV
となっているようです。


195 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 06:07:34 ]
MSDNのドキュメントに普通にある

196 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:56:31 ]
SONYが設備投資を縮小だってね。
なにやってるんだかよくわからんよ。
このままだとVAIO部門も潰されるんじゃないか?
潰されたとしてNECあたりが買い取ってくれるといいけどね。

197 名前:デフォルトの名無しさん [2007/02/14(水) 22:02:18 ]
>>196
誤爆(^ω^)おつ

>>190なんですがMSDNと睨めっこしてたけどまだワカランス
>>193の内容は理解出来てるんだけどプレーンがわからんのだな。GetPointer()で映像の画素情報にアクセスできるんだけどプレーンってどうアクセスするの(`・ω・´)??

>>194
そう自分もググッたんでそれは大丈夫。IYUVは一画素にYに8bit、UVに2bitの計12bit使うほーまっと

198 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 22:58:43 ]
>>197
LPBYTE pY = GetPointer で得たポインタ。
LPBYTE pU = pY + width*height;
LPBYTE pV = pU + width*height/4;

Y値は pY から width*height バイト。
U値は pU から (width/2) * (height/2) バイト(縦横ともに半分の解像度ってこと)。
V値は pV から (width/2) * (height/2) バイト。
こんな感じ。UVは逆かもしれない。

パック形式のYUYVとかの場合は(4:2:2ってやつ)、UとVだけ水平解像度が半分で
UとVがYと交互に入ってる式。

>IYUVは一画素にYに8bit、UVに2bitの計12bit使うほーまっと
UVは4ピクセル辺り1バイトだから、8/4で2bitと言ってるだけ。



199 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:42:16 ]
>>198
ありがとう了解それがわからんかったです。


200 名前:194 mailto:sage [2007/02/15(木) 08:07:41 ]
>>197
なんだよプレーンの意味がわかってないのかよ


201 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 08:14:54 ]
うん。ビットマップみたいにピクセル毎に並んでるかと思ってた。


202 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:32:41 ]
DMOというのでフィルタを既に作ったんだけどさ
これって何かいまいちだね。

データを得られればとりあえずはいいので
サンプルグラバっていうのを使ったほうが簡単だったみたい。

でも微妙な動作が違うような。
まあ、既にリリースもしたし、いまさら作り直して挙動が変わるのは困るので
このまま突き進むしかない。

DMOだとピン接続決定とか切断とかわからないみたいだね。
ピン接続できるかの問い合わせがあるけど、
これにOkで答えてもその後同じ条件でまたピン接続できるか問い合わせがある。
接続したとか接続してないとかないみたい。

データの出力が能動的じゃなくて受動的なのもなんか作りにくいな。
DirectShowって難しい。

203 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:35:23 ]
DMOだけどさ
カテゴリにオーディオエンコーダってのを指定しているんだけど
接続できるか問い合わせされるときビデオ関係が含まれていやがんの。

別に問題ないけどさ。

204 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 00:39:21 ]
サンプルグラバを使う道もそれなりに険しいと思うよ。



205 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 00:47:18 ]
>>186
これでサイズ指定が出来ました。

使えないフォーマットがあるし
RGB555とかYUY2とかはどれ選んでいいのか(負荷の一番低いもの)わからないので
とりあえず設定ファイルに入れて変更可能にしといた。

プレビューがデフォルトで640x480になって高負荷になり
画像サイズ変更はプレビュー(レンダラ接続)前じゃないと変更できない
という不便さから解放されました。

206 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 12:06:13 ]
USBカメラではなくて、ネットワークの映像取り込みをしたいと思ってます。
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/htm/selectingacapturedevice.asp
レベルが低くて大変恐縮なんですが、上記のページのようにすると
キャプチャのデバイスで、ネットワークカメラも選択できるようになるのでしょうか?

・USBカメラのプログラム作成すると、ネットワークカメラも
そのまま取り込み出来るのでしょうか?

・プログラミングも初級レベルなので、サンプルプログラム
などあると勉強しやすいのですが、本やサイトなどありますでしょうか。
USBカメラについてのサンプルプログラムは、いくつか見つかりました。

よろしくお願いします。

207 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 13:07:39 ]
206です。いろいろと検索しております。
ttp://homepage1.nifty.com/MADIA/vc/vc_bbs/200307_03070013.html
こちらにネットワークカメラについての制御の仕方について
少し書いてありました。

USBカメラのように一律なプログラムでなくて、
ネットワークカメラごとに、プログラムを変えないといけないのでしょうか。
なにを考えていけば、わからないのですが。
・ネットワークカメラごとのマニュアルを読んで、HTTPでネットワークカメラに
 接続、画像を取り込む
・そのあとは、USBカメラと処理が同じ
こんな感じなのでしょうか?

具体的なコードはまだわからないのですが、方針として
ネットワークカメラの制御が、HTTPだけですむなら、
USBカメラのプログラムで、画像を渡す部分だけ、
改造すれば大丈夫でしょうか。

スレ違いでしたら、誘導していただけますと助かります。
よろしくお願いします。

208 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 23:27:29 ]
特殊なカメラ(業務向けの何十万もするような奴)で遠隔地で画像を取ってネットワークにストリームしてくれるカメラならあると思う。
そういう場合、そのカメラを操作するにはそのメーカーが提供するライブラリを使うことになるだろうね。
映像を受ける側はカメラ用のフィルタグラフではなくネットワークからのストリームを受信するような感じになると思う。



209 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 01:49:42 ]
>>208
お返事ありがとうございます。

livecaptureっていうフリーのすごいソフトありますが、
どうやって複数のネットワークカメラに、対応しているのか疑問でしたが、
メーカーさんが公開しているマニュアルを見て、プログラミングしてるのかもしれないですね。
通信の仕方をメーカーさんが、公開してないとだめなんですね。ふむふむ。。

210 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 14:22:29 ]
専用のカメラを使ってるね。その手のカメラは買えば当然遠隔操作のコマンドとかマニュアルが付いてくるはず。








[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<216KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef