- 1 名前:デフォルトの名無しさん [2006/11/08(水) 00:25:56 ]
- 前スレ
pc8.2ch.net/test/read.cgi/tech/1026666092/
- 367 名前:デフォルトの名無しさん [2007/03/30(金) 08:30:25 ]
- あ、切り抜きの手段としてグラバを使うのか。
グラバで取得した画像は元AVIと同じサイズなんね。なら出来…るかな? だけどやっぱり、「切り抜き拡大縮小フィルタ」作るほうが簡単なのは間違いない。
- 368 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 20:49:08 ]
- >>367 TransformFilterで切り抜けばよかばってん。
んで後ろにAviMux、FileWritterとつなげればよかよ。
- 369 名前:365 mailto:sage [2007/03/30(金) 21:25:10 ]
- サンプルグラバのコールバック=「中」です。
TransformFilterって、ベースクラスのライブラリから自分で作るフィルタですか? 最初から用意されててAddFilterで追加できるなら使ってみたいかも。
- 370 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 21:38:03 ]
- > TransformFilterって、ベースクラスのライブラリから自分で作るフィルタですか?
んだよ自分で作るんだよ Transformメソッドで好きにいじってよし んで後ろにAviMuxが繋がる時にね、ビデオの縦横サイズはオリジナルサイズじゃなくて 自分が変更するサイズを提示するったい Muxは提示されたサイズをヘッダ情報に 書いてた気がするばってん
- 371 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 22:23:31 ]
- IRenderEngine2とかで何とかなるんでしょうか。
DirectShowの編集サービスっての使えますか?
- 372 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 22:37:06 ]
- 質問に答えてくれた皆様ありがとうございました。
ちょっくらトランスフォームフィルタつくってみます。 コンプレッサの前にトランスフォームでサイズ変える処理いれてみます。 CreateDIBSectionでHBITMAPつくってストレッチビルドして試してみます。
- 373 名前:デフォルトの名無しさん [2007/03/31(土) 00:03:12 ]
- >>372
作り方は大正解◎。 コツを少々・・・ 流す映像のサイズをかえちゃうと 設計が大変になるから 「切り出し」→「拡大」でもとのBMPサイズに合わせるようにすると いいよ。 それとストレッチベルトを「CTransform::Transform」内でつかうんだけど ストレッチベルトの関数1つで全体のCPU負荷が15%ぐらい上がってしまう。 もし気になるなら、画像処理ライブラリで置き換えするとよいよ 俺ここんとこ九州男児さんと考え方が似てる。。同じような職種&年齢なんだろうな。
- 374 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 00:27:00 ]
- おいどんは昔printfをプリンテフと読んで笑われた苦い経験があるばってん
一応つっこんでおくけど、「ブリット」ですたい。 StretchBlt ストレッチブリット BitBlt ビットブリット
- 375 名前:デフォルトの名無しさん [2007/03/31(土) 00:37:23 ]
- >>374
ほへ〜。初めて知りました。 呼び方は「Blt」⇒「ベルト」と呼んでました。。 言い訳しまくると、自分組み込み系出身でwinアプリ作るの今年から初めた門で。 WinAPIを知らなさすぎる。。この機会に他の呼び方も覚えよう 今後直しますありり^^ そして、メディアタイプチェッカーも明日だらだらし終わったら修正に取り掛かるっす
- 376 名前:デフォルトの名無しさん [2007/03/31(土) 00:42:28 ]
- 関数の呼び方議論↓
rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200508/05080002.txt
- 377 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 00:46:01 ]
- >>373
なんか、映像のサイズ変えて保存したいって突然いわれたんで 変更しなきゃいかんのです。 切り出して切り出したサイズで保存なんですよ。 切り出して元の再隋拡大だったらサンプルグラバでおわったのに。 サンプルグラバでCreateDIBSectionかけてmediasampleからバッファとって データ加工して代入。ここまでは出来てOKだった・・・ ストレッチビルトして正しく終わったのに・・orz...
- 378 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 01:09:59 ]
- ぶりっとっていう呼び方なんかアレだよね。アレ。
DirectX8からPresent()になったのはホント良かったと思うよ。
- 379 名前:デフォルトの名無しさん [2007/03/31(土) 01:26:56 ]
- >>377
ごめん。。 内容的には以前自分が作った「解像度リサイズフィルタ」 これの仕組みがまんまメインになってくるんだが 教えてあげられない。。 自分で調べてくれ。
- 380 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 01:57:15 ]
- >>379
できたから問題無し。
- 381 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 02:28:31 ]
- TransformFilterを使わずにビデオソースの拡大縮小と切り出しする方法って無いのかな。
切り出しと拡大縮小ぐらい用意されてるような気がして探し回ってた時期があった。
- 382 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 16:37:52 ]
- 一口にビデオソースといってもRGBやらYUVやら色々あるけんね
拡大、縮小にも色々なアルゴリズムがあるったい 自分の好きなようにつくるのが一番よかよ どうせつくるならそのへんプロパティページで色々指定できるとうれしいね
- 383 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 22:24:58 ]
- ここもネガティブさんが沸いてるよ。
自分で調べれって話なら書く必要ないじゃん。 教えて上げられないレス増えるからネガティブさん消えてくれwwwwwwwwwww
- 384 名前:デフォルトの名無しさん [2007/03/31(土) 23:03:57 ]
- >>383
DirectShowやってる人の総人口が少ない。 そしてそれが理由なのかここのスレの回答側に立つ人も少ない。 このスレで役に立てばと思って結構回答をしているが、 何が難しいかわかるけど教えてあげられない状況だったので、 放置されるよりはいいと思って書き込みました。 (本スレ後半でageてるやつはほとんど自分) >>383さんもそんなこと書き込んでないで回答側に回ってくれ
- 385 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 00:08:34 ]
- まあ内容はともかく、少しでも盛り上がってくれるのは嬉しいわな。
その昔サンプルグラバを知らなかった自分は自前のフィルタ作っちゃったし、 話の流れで知ることもそれなりに多い・・・。かな?
- 386 名前:デフォルトの名無しさん [2007/04/01(日) 03:12:34 ]
- >>363
uuid.hではすべてのメディアタイプは乗ってない。 「MEDIASUBTYPE_I420」 が入っていなかった。
- 387 名前:C++ mailto:age [2007/04/01(日) 08:46:54 ]
- C++は今最も優れているプログラミング言語だ。C++さえあればなんでも出来る。CGI一つにしたって、今はPerlなんて使わなくても全部C++で出来る。そんなC++を使わないでどうする。
- 388 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 13:44:39 ]
- 「全て」のメディアタイプって概念をどう捉えるかだな
まずはDirectX SDKのindlude、DirectShowのBaseclasses ここのソースで定義されてるものを 押さえておけば良いんじゃないの? 極端な話、guidgen使って自分で独自のMediaType作れちゃうわけだし。
- 389 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 22:43:15 ]
- MEDIASUBTYPE_I420ってGUIDとしては存在するかもしれないけどどっかのメーカーが勝手に作っただけじゃないの?
DirectShowのオフィシャルな定義としてはMEDIASUBTYPE_IYUVじゃないのか。
- 390 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 23:22:10 ]
- そういや自分もmplayerの公開されているソースを見て
普通にMEDIASUBTYPE_I420という定義があるものと思い込み、 いざ実装してみたらものの見事に未定義だった、ということがあったなあ。 IYUVとI420は同じフォーマットのようなので、 私もMEDIASUBTYPE_IYUVを使ってますが・・・。
- 391 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 09:52:04 ]
- 拡張可能なばっかりにかえって不毛になってるのか
やれやれ
- 392 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 11:49:43 ]
- ホントにDirectShowって資料少ないのね。VfW勉強した時も思ったけど
こういう動画処理インターフェースってプログラムとして人気ないのかな?
- 393 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 13:56:56 ]
- 資料は少ないなりに充実してると思うけど・・・
漏れにはACLの方がワケワカメだよ。
- 394 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 14:27:52 ]
- 動画処理に興味をもつほど自由に弄れる動画素材を持ってる人が少ない、
という事情もあるのではないか。 後は仕事になるかどうかとか。
- 395 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 20:48:20 ]
- + 三ミヽ、⊂⊃
+ 三ミ |∧η∧ /⌒\ (,,・Д・)<ただいまんこ〜オレも便乗して質問だぞ。 + 川川 l l/つ つ━☆ トランスフォーマーとかいうのをつかって 〜( / CTransformFilter::DecideBufferSizeここでメモリを確保する所までたどり着いたぞ。 (/"U 俺も拡大縮小をやりたくて書き込みするぞ。オマンコクロスだぞ。 C言語は7年目だぞ。切実だぞ。
- 396 名前:デフォルトの名無しさん [2007/04/03(火) 22:27:40 ]
- >>395
俺は3年目だけど苦労したができたぞ。 で、何がしりたいんだぼけぇ
- 397 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 22:32:34 ]
- ・質問のただしいしかた悪いしかた
【いい例】 ぽまえら!おしえやがれぃい。 QVGAをVGAにリサイズしようと思うんだがDecideBufferSizeというめそで 115200byteしかとれねええんじゃUZEEEEEE!! これを230400byteとれるようにする方法を教えやがれ 【悪い例】 いつも大変このスレッドを読ませていただき参考にさせてもらっております。 今回拡大縮小をやりたいのですがどのようにしたらいいかわかりません。 C++、MFCはできます。 また自分は過去XXXということをやっておりました。 大変恐縮ですがなにとぞご指導をよろしくお願いいたします
- 398 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 22:37:54 ]
- まちがえた〜
×115200 ○230400 ×230400 ○460800 用は質問の観点を絞り込んでくるかどうかの差だからな
- 399 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 23:59:22 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<>>396 ポンドルウォーリアを特殊召喚する方法がしりたいぞ。 ヽ |フ ナニがしたいのか忘れたぞ! /_ _| AVIを半分の解像度にして保存したいんだぞ!これが目的だぞ。 逆もあるぞ。オパンツ丸見え! >>397 うんこちんこまんこ?キョカカカ!あばーあばばー! 参考にさせてもらったぞ。面倒だから、ゴゾブログで質問に答えてくれればそれでいいぞ。 オマンコクロッサー!
- 400 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 00:59:12 ]
- ・・・>>397で極端に書いたのに意味を理解しとらんのでヌルーする
- 401 名前:デフォルトの名無しさん [2007/04/04(水) 01:28:29 ]
- メディアタイプチェックフィルタ
作ったぞ 実は裏で機能をいろいろ盛り込んでみたが、 普通の使い方だけしてくれ。 zetubou.mine.nu/itoshiki/upload.cgi っ【 [zetubou6474.bin] メディアチェックフィルタ 96 application/octet-stream 2007年04/04(水)01:25 これをリネーム ⇒0Mediachk.ax それをregsvr32で登録
- 402 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 01:52:35 ]
- ここはム板だ
- 403 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 08:59:19 ]
- ゴゾブログのプロフ欄の写真の子カワイイ。
写真と引き換えならオニーサンがAVI半分にするフィルタ作ろう。(ただしソースはやれないがな)
- 404 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 14:50:04 ]
- www.free-codecs.net/Moonlight_Scalar_DirectShow_Filter_download.htm
- 405 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 16:48:36 ]
- >>404
このムーンライトフィルタってさ、カメラがI420の時は接続すらしてくれないんだね。 解像度もメディアタイプも変更してくれるいいフィルタだと思ったんだけど残念
- 406 名前:359 mailto:sage [2007/04/04(水) 17:35:35 ]
- >>401(>>360の人?)
ありがとう、ダウンロードしてみました。 個人的には結構重宝しそうな感じです。
- 407 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:23:20 ]
- >>360=>>401
です。 ちゃんと動きましたか? バグを見つけたら速やかに報告よろ。 時間見つけ次第ちゃんとウェブページに反映しとくです。 感謝されるのに生き甲斐を感じた。ありり
- 408 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:27:31 ]
- CBaseVideoRendererでフィルタを作っていて、一時停止中に画面の再描画を
行うためGetCurrentSample()でサンプルを得ています。 サンプルの取得は成功しているのですが、このあとに再生するとDoRenderSample()が 呼ばれなくなって固まってしまいます。 どうしてでしょうか?
- 409 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 20:04:25 ]
- >>408
Releaseし忘れっぽい
- 410 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:07:23 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<ただいまんこ〜拡大縮小できたぞ。BokkingFilterの完成だぞ。 ヽ |フ ビデオのサイズが変わらなかったのはフィルタ接続後にサイズ変えてたからだぞ。 /_ _| CheckTransformでサイズを変更したぞ。 変更したサイズからRGB24で必要なバッファサイズを計算して保存だぞ。 ストレエッチDIBitmapだぞ。それに対してソースからストレッチDIBitsして 完成したぞ。 そして完成した後に次の問題が出たぞ。 時間指定して3分の動画で1分目から2分目を抽出したいんだが ControlStreamにS_OK帰ってきてもダメポだぞ。 AVI再圧縮で時間指定して抜き出すテクを知ってたら教えて欲しいぞ。オマンコクロスだぞ。切実だぞ。
- 411 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:12:04 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<あと、AVI MuxフィルタをキャプチャグラバからFindInterフェラして ヽ |フ IAMStreamControlを生み出してStartAtとStopAtする方法を作ったんだが /_ _| ム圧縮AVIなら何とか成功してWMVとかコーデック使うと画像が表示されんぞ。 あと、保存してない間も無駄に待たされて酷い目にあったぞ。 誰かオレがナニをすべきか教えて欲しいぞ。
- 412 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:36:48 ]
- ControlStream(&PIN_CATEGORY_CAPTURE,ぬるぽ,ぬるぽ,開始時間,終了時間、0,0);
⊂⊃ ★ ∧η∧ \_(,,・Д・)<キャプチャビルダのコントロールストリームはこんな具合になってるぞ。 ヽ |フ オマンコクロスだぞ。ソースを持って変えれないので具体的に説明できんぞ。 /_ _|
- 413 名前:408 mailto:sage [2007/04/04(水) 22:46:10 ]
- ありがとうございます。
まさにそれでした。SDKのヘルプに書いてありましたね
- 414 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:23:04 ]
- >>410
素直にこれ使えば? www.microsoft.com/japan/msdn/directx/techart/cplusvbappdevs.aspx www.microsoft.com/japan/msdn/directx/techart/wm_des.aspx
- 415 名前:414 mailto:sage [2007/04/04(水) 23:23:49 ]
- 貼り忘れた
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdx8_c/ds/des/Oview/whatisDES.asp
- 416 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:35:12 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<>>415 それも考えたんだぞ。大人の都合ってヤツでダメなんだぞ。 ヽ |フ くやしいぞ。オマンコクロスファイヤーハリケーンだぞ。 /_ _| 明日、ためしに作ってみるぞ。
- 417 名前:デフォルトの名無しさん [2007/04/04(水) 23:45:11 ]
- いいから↑はほっといてやれ。
- 418 名前:359 mailto:sage [2007/04/04(水) 23:57:28 ]
- >>407
今のところ問題なさそうですよ。 ただ、スレの流れを見ると私以外で使ってみた人いないのかな?w もう少し使ってみて気がついたことがあったら報告しますね。
- 419 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 00:03:51 ]
- >>418
>私以外使ってる人いない… (´・ω・`)ショボーン
- 420 名前:デフォルトの名無しさん [2007/04/05(木) 21:34:17 ]
- おまえら便利なフィルタの一覧サイト作ろうぜ!
あと、××の製品かうと着いてくるフィルタは…とか語ろう
- 421 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:53:29 ]
- つpc11.2ch.net/test/read.cgi/avi/1030190329/
・・・とはいえ、思いっきり過疎ってるスレだし>>419のニーズには合わんかな。 ところで質問です。 AddSourceFilterで追加したファイルソースの 出力ピンのメディアタイプを指定する方法はないでしょうか? あるファイルを指定したとき、ただRender()しただけでは期待しているフィルタに 繋がらない(ファイルソースのメディアタイプがGUID_NULLになっている)ので 強制的に指定してみたいのですが・・・。
- 422 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 12:41:37 ]
- >>421=>>359さん??
質問は>>419に聞いてるのかな? だったら応えます。 上流フィルタがカメラとかの入力デバイスの場合は「フィルタのピンプロパティ」から出力タイプを変更できるものがほとんどです。 仮に「動画」などのファイルであれば変換フィルタを噛ます事で変更は出来ますが新たに付けてやることは出来ません。 新規にフィルタを作成すればメディアタイプを付加しる物を作れるよ。 他の方法はわかりません
- 423 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 13:13:09 ]
- >>422
> >>421=>>359さん?? うわー、なんで分かるの?w > 新規にフィルタを作成すればメディアタイプを付加しる物を作れるよ。 > 他の方法はわかりません やっぱりそれしかなさそうですね。 AsyncRdrサンプル辺りをベースに1つ作ってみます。
- 424 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 01:07:30 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<無圧縮タイプのAVIなら時間切り出しできたぞ。 ヽ |フ ただ、無駄に時間がかかるぞ。切り出すまでフィルタにデータが流れて処理してるんだぞ。 /_ _| ポンドルウォーリア特殊召喚だぞ!ゴルァ!
- 425 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 10:32:36 ]
- >レンダラは知らないけど、画面の上側にプレーヤを持っていくと少し(体感しないけど)
>速くなるらしい。なんかPresent(?)の戻りが早くなるとか言ってた。 これ本当?
- 426 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 11:42:57 ]
- >>425
画面描写しないぶんタイムスタンプに忠実になるだけかと。。 >>424の話とは全然違う話
- 427 名前:デフォルトの名無しさん [2007/04/08(日) 17:03:02 ]
- Presentの戻りって何?
プリロールかな?としても意味通じないし… 予測ツカナス
- 428 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 17:45:38 ]
- IDirect3DDevice9::Present()の話だな。
- 429 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 21:41:47 ]
- 初心者です。SDKサンプルで分からない点があるのですが、お教え頂けないでしょうか。
プログラム動作としては、3つのmp3ファイルをタイマーで順繰りに再生するだけです。※1 この中でソースフィルタを変更してグラフを再構成する部分で分からない点があります。 流れ 1.新しいソースフィルタをグラフに追加する。 2.古いソースフィルタをグラフから削除する。 3.新しいソースフィルタの出力ピンからRenderする。 2の部分の詳細は以下のようになっています。 A.グラフ内のフィルタを列挙する。 B.列挙された全フィルタについて a.一旦グラフから削除する b.古いソースフィルタでなければグラフに追加する 疑問点 b.の部分がある意味がわかりません。自分としては、グラフ内の全フィルタを削除して、新しい ソースフィルタを追加して、Renderすれば簡単に思えるんですが... どうかよろしくお願いします。 ※1 ソースはSDK_Path\Samples\C++\DirectShow\Players\BGMusicです。
- 430 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 22:16:14 ]
- SwapSourceFilterのメソッドのこと?
- 431 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 23:29:52 ]
- >>429
Render は重いから。
- 432 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 00:46:05 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<>>429 サウンドってのは、レンドルァすると全部のcodecを試すんだぞ。 ヽ |フ だから、全て消して再構築すると連続再生とかできんぞ。 /_ _| アイマスの魔法をかけて!から、とかちつくちての連続技の間に途切れるって事だぞ。
- 433 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 01:13:25 ]
- >>432
やべぇ見直した。。
- 434 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 01:55:46 ]
- ありがとうございます。
なるほど、それで以前使ったフィルタは残してたんですねφ ところでその時、つながっていないフィルタがグラフ上に散在している状態ですよね。 その状態でRenderしたら、全Codecを試さず、散在しているフィルタを繋げてくれるんですか? それともRenderを使わず、ピンを繋ぐ方法が別にあるのでしょうか? この板のレベルに達するまで勉強して、出直してきます。(時間かかりそう...)
- 435 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 07:21:49 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<>>434 朝勃ち中だが答えるぞ。 ヽ |フ レンダーすっと、フィルタが追加されている物から試すんだぞ。 /_ _| そのため、レンダーする前にvmr9のフィルタとかを入れておくとただのビデオレンダーじゃなくなったりするぞ。 だから、先に自分で作ったフィルタを入れておくと正しく繋がったりするぞ。 もちろん、Renderを使わずにグラフビルダのほうでConnectすることができるぞ。 IPinってのをフィルタから抜き出して接続できるみたいなんだぞ。 使った事無いからうまんちんまんだぞ。
- 436 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 07:39:07 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<なんか、間違ってるかもしれんが許してほしいマンコ!んじゃ為替予想書いてくるぞ。 ヽ |フ /_ _|
- 437 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 12:02:08 ]
- すみません、質問いいですか?
今、DirectShowでUSBカメラからサンプルグラバでBMPをキャプチャするプログラムを作っています。 コールバックを使用してキャプチャをしようとしているのですが、 SetOneShotを使って1フレームだけキャプチャすることは出来ないのでしょうか? ためしにSetOneShot(TRUE)としてみても、コールバックされ続けてしまいます。
- 438 名前:デフォルトの名無しさん [2007/04/10(火) 17:56:39 ]
- 出力ピンがオーディオとビデオの2つある、Splitterフィルタを作成しています。
フィルタのGetMediaTypeでは、ピンによって2通りの設定が必要と思っています。 (オーディオの方の出力ピンからGetMediaTypeが呼ばれた場合はオーディオの値をセット、 ビデオの出力ピンからGetMediaTypeが呼ばれた場合はビデオの値をセットというように。) しかし、GetMediaTypeでは、現在どちらの出力ピンから呼ばれているのか判別できないのですが、 どうしたら良いでしょうか。 出力ピンのクラスは同じものを使っているのですが、オーディオ用のピンクラス、ビデオ用の ピンクラスと別に作成しなければならないのでしょうか?
- 439 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 19:30:13 ]
- >>438
自分がどっちのピンかを区別して処理を変えればいいじゃん。
- 440 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 21:10:34 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<>>437 ただいまんこー!ドピュンコしたあとに、コールバックを外せばOKだぞ。 ヽ |フ コールバックをセットしたままだと永遠にデータが流れるぞ。 /_ _| オレだったらSampleCBのあるクラスに BOOL m_Ochinpoいれて データを流したくない時はfalseいれて SampleCBのなかでreturn S_OKしちゃうぞ。 オマンコクロッサー!
- 441 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 21:13:06 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<>>438 IPin淫乱フェラにあるQueryPinInfoで解決できる気もするぞ。 ヽ |フ 俺も調べないと分らんぞ。スマソだぞ。力になれんぞ。 /_ _|
- 442 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 22:06:54 ]
- VBプログラマにVisual C++を教えるスレ★ Part25
- 443 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:10:36 ]
- >>441タソ
フィルタ内部の話だからQueryはちがうとおもうぞ。 自分も>>439の意見に賛成です。 @純粋仮想メソッドGetPinを実装してピン番号を取得 AGetMediaTypeにてまず@を呼び出す。 Bピン番号が「1」ならビデオだから・・・メディアタイプ「Video」を要求 Cピン番号が「2」ならAudioだから・・・・メディアタイプ「PCMAudio」を要求 iPositionにて要求するものをそれぞれ数個書いてやればいいかな。。
- 444 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:49:17 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<>>443 オレはトランスフォーマーフィルタで1対1の戦いしかやったこと無かったぞ。 ヽ |フ これでピンが複数あるフィルタも手だせそうだぞ。 /_ _|
- 445 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:50:19 ]
- >>444
コンボイの謎を2週くらいクリアしとけ
- 446 名前:438 [2007/04/11(水) 14:38:35 ]
- 返事ありがとうございます。
>>439 僕はどっちのピンか区別できなくてコマッてます… >>443 GetPinはピン番号を指定して、その番号のピンを取得するのだと思うのですが。 それだとピンの区別はできなくないですか? 実際には、フィルタはm_pOutputAudioとm_pOutputVideoの二つの出力ピンを持ってます。GetMediaTypeの中で、CBasePin::Name()でピンIDを取得して、判断しようかと思いましたが、結局ピンの指定によって取得値が変わってしまいます。 m_pOutputAudio->Name() とすればAudioが返るし、 m_pOutputVideo->Name() とすればVideoが返るので、 結局どちらのピンかわかりません。(両方が存在するので当たり前ですが) ※m_pOutputAudio,m_pOutputVideoはフィルタ作成時に作られます。 どうしたらよいですかね…
- 447 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 14:59:29 ]
- >>446
if (pOutputAudio == this) { //オーディオピンの処理 } else { //それ以外 }
- 448 名前:448 [2007/04/11(水) 17:09:38 ]
- >>447
参考にします。 フィルタのGetMediaTypeでピンを判別するから良くなかったみたいです。 フィルタのGetMediaTypeは、出力ピンのGetMediaTypeからコールされるので、 出力ピンのGetMediaTypeでどっちのピンか判断し、それを記憶しておくことにしました。 CSplitterOutputPin::GetMediaType() { if(0==lstrcmpW(this->m_pName, L"Audio")){ //フィルタのメンバ変数にオーディオだと記憶させる。 m_pSplitterFilter->m_bOutputPinAudio=true; } else{ //フィルタのメンバ変数にビデオだと記憶させる。 m_pSplitterFilter->m_bOutputPinAudio=false; } return m_pSplitterFilter->GetMediaType(); } ↑のようにして、フィルタのGetMediaTypeでは、m_bOutputPinAudioを見て、 オーディオ、ビデオの設定をするようにしました。 一応接続はこれで上手くいきました。何かとても簡単な質問をしてしまった気がしますが…
- 449 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 22:36:27 ]
- 1500円の2割引はいくら?
時速80km/hで走る車が1時間何キロ走る? ・・・ポカーン
- 450 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 00:29:28 ]
- ⊂⊃
★ ∧η∧ \_(,,・Д・)<1500円の2割引きは計算不能だぞ。俺の脳が再起不能(リタイア)したぞ。 ヽ |フ 時速80kmでオレは走れないので1時間も車を見張れないぞ! /_ _| 果てしなく遠くが答えだぞ。
- 451 名前:デフォルトの名無しさん [2007/04/19(木) 06:23:08 ]
- 都合でDirectshowを使い始めることになりました初心者です。
Webカメラで取った映像を扱いたいので、SDKにあるAMCapを参考に機能を探しているのですが キャプチャした動画をaviではなくmpeg1等で圧縮して吐き出したいのですが フィルタを何処の関数で挟めばよいのでしょう。 あと、映像のガンマや彩度等がプロパティで調整できてしまいますが、これはなんのフィルタを使用しているのでしょうか? 初心者質問すいません。
- 452 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 07:35:23 ]
- >>451
プロパティはソース見りゃわかるんじゃない。 以下推測 色調節のフィルタが存在するのではなくて キャプチャデバイスやそのピンのプロパティじゃないのか。 Webカメラのデバイスドライバが変わればその機能も変わる。 MPEG-1エンコーダって標準装備か? 俺持ってない。存在しないフィルターは使えんよな。
- 453 名前:デフォルトの名無しさん [2007/04/19(木) 07:54:41 ]
- 沖縄県の方へ(命に関わる注意事項です)
沖縄県での選挙ですが、どうか民主党だけは避けてください。県民の生命に関わる可能性があります。 民主党の最大の公約は一国二制度(※)ですが、一度「一国二制度 沖縄」等で検索をお願いします。 この際、民主党のHPで調べても良いです。以下の注釈↓と矛盾することは書いてないはずですから… ※一国二制度 簡単に言えば沖縄を中国と日本の共有物にし、そこに3000万人の中国人を入植させます。 (つまり沖縄人口の 96% を中国人にして、実質、沖縄を中国人の居住地とします。) さらに「自主」の名の下、沖縄で有事が起きても自衛隊は干渉できません。 3000万人の中国人が、少数派となった130万人の日本人に何をしても、です。 そして中国人の反日感情の強さは、ほとんどの日本人の理解を超えるものです。 今回の選挙で民主党が勝った場合、「自主」「発展」を連呼しつつ段階的に進めていくことになります。 自主と言っても、自主を認めるのが「住人の96%が中国人となった」後だということに気をつけてください。 発展と言っても、新沖縄の少数派となった「少数民族日本人」の発展ではないことに気をつけてください。
- 454 名前:451 [2007/04/19(木) 14:09:38 ]
- >>452
えっと、回答ありがとうございます。 トライ&エラーしながら死んでおります。 >色調節のフィルタが存在するのではなくて >キャプチャデバイスやそのピンのプロパティじゃないのか。 ...確かに、自宅で違うWebカメラで試したときは、設定ダイアログの内容がぜんぜん違っていましたね。 >MPEG-1エンコーダって標準装備か? もう一度探しなおしたデコーダーだけで、エンコーダーはありませんでした。死んできます。 aviだと保存するにも重いから、実用的なサイズに直して自動保存しておいてって言われたんですが、asfかモーションJPEGかDVか、しか使えないのかな? まぁ、いくらか頑張ってみます。
- 455 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 21:04:09 ]
- TMPEGEnc買っちゃいなYO!
- 456 名前:デフォルトの名無しさん [2007/04/19(木) 23:22:24 ]
- >>455
GRAPHEDTがあれば買わなくてもいいな俺は。 >>454 MPEG4のコーディック2なら標準装備であるよ。 GraphEdtで↓な構成を書いてみるよろし 「WebCam」→「MPG4Codec2」→「AUXMix」→「FileWriter」 んで「WebCam」のPinプロパティを開いてみる 自分の思った通りに出来る場合 ⇒そのままコーディング 自分の思った通り出来ない場合 ⇒出来る方法を模索 をやっといた方がはやい
- 457 名前:454 [2007/04/20(金) 10:39:55 ]
- どうもです、回答ありがとうございます。
一応あの後がんばった結果、DV形式とモーションjpegでは圧縮に成功しました 「うーん、なんかサイズ大きいね。asfで圧縮できない?」 といわれたわけで、メディアフォーマットSDKを読んで泣いています。 小さければ文句言われないのでmpeg4の方が楽かもしれません。 なんか進歩日記みたいになってすいませんが...。
- 458 名前:デフォルトの名無しさん [2007/04/20(金) 20:55:50 ]
- >>457
御礼を言うのは大変素晴らしいが、どこまで書いたことを理解できたのか 解るように(回答が的外れでなかったか知りたい) 内容についても一言触れて欲しかったな と、会社では立場が最下層回答者の愚痴。
- 459 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:39:00 ]
- 最後志貴の方、速度で無い中、対戦お疲れ様でした。
飯食うので、この辺で。
- 460 名前:デフォルトの名無しさん [2007/04/20(金) 22:14:15 ]
- あ、はい。もうなんか恥ずかしいですがこの際だから正直に言います。
>GraphEdtで↓な構成を書いてみるよろし >「WebCam」→「MPG4Codec2」→「AUXMix」→「FileWriter」 ここらへんから実は分かっていません。 GraphEdtは分かるのですが、圧縮用のcodecをどう呼び出せばいいのか… directshow標準のDVだと CoCreateInstance( CLSID_DVVideoEnc, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pDvFilter); と書いたら作れたんだけど、標準外のものはクラスIDを何処で知れば良いんだと悩んでおりました。 そこで摘んだのでasfでの圧縮を模索したのですが、なかなか動くコードにならないで今日が過ぎていきました
- 461 名前:デフォルトの名無しさん [2007/04/20(金) 22:51:49 ]
- >>460
ふむ。成る程。 GraphEdtでのフィルタ登録の操作の仕方なのかそれをコーティングするときの方法なのかわからんです。 Clsid(クラスIDの事ね)がわからないと言ってるから↓↓がわからんのでは?? >自分の思った通りに出来る場合 ⇒そのままコーディング ClsidはGraphedtでフィルタ登録する時に表示されてるよ。 それとも「Graphedt.exe」のアプリを「フィルタグラフ」(コーティング上の概念)と勘違いしてるのかなぁ…
- 462 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 23:07:45 ]
- asfはWM ASF ライターを登録して入力ピンにつないでやるだけだから
圧縮コーデックの列挙が必要なavi再圧縮に比べたらよっぽど簡単だよ。
- 463 名前:460 [2007/04/21(土) 06:14:41 ]
- これは直にソース出してみた方が良さそうなので。
以下asfの書き出しの部分です。(短くするためにエラー処理省略です IBaseFilter *pAsfFilter; hr=CoCreateInstance(CLSID_WMAsfWriter, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pAsfFilter); hr = gcap.pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"cccc.asf", &pAsfFilter, &gcap.pSink); hr=gcap.pFg->AddFilter( pAsfFilter, L"asf filter" ); pAsfFilter->Release(); hr = gcap.pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, gcap.pVCap, NULL, pAsfFilter ); このコードだとファイルの書き出しはしてくれるんだけど、何故か無圧縮aviが出力される。何ででしょうね… > ClsidはGraphedtでフィルタ登録する時に表示されてるよ。 Gapheditでフィルタ選択したときに出るDisplayNameの、 {ランダムな文字} の間の部分って事ですね。 多分理解しました。
- 464 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 12:37:04 ]
- MEDIASUBTYPE_Aviだからじゃねーの?
- 465 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 13:49:11 ]
- >>463
ちゃんとMSDNでリファレンス見てから書いたほうがいいよ。 CoCreateInstanceでCLSID_WMAsfWriter作らなくても SetOutputFileNameが作ってpAsfFilterに入れてくれる。 msdn2.microsoft.com/en-us/library/ms779904.aspx msdn2.microsoft.com/en-us/library/ms784861.aspx
- 466 名前:460 [2007/04/23(月) 04:44:00 ]
- お返事が送れて申し訳有りません。
一応頂いたアドバイスからちまちまと頑張っております。 >>465 hr=CoCreateInstance(CLSID_WMAsfWriter, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pAsfFilter); hr = gcap.pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"cccc.asf", &pAsfFilter, &gcap.pSink); 上2行からCoCreateInstance関数でのインターフェースの取得をやめて、メディアサブタイプをMEDIASUBTYPE_Asfに改めたのですが、何故かエラー。 どこかまだ問題があるのかも知れません。 というわけで、他のcodecに逃げる方に切り替えて、Graphedit.exeを弄りながらクラスIDを探したのですが書いたグラフをGRFファイルで書き出して、無理矢理テキストエディタで開いたら、それらしいクラスIDがあったので キャプチャカード -> ffdshow -> File Writer とフィルタを繋いだ所、無事に書き出しに成功しました。 サイズ的には納得してもらえそうな所にまぁ、落ち着きました。 フォーマットがXViDですが、あはは…。 > >>454 > MPEG4のコーディック2なら標準装備であるよ。 そこなのですが ・MPG4Codec2 ・AUXMix の2つのフィルタがちょっと見たりませんので上の様に逃げています(汗 探し方が足りないのかな? とりあえず、相手に見せてみます。ありがとうございました。 まだ格闘しなければいけないところがあるので、ほとほと困ったらまた来るかもしれません。
- 467 名前:デフォルトの名無しさん [2007/04/25(水) 16:01:46 ]
- 以前に出力ピンが2つある場合の出力ピンの区別のことで質問させてもらったのですが、
スプリッタの2つの出力ピンからデータを出力するようにしました。 が、再生すると何も表示されません(音も映像も)。 一方の出力ピンだけ接続し、もう一方の出力ピンは未接続の状態にすると再生はできます。 しかし、オーディオ、ビデオ両方を同時に再生しようとすると、どちらも 再生されなくなります。 原因は何が考えられるでしょうか。
|

|