[表示 : 全て 最新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/

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 ]
専用のカメラを使ってるね。その手のカメラは買えば当然遠隔操作のコマンドとかマニュアルが付いてくるはず。



211 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 10:33:36 ]
>>210
>当然遠隔操作のコマンド
付いてくるけど画像ストリームの仕様は無いのよ
とりあえずメーカーに問い合わせてみる


212 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 18:16:38 ]
っ自分で解析

213 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 01:19:35 ]
キャプチャデバイスのプロパティへアクセスするにはIAMVideoProcAmpや
IAMCameraControlがありますが、これらでサポートされていないパラメータへ
アクセスする方法はありますか?

具体的には、USB Video Classのサポートで追加された、

KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER
KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENT

辺りへアクセスしたいんですが。(対象デバイスがそれらのプロパティをサポート
してるのは確認しています)
axextend.idlやstrmif.hのenumにはidが定義されていないし、WHITEBALANCE_COMPONENTの
NODE_S2タイプのアクセス関数(パラメータが2個あるタイプ)もヘッダに見つかりません。

これはカスタムで書くしかないんでしょうか。



214 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 13:54:19 ]
IKsPropertyとかなんかそんな名前のインタフェイスで出来ると思う。

215 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 02:00:42 ]
キャプチャボードからの映像信号に処理を加えて、それを表示するプログラムを作りたいと思い、
DirectShowの勉強を始めました。
一通り調べた結果、以下の事を勉強する必要があると思いましたが、他にも「これ知っとけ」
みたいなことがあったら教えてください。

〜既にある知識〜
C、Win32API、grapheditの扱い

〜これから学ぶべきと思うこと〜
C++、COM、自作フィルタの作成と登録の方法

216 名前:デフォルトの名無しさん [2007/03/01(木) 07:21:37 ]
俺も似たような事やってる…
概念理解が勉強の中心になると思う。ガンガレ〜

既に知ってるとは思うが、「BMP構造」を理解しておくとよいよ。

基本はBMP画像のぱらぱら漫画を加工する事になりますので。

217 名前:215 mailto:sage [2007/03/01(木) 14:07:11 ]
>>216
ありがとうございます。
BMPについてはWin32APIでいじり倒してきたのでいけると思います。
DirectShowについてはその仕様と情報の少なさに辟易していますが、
地道にがんばろうと思います。

218 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 17:23:44 ]
>>215
学ぶべきことがわかってるのはすばらしい!

ただし、下手に段階踏むと挫折しかねないので、
とりあえずサンプルコードからはじめるといいと思う。

「これで動くけど、なんでだろー?」って形で勉強するといいかも。

219 名前:デフォルトの名無しさん [2007/03/01(木) 21:52:11 ]
簡単なサンプル作ってあげよか?インプレイスフィルタとトランスフォームどっちの変換フィルタ使ったらいいか調べるだけでも最初は一苦労だろ

220 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 22:30:27 ]
SDKのサンプルが一番いいよ

221 名前:デフォルトの名無しさん [2007/03/01(木) 22:44:15 ]
そりゃサンプルで自分も勉強したけど、映像の処理なら「コントラスト」、「RGB」この2つから入ると思う。
この2つを最初にみたとき何が最低限実装が必要なメソッドかわからんかった。
そんな意味でのもっとシンプルなサンプル

222 名前:215 mailto:sage [2007/03/01(木) 23:19:46 ]
>>218
ありがとうございます。
そうすることにします。
>>219
助かります!
是非お願いします!

223 名前:デフォルトの名無しさん [2007/03/02(金) 00:06:52 ]
>>222
ひとまず、君の使ってる環境を教えてくれ。
自分はVC6+DX8SDK、VC2003+DX9(オウガスト)
の2つの環境でやっとる



224 名前:215 mailto:sage [2007/03/02(金) 00:12:39 ]
>>223
了解です。
VC++2005Express + PlatformSDK + DirectX SDK (June 2006)

225 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 00:25:29 ]
www.geekpage.jp/programming/directshow/
www.geocities.co.jp/SiliconValley/7406/tips/dshow/
hammer.prohosting.com/~arabo/DirectShow.shtml
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/htm/directshow.asp

226 名前:デフォルトの名無しさん [2007/03/02(金) 02:37:07 ]
>>255
わかったよ。確かにそれみりゃわかるね。
甘やかすのは無用。勉強させろと無言のプレッシャーを感じる…。

227 名前:215 mailto:sage [2007/03/02(金) 03:03:29 ]
>>225
二つ目のサイト以外は既に目を通したものばかりですが、それでも難しいと思いました。
キャプチャの出力解像度を変えることすらできませんでした・・・。
とりあえずC++から地道にべんきょーします。

228 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 04:17:44 ]
あとアセンブラの知識が必要になることもあるな

229 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 08:49:03 ]
マジすか?アセンブラワカンネ。
そしてここはsage進行なんですね。マイナーだからageてました

230 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 08:53:36 ]
DirectShowの本見ると「この本はC++を3年以上やってる方を対象に書いてます」みたいな事が書いてありますね。
C++経験者でないときついのか。

231 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 15:09:51 ]
>>227
入門や概説を一通り読んだら、リファレンスを全部読むのを薦めます。

232 名前:213 mailto:sage [2007/03/02(金) 21:13:20 ]
>>214
色々調べて試したみたところ、IKsPropertySetが使えそうなのは判りました。
ただ、これでVideoProcAmpのプロパティへアクセスしてみたところ、
旧来のKSPROPERTY_VIDEOPROCAMP_BRIGHTNESSのようなFilterベースの
プロパティアクセスをサポートしているものはうまく動作しますが、
KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENTのような
ノードベースのアクセスしかサポートされていないパラメータへはアクセス出来ないようです。
入力インスタンス構造体のFlagsにKSPROPERTY_TYPE_TOPOLOGYをつけて
Get()を使ってみてますが、正常終了するものの中身が0です。

旧来のパラメータもノードベースでアクセス出来るようなので試したみたところ、
入力インスタンス構造体をノードベース(KSP_NODE)ではなくフィルタベース(KSPROPERTY)で
見ているようです。
どうもIKsPropertySetはフィルタベースのアクセスしかサポートしていないのでは、と
推測してるのですがどうなんでしょうか。
IKsControlを使うべきなのかと思い試してますが、こっちはnot supportedのえらーコードが返ります。

233 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 21:25:17 ]
DirectShowは最初わかんないことだらけだったな。
今でもわかんないこと多いけど。
サンプルと手助けがないとつらいね。



234 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 22:02:35 ]
>>232
勘で書いてるんだけど、IKsTopologyInfo:, CreateNodeInstanceでノードを作って、
ノードの方から IKsProperty を QueryInterface で取得して、IKsPropertySet::Setで
プロパティをセットするんじゃないだろうか。


235 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 23:55:00 ]
>>233
DirectShowは設計がマズイと思う。
フィルタグラフマネージャは自前でスレッドをもってユーザスレッドストリームスレッドとの切り離しをすべきだ。
いつの間にかメインスレッドから呼び出されていたりしてデッドロックとか多い。



236 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 11:14:01 ]
>>235
ほんとそのとおりだね。
IBasedPin::Reciver内で別スレッド立ててアロケータ確保すると
うまくやらないとアボーンする。。

237 名前:215 mailto:sage [2007/03/03(土) 23:03:00 ]
>>231
ありがとうございます。
そうしてみます。

C++の入門書を一通り読みましたが、新しいことがいっぱいで疲れました・・・。
次はMSDNのリファレンスを読みます。
早くキャプチャソフト作りたいです。

238 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 00:56:51 ]
>>234
切り離すモードと切り離さないモードがある。

239 名前:213 mailto:sage [2007/03/05(月) 22:24:32 ]
>>234
DDKやPlatformSDKの情報からみて、まさに指摘されてるようなことなんじゃないかと
思って試してみてますが、IKsTopologyInfo::CreateNodeInstance自体がエラーになるんですよね。

色々調べてみると、どうもWindowsXPでCreateNodeInstance自体が完全にサポート
されていない雰囲気がするのですよ。UVC extensionを調べててこんな情報がありました。

ttp://www.codecomments.com/archive421-2005-11-657282.html

自分のやり方が間違ってるかもとも思うんで、しばらく頭を冷やしてもう一度
試してみるつもりです。

240 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:27:24 ]
現在、キャプチャカードからのプレビューをモニタするソフトを作っておりまして、
キャプチャ(640×480出力)→ビデオレンダラ
というふうに繋いでいます。
ビデオレンダラでフルスクリーンにすると、4:3のアスペクト比を守りながら拡大してくれるのは
うれしいのですが、16:9ソースの表示にも対応するために、フルスクリーンの状態で
16:9にしたいです。
しかし、どうしてもできません。
描画されるビデオウィンドウはウィンドウズアプリのメインウィンドウに貼り付けているカタチです。
ソースは640×480を保ったまま、16:9にリサイズしてフルスクリーンにしたいです。
ご助言、よろしくお願いします。

241 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:40:46 ]
>>240
ビデオレンダラーから(フィルタグラフからでもいいのか?)
IVMRAspectRatioControl、IVMRAspectRatioControl9 や IVMRWindowlessControl を取得して、
SetAspectRatioModeでアスペクトレシオを無視するようにする。

レンダラのサイズは自前で16:9にしておく。

242 名前:デフォルトの名無しさん [2007/03/05(月) 22:57:06 ]
変換フィルタを作成しているのですが、再生中にいきなりビデオのサイズが変わるような場合に、
再接続することなく対応したいのですが、レンダラへ新しい縦横サイズは教えてやれたのですが、
バッファサイズを変更できませんでした。
マニュアルには現在より大きなバッファサイズが必要な場合は、ReceiveConnectionを使えとありますが、
フィルタのどこにどのようなコードを追加すればよいのか分かりません。
デタラメな文章ですが、アドバイスありますでしょうか。。

243 名前:240 mailto:sage [2007/03/06(火) 00:47:31 ]
>>241
ありがとうございます!
まずウィンドウレスモードですが、試そうとしたところ、ビデオをウィンドウに転送するところで
強制再起動が掛かかるなど恐ろしいことになってしまったので、ちょっと置いておきます。
ウィンドウモードで作りこんでしまったこともあり、できればこのままで解決したいと思っております。

他の試みとして、IVMRAspectRatioControlをVMR7から呼び出してSetAspectRatioModeで
アスペクト比固定をしないよう設定したのですが、相変わらずアス比固定でフルスクリーン
になりました・・・。
GetAspectRatioModeで確認しましたが、ちゃんとVMR_ARMODE_NONEになっていました。
そこで、grapheditで調べましたところ、
ttp://vista.jeez.jp/img/vi7310912755.jpg
二つあるフルスクリーンボタンのうち、「Set Full Screen」のほうはアス比固定拡大、「Full Screen Window」
のほうは全体に引き伸ばして表示される、という結果になりました。
先に試したプログラムのほうでは、前者のほうになっているのではないかと考えられます。
後者の「Full Screen Window」ボタンを押すことと等価な処理としては何が考えられるでしょうか?



244 名前:240 mailto:sage [2007/03/06(火) 01:37:56 ]
ttp://msdn.microsoft.com/library/ja/directx9_c/directx/htm/usingwindowlessmodewiththevmr.asp?frame=true
ここのウィンドウレスモードの説明を見ていると、こちらのほうが良さそうですし、なんとか
ウィンドウレスモードで動くようにしてみます。

245 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 15:01:49 ]
>>243
古来より DirectShow でフルスクリーン再生をする際には、
レンダラをフルスクリーンモードにするのではなく
単に全画面のウィンドウで再生する方が好しということになっています。
後者はそれでしょう。

246 名前:240 mailto:sage [2007/03/06(火) 16:27:28 ]
ウィンドウレスモードで解決しました!

>>245
なるほど、そういうことですか。

247 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 21:22:13 ]
二つのキャプチャデバイスが接続されているPC上で、ボタンをクリックする度に
IEnumMoniker::Next()を繰り返すことでキャプチャデバイスを切り替えるというプログラムを組んでいます。
デバイスが検出されなくなったら、IEnumMoniker::Reset()をして先頭から数えなおすように
しています。
一回の切り替えを細かく説明すると、
ストリームの停止→キャプチャフィルタの削除→上記メソッドで検出した新たなデバイスをグラフに追加
→ICaptureGraphBuilder2::RenderStream()でグラフをVMR9に直に接続→再生
という流れです。

これに問題がありまして、この切り替えを8回繰り返す(4順する)と必ず画面が最後のフレームを
表示したまま固まってしまいます。
考えられる原因や対処法がありましたら、ご教授お願いします。

248 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 02:22:27 ]
どこがデッドロックしているか調べるといい

249 名前:213 mailto:sage [2007/03/08(木) 03:23:24 ]
USB Video Classキャプチャデバイスのプロパティアクセスについて質問をしていた213です。
問題が度解決できました。この辺を触る人はあまりいなさそうですがご報告だけでも。

結論からいうと、IKsTopologyInfoを使ってKSNODETYPE_VIDEO_PROCESSINGノードを
検索し、そのノードからIVideoProcAmpインタフェイスをCreateNodeInnstanceで生成することで、
拡張されたプロパティへアクセス出来ました。(IAMVideoProcAmpやIKsPropertySetではなく)
IVideoProcAmpはノードベースのインタフェイスとしてvidcap.hで定義されてますが、
Vista用のWindowsSDKで配布されているバージョンでないと定義自体存在しません。
USB Video ClassがXPSP2以降のサポートだったのでPlatform SDK(2003R2)を使っていたのですが、
これがまず失敗でした。
また、NTDDI_VERSIONとsdkddkver.hを使い、XPSP2以降であることを明示する必要がありました。

あと細かい話ですが、MSDNやWindowsSDKのドキュメントには、IVideoProcAmpノードの
生成時にIIDとしてIID_IVideoProcAmpを指定しろ、と書かれてますが、こいつのオブジェクトが
どこにも存在せずリンクエラーになります。_uuidof(IVideoProcAmp)で指定しないと駄目な模様です。

250 名前:247 mailto:sage [2007/03/08(木) 17:52:00 ]
解決しました!
原因は二つ目のキャプチャデバイスをRenderStream()するときのみ、間に色空間変換フィルタが
挿入され、キャプチャフィルタを削除したときに色空間変換フィルタ、VMR9間のピンが持つ
アロケータにバッファがどんどん蓄積されていくためだったようです。
デバイスを切り替える度、VMR9との接続を切るようにすると、うまく動作するようになりました。

251 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 00:51:33 ]
フィルタをビルドするためにstrmbasd.libとstrmbase.libが必要なのですが、それを作成するための
ビルドがどうしてもできません。
お持ちの方がおられましたらお譲りください。
お願いします。

アップローダ
ttp://www.rupan.net/uploader/

環境
WindowsXP SP2
Platform SDK for Windows Server 2003 SP1
Visual Studio 2005 Express Edition

252 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 02:40:17 ]
baseclasses.sln をダブルクリックして開いてビルドを実行するだけだろ。

253 名前:251 mailto:sage [2007/03/09(金) 03:08:44 ]
>>252
いえ、最近になって.slnや.dswのファイルが付属しなくなりまして、makefileがついているんです。
それで
ttp://www.shader.jp/xoops/html/modules/xfsection/article.php?articleid=17
このページと同じように進めてもcl.exeが見つからないようなことを示すエラーが出て、
それじゃあとcl.exeのあるフォルダを環境変数のPathに設定してやると今度はmspdb80.dllが
見つからないと言われて失敗します。



254 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 04:01:11 ]
さすがマイクロソフト


255 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 04:16:23 ]
俺の所の 2006 9月版には、baseclasses.slnがあるけどな。
お前の最近は2年前か?

256 名前:251 mailto:sage [2007/03/09(金) 04:29:10 ]
>>255
え!?そうなんですか!?
ttp://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
ここのPSDK-x86.exeをダウンロードしてインストールしたのですが、違うのでしょうか?
>>255さんの入手経路を教えてください。

257 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 05:18:47 ]
blogs.msdn.com/windowssdk/

258 名前:251 mailto:sage [2007/03/09(金) 07:07:13 ]
できました!!
ttp://ugd555.blog1.fc2.com/page-13.html
同じ症状を解決した方のページを見つけました。
最終的に別のフォルダから5つファイルを持ってこなければいけませんでした。
この問題に18時間費やしました・・・

259 名前:251 mailto:sage [2007/03/09(金) 09:44:34 ]
早速、いろいろなフィルタサンプルのビルドを試してみましたが、どれもPC内に存在しない
ライブラリファイルが無い、と言われどうしようもありません。
そういえば、VC2005EEでDirectShowフィルタを開発したという話を聞いたことがありません。
ちゃんとしたVCを買え、ということでFAでしょうか?
もしそうなら、観念して買いに行きます・・・

260 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 09:45:26 ]
EEどうかは関係ない気がする、2005だといろいろ不便

261 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 16:37:13 ]
いい加減最新のSDKダウンロードしろ。うざい。

262 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 16:42:53 ]
>>259
初心者スレにでも行け
DirectShowスレで語るべき内容ではないだろ

263 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 01:13:37 ]
どんな内容なら語ってもいいのですか?玄人の>>262さん。




264 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 02:25:22 ]
>>251>>263みたいな質問以外ですな

265 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 05:35:57 ]
キャプチャフィルタ→変換フィルタ→色空間変換フィルタ→VMR9
という構成の中の変換フィルタで、キャプチャフィルタからサンプルが1枚くる度に
サンプルに対し処理Aを実行→出力→表示
サンプルに対し処理Bを実行→出力→表示
というように2回の処理、出力を行いたい(フレームレートを倍化したい)のですが、
どうすればよいでしょうか?
なお、キャプチャ出力のフレームレートは上限に設定しています。
タイムスタンプをいじるだけではうまくいきませんでした。
IMemInputPin::Receiveを使うにしても、それを呼び出す頻度をどのようにすれば
合わせられるかが分からずできません。

266 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 07:16:47 ]
出力ピンのメディアタイプのレートを2倍に設定して、サンプルを1つ受け取ったら2つ出力すればいいのでは

267 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:46:39 ]
タイムスタンプは修正してやらないと駄目だろう。
仮にキャプチャフィルタが30f/secで投げてくるなら0.033...秒間隔のスタンプが設定されているだろうから
自分でつくる変換フィルタは2枚目に0.033.../2秒のタイムスタンプを足して設定してやる。
んで自分が出力ピンからDeliverするときに、自分で送りたい2枚分、下段の入力ピンReceiveを呼ぶ。
2回送信完了してから、上段にDeliverの結果を返す。

268 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 17:49:27 ]
pc11.2ch.net/test/read.cgi/tech/1168354839/
の658です。
たぶんこっちで質問したほうがいい気がしたので。

何度やっても同じところ(CopyMemory)で落ちます。
原因として思い当たる件があったらご教示願います。

269 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 18:11:41 ]
サイズチェックくらいしろ。
24bit以上のソースなら、BITMAPINFOHEADERだな。

270 名前:268 mailto:sage [2007/03/10(土) 18:21:52 ]
>>269
つまり、サイズが足りないということでしょうか?

271 名前:268 mailto:sage [2007/03/10(土) 19:24:59 ]
サンプルファイルを出力したところ、24bitであることは確認しました。
どこが悪いんでしょう?

272 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 19:32:55 ]
>>268

これか、
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), 
                sizeof(BITMAPINFOHEADER));

探すの面倒だから直リンして欲しいな。
pc11.2ch.net/test/read.cgi/tech/1168354839/658

コピー先と、コピーするサイズとか確認してみれば。

&BitmapInfo.bmiHeader が有効なメモリを指してる?
&(pVideoHeader->bmiHeader) が有効なメモリを指してる?
sizeof(BITMAPINFOHEADER) これはあっていると思うけどさ。


273 名前:268 mailto:sage [2007/03/10(土) 19:37:59 ]
&BitmapInfo.bmiHeader:1000E380
&(pVideoHeader->bmiHeader):30
むう?



274 名前:268 mailto:sage [2007/03/10(土) 19:41:33 ]
Bitmapinfoをローカルにすると
&BitmapInfo.bmiHeader:12F044
&(pVideoHeader->bmiHeader):30
&BitmapInfo.bmiHeaderが怪しいですね。

275 名前:268 mailto:sage [2007/03/10(土) 19:42:42 ]
で、怪しいのはわかったんですが対処方法がわかりませんorz






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

前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