1 :
デフォルトの名無しさん :
02/07/15 02:01 DirectShowプログラマーのみなさん。 メソッドのデッドロックとか、わけわからん現象多くないすか。 このスレに怒りやテクをぶつけましょう。
どっちの料理Show
Damn it. sucks.
DirectShowって何できるんだっけ。
こんな時間にDirectShowと戦いたくない
6 :
デフォルトの名無しさん :02/07/15 02:06
>4 DirectXの1コンポーネントでVideoやAudioのストリームを操作する APIっす。
∧_∧
(´Д` )
>>6 お手数かけますた
/ y/ ヽ
Σ(m)二フ ⊂[_ノ
(ノノノ | | | l )
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
DirectXスレじゃ駄目だったのかい?
9 :
デフォルトの名無しさん :02/07/15 02:09
DirectXスレ=Direct3Dスレ
でも今あのスレ沈んじゃってるから、乗っ取ればよかったのに。
何できる、か。勘違いす魔素。
実際現場では DirectShow は活躍してるの?
14 :
デフォルトの名無しさん :02/07/15 02:14
このAPIやたらデッドロックしてユーザに制御かえさん。 なんとかシテクレ。
15 :
デフォルトの名無しさん :02/07/15 02:16
>>13 WinでTVアプリ書いてるヤツはだいたいハマっとる
MP3もサポートしてるんだ。
VC++.NETでヘッダが足りんぞ。糞が。
18 :
デフォルトの名無しさん :02/07/15 02:30
MediaPlayerなんかもDirectShow使ってるみたい。 オーディオプレーヤソフトやビデオキャプチャ系も使ってる。
GetPositionsでもらった位置にSetPositions()しても、同じところから再生でけんぞ、ちくさう…
SetVolumeの仕様、どうにかしろ 結局Mixer開けないといけないし
21 :
デフォルトの名無しさん :02/07/19 14:40
.NETになると何か変わることあるの?
23 :
デフォルトの名無しさん :02/08/19 23:55
おしえてください ビデオキャプチャーでカメラの解像度の選択は どうすればよいのでしょうか? 320X240を選びたいんですが?
24 :
デフォルトの名無しさん :02/09/02 00:33
IEEE1394+DVカメラを使用しています. GetConnectedMediaTypeで取得した値には,いつもきまった解像度の値しか 入っていないが,これをプログラム中で変更するにはどうしたらよいのでしょうか. (例えば,720x480と360x240の切り替えなどをしたいです).
DVじゃ720x480固定だよ
26 :
デフォルトの名無しさん :02/09/02 04:48
>>25 そう思っていたのですが,pGrab->GetConnectedMediaType(&amt);とかして
とれるビットマップのヘッダーを見ると360x240になっているのです.
んで,なんで720x480じゃないのだろうかと思ったのです.
27 :
デフォルトの名無しさん :02/09/10 02:08
>>26 graphの中にIIPDVDecインターフェイスを持っているフィルターがあるはず
だから、そいつをなんとかとりだせば(EnumFiltersとか)、あとは
put_IPDisplayを適当なDVDECODERRESOLUTION_*で呼べばOK.
28 :
デフォルトの名無しさん :02/09/10 08:27
グラフエディットではどうやっても繋げないフィルタってあるじゃない? 「H.261Codec」とか。あれ、どうやったら使えるの?
ビデオのサンプルグラバを用いてスクリーンショットを撮ろうとしているのですが、 Mpeg2ストリームは、Demuxer-Decoder-オーバーレイミキサ-レンダラとなんだか 変なYVフォーマットでつながっています。 サンプルグラバはRGB24で書いているので、同じビデオなのにそこに割り込ませてもらえません。 これはどう解決すればよいのでしょうか?
30 :
デフォルトの名無しさん :02/09/27 02:50
age
サンプルのGalgleとか、Win9xだとDllRegisterに失敗するのですが、 これは未対応ということでしょうか? dx8.1がインストールされていることは確認しています。
32 :
デフォルトの名無しさん :02/10/22 16:16
複数の動画ストリームを1本にまとめるフィルタない? 音声+動画をまとめるのならあるけどさ。
33 :
デフォルトの名無しさん :02/10/25 12:22
>>32 ストリームをまとめるフィルタは「〜マルチプレクサ」とかいう名前がついてるのが多いので
ヘルプをじっくり探してみてください。
ただ・・・動画をまとめるフィルタなんて無いと思いますよ。
どう纏めたいのかわからないし。
DMO Audio Effectsというフィルタカテゴリに、コーラスやリバーブなどのフィルタが標準で入っていますが、
http://www.microsoft.com/japan/developer/library/jpdx8_c/ds/appdev/howto_enum.htm ここの下にあるフィルタマッパを利用して列挙してもそれらのフィルタがでてきてくれません。
たとえば、
GUID arrayInTypes[2];
arrayInTypes[0] = MEDIATYPE_Video;
arrayInTypes[1] = GUID_NULL;
hr = pMapper->EnumMatchingFilters(
&pEnum,
0, // 予約済み
FALSE, // 完全一致を使用?
MERIT_DO_NOT_USE+1, // 最小のメリット
TRUE, // 1 つ以上の入力ピン?
1, // 入力のメジャー タイプ/サブタイプの対の数
arrayInTypes, // 入力のメジャー タイプ/サブタイプの対の配列
NULL, // 入力メディア
NULL, // 入力ピンのカテゴリ
FALSE, // レンダラでなければならないか?
TRUE, // 1 つ以上の出力ピン?
0, // 出力のメジャー タイプ/サブタイプの対の数
NULL, // 出力のメジャー タイプ/サブタイプの対の配列
NULL, // 出力メディア
NULL); // 出力ピンのカテゴリ
こんな感じで列挙しているのですが、だめみたいです。解決法はないでしょうか?
>>34 >DMO Audio Effectsというフィルタカテゴリに、
>arrayInTypes[0] = MEDIATYPE_Video;
何かおかしいと思わない?
うあーごめんなさい。ちなみに、MEDIATYPE_Audioにしてもだめでした。 なんとDMOEnumというのが別で用意されていて、そちらで列挙しなさいと いうことのようです。 ・・・統一的に扱えなくてなんかすごくイヤですけど。
37 :
デフォルトの名無しさん :02/11/04 23:55
DirectSound Audio Renderer のを継承したいのですが何とかなら無いでしょうか?
age
漏れもDirectShowを使いたいのですが、 どこかに良いサンプルや説明はありますか?
SDKに。
SDKは、VC++のならあるね。 VBかC#のはないかなぁ
42 :
デフォルトの名無しさん :02/11/09 23:44
はっきり言って、使い物にならん。 バグだらけ。MSにレポートしても「直る予定はありません」アフォかってーの! 実装が足りていない所も多いし、オーバヘッドも大きい。サンプルもグラフビルダもエラー&リーク起きまくり。
44 :
デフォルトの名無しさん :02/11/14 05:22
DirectShow使えば簡単にMPEGエンコーダとか作れるものなの?
codecあればな。 ふぬああ位なら誰でも作れるんじゃない?
使い物にならないと言われつつも、大抵のソフトが利用してるよね。
47 :
デフォルトの名無しさん :02/11/17 08:28
-―- | 〃 ヽ .| i ノノノ))) )) | Direct Showが好きなんですか? . i i ( 'l_] l]〈リノ .< ヽヽ > /> \_____ Y/ヽ!ェl〉 /ヽ/ヽ !! l卯 l / // / i ll8| ! / // / . l l「| l , ´-‐ ‐- ヽ /!_」l|_j、 { l ,, } ぅん . / /゙´l"ヽ > ゝ. ‐ ノ 'ーr‐ r r ´ l ! . l l. | | | . | ! | l. | -―- 〃 ヽ i ノノノ))) )) / ̄ ̄ ̄ ̄ ̄ . i i ( 'l_] l]〈リノ < ふぬああのソースがお手本ですか? ヽヽ > n/> \_____ Y/ヽ!ェl〉 /ヽ/ヽ !! l卯 l / // / i ll8| ! / // / . l l「| l , ´-‐ ‐- ヽ /!_」l|_j、 { l U } …… . / /゙´l"ヽ > ゝ. っ ノ 'ーr‐ r r ´ ⊂ニl ! . l l. | | | . | ! | l. |
48 :
デフォルトの名無しさん :02/11/17 08:58
>>46 使ってねーよ。なにに使われてるってんだ?
最近のプレイヤーはたいがいDirectShowだろ。
51 :
デフォルトの名無しさん :02/11/18 02:17
ActiveMovieって最近聞かないなぁ…。
>>51 統合されたんじゃないの?Video for Windowsとかも。
53 :
デフォルトの名無しさん :02/11/18 21:14
ActiveMovieってもうAVI2になってたっけ?
そりゃそうだ。ActiveMovie2の次がDirectShow5だもん。
知ってて言ってるんでしょ?
VFWとは「統合」じゃないでしょう。
>>48 いやー。そこらのTVチューナーカードにくっついてるしょぼい
アプリとかはそうじゃないのかなあ。
しょぼくなくても使ってる例はあるよ。 ただ堅牢なアプリほど自前でやってるみたいだけど。
56 :
デフォルトの名無しさん :02/11/20 02:02
>>55 …DirectShow使わずに自前でAVI2フォーマットのファイルを直書きって言ってる?
58 :
デフォルトの名無しさん :02/11/21 23:56
堅牢なAPはそんな無茶をやってるのか…。
59 :
デフォルトの名無しさん :02/11/22 00:02
>>58 技術があればDirectShowのしょぼい機能に我慢する必要はないのでね。
まっそんなことやっているところはほとんど無いけどね。
なんでDirectShowをAVIファイルの読み書きの機能に限定して話してるんだ?
>>59 技術なんか必要ないけどね
必要なのは労働力だけだ
63 :
デフォルトの名無しさん :02/11/23 01:43
59はCOMが未だに判らないに一票。
DirectShowに限らず、DirectXコンポーネントは環境依存の問題が多いから それを嫌って自前で実装、というのは割とある話。 AVI入出力程度はスクラッチだろうと誰でも書けるし。
aviの入出力のためだけにDirectShowを利用する奴なんて居ない aviの入出力だけですべてが片づく事の方が希
66 :
デフォルトの名無しさん :02/11/23 23:37
AVI2.0の方は難しそうだな>自前
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ Λ_Λ | 君さぁ こんなスレッド立てるから | ( ´∀`)< 厨房って言われちゃうんだよ | ( ΛΛ つ >―――――――――――――――――――‐< ( ゚Д゚) < おまえのことを必要としてる奴なんて | /つつ | いないんだからさっさと回線切って首吊れ | \____________________/ (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (∩∩) (∩∩) (∩∩) (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (∩∩) (∩∩) (∩∩) (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (-_-) ハヤクシンデネ… (∩∩) (∩∩) (∩∩)
IP記録実験
http://qb.2ch.net/test/read.cgi/accuse/1042013605/ 1 名前:ひろゆき ◆3SHRUNYAXA @どうやら管理人 ★ 投稿日:03/01/08 17:13 ID:???
そんなわけで、qbサーバでIPの記録実験をはじめましたー。
27 名前:心得をよく読みましょう 投稿日:03/01/08 17:20 ID:yL/kYdMc
SETTING.TXT管轄でないということは全鯖導入を視野に、か?
38 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:22 ID:rLfxQ17l
>>27 鋭いです。
73 名前:ひろゆき ◆3SHRUNYAXA 投稿日:03/01/08 17:27 ID:rLfxQ17l
>ところで、IPが抜かれて何か今までと変わることってあるのでしょうか?
・今までより、サーバが重くなる。
・裁判所や警察からの照会があった場合にはIPを提出することがある。
ひろゆきは架空の人物ですよ。
一番いらない板:ここ
tes
ここはひどいインターネットですね
76 :
デフォルトの名無しさん :03/01/09 14:59
>>358 できると思うよ。表面上はIP出ないから。
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 138720人 発行日:2003/1/9
年末年始ボケがそろそろ収まり始めた今日このごろのひろゆきです。
そんなわけで、年末に予告したIP記録ですが実験を開始しています。
「2ちゃんねる20030107」
こんな感じで各掲示板の最下部に日付が入ってるんですが、
20030107以降になってるところはログ記録実験中ですー。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
IP記録大賛成ですね。
素朴な疑問ですが、どうしてこの板だけスレストされるのですか?
>>112 そんなことはいちいち判断してらんないので、「もめごとは当事者同士で」
という結論になったんじゃないかと、、
>>112 そんなことはいちいち判断してらんないので、「もめごとは当事者同士で」
という結論になったんじゃないかと、、
(^_^;)?
なんか昔のPTAを思い出す むかしはトランプは子供の勉強に支障をきたすものとして悪者扱いされてたんだぞ TVゲーム、バイク、etc なんでもかんでも禁止しまくって、それで正義感ぶってる人間ほど悪い人間はいない
じゃ俺もキネソ書き子
そりゃ最初はよほどの大事でもない限りIPを渡すことはしないだろう、 でも物事はだんだんエスカレートしていく物、そのうち密告とかも「誹謗中傷」として IPを渡すようになる、、、
明けましておめでとうございます。 ボランティアの皆様に於かれましては、本年も変わらず 健やかに活動を続けていけるよう、お祈り申します。 2003年 元旦
記念すべき瞬間ですね。私は将来的には2chにとってプラスになると思ってます。
ぶっちゃけ隠れフシアナサンになったんだろ?? 初めてのfusianasan
そそ、で本当にヤバい話なんてどれくらいあるかといえば(略
======2==C==H======================================================
2ちゃんねるのお勧めな話題と
ネットでの面白い出来事を配送したいと思ってます。。。
===============================読者数: 139038人 発行日:2003/1/10
なにやら、連日メルマガだしてるひろゆきです。
そんなわけで、ログ記録実験ですが、いちいちサーバ指定するのが面倒なので、
全部のサーバに入れてみました。
重くなって落ちたりしてもご愛嬌ってことで。。。
んじゃ!
────────────────────────Age2ch─
■この書き込みは、Age2chを使って配信されています。
────────────────────────────
Keep your thread alive !
http://pc3.2ch.net/test/read.cgi/software/1041952901/l50 ────────────────────────────
いくら外国人が外国にサーバ作っても非合法組織は国境を越えられるよ 言いたい放題はブシュだけ
良くわかんないけど。 WINNYなんて、倒産・違法化したら結局存在できない訳でしょ。 法律のアナは埋める為にある訳で。 時間稼ぎにはなるけれど 結局社会正義じゃない事は立法府がまともなら消えるのでは。 一回政権交代。 野党2党でとってね>首 二回以内に一度だけ取れたら日本は変わる。 あとは解散していいさ その人たち。
ネタにマジレス北國新聞
犯行予告スレをたてたと思われるやつが追い込まれて
何かしでかしそうです。放っておいていいのでしょうか?
125 名前:ありえない人 ◆y.GuoEaXhM 投稿日:03/01/11 11:31 ID:94ui+dnh
犯行予告できなきゃ2ちゃんに来る意味は無い。
俺は追いこまれるだけ追いこまれう自殺も本気で考えた。
でも本当に死者がでればワイルド吉田にも責任があったといっておく。
127 名前:ありえない人 ◆y.GuoEaXhM 投稿日:03/01/11 11:34 ID:94ui+dnh
俺本気で怒ってるよ。
もう俺終わりなんだな、って思うと。
こんな理不尽なことはねえな、っていってもみんなけらけら笑いやがる。
ここまでやられてもいままで殺しをやらなかった俺がおかしいんだろう。
128 名前:ありえない人 ◆y.GuoEaXhM 投稿日:03/01/11 11:35 ID:94ui+dnh
さよなら2ちゃんねる。
地獄行きの列車の切符ならもう手に入れてあるよ。
http://ex.2ch.net/test/read.cgi/entrance/1042189622/125-137
保守
2002年2ちゃんねるアニメランキング1位のアニメに・・・・ モナーが出演決定!!!!!!!!!!!!!!!!!!!!! <<放送時間>> 1/12 大阪 テレビ大阪 (日)9:30〜10:00 東京 テレビ東京 (日)9:30〜10:00 名古屋 テレビ愛知 (日)9:30〜10:00 福岡 TVQ九州放送 (日)9:30〜10:00 札幌 テレビ北海道 (日)9:30〜10:00 岡山・高松 テレビせとうち (日)9:30〜10:00
tmpとpinkはヤバイんでないのか?
逮捕間近ですなあ
つい数年前まではBBSはどこでもそれが当然だった。 NiftyだってVANだってそうだった。 NIftyは今でもそうだし。 2chのほうが突然変異みたいなもんでしょう。 2ch型のBBSが流行ったおかげで 従来型のIDログイン制BBSがどこも寂れてしまったのが不幸なんだ。 2chはこういうところなんだから こういう所だと割り切って利用するほかない。 そしてIDログイン制のきちんとしたBBSと 2chのような誰でも何の手続きもなしでいきなり書き込みできるBBSとで 棲み分けするのが望ましい。
2002年2ちゃんねるアニメランキング1位のアニメに・・・・ モナーが出演決定!!!!!!!!!!!!!!!!!!!!! <<放送時間>> 1/12 大阪 テレビ大阪 (日)9:30〜10:00 東京 テレビ東京 (日)9:30〜10:00 名古屋 テレビ愛知 (日)9:30〜10:00 福岡 TVQ九州放送 (日)9:30〜10:00 札幌 テレビ北海道 (日)9:30〜10:00 岡山・高松 テレビせとうち (日)9:30〜10:00
>発信者の特定は第三者機関からの要請があってから行えば十分な筈ですが? (先日までは)そのような環境ではなかったワケですよね。
なるほどサンクス
(^^)
5nd
(^^)
ここは、DirectShowのスレッドなのでしょうか?
110 :
デフォルトの名無しさん :03/01/17 00:46
そうですが、スクリプト厨が全スレ絨毯爆撃してます。
(^^)
113 :
デフォルトの名無しさん :03/02/01 16:35
DirectShowフィルターで色味を調節するフィルターって在りますか? 在ったら教えてほしいんですが…お願いします。
114 :
デフォルトの名無しさん :03/02/01 23:03
DTV板にこの辺のフィルター関連の鉄人がいっぱいいたぞ。 Avisynthすれとかみてみたら。海外のリンクもあるし,色んなものが オープンソースで開発されているようだし。
115 :
デフォルトの名無しさん :03/02/01 23:44
>>114 ありがとう。向こうで聞いてみます。
マルチポストになっちゃうけど(汗
AvisynthってDirectShowフィルターなんですか?
DShowでレンダラのオーナーウインドにCStatic(ピクチャ)を指定していますが どうもレンダラが表示した後にCStaticが黒く上書きしたりしているらしくうまく表示されません。 どなたかアドバイスをお願いします〜よろ。
もしかしたらグラフを一度もrunさせてないからデータがレンダラに届いていない? 位置を0にしてIVideoWindow::StopWhenReady()を呼び出してるんだけど 1フレーム目が表示されたりされなかったりする。。 なんでだろう??
自己レス filter graphを生成後にIMediaControl::Pause()で最初のフレームを表示できました。
ないと思うが ゲ製作みたいにはならないでくれと願う。>荒らし
Directx9をインストールしたらGrapheditで作成したgrfファイルのRenderfileが 出来なくなってしまいました、何か設定があるのですか。
自己解決しました IPersistStream インターフェイスを使ってできました、DX9ヘルプにはコード付で説明がありました。
122 :
デフォルトの名無しさん :03/02/18 03:04
だれか一緒に戦ってください。 以下のようなメッセージが出ます。何が悪いの? KillTimer(hwnd,(UINT_PTR) hwnd) At line 3494 of e:\dx8_2\multimedia\dshow\filters\image\video\dvideo.cpp Continue? (Cancel to debug)
123 :
デフォルトの名無しさん :03/02/20 22:22
集え!答えよ!! 戦士は居ないのか??
>122 わかんないけどさ。普通はそこでCancelボタンを 押してデバッグを始めるもんじゃないの? "Cancel to debug"ってせっかく書いてあるじゃん。 問題が起きたソースコードの位置まで書いてある。 だいたい何をしてたらそうなったのか私にはさっぱり分からないよ。 だって、あなたのPCを千里眼で見てるわけじゃないんだから。 動画の再生?DVD?フィルタグラフをいじった???
ハァ〜・・ ダメダコリャ。このスレ要らない。sage
126 :
デフォルトの名無しさん :03/02/22 12:51
ま、122=123=125はDirectShowと戦う前に、まずはHelloWorldを倒してみなさいってこった。
C#でDirectShowって使えんの??
codecを作る時の種類には新しい物からDMO,DirectShow Filter,VCMの 3つがあるらしい事と、DirectShowFilterよりDMOの方が簡単らしい事は判ったのですが、 DMOだとDX8以前のアプリケーションとの互換性が判りません。
129 :
デフォルトの名無しさん :03/03/16 12:24
とりあえず、Delphi+DSPackの組み合わせは、結構イイ! 再生だけならTFilterGraphを追加して、TFilterGraph.RenderFileしたあと TFilterGraph.Playするだけ。 AC-3→WAV変換ツールも、TFilterGraphとTFilter*2を追加して、適当に プロパティの設定をしたら、あとは(TFilterGraph as IGraphBuilder).connect してTFilterGraph.Playするだけ。 俺の知識では複雑な事はできないけど、単純な事ならCOMとか知らなく ても使えるのがイイ!
C++Builder相談室Part5の15で相談したものですが、Delphiでは無いのですが、 DSPack2.3は、参考になりました。CodeWarriorもC++Builderも使いにくいと ころがありまして大変です。VC++から変換すれば、両方使いやすくなるんです が、単体では、やはり、むずかしいですよね。やはり、DirectShowとかは、 VC++なのでしょうか。129さんどうもありがとう。参考になりました。
糞スレあげるな。
編集サービス使ってる人いまつか? あれって、トラックやグループは、追加は出来るのに、 削除は出来ないくさいのは気のせい?
(^^)
∧_∧ ( ^^ )< ぬるぽ(^^)
135 :
デフォルトの名無しさん :03/04/21 00:59
DirectShow で、 Wave音声ミキシング出来るフィルタってあります? URLかキーワードでもいただけるとありがたい。。。
137 :
デフォルトの名無しさん :03/04/22 02:38
さんきゅ。
139 :
デフォルトの名無しさん :03/04/25 16:20
Pピクチャの情報欲しいんだけど、DirectShowで取得できるの? できなければ何かライブラリあったら教えて。
∧_∧ ピュ.ー ( ^^ ) <これからも僕を応援して下さいね(^^)。 =〔~∪ ̄ ̄〕 = ◎――◎ 山崎渉
DirectShowって何できるんだっけ。
142 :
デフォルトの名無しさん :03/06/18 16:34
DVカメラから取り込んだ720×480のビデオファイルをVMR9で読み込むと 640×480で認識するんだがこれはバグだよね? Windows Media Player 9 でも640×480で初期表示する。
まだこのスレに書き込むアフォがいるな。 このスレは書込み禁止だ。
144 :
デフォルトの名無しさん :03/06/21 11:48
記念カキコ
>143 馬鹿は放置しなさいって。
147 :
デフォルトの名無しさん :03/06/24 02:40
>>142 そりゃ、ピクセルの形を修正して表示してくれてるありがたい機能だよ。
むしろ感謝すべき。
148 :
デフォルトの名無しさん :03/07/03 23:28
720で表示されたら、横長になって困る。
__∧_∧_ |( ^^ )| <寝るぽ(^^) |\⌒⌒⌒\ \ |⌒⌒⌒~| 山崎渉 ~ ̄ ̄ ̄ ̄
151 :
デフォルトの名無しさん :03/07/24 11:44
(^^)
153 :
デフォルトの名無しさん :03/08/13 17:27
AVI/MPG/MPG2等不定のソースフィルタを、指定のビデオ・サウンド レンダラにそれぞれ繋ぐにはどうしたら宜しいのでしょうか。 ソースフィルタから直接ビデオ・サウンドに繋ぐと、先に繋いだ方は スプリッタ等が補完されてとりあえず繋がりますが、後になった方は、 ソースフィルタからは直接繋げなくなりますよね・・・ ソースがAVI等に確定してるならば先にスプリッタと繋ぎ、スプリッタから それぞれに繋げられるのですが、ソース種別不定だとどうやって繋げば 良いのか検討がつきません。
VC++使いです。 Direct Show使えばavi, mpgって簡単に再生できるものなの?
155 :
デフォルトの名無しさん :03/08/13 18:39
再生するだけなら一行で再生出来るよ。
(⌒V⌒) │ ^ ^ │<これからも僕を応援して下さいね(^^)。 ⊂| |つ (_)(_) 山崎パン
157 :
デフォルトの名無しさん :03/08/17 08:00
DirectXで作ったCGをDirectShowのサンプルにあった RealtimeのCapture(AMCAPとか)の上に重ねたいんですけど、 どうやってやるモンなの?
158 :
デフォルトの名無しさん :03/08/18 13:10
メディアプレイヤーを作ってみようかァとおもいつつ、 プログラミングなんてやったことのない厨房が作るには、 DirectShowなんかを使ったらイイと閃いたのでつが、 開発言語は何がよさげでしょう???まにーは使いたくないでつw
Ruby for DX
>159 Ruby for DXってどういうものですか?
>>158 サンプルをコンパイルするのにも一苦労すると思われ。
プログラミング知識ゼロじゃなあ。まじ、DirectShow難しいよ。
162 :
デフォルトの名無しさん :03/08/23 14:22
柔軟性を求め過ぎて、却って使いにくくなってるな。
研究者のオナニー
164 :
デフォルトの名無しさん :03/09/02 00:16
DirectShowあほあほage
165 :
デフォルトの名無しさん :03/09/03 01:28
hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&m_pigb); CComQIPtr <IBasicVideo2, &IID_IBasicVideo2> pibv2(m_pigb); long lAX=0,lAY=0; pibv2->GetPreferredAspectRatio(&lAX, &lAY); これで正しい値が帰ってきてくれればいいんですが、 0,0が帰ってきたり単なる縦横のピクセル数が帰ってきたりする、 ってのはこちらがなにか悪いことでもしたんでしょうか?
166 :
デフォルトの名無しさん :03/09/03 01:33
167 :
デフォルトの名無しさん :03/09/03 12:21
ソースがVideoInfo2に対応してなければ0,0返ってくるんじゃないの。 AVIは全て0,0でしょ。 ピクセル数らしき数値は、そう言う値をアスペクト比に持ってるからで 問題無い。 352x240のmpgなんて大抵 704000, 540000なんて 値返ってくるよ。
アスペクト比より、フレームレート類を一切返さない&バッファ長が いい加減なDivXをどうにかしてくれ。
DirectShow以外で動画再生できるライブラリってない?
vfw
DirectShowってほんと良くない。
DirectShowはあり地獄。 むつかしい、とかやさしいとか、そんな話はどうでもいい。 踏み込んだら負け。
なんでよ? 素人俺にはわからんな。
資料がすくないのがつらい。
オーディオのプラグインエフェクトを使いたいんですが、フィルタのプロパティを表示させるとき、フィルタによってうまくいったり落ちたりとなるんですが経験ある人いますか? OleCreatePropertyFrameを実行することです。よそのアプリでも落ちるフィルタは落ちてるんで単純ミスではないと考えてるんですが…。 いろんなサンプルコードとか見て試したんですが同じ結果ですし。でもなぜかグラフエディットではできてるんですよ。 土下座するので助けてください。
10月7日 晴れ。 今日も救援なし。いよいよ戦況悪化し危険な状況。 孤立無援。四面楚歌。DirectShow恐るべし。
178 :
デフォルトの名無しさん :03/10/09 02:28
>>177 DMOのこと?それともDirectX Plug-Inのこと?
まぁ、どっちにしろ俺には答えられんが。
DirectShowであまりに停滞するならあオーディオエフェクトはWinamp DSP Plug-inとかVST でやるという手もある。
180 :
デフォルトの名無しさん :03/10/10 12:36
これ→
ttp://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/ を,Win2000+VC6+DirectXで実行したのですが,PCによって
解像度が変わるのですが・・・
キャプチャカードはどちらもカノープスのDVTX200です.
カメラはS端子から入力しています.
(1)Pen4 2.2GHz+メモリ512MB+DirectX9.0なら(DirectX8.0でも)720*480
(2)Pen2 450MHz+メモリ384MB+DirectX8.0なら360*240
(1)の方は,はじめは9.0で実行したのですが,9.0を削除して8.0にしても
同じでした.
プログラムの都合上,360*240(できれば320*240)で表示したいのですが,
変化するのは何が原因でしょうか・・・
ソース斜め読みしたが、単にサイズ指定してないだけじゃないの。 前に他のソフトでキャプチャした時のサイズそのままなだけだと思う。
DVD再生時のフィルタ弄りがうまくできたーーーーーーーー 1週間悩んだ。フリーズしまくった、マンセー 超うれしい、サイコウサイコウ0アヒャハyハヤ(´・∀・`)グヘ
>181 確かにサイズ指定してないです. どちらの場合も,実行前にカノープスのDVT Controllerを実行してプレビューを 開いている(実行しないと表示できない)ので,同じになるはずなんですが・・・ #このプレビューは360*240になっています. プログラムでサイズ指定するとしたら,どんな関数になるんでしょうか? MSDNで探してみたのですが,それっぽいのがみつかりませんですた・・・
184 :
デフォルトの名無しさん :03/10/10 16:19
>183 SetMediaFormatだかTypeだったか、それっぽい名前
違った SetFoemat
>同じになるはずなんですが・・・ そんなこたあない。 指定しなかったらほぼ全てのカード・デバイスで単にドライバのデフォルト値の サイズ、色フォーマット、フレームレートになるよ。
188 :
デフォルトの名無しさん :03/10/30 14:06
DirectShowなど、いままで触ったことがなかったのだけれど、 パーサフィルターを作らねばならなくなりますた。 COMも触ったことなかった漏れには、DirectShowの壁は高いでつ。 変換フィルタに関しては、概ねわかってきたつもりだけど、パーサフィルタの PULLモードでの動作などに関しては、資料が少なくてまぢで泣きそう(´・ω・`) 全言語でググっても、濃い情報の載ったページが見つからなかったので、 CPullPinのソース解析してまつが、なにか参考になるサイトなどあれば 教えてください。
スマソ。sage忘れた(汗
Video Mixing Renderer 9をレンダラーとして使って 輝度等を変更したいと思っています. プログラムでの変更は可能だと思うのですが, プロパティページって無いのでしょうか?
>>180 です.
IAMStreamConfig::SetFormatを試してみたのですが,
HRESULT hr;
hr = pAMStreamConfig->SetFormat(amt);
として実行すると,
hr = E_FAIL
が帰ってきます・・・
http://www.microsoft.com/japan/msdn/library/ja/directx9_c/directx/htm/iamstreamconfigsetformat.asp にはE_FAILなんて無いんですけど(鬱
以下関係ありそうなソースです.
IAMStreamConfig *pAMStreamConfig = NULL;
AM_MEDIA_TYPE *amt = NULL;
amt = (AM_MEDIA_TYPE *)malloc(sizeof(AM_MEDIA_TYPE));
VIDEOINFOHEADER vih;
//IAMStreamConfig に対して出力ピンを問い合わせる
//vihの指定(vih.rcResource, vih.rcTarget)
//amtの指定
pCapture->FindInterface();
途中で送信してしまった・・・すみません pCapture->FindInterface();のあと,SetFormatをやってみると,E_FAILになります. その後FetFormatを実行するとS_OKが帰ってきます. で, VIDEOINFOHEADER *vih2 = (VIDEOINFOHEADER *)amt->pbFormat; printf("bottom = %d\n", vih2->rcTarget.bottom); とかやってみると,SetFormatで指定したのとは違うのが表示されます・・・
また間違い. FetFormat→GetFormatでした
DirectX使いって、まさにM$の奴隷だな。カワイソウ....
>>191 ピンを接続する前に SetFormat してますか?
Capture Pin と Preview Pin があるデバイスの場合、両者で 640x480 とかには
できない、とかそういう制限があることがあるのですが、その辺はOKですか?
AM_MEDIA_TYPE の中身は全て適切にセットしましたか?
(簡便には GetFormat したものを変更するのがラク)。
人間 := 宇宙人の奴隷 ビルゲイツ := 人間 M$ := ビルゲイツ DirectX使い := M$の奴隷 よって、 DirectX使いって、まさに宇宙人の奴隷の奴隷だな。カワイソウ...
DirectShowよりVideoForWindowsの方が簡単で使いやすかった。 あのまま進化して欲しかったのに、DirectShowになったとたん挫折した。 VideoForWindowsってドライバの出来によって プレビューのFPSが実力通り出ないことがあるのでそこを直して欲しいのに 過去の物となった今ではそれも望めない... COM全然分からないYO。ショボーン
198 :
デフォルトの名無しさん :03/11/27 22:57
>>197 禿同。
AVIファイル書き出したいだけなのに、Windowsプログラミングの奥義を窮めねばならんとは。
2G以上のサイズに対応したVFWAPI、それだけで良かったのにね。
馬鹿過ぎ
201 :
デフォルトの名無しさん :03/12/03 11:58
DirectShowでのオーディオ再生でタイムストレッチ(音程を変えずに再生速度を変更)を やるにはどうすればいいんだろう。
自分でDMOなりなんなりで書く
負けました
204 :
デフォルトの名無しさん :03/12/06 17:39
こんにちは、 DirectXのことは全くわからないのですが aviから15秒毎の映像をjpgとして書き出す単純な ソフトを作りたいと思っています。 正直DirectX(この場合DirectShow)を扱うにあたって どこから触れていけばいいのか皆目検討もつきません。 簡単で大筋の流れでいいのでプログラムの流れを教えてもらえないでしょうか? よろしくお願いします。
氏んでくれ
ぐぐれ
208 :
デフォルトの名無しさん :03/12/13 11:08
>>180 さんのところのプログラムを使って、
USBカメラからの動画をキャプチャしたいと思っております。
USB2.0カメラを、USB1.1のポートにさしても大丈夫ですか?
「遅くなるけど動くよ」という答えを期待しているのですが…
訳あって動作環境がUSB2.0、開発環境がUSB1.1なのです。
よろしくお願いします。
209 :
デフォルトの名無しさん :03/12/13 14:32
申し訳ありません、さらに質問です。 搭載チップセットによってUSB2.0が 非対応ということがあるようなのですが、 Abit SA7の SiS 645DXで大丈夫でしょうか?
むしろ試して報告しる。
DirectShowとは一切無関係。ドライバ次第。氏ね ってのは無し?
2.0ボードくらい買ってくればいいのに
215 :
デフォルトの名無しさん :03/12/21 19:01
すみません、教えてください。 GetCurrentBufferでメモリに取ってきたデータを加工したあと、 AVIファイルとして出力したいのですが、どうやって書けばいいのでしょうか?
216 :
デフォルトの名無しさん :03/12/22 00:35
TVキャプチャカードから入力するコンポジットビデオをPC画面上の 自アプリウィンドウに描画するアプリケーションを作りたい。 DirectShowを使えば実現できるか。 習得とプログラミングにかかる時間はできる限り省きたい。 そうなるとDirectShow以外にもっと簡易な手段はあるか。 ActiveXは理解している。 キャプチャカードは使えるものをこれから選ぶが、無難なのはMTV系か。 OSはXP Pro SP1になると思われ。
> 習得とプログラミングにかかる時間はできる限り省きたい。 フーン(AA略)
218 :
デフォルトの名無しさん :03/12/22 01:38
>>216 流れてくるたびにフレーム内のピクセル情報をメモリ上にグラブしてやればよいという意味なら加納。
ただし別の処理しながら、DVサイズで毎秒30フレーム取れるとは思うなよ。
219 :
デフォルトの名無しさん :03/12/22 03:08
220 :
デフォルトの名無しさん :03/12/23 18:28
age
(SDK root)\Samples\Multimedia\DirectShow\BaseClasses にあるぞ
>>222 さん
御教授、有難う御座いました。
見てみたら、ちゃんとありますた。
サンプルの方にあるとは思わなかったっす・・・
224 :
デフォルトの名無しさん :03/12/29 04:53
研究してるものなんだけど、DSで取り込んだ動画を加工して、その実験データを 動画として出力したい。ビットマップファイルの集合をAVIとして保存するにはどうしたらいい? あるいはビットマップファイルとして書き出して、アドビのエフェクトとか使って動画を作成する べきなのか・・・
漏れは出力はVFWで逃げた。藁 入力はDirectShowじゃなきゃ出来ん事が多々あるからしょうがないが、 単純な出力はやぱりVFWが楽
226 :
デフォルトの名無しさん :03/12/29 06:53
>>224 DSのサンプルのContrastとかいうフィルタがあったと思う。
それを参考にしてビットマップ加工用フィルタをつくるとよい。
キャプチャ - 画像加工 - MUX - File Writer とつなげばよいと思う。
227 :
デフォルトの名無しさん :03/12/30 17:07
結論:DSは、失敗。
228 :
デフォルトの名無しさん :04/01/04 14:46
あけましておめでd
>>225 、226
ありがd!!早速調べてみます。
っていうか、なんでマルチメディア系のライブラリ本ってほとんど無いんだYO!
まともなプログラマ以外コード書けねえじゃねえか。こっちは画像取り込んで
加工でして出力できればそれでいいのに・・・。
229 :
デフォルトの名無しさん :04/01/04 14:48
↑あ、愚痴はM$に対してです
230 :
デフォルトの名無しさん :04/01/04 23:41
Microsoftは充分に情報公開してると思うが…。アポーなんて酷いものだよ。
231 :
デフォルトの名無しさん :04/01/07 22:13
今ここのプログラムを使ってカメラからキャプチャしています。
ttp://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/cap26.cpp 解像度を変えたいのですが、真ん中あたりの
pGrab -> SetMediaType( &amt );
の上に
amt.lSampleSize = 320*240*3;
と追加してみても、変更されません。
どうしたらいいのでしょうか…
SetMediaTypeをやめて
IAMStreamConfig *pConfig;
pConfig->SetFormat(&amt);
としてもエラーがでて停止します。
どうか助けてください。
どっちもやるんだよ。 んで、lSampleSize だけじゃなくてちゃんと BITMAPINFOHEADER 内の フィールドとか AvgBytePerSec(だっけ?) とかも全部書き換え名。 漏れはこれ以上レスしないんであとは親切さんよろしこ。
レスありがとうございます。 やってみます。
もう一点。 デバイスによっては、高い解像度(例えば640x480とか)を Preview / Capture の両方のピンに設定できないものがある。 というか、大半がそうなんだけど。 この場合、使わないほうのピンの解像度を下げてからじゃないと、使いたいピンを高解像度に設定できないので注意。 ピン毎の解像度の設定は目的の IPin から QueryInterface した IAMStreamConfig で行います。 てか、もし >IAMStreamConfig *pConfig; >pConfig->SetFormat(&amt); これ、ほんとにこう2行続けて書いてるんなら、DirectShow なんか触る前に C / C++ の勉強が必須。
235 :
デフォルトの名無しさん :04/01/07 23:09
>IAMStreamConfig *pConfig; >pConfig->SetFormat(&amt); つか、これで「エラーが出る」で済むのか…。 newしる。
236 :
デフォルトの名無しさん :04/01/11 15:55
誰か「猫でも分かるDirectShowプログラミング」とか書いてくれよ〜
現在VBを使ってDirectShowのプレイヤーを作ろうと思っているのですが 再生中の動画に文字や、現在のビットレート、 時間等を表示するのは難しいのでしょうか。 動画を出力するのと同レベルで出力したのと思っています。
239 :
デフォルトの名無しさん :04/01/13 07:12
サンプルのフィルタ等はDLL等になっていて登録しないと使えないようになっていますが、 これをアプリ内だけで使う(インストール不要で)と言ったような事は出来るのかな? と思ったのですが、可能でしょうか? 共有DLLとスタティックリンクのような関係と言うか。 ドキュメントを色々調べてみたのですがそれらしき記述が見当たらなかったので…。
dekiruyo. ima temoto ni nai kedo, source ga koko de saraseru teido no ryou nara up site simasu.
>>240 おぉぉぉ、出来ますか。
サンプルがあれば激しく有難いです。宜しくお願いします。
>>241 CaptureTex サンプルがDLLじゃなくてAP内に実装したフィルタでデコード結果を
受け取って D3D のサーフェスにレンダリングしてるよ。
>>242 キャプチャデバイスを持っていないのでノーチェックですた。
作りたいのはソースフィルタなのでCaptureTexを参考に
Ballあたりを弄ってみればいいのかな。
なにはともあれありがd
最近980\とかの安物USBカメラをよく見ますが、明るさに影響されずに 常に一定のフレームレート(30fps希望)でデータくれる物ってありますかね。 複数デバイスの確認用に一個買ってみたんですが、色々と最悪でした。
>>243 =239
ごめん。CaptureTex じゃなくて Player ディレクトリの Texture3D だったかも。
現在WindowsMediaFormatSDKをつかってストリームの保存やってるんですが DirectShowの方が簡単ですかね
>>246 ASF だけを相手にするのなら、
Windows Media Format SDK の方が簡単。
DirectShow も簡単っちゃ簡単だけど、
いろんなお作法を沢山知らないと……
>>245 CaptureTexでもその部分のコードは同じみたいです。
>>247 解凍ありがとうございます
ASFだけなんでWindowsMediaFormatSDKでいきます。
ただネット上にサンプルとかほとんど無いので苦戦してました。
>>238 難しいですか、、、
レイヤーみたいにできるといろんな事ができると
思ったんですけどね、、、
難しいということはできないわけではないですか、、、
251 :
デフォルトの名無しさん :04/01/14 22:15
で、サンプルUP、まだぁ〜?
生PCMデータがあるんで今ソースフィルター書いてるんだけど、 ソースフィルターって直接オーディオレンダラにつなげられないもんですかね?
253 :
デフォルトの名無しさん :04/01/18 22:30
「日本語でなにをしたいでつか?」と聞いて欲しい。 で、ラジオボタンみたいなのクリックしていけばキャプチャプログラムとかが 作成されるようになって欲しい。はあ、それは20年後の事だろうか・・・。
>>253 今もそんな感じだろ。
googleにやりたいことのキーワード突っ込んで
あとは出てきたものかき集めてプログラム組むだけ。
絵に描いたような低脳だな。
動画ファイルの各フレームを読み込み、 それを補正しながら画面表示するツール (まあビデオプレーヤみたいなもの)を 作ってます。 で、今回、TV出力できるように、オーバレイ上に 表示させるオプションを付けたいんですけど、 DSをやったことなくて、どこから手を付ければ いいのか皆目分かりません。 もしよかったら、ヒントだけでも。。。
作ってますって何かやってんの? 非オーバレイで再生出来てるなら何をどうすりゃ良いか必然的に 解るはずだが。
>>257 ああ、読み込みはVfWから行って、
ツールとしてはほぼ完成しています。
> 何をどうすりゃ良いか必然的に 解るはずだが
そうなんですか。。。 _| ̄|○
あまり考えてないが、ビデオレンダラに自作フィルタ繋ぐ事になるのかね。 始めてじゃ手の付けよう無い悪寒するが。 DDrawのオーバレイサーフェースとかじゃだめなの?
>>259 > DDrawのオーバレイサーフェースとかじゃだめなの?
そうでした。動画のオーバレイということで、すぐにDirectShowを
考えてしまいましたが、動画のデコード/エンコードに
DirectShowを使うつもりはないので、DDにこだわる必要は
まったくないですね。
今検索した範囲では、DirectDrawは資料もサンプルも
豊富みたいで、自分の能力でもなんとかなりそうです。
多謝。
画像の補正部分を DirectShow Filter にして DirectShow アプリケーションからそのフィルタを使うようにしてくれれば このスレの住人としてはうれしい。
ようやく、 transform filter renderer filter の作りがわかってきた。 (Cbasefilterから作るのも少し) あとはテスト用でsource filterを作ってみるか・・・
263 :
デフォルトの名無しさん :04/01/23 23:55
結論:VFW >>> DS
264 :
デフォルトの名無しさん :04/01/25 04:05
VFWって将来的になくなってしまうの?
265 :
デフォルトの名無しさん :04/01/30 22:30
無くなると言われ続けて早幾年。 ActiveMovieの方が先に消えた罠。 #名前が変わったとも言うが。
CTransInPlaceFilter継承してフィルタ作ってるんですけど、 その作ったフィルタの後ろにffdshowを繋げるとものすごく早くなるんだけど。。。 なんでか分かりますか?
何の事だかさっぱり解らんが、フレームレート無視して全力でデコード してんじゃないの。 >早くなる
268 :
デフォルトの名無しさん :04/02/03 14:30
RealファイルをDirectShowで再生するにはどうしたらいいんでしょうか?
>>268 Real Alternative でぐぐるよろし。
ヘルプのDIB の操作のところに、 注 GDI、GDI+、DirectDraw、または Direct3D の関数を使ってビットを変更することもできるが、これらの手法についてはここでは説明しない。 てあるのですが、やり方がわかりません。 なにか参考になるサイトなどあれば教えてください。
VMR9で試験的にデジタルビデオのプレーヤを 作ってるんですが、ちょっと質問させてください。 VMR9では、自分の環境ではハードウェア・オーバレイを 使ってないようなんですが、 1) そもそもVMR9は対応してない? 2) ビデオカードのドライバが対応してないだけ? 3) ドライバが対応すればTV出力も可能? よろしくおねがいします。
VMR9 は DirectX 7 時代の overlay surface ではなく、 Direct 3D or DirectX Video Accelaration (DirectX VA, DXVA) を使ってサンプルを描画しています。 DXVA の方はドライバが対応すれば TV 出力も可能だろーとは思うけど対応してるカードがあるか どうかは知らない。普通に Overlay 使ったほうがいいんじゃない?
>>273 そうなんですか、よく分かりました。
ありがとうございました。
VMR9は、どんなものか知りたくて
試験的にプレーヤ作ってるだけで、
別に実用的なものを作ろうとして
るんじゃないんです。
275 :
デフォルトの名無しさん :04/02/12 23:19
DV形式AVIの自作FileWriterを作りたいんです。参考になるソースしりませんか? 標準のMS-FileWriterではだめな理由: 1.プレビュー+キャプチャで、キャプチャだけ一時停止することができない。 2.フレーム落ちを極力抑えたい。 前提: 4G超えられること Type1/Type2のサポート NTSC/PALのサポート Dumpフィルタ改だと、ヘッダ部やインデックス部が作られないんだよね。
276 :
デフォルトの名無しさん :04/02/17 16:15
Windows Media エンコーダ9 について質問 FMV-BIBLO NE6/700B WIN XP Mobile PENTIUM III 700 メモリ256 HDD 20GB(残5GB)と外付120GB(2つ)-USB2.0 MPEGファイルをWMVにエンコードするために使っているんですけど とにかく動作が鈍いんです。(ムービーメーカー2も不安定) マシンの貧弱さは、わかっていますが、それだけじゃない気がするんです。 ソースファイル(MPG)を選択すると5分以上応答停止状態になります。 (エンコード開始ボタンを押した時なども同様) 待てば必ず回復して普通どおり動作するのですが、ストレスがたまります。 仮想メモリのページングファイルサイズの設定変更などしてみましたが効果なし。 サポートホームページ見てもわかりません。 MPEG2デコーダ&エンコーダの問題かもしれないのですが、よくわかりません。 WME9でMPEGファイルを使用してる方の動作状況を教えてもらいたいです。 このマシンでは、こんなもんなんでしょうか?
氏ね
278 :
デフォルトの名無しさん :04/03/08 12:34
このスレ駄目だよ。 荒れさせるしかないよ。 できる奴はもう他の場所へ移ってる。
他ってどこ?
281 :
デフォルトの名無しさん :04/03/17 23:06
サウンドボードからの非圧縮PCMのデータ自体を直接リアルタイムで受け取る 方法ありませんか? ポインタなりなんなり。お助けをぅ
DirectSound使えばいいんじゃね? サンプルも付いてるし。
waveInほげほげで十分なんじゃない?
戦わなくちゃ!DirectShowと
285 :
デフォルトの名無しさん :04/04/05 22:49
インストールされてるメディアプレイヤーの バージョンを取得する方法ありませんか?
スレ違いなんじゃあふぉが! HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MediaPlayer\9.0\Registration
287 :
デフォルトの名無しさん :04/04/15 13:27
IDirectDrawVideoインタフェースが環境によって取れる/取れないがあるようなのですが、このような場合、オーバーレイを無効化できないものなのでしょうか? //コンソールアプリケーションです CoInitialize(NULL); CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC_SERVER, IID_IGraphBuilder, (void **)&pGraph ); pGraph->RenderFile(L"movie.mpg", NULL); pGraph->QueryInterface(IID_IBasicVideo, (void **)&pVideo); pGraph->QueryInterface(IID_IVideoWindow, (void **)&pWindow); pGraph->QueryInterface(IID_IMediaControl, (void **)&pControl); pGraph->QueryInterface(IID_IMediaEvent, (void **)&pEvent); pGraph->FindFilterByName(L"Video Renderer", &pBase); //pBaseはIBaseFilter pBase->QueryInterface(IID_IDirectDrawVideo, (void **)&pDDVideo); pBase->Release(); pControl->Run(); pEvent->WaitForCompletion(INFINITE, &a); 取れない環境は以下の通りです Win2kProSP4 DirectX9.0b MatroxMilleniumG400DualHead 5.92/5.91 補足: WMP6.4の設定でハードウェアアクセラレーションをなしに設定してもWMP6.4上でしっかりオーバーレイ再生されていますorz
288 :
デフォルトの名無しさん :04/05/02 12:25
堤さやか \952 「とびっきりSUNDAY,・・・fall in love ♥」
Direct Show と Windows Media SDK ってどういう棲み分けなの? たとえば、 メディアプレイヤーとかをお手軽に作れる → Windows Media SDK さらに踏み込んだ制御が出来る → Direct Show とか?
WMA/WMVのストリーミング再生はDShowじゃできん気がするのう
そのこころは?
292 :
デフォルトの名無しさん :04/05/10 12:16
初歩的な質問で申し訳ありませんが、お知恵を貸してください。 VCでDirectShow(USBカメラ)で取り込んだ画像をDirect3DのTextureとして出力したいと考えています。 どのようなGraphを作成したらいいでしょうか? どのピンからDirect3D Textureへの変換すればいいでしょうか? 宜しくお願いします。
USB Cam って「どのピン」っていうほどピン沢山出てる? 1つだけじゃない? テクスチャへのコピーの仕方はTexture3D とか見て。
オーバーレイサーフェスを占有してるプロセスを取得するにはどうすればいいのでしょうか? ビデオキャプチャの予約録画とかで、他にオーバーレイを使ってるソフトがあるとうまく録画できないことがあるので そのプロセスを強制終了するようなモノを作りたいのです。
296 :
デフォルトの名無しさん :04/05/24 14:43
>>292 DirectX 9.0ならCaptureTexやらCaptureTex9サンプル読めば
終わりじゃねーの。
297 :
デフォルトの名無しさん :04/05/27 01:05
ネットワークカメラの動画でMJPEG形式のを取り込めるフィルタってDirectshow に標準でないですよね??作らなければならないのか〜〜〜
標準ではないなぁ。 ネットワークカメラとの通信方法にも寄るだろうし実装も様々になるんではないかと。 以前仕事であるネットワークカメラからHTTPでMJPEG取り込んで、 下位に流すフィルタをCSourceベースで作ったことあるけど、 ballフィルタなんかのフレーム描画部分を受信した画像で描画するような 単純なものなら、そんなに難しくもないとおもう。 フレームレートとドロップフレームの制御はそれなりに、考慮が必要な気もする。 サンプルがあるんだし、試しに一度実装してみることをお勧めする。
299 :
デフォルトの名無しさん :04/05/30 19:36
VisualC++ .NETを使用しています。 AVIファイルを再生中に停止させて、その画像を保存したく思います。 いったんクリップボードに保存したいのですが、うまくいきません。 ご教示お願いします。 Video *ourVideo= new Video("d:\\test.avi"); ourVideo->Owner = this->pictureBox1; ourVideo->Play(); ourVideo->Stop; Clipboard::SetDataObject(this->pictureBox1->Image);
299は撤回します
偽者ウザイ。
301は撤回します
>>301 親切でやってあげたのに、酷いね。
撤回しないとマルチだから放置決定だよ?
これマルチだったのか・・・。 んなもんMSDN調べりゃ、 いくらでも分かりそうな内容なのによ。。。。
305 :
デフォルトの名無しさん :04/06/01 22:36
素人なので・・・・ 別の掲示板で教えて頂きました。 ただし、C#ですが・・・ お騒がせしました。
別の掲示板にまで目を光らせてマルチポストを糾弾する香具師ってキモいな。
どうでもいいよ
質問があります。 DirectShowで、カメラとマイクからの入力をキャプチャしてAVIで保存しています。 現在、圧縮なしで保存しているのですが、 どうすれば圧縮をかけられるのでしょうか?
おまえもマルチか
. . . -‐- . __ 〃 ヽ : : ヽ\ ノノノ)ヘ)、!〉 : '. l(0_)!。-‐ ‐〈リ . ; Vレリ、" (フ/ ; : l´ヾF'Fl . ; 〉、_,ノ,ノ : . /ゝ/´, ヽヽ. : く/l |_ノト‐'⌒),)  ̄  ̄ ̄
ISampleGrabber通してDivX再生するとコマ落ちするんだけど こういうもんなんですか?
カメラからフレームごとに静止画を取得後、順にDirectPlayで送信し 受信した側で静止画を順に表示し、最終的には動画で保存したいと考えています 現在受信側でフレームごとに受信までは出来ているのですが 表示して動画で保存の仕方がわかりません どうすればいいのでしょう? GraphEditでJPEGの画像をD&Dすると 「Generate Still Video」というOUTピンを持ったフィルタが出たので これで出来そうなのですが、このフィルタが何なのかがわかりません GraphEditのフィルタの一覧「Which filters do you Wont to insert?」に 出ているのでしょうか? 一通り見たのですがわかりませんでした ご存知の方、教えてください
とりあえず、 作成したアプリケーションでグラフが動作している時に、 GraphEditでアタッチしてみたら? それで構築されたグラフがでてくるとおもうんだけども。
>>313 既存のフィルタを組み合わせてもできないと思うよ。
受信した画像にタイムスタンプをつけて順次出力するソースフィルタを作るべし。
Ball サンプルでも見て。
>>312 そういうもんです。
CPUパワー食いまくるんで「透過ウィンドウの下に来たときにも表示する」
というレアな用途のためにその実装を考えたんですけど投げ出さないといけなかったわけで。
AsyncReder使ってるんだけど、mpeg以外のaviがSampleGrabberで取得できない
具体的には、aviファイルをLoadして、SampleGrabberにPinつなぐとエラー(アクセス違反)
DivXとかに対応したいんだよな
どうすりゃいいのよ
むしろ
>>312 はどうやってんの?
>>316 VMR9 なら透明ウィンドウの下でも半透過しつつ再生されるみたいだよ。
319 :
24時間戦い中 :04/07/22 19:19
教えてエロい人! DirectShowでレンダーフィルタ作ってます。 叩き台は、DSサンプルのSampVidなんだが、 コイツをD3D対応にして、且つアロケータでテクスチャを 作成してポインタを取得し、 アップストリームフィルタで自動的にイメージを 書き込ませたいんだけど、どうすればいいと思う? VMRレンダラではやってそうなので、 そのソースがあれば最高なんだが・・・
320 :
デフォルトの名無しさん :04/08/06 12:03
サンプルのCaptureTex9をビルドして実行すると m_pCapture->RenderStream(...)のところで Failed to create IDirect3DTexture9. と Could not create the D3DX texture. hr=0x8876086c ってエラーダイアログがでて実行できないんだけどどうすればいいですか? 教えてエロい人。
321 :
デフォルトの名無しさん :04/08/13 06:02
('A`)マケマスタ・・・
322 :
デフォルトの名無しさん :04/08/16 22:28
やあ君達は優しいらしいじゃないですか 教えてくださいよwwwwwwwwwwwwwwwwwwwwwww MPEG1動画をMPEG-VIDEOとMPEG-AUDIOに分けたいんですよ。 デコーダ通す前のやつ。 んで、 ソースフィルタ-すぷりった -ファイル(.mpv) -ファイル(.mpa) とかやりたいんだけど、 mpvとmpa生成するフィルタを「ぷっちでここ」っていうツール見つけてきて 「なんとか.ax」とか拾ってレジストリに登録して、 グラフエディット使って、 mpvとmpaが生成できたわけですよ。 ですが、それをプログラムで書こうと思ったとき、 そのファイル生成するフィルタのGUIDやらは どうやったら分かるのですかい? グラフエディットのどっかに書いてある? あと他になんかいい方法あるなら教えてくれないか?wwwwwww wwwwwwwwwww うはwwwwwwwwwwwwwwww
323 :
デフォルトの名無しさん :04/08/16 22:30
さっさと教えろよおい
InsertFilterのとこで見ればよかばってん
325 :
デフォルトの名無しさん :04/08/16 22:53
ありがとう!好きです! @device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\{E917C616-E850-44DF-8025-44C875B77758} これざますか? CoCreateInstance(○○○, NULL, CLSCTX_INPROC_SERVER, ○○○, □□□) ○○○に何を突っ込めばよいか この情報からわかりますか?
326 :
デフォルトの名無しさん :04/08/16 22:56
@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\{E917C616-E850-44DF-8025-44C875B77758} CoCreateInstance(083863F1-70DE-11D0-BD40-00A0C911CE86, NULL, CLSCTX_INPROC_SERVER, E917C616-E850-44DF-8025-44C875B77758, □□□) もしやこうか!
327 :
デフォルトの名無しさん :04/08/16 22:59
あ、こうか! CoCreateInstance(E917C616-E850-44DF-8025-44C875B77758, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (LPVOID *)&unkoFilter)
328 :
デフォルトの名無しさん :04/08/16 23:02
スレ禿げ忘れたwwww
禿げじゃなくて下げだったwwwwwwwwおkwwwww
チャゲ&飛鳥なんちゃってwwwwwwww
一人で偉く楽しそうだね。
DO VAIOみたいな奴作りたいよな。 まずはVC.netでも買ってくるか。
SP2入れたら9.0cになってリリース版になってやがる まんどくせ
335 :
デフォルトの名無しさん :04/09/04 22:24
ビュー表示、動画保存中に静止画を取得したいんだけど どうやってやるの?
336 :
デフォルトの名無しさん :04/09/05 15:26
Visual Studio 6.0 SP6 + DirectX 9.0 SDK Summer 2004 にしたところ、 DirectShowのコンパイルがまったく通らなくなって錯乱中だ・・・ dshow.hのインクルードでコケまくり。 締め切りはあさってなんだよ。。。 たのむよ俺はなにも悪いことしてねぇよ。。。
そこでアンインストールですよ。
ためしにSDKの簡単なサンプルをコンパイルしてみたところ、コンパイル通らず。 おお、サンプルがビルドできないんだから、俺のプロジェクトなんて通るわけないよな。 なんか楽しくなってきた・・・うへへぐへへ
と言うか締め切り数日前に開発環境変えるなよ。
実はプロジェクト設定でインクルードパスを間違えている罠。
>> 336 Compiler Support Developing C++ applications with the DirectX 9.0 Summer Update requires Visual Studio .NET 2002 or later. Visual Studio version 6 is no longer supported. Microsoft DirectX 9.0 SDK Update (Summer 2004) リリースノートより
ナムナム
344 :
デフォルトの名無しさん :04/09/15 20:08:48
ソースフィルタにファイルじゃなく リアルタイムなデータをしこしこいれるようにするの なんかいい方法ない? ソースフィルタ自作むずかしすぎ。 誰か使えそうなもの作ってないですかのー。 ファイル名の指定とかしなくて、 バッファからデータ入れていけるようなの作ってる人いたら いいもんあげるから .axとソース頂戴
ボールフィルタの改造ですぐに作れると思うんだが・・・。
346 :
デフォルトの名無しさん :04/09/15 23:15:53
それができないのだよー。 MPEGの再生したいんだけど、 MPEG1 stream splitterにつながるソースフィルタって PULL型にしないといけないぽ あと、スプリッタとつなげるときに、 メディアタイプ合わせて、接続すると思うんだけど、 その辺をどうやるかってのがわからない。 ボールのやつは、つぎにつながってるのが スプリッタとかじゃなくて、レンダラだっけ? だからあれを見ても参考にならなかったんですよ。。。
CSource クラスは、データ フローのプッシュ モデルをサポートするように設計されている。 このクラスは、ファイル リーダー フィルタの作成には推奨しない。ファイル リーダーは、 IAsyncReader インターフェイスを介して、プル モデルをサポートする必要がある。 詳細については、「フィルタ開発者が使うデータ フロー」を参照すること ってMSDNに書いてある もっとがんばれ
348 :
デフォルトの名無しさん :04/09/15 23:58:39
MSDNは読みつくしたつもり。。。 ファイルリーダーはプルモデルをサポートする必要があるってことは、 上にも書いたように、 ソースフィルタの出力ピンインターフェースを IASyncReaderにするってことだと思ってるんだけど、 プッシュモデルで作って、スプリッタにつながるんかなー? その辺よくわかってない。 ファイルリーダーの作成には推奨しないって書いてあるから、 プルモデルで作らないといけないんだろうけど。。。 そもそもファイルリーダーって言葉自体が曖昧だ!! ファイルをどう読むんだい!! 既存のやつは、一度でソースフィルタの内部バッファに 丸ごと読み込んでるようだけど、 その辺改造するのが難しい。。。 誰かこういうのやったことある人いない?
>>348 やったことはあるけど、仕事でだったからサンプルもコード片も示せ無いよ。
>プッシュモデルで作って、スプリッタにつながるんかなー?
DirectShow 用語での「Splitter」ってのは、ファイル内部のデータ構造を知っていて、
シーク動作をサポートするフィルタのこと。上位のフィルタには IAsyncReader あたりを要求する。
というわけで、Push なら Splitter はダメ。でも MPEG なら Demux が使える(TSでもPSでもOK)。
Demux 使うのもマンドクセーってんなら、ソースフィルタが自前でVideo ES と Audio ES の2本
Push するんでもいいけど。
・・・一応答えてみたけど、
>メディアタイプ合わせて、接続すると思うんだけど、
>その辺をどうやるかってのがわからない。
このくらいサクサクっと書けないとこの先厳しいよ・・・外注に出したほうがいいんじゃない?
>>348 サンプルのDirectShow/Filters/Async/MEMFile
あたりが参考になるのでは?
asyncio、asyncrdr使えば、ほとんど実装いらないでしょ。
351 :
デフォルトの名無しさん :04/09/17 23:18:16
PUSHはスプリッタだめなんですか。 やっぱりこのPUSH,PULLモデルというのはかなり重要なファクタですね。 このパラダイムを軽視して、あるいはまったく知らずにフィルタを開発してると、 実は上位と下位のフィルタで上位はPUSHでつくっちゃいました。下位はPULLでした。 ということになりかねないのかな。 その場合、基底クラスのおかげでつながらないよ、というのなら そんなことになる前に気がつくのかも知れないけど。
>>333 おうよ
欲を言えば付属のリモコンつかえてTV出力にGUIを出せる奴作ってみたいよ
まあきょうVisualstudio.NETの60日評価版つきの雑誌買ってきたド素人なんだけど
353 :
デフォルトの名無しさん :04/10/12 23:03:00
SDKをOctober 2004にアップデートしたらGraphEditでピンのプロパティが見られなく なってしまった。
ええー!まじっすか!うそーーーん!こえええええ!
355 :
デフォルトの名無しさん :04/10/22 23:19:31
こんど私もこいつと戦うことになりました。 まずはSDKのサンプルでも眺めてみますわ。
DX9SDKのサンプルAudioBoxをビルド中にエラーが出ます、 調べたらwmstub.libがどこを探しても見つからないのですが。 どうすればビルドできるのでしょうか?
wmstub.lib とは随分古いな。それは Windows Media Format 7 以前の SDK に含まれるファイルだ。
>>356 そのエラーに書いてあると思うが↓
---------------------------------------------------------------------------------------
NOTE: To link and run this sample, you must install the Windows Media Format SDK 7.1.1.
After downloading the Format SDK, you can extract a public version of the
WMStub.LIB library, which should be copied to the Samples\C++\DirectShow\Common folder.
This library is necessary for enabling Windows Media content.
Without this library in the Common folder, the link will fail with:
LNK1104: cannot open file '..\..\common\wmstub.lib'
If you remove the WMStub.lib from the project's linker settings, the linker
will fail with this unresolved reference:
WMCreateCertificate
ついでに、ソースにもこんなことが書いてある。
//
// Windows Media 9 Series (code named 'Corona') no longer requires
// a stub library. If using WMF9, we don't need to provide a CKeyProvider
// implementation, and we don't need to link with the WMStub.lib library.
//
WMF9の構成使えば普通にビルド出来るよ。
359 :
デフォルトの名無しさん :04/10/28 16:37:09
directshowで画像取り込みのプログラムをしています。カメラからの画像のたれ ながしはできますが一枚とるプログラムが完成しません。ビルドまではできるん ですがActive movie windowを表示して5秒後くらいにwindowが真っ白になってフリーズ します。回りにdirectX扱える人いなくてほんと困っています。誰か教えてください。 プログラムの流れは ピンの列挙→main(本文)→フィルタグラフマネージャの作成→システムデバイス列挙子作成 →モニカの列挙→モニカをフィルタオブジェクトにバインド→フィルタを追加 →キャプチャビルだの作成→ファイルライタフィルタの設定→サンプルグラバの生成 →メディアタイプの設定→フィルタグラフの追加→サンプルグラバの接続 →グラバのモードを適切に設定→ファイルへ出力→キャプチャ開始→ →サイズの取得→一枚キャプチャ→バッファ取得→解放 どこが間違っているのかが出ているのか分かりません。分かる人教えてくれませんか?
ファイルライタ使うの?レンダラの書き間違いだよね > windowが真っ白でフリーズ なんだろう。聞いたことないな 黒じゃなくて白かよ。 白?えー
つーかアレだ。俺だったらこうする。 DirecrXのDirectShowのSampleの下にさ、サンプルソースあるじゃんよ あれの中のヌルレンダラとグラバサンプルにな、ログ吐くようにちょいと追加してさ んでそれで繋げてみれば?
つーかマルチじゃねーかテメーこらファック
363 :
デフォルトの名無しさん :04/10/28 22:40:09
プレビューをダイアログ内のピクチャーボックスに表示させたいんだけど、ダイアログと関係のない場所に表示されちゃうよ。 ぼすけて!
>>363 それDirectShowの問題じゃなくてWindowの関連付けの問題だからウぜー
DX9じゃなくてWMF9
368 :
デフォルトの名無しさん :04/10/28 23:19:25
>>364 ,365
レスが増えてる!って思ったら・・・残念、拙者ガキですから。
RECT rc;
::GetWindowRect(*hPictureBox, &rc);
m_pGraph->QueryInterface(IID_IVideoWindow, (void **)&m_pVidWin);
m_pVidWin->put_Owner((OAHWND)hPictureBox);
m_pVidWin->put_Left(0);
m_pVidWin->put_Top(0);
m_pVidWin->put_Width(rc.right - rc.left);
m_pVidWin->put_Height(rc.bottom - rc.top);
m_pVidWin->put_Visible(OATRUE);
m_pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS);
ってやったら画面の左上に表示されてる。
なんでだろ〜。
m_pVidWin->put_Left(0);
m_pVidWin->put_Top(0);
の値いじったら画面上を移動する。
なんでだろ〜。
370 :
デフォルトの名無しさん :04/10/28 23:31:00
>>369 wwwwwwwwwあひゃ、ウンコから帰ってきたらレスついてるどうもありがとん!
ってかおれ、
m_pVidWin->put_Owner((OAHWND)*hPictureBox);
じゃないか!
すんまそ解決!
うぺぺぺぺぺぺぺ
rc使えよ
372 :
359 :04/10/29 12:41:33
デバッガ使用しましたら無限ループしてるとこ発見しました。 do{ pSGrab->GetCurrentBuffer(&bufsize, NULL); }while(bufsize <= 0); なぜここが無限ループしているか分かりません。bufsizeは long *buffer = NULL; long bufsize = 0; て宣言しています。なぜ無限ループするかよろしければ教えてください。
>>372 エラーコードは?
あとグラフ構成くらいさらしてくれないと返事できない。
それとメッセージポンプを持つスレッドがそんな風にブロックしてはいけない。
UIスレッドで行いたくてかつ取得できなかったときに繰り返し試行するなら、
タイマイベントやら適当なメッセージやら使うべき。
>>372 GetCurrentBufferの戻り値みればなんか分りそうだが。
あとグラバはプレビューピンにつないじゃいけないとかそういうの無かったっけ。
376 :
デフォルトの名無しさん :04/10/31 02:29:32
DirectShowを使って動画像処理を行いたいのですが、 1フレーム分の処理が1/30秒以内に終わらない場合はどうなりますか? 次のフレームは飛ばされてしまいますか?
100MBのMP3再生するとプロセスのメモリ空間も 100MB増加するんだけど なんか少しずつ読み込むとかの方法は無いの?
>>376 レンダラの表示が遅れるだけ。もちろんPCの性能によるんだけどな
例えば29.97fpsのビデオが18fpsぐらいで表示されたりする。
>>377 どこの話?プロセスって例えばプレーヤーとかのプロセス?
フィルタの作りによるべさ
381 :
デフォルトの名無しさん :04/10/31 17:25:11
フィルタの接続はicapturegraphbuilder2にまかせっきりでいいのかな? まだ、プレビュー表示とサンプルグラバーぐらいしか使ってないけど、もっと複雑なことする場合は自分でピンの接続やるべきなのかな? みんなはどう?
サウンドボード複数挿してるとは どうやって出力先指定すればいいの?
384 :
デフォルトの名無しさん :04/11/01 02:11:40
兵庫県尼崎市にお住まいの加藤雄太君(6)から質問の手紙を頂きました。 「 な ん で こ の す れ の じ ゅ う に ん っ て こ ん な に も て い れ べ る な の ? 」
385 :
4歳 :04/11/01 05:03:14
>>384 世の中にはいろいろなレベルの人がいる。
君の様な年長者には明らかなことでも、
自分たちみたいな子供にはわからないことが多い。
だから暖かく見守って欲しい。
それぐらい小学生にまで行かれている方ならわかってほしい。
386 :
デフォルトの名無しさん :04/11/04 17:04:34
ageてみる.
388 :
デフォルトの名無しさん :04/11/12 23:49:45
Windowsを再インストールしてDirectX SDK9を入れなおしたのですが、 Dshow.hをインクルードするとエラーをはくようになってしまいました。 原因がPlatform SDKにあることを知るまで3時間、ありかを探すまで 2時間以上かかった。何であんなに検索しづらいんだよ>>MS 久々にマジで疲れた _| ̄|○ もうすでにコード書く気力がねえよ。
>>388 > 原因がPlatform SDKにあることを知るまで
詳細教えてください。おねがいします。
CoCreateInstance(CLSID_SystemDeviceEnum, NULL, CLSCTX_INPROC_SERVER, IID_ICreateDevEnum, (void **)&pDevEnum); hr = pDevEnum->CreateClassEnumerator(AM_KSCATEGORY_CROSSBAR, &pClassEnum, 0); pClassEnum->Next(1, &pMoniker, &cFetched); hr = pMoniker->BindToObject(NULL, NULL, IID_IBaseFilter, (void**)&pFilter); を実行したらBindToObjectの戻り値で「指定されたファイルが見つかりません」という エラーコードが返ってきたのですが この「指定されたファイル」を特定するにはどうしたらよいのでしょうか?
>>389 OSがWinXP SP1で Visual C++6.0 SP6 の環境なのだけど、
DirectX_SDK9 2004Update を入れると strmit.hの
typedef DWORD_PTR HSEMAPHORE;
でコンパイルエラーが生じるようになります。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/ なので、ここからSDKのダウンロードをおこない開発環境を更新する必要が
あるそうです。
あと、更新後に統合環境のツール->オプションでディレクトリの項目に
"\Microsoft SDK\Include"のフォルダの追加も手作業でやる必要がありました。
RenderFileで生成したフィルタグラフを破棄するにはどうしたらいいのでせうか
393 :
入門者 :04/11/16 01:06:56
DirectShow 動画ファイルの開始から10秒間だけ再生というのは どうやればいいの? pMediaSeeking -> put_SetPosition() とかやればいいの? 自分が指定した時刻の再生、停止方法がわからない
>>392 DX9ヘルプの「グラフのすべてのフィルタの削除」をミロ!
>>393 IMediaPosition::put_StopTimeでできるかもしれない
それかIMediaSeeking::GetPositionsで指定した時刻になったらポーズしろい
正直、ちゃんとした実装してあるフィルタばかりとは限らんぞ。 特に時刻とか位置のシークなんぞ。
>>393 スプリッタの出力 pin に ControlStream でセットするのが理論上完璧な手法。
だけれどもメディアイベントで時刻を見て適当に Pause なり Stop する原始的なやり方の方が
なにかと安全。
>>395 の言うようなケースとか。
397 :
おしっこ :04/11/16 16:35:28
IMediaSeeking で 再生速度を変えられると思うんだけど、 動画ファイルによっては8倍とかできないものがあるのはなぜ
・パーサフィルタ作った人が手を抜いたから ・パーサフィルタ作った人が無能だったから ・パーサフィルタ作った人が「こんな仕様も判らんものサポートできるかぁ」と切れて 非サポートを決めたから
再生すビデオを手っ取り早く半透明にする方法って、、、 ないですかね?
繋がるフィルタの挙動を掴むのに疲れる疲れる。ちくしょう
再生しながら出力するサウンドボードを変更するにはどうすりゃいいの? フィルタの類はRanderFile()で自動生成なんだけど
>>402 オーディオレンダラはクロック発生源なので、Tee改変してあらかじめつないでおいて
とか簡単にはできないよ。オーディオレンダラを自作するのが早道だと思う。
>>402 KbMedia Playerみたいな?
405 :
デフォルトの名無しさん :04/11/22 15:18:09
406 :
デフォルトの名無しさん :04/11/23 22:10:24
Directshowで音の高さは変えずに再生速度を変えること出来ます?
フィルタ書けば可
GraphBuilderを別スレッドで動かすにはどう書けばいいの?
別スレッドでグラフを構成すればよいよ って自分で答えかいてるじゃん
410 :
デフォルトの名無しさん :04/11/25 14:29:46
アニメ板の攻殻機動隊スレにこんなのが落ちてたよ。 USBカメラの映像にエフェクトかけて表示するのって楽しそうだね。 > 工学ナビさん(www1.bbiq.jp/kougaku/koukaku.html)で公開されている”笑い男摸倣ツール Catcher in the Rye”の俺バージョン(パクリ)を作ってみました。 > 公開に耐えうる状態になったので公開してみます。 > 俺バージョンは複数の顔をあのロゴでマスクできます。 > USBカメラをお持ちの方は試してみてください。 > ここで配布してます。 > www.geocities.jp/laughing_man_lol/index.html > > 今のところ、バージョン0.1って事で・・・。容赦してね・・・。
411 :
デフォルトの名無しさん :04/11/30 21:27:13
>>411 何気にアップグレードしてるね。
面白い。
412 :
デフォルトの名無しさん :04/11/30 21:33:47
>>411 再帰ですか?
すごいテクニックですね!
413 :
デフォルトの名無しさん :04/11/30 22:07:25
>>411 ムッ。
その書き方だとスタックオーバーフローで昇天だな。
IGraphBuilderのSetLogFileで書き出されたログファイルってどうやって読むの? デバイス名やCLSID以外解読不能なんだけど
ttp://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap10/index.html を参考にして、カメラ入力のソフトを作ってみたのですが、
プログラムの動作中にUSBカメラを抜くと、ブルーバックになってOSが落ちました
しかし、毎回落ちるのでは無いようです(なんとも無い事があり、バグがあると気付かなかった)
※ このプログラムのままでも同じ症状になるか試してはいませんが、カメラ制御部は殆どそのままです
上のリンク先のものに、GetCurrentBufferなどの戻り値がエラーかどうかを調べる処理は追加していたのですが、
他には何が必要なのでしょうか?
(恐らく、戻り値を調べるのではなく、実行前に実行可能かどうかを調べる必要があると思っているのですが…)
MSへのレポート結果は、「ドライバが問題なよう」と出ていましたので、
プログラムがカメラ用のドライバを制御中に問題を起こしたようですが…
上記のリンク先ソースではループ内で
hr = pGrab -> GetCurrentBuffer( &n, (long *)img00.lpBmpData );
だけしか行なっていませんが、私のプログラムでは
pGrab -> GetConnectedMediaType( &amt );
VIDEOINFOHEADER *pVideoHeader = (VIDEOINFOHEADER*)amt.pbFormat;
ZeroMemory( &BitmapInfo, sizeof(BitmapInfo) );
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader),
でBITMAPINFO構造体を取得し、サイズが変更されていればメモリを確保しなおすという内容にしています。
どこが問題か分かる人、教えてください。
DirectShow編集サービス(DES)で作成したオブジェクトに 自作のレタリング・フィルタを追加することができません。 (再生に反映されない)知ってる方いらっしゃれば教えてください。 自分の試したやり方は 1.タイムラインオブジェクトを作成 2.IRenderEngine からグラフを取得 3.IRenderEngine の ConnectFrontEnd をコール 4.グラフにフィルタを追加 5.IRenderEngine の RenderOutputPins をコール 6.IMediaControl を取得して Run をコール です。ちなみにDESを使ったオブジェクトを標準の ファイルライタフィルタに接続してファイルに書き込むことは できました。 (最悪いったんファイルに出力して、そのファイルからグラフを 自動生成させてフィルタを追加する、ということはできそうです。 時間がかかりますが。)
418 :
デフォルトの名無しさん :04/12/01 17:31:12
JMFくらい簡単ならいいんだけど。
やっぱり、人居ないな もう少し時期を見て、他所で聞いてみます。
>>416 そういう種類のドライバのバグは、アプリ側で対応するのは難しいです。
ハードウェアのメーカーに文句を言うしかないでしょう。
>>421 プログラムのチェックが不十分なんじゃなくて、このカメラ固有の問題ですか
それなら仕方ないですね。ありがとうございました
最初にデバイスチェンジイベント発生するんじゃないの? 発生前に落ちるならどうしようもないけど、落ちない時もあるならイベント発生してる希ガス
>416 そこのソースは見てないけど。予想的に画面が出て見るだけ? 単にIVideoWindowで画面出せば良いだけじゃね? いちいちビットマップ得てペイントして.....なんてめんどくさすぎ SDKのヘルプとキャプチャのサンプル見て理解出来れば 簡単にキャプ&プレビューソフト作れるよ
>>425 漏れも良く見てないけど、「そこのソース」はイメージをキャプチャしてBMPで保存するものだったと思う。
>>423 イベントですか…イベントって事は、引数じゃなくてメッセージで来るんですかね…それともコールバック関数?
イベントのタイミングとか、チェック法とか分からないので、後でMSDNで調べてみます
>>425 ビットマップを得て、画面書き換えです
hr = pGrab -> GetCurrentBuffer( &n, (long *)img00.lpBmpData );
の部分でビットマップを取得しています。
リンク先のものは無限ループ内で連続取得していますが、私はプロシージャのタイマーメッセージで呼び出しています
画像処理ソフトに使いたいので、この方式にしました
>>428 ありがとうございます。やっと暇が出来たので、調べてみます。
DirectShowとかキャプチャ部の説明は一通り見たのですが、見ただけだと今一理解出来ない事が多かったので、
プログラムを色々弄りながら少しずつ理解していっている段階です
ある程度、実際の挙動は分かってきたので、もう一度全部見直してみます
(AMCapは以前、途中までソースを追ってみて、脳がオーバーフロー起こしたので強制終了しました…いきなり覚えるにはレベルが高かったです)
430 :
デフォルトの名無しさん :04/12/11 08:52:18
VMR9は使わずにDV入力映像とファイル映像をミキシングしたいのですが、 MSDVはウインドウレスモードで表示出来ないの? ActiveMovieWindowって別画面が出ちゃう←たぶんデフォルトレンダラが作られてる VMR7でDVミキシングは出来ないのかな VMR9を使うしか無いのでしょうか?
スマン出来た。単純な事だった。 RenderStreamの最後の引数にVMRを指定してなかった VMR追加すれば、それがデフォルトとして動くと思ってた (ファイルだと指定しなくても収まってくれてたので) MSDVから直だと音が無いので、ちゃんとフィルタ作成して繋げたらちゃんと出来た
432 :
デフォルトの名無しさん :04/12/14 11:09:36
すみません。質問なのですが・・・ BaseClassesをVC6++でビルドできません。Dswファイルが無いのです。 どうしたらいいのでしょうか?.Netじゃないとダメですか? あとヘルプには Samples\Multimedia\C++\BaseClasses となっているのですが、 そんなディレクトリはありませんでした。 Extras\DirectShow\Samples\C++\DirectShow\BaseClasses にあります。 これは、特に気にしなくていいですか? DLしたのは DirectX 9.0 SDK Update (December 2004) DirectX 9.0 SDK Update (December 2004) Extras DirectX 9.0 SDK Update (October 2004) 日本語ドキュメント です。
>>432 Update (October 2004) でフォルダ構成やセットアップファイルに変更が
加えられてそのままドキュメントが混乱しているようだ
dsw に関しては、DirectX 8.0 SDK からコピーして使ってる
434 :
デフォルトの名無しさん :04/12/14 12:44:08
>433 レスありがとう。 DirectX 8.0 SDK 探しても見つからなかった・・・ どこかに上がってる所は無いでしょうか? ってMicrosoftになかったら、無いかな?^^;
Extrasに入ってるが
436 :
デフォルトの名無しさん :04/12/14 12:55:18
>435 ほんとですか? *.dsw で検索しても無かったです。 .net のソリューションファイルはありますが・・・ VC6++でビルドしたいので、dswファイルが欲しいのです。 どこにあるのでしょう?
お騒がせしました。 DirectX 9.0 SDK Update 2003 を見つけ出し解凍したらありました。 やっと戦う準備が整いそうです。
438 :
デフォルトの名無しさん :04/12/23 00:09:04
DSF書くのってなんでこんなにめんどくさい&資料無いの…(T_T)
439 :
デフォルトの名無しさん :04/12/24 02:06:35
特定のファイル(DVDのVOB)でピン接続をするとエラーになるんですが・・ グラフマネージャはIFilterGraph2を使ってます IFilterGraph2.Connect(ファイル側のピン, VMR側のピン) ←例外 IFilterGraph2.Render(ファイル側のピン) ←正常 なんでぇ? それで、VMRは後にしてサウンド側を作って IFilterGraph2.Connect(ファイル側のピン, サウンド側のピン) を行うと正常に作成されました ファイル側のフィルタから、ダウン側に空きピンを探し(MEDIATYPE_Video) そのピンとVMRを繋ぐとやっぱり例外・・・Renderだと正常。・・・ 例外はConnect時に浮動小数演算のオーバーフロー・・がなんとかかんとか VMRは、標準VMR7、VMR9 両方ともウインドウモード、ウインドウレスモード試したんですが全部駄目でした ちなみに、GraphEditでそのファイルとVMRを繋ぐとちゃんと作ってくれます
440 :
デフォルトの名無しさん :05/01/16 23:57:54
(ここは過疎化でしょうか?) ちょっと教えて。 ビデオウインドウのクリーンアップをする時、グラフは停止させずに表示を消す時に、 IVideoWindow(WS_CHILD)の時、IVideoWindow->put_Owner(NULL) を行うとタスクバーに一瞬ActiveMovieWindowのタスクが表示される。 put_Owner(NULL)をしなければ出ないのですが。 グラフにDVDマネージャを使ってる時に現れる。単純にファイル再生などは出ない。 また、ウインドウレスの時も IVMRWindowlessControl->SetVideoClippingWindow(0); をしても表示は消えない。 試しに他ウインドウのハンドルを渡すと、ちゃんとそっちに描画できるのですが グラフは停止させずに、表示を消す方法はどうしてます?
put_Visible じゃダメなのか?
put_Visibleはなんの動作もしてくれないよね
何もしないといえばIDvdControl2::Pauseだな
444 :
デフォルトの名無しさん :05/01/18 00:20:21
このたびDirectShowの世界へ足を踏み入れました 動画像を録画できるデジタルカメラを使い動画ファイル(.MOV)を PCに移して、ISampleGrabberを用いてNullRendererに渡すデータを 取り込み、フレーム毎のBMPを取り出すルーチンを書いたのですが、 WMVファイルではものすごい遅いですが、希望するフレームの データを取得することができました。しかし、.MOVの場合、最初のフレーム 画像だけデータを取得できるのですが、2枚目以降は1枚目の画像とすべて 同じデータしか取得できないのです。QuickTimeのDirectShowフィルタは、 quicktimealtを使って登録したため、WindowMediaPlayerやDirectShowの 最初のサンプルでは問題なく再生できます。ISampleGrabberだけでなく、 流れてきたデータを取得する他の方法をご存知でしたらお教えください。 また、ISampleGrabberを通して描画するとかなりパフォーマンスが落ちるのですが もっと高速な処理はあるのでしょうか? 長文で誠に申し訳ありませんが、ご存知の方なにとぞよろしくお願いいたします。
フィルタ通過では無く、描画してる画を取るなら WindowモードならそのHDCから取る WindowlessモードならGetCurrentImage
446 :
デフォルトの名無しさん :05/01/18 14:20:15
返答ありがとうございます。 最終的にRendererにわたるデータと描画されたデータ というのは同義として見れるのでしょうか? 解像度に依存しないデータを取得したいので フィルタ通過のデータを取得したいと考えています。 フィルタを通るデータを取得するためには Grabberかそのようなフィルタを作るしかないのでしょうか??
IBasicVideo::GetCurrentImage
448 :
デフォルトの名無しさん :05/01/19 00:56:25
IBasicVideo::GetCurrentImageを使ってみました。 非常に簡単に取得することができました。ありがとうございます。 続けての質問で申し訳ないのですが、 TIME_FORMAT_FRAMEをサポートしていない.MOV動画像は、 どのように正確な再生時間を取得すればよろしいのでしょうか? IBasicVideo::GetCurrentImageを使うにあたり、SetPositionを 使うのですが、フレームをサポートしていない場合時間を設定すると 思うのですが、正確な次フレームの時間が分からないと、真っ黒な 画面になってしまいました。前回一番最初の画面になりっぱなしだったのは、 正確な時間を与えていないためにフレーム取得ができなかったためだと 考えられます。何か良い解決方法をご存知の方がいらっしゃいましたら、 お手数ですが、なにとぞお教えください。
ファイル再生のグラフ作ってないから、すぐ試せないので無責任だが 取りあえず、一通りのタイムフォーマットで試してみては? 少なくてもバイトオフセットなら画は取れると思うけど。ダブリが生じるかも?
450 :
デフォルトの名無しさん :05/01/19 01:37:38
アドバイスありがとうございます。 サポートフォーマットを試した結果、 TIME_FORMAT_MEDIA_TIMEのみ、S_OKが返ってきました。 1フレームがレンダされたらCallBackで取得なんて手段は できるのでしょうか?
ちょっとヘルプ眺めてた シークしてから、IMediaControl::ポーズ、もしくはStopWhenReadyをしてから、画を取れないかな?
452 :
デフォルトの名無しさん :05/01/19 02:06:16
返答ありがとうございます。 うー、PauseやStopWhenReadyでもやはりダメです。 IMediaSeekのSetPositionのスタートの値に適当なスタートの 時間(ナノ時間)を入れて、ストップの値に3フレームぐらい経過すると 思われる値を入れて実行すれば画像は取れるのですが、スタート値が ジャストフレーム値を示していないと駄目な模様です。 ただ、GraphEditでは描画フレーム数を出しているので、何とかすれば 可能なものだと考えられるのですが、その方法が分かりません。
では、IVideoFrameStep::Step はどうでしょう?CanStepが有効かどうか確認 GraphEditがコマ数表示出来るなら、なにか在るのでしょう どっかのPINから合致するAM_MEDIA_TYPEと、VIDEOINFOを調べないといけないかな
>>452 描画フレーム数は文字通りレンダラが描画(受信)したフレーム数だと思いますが。
実際のところ、非圧縮AVI以外の形式では、任意のフレームへのシークはほとんどの
場合不可能です。レンダラの手前にteeでも入れて、自前フィルタ経由でシーケンシャル
に絵を取るのが良いと思います。
455 :
デフォルトの名無しさん :05/01/19 02:56:19
貴重なご意見ありがとうございます。 まず、IVideoFrameStepでのCanStepメソッドで調べた結果、 マルチプルに0を設定して試したところ、S_OKが返ってきました。 これは!?と思い、 IVideoFrame::Step( 200, NULL ); としてS_OKが帰ってきて、いざ、IMediaControl::Runで実行し すぐさまPauseメソッドで止めて、IBasicVideo::GetCurrentImage を実行したのですが、ううー、進んでない...何故に?という状況です。 また、452さんのご指摘では、任意フレームが取れないとのことですが、 実際GraphEdit上でドロップなし描画が行われているので、 再生レートを無視すれば1フレーム画像を取得できるのではないか? と考えていました。.MOVはMotion-JPEGのため、 コマ再生が可能と考えていたところに甘さがあったようです。 自前フィルタを作る方法しか手段はなさそうですか...。 例えば、レンダーに送信したフレームを横取りする手段としては どのような方法があるでしょうか?teeは初めて耳にする言葉なので もしよろしければお教えください。
456 :
デフォルトの名無しさん :05/01/19 03:05:51
IVideoFrame::Stepは非同期です。使い方間違ってるよ。 Stepの完了はEC_STEP_COMPLETEイベントを受け取った時です。 このときポーズされるので、そこで取らないといけませんよ。 Run、Pauseなどしたら意味がない
>>455 レンダラの手前に Infinite Pin tee を挟みNull Rendererあたりを改造した自前フィルタで取得する、
Direct3D のテクスチャ上に動画を再生するサンプル(AP内部で画像取得のためのフィルタを実装
してます)を改造する、など。
あと.MOVに特化するなら、素直に QuickTime で扱うという手もあります。
458 :
デフォルトの名無しさん :05/01/19 03:52:48
> 456さん、457さんご返信ありがとうございます。 まず、Stepの件は了解いたしました。となると、別スレッドでの GetEventの監視ルーチンが必要となりますか?Stepメソッドのあと、 イベント取得のWhile文を書いたのですが、む...素通りしてしまう。 このあたりよく分かっていませんのでもっとドキュメントを読んでみます。 また、Step後のIMediaControl::Runで出てくる画面 (実際にはRunしていませんが。)でちょうど200コマ進めた画面が表示される 様になりました。大進歩だと思います。ありがとうございました。 teeの件に関しましては、このコマ送りだと速度が非常に遅いと 思われるので調べてみたいと考えています。ただ、自作フィルタの 作り方から学ばなければ...。なお、QuickTime SDKも落としてきたのですが、 QuickTimeの方が、開発者数が少なく、Webページの情報も あまり多くないため、DirectShowにしようと考えた次第であります。
>...別スレッドでのGetEventの監視ルーチンが必要....? 普通にIMediaEventExで設定したウインドウに送られると思いますが EC_STEP_COMPLETEに限らず、グラフが生成するメッセージの取得が解らなければ、 SDKサンプル見たほうが早いです。ほとんど全てのサンプルに入ってます。
Microsoft DV Camera and VCRでDVデッキを制御しているんだけど シャトル再生が出来ない。コレって仕様?
461 :
デフォルトの名無しさん :05/01/19 14:57:38
>459さん。突っ込みありがとうございます。 すみません、テストプログラムなので、consoleアプリで 書いていたため、監視ルーチンが必要だと思ってしまいました。 コマ送りとフィルタ作成を試してみます。ただ、SDKヘルプで 気になる記述が...。IVideoFrameStep::Step「コマ送りは実時間で行われる。」 うそん。フレームレート無視再生で1フレームの画像を取得することが できそうにないです。やはり、Rendererフィルタ作って、流れてくる データを見るしかなさそうな気もします。各フレームに分割して パラパラ漫画で処理したいだけなんだけどなぁ...。 ともかく貴重なご意見ありがとうございました。
>>460 IAMExtTransport::put_Mode()で操作していればの話だけど
ED_MODE_SHUTTLEだったらMSのドライバではサポートされてないよ。
その代わり、
ED_MODE_PLAY_FAST_REV_n
ED_MODE_PLAY_SLOW_FWD_n
ED_MODE_PLAY_FAST_REV_n
ED_MODE_PLAY_SLOW_FWD_n
(n=1〜6)
というのがある。
>>462 レスどうも。
お手数ですが、それら定数はどのヘッダにあるのですか?
ググってもないし、MSDNにもないのです。
Xprtdefs.h
そのくらいフォルダ内文字検索しろよ
466 :
デフォルトの名無しさん :05/01/23 01:34:52
GetCurrentImage使って画像取得すると 左下の10ピクセルが黒くなり、画像がずれて表示されるんですけど どんな原因が考えられますか? ISampleGrabberのGetCurrentBufferで 同じような処理した場合は、問題なく画像を取得できます。 Delphiで製作してるんですが資料がほとんど無く困ってます。
こないだの人? >445 >447.. >457あたりだが、おいらもDelphiだよ。で答えは知らないケド DIBを展開するほうが間違ってたりしない? 関係ないがInt64にハマッタ
468 :
466 :05/01/23 03:16:39
469 :
デフォルトの名無しさん :05/01/23 06:22:43
問題なく取れたけどな、以下Delphiソース。中村氏のTNkDIB使用 procedure ......Button1Click(Sender: TObject); var bw: IBasicVideo; Buf: PByte; BufferSize: Integer; BitStream: TMemoryStream; NkDIB: TNkDIB; bmf: TBitmapFileHeader; dwSize: LongWord; pbmi: PBitmapInfoHeader; begin .......QueryInterface(IID_IBasicVideo, bw); if not Succeeded(bw.GetCurrentImage(@BufferSize, nil)) then Exit; GetMem(Buf, BufferSize); if not Succeeded(bw.GetCurrentImage(@BufferSize, PLong(Buf))) then Exit; pbmi := PBitmapInfoHeader(Buf); dwSize := (pbmi.biSize) + (pbmi.biSizeImage) + (pbmi.biClrUsed * Sizeof(TRGBQuad)); bmf.bfType := $4d42; bmf.bfSize := dwSize + sizeof(TBitmapFileHeader); bmf.bfReserved1 := 0; bmf.bfReserved2 := 0; bmf.bfOffBits := Sizeof(TBitmapFileHeader) + pbmi.biSize + (DibNumColors(pbmi^) * sizeof(TRGBQuad)); BitStream := TMemoryStream.Create; BitStream.Write(bmf, Sizeof(TBitmapFileHeader)); BitStream.Write(Buf^, BufferSize); BitStream.Position := 0; NkDIB := TNkDIB.Create; NkDIB.LoadFromStream(BitStream); Image1.Picture.Bitmap.Assign(NkDIB);
470 :
デフォルトの名無しさん :05/01/23 06:26:19
// --fnc function DibNumColors(bmi: TBitmapInfoHeader): Integer; begin if (bmi.biClrUsed = 0) and (bmi.biBitCount<= 8) then Result := (1 shr bmi.biBitCount) else Result := bmi.biClrUsed; end; 尚PLongとか引数がポインタ型になってるのは、俺のSDK移植ソースだからそうなってるだけ ウインドウレスモードも同じ感じでしたけど問題無いよ
ミスってた メモリストリーム作ってる所、ヘッダー書いた後 BitStream.Write(Buf^, dwSize); だ。 DibNumColorsの所、shrでは無くshlだ。 NkDIBではなく、標準のTBitmapでも良い。但しD6で確認。古いVerならNkDIBのが無難。
472 :
466 :05/01/23 11:26:19
>>469-471 ソースありがとうございます。
参考にして作り直したところ正常に表示されました。
>>467 の指摘通りDIBを展開する方が間違ってたようです。
ホントありがとう。2chで質問してみるもんだなあ。
.movの質問をしていたものです。 結局movファイルをDirectShowで直接扱うのは、 あまりに難しく、AVIに変換してやってます。しかし、 IBasicVideoは重い...。グラバも重い...。 これどうやったら早くなるの...(泣 現在はAppleからQuickTime SDKを 直接たたく方で思案している最中です。 2G超えるため、VFWが使えず難儀していますが、 お世話になった皆様へのせめてもの中間報告です。 DirectShowで解決できましたらまた、ご報告いたします。
>>464 うまく行きました。
ありがとうございました。
C#で動画再生のプレイヤ作ってみてるんですが、終了に凄まじいマシンパワーを要するのは仕様でしょうか。 BSプレイヤーとかさくっと終わってるんですけど、タスクマネージャを見てると、オイラのはマックスパワーガリガリ使ってます。 C++とかでDirectShowを直叩きしてるのとどんな違いがあるんでしょうか。 もしかしてAudioVideoPlaybackってDirectShowのラッパじゃないんですか?
直なんだから、Microsoft.DirectX.AudioVideoPlayback なんか使わない(使えない) C#で書いてないから分からないけど、マネージコードのサンプルとかはどうなの? 重いならそういうもんだろうし、軽いならクリーンアップの仕方がオカシイとか変に イベントループに陥ってるとか
>>476 >>クリーンアップの仕方がオカシイとか変..
終了処理を整理してみたら、普通にポンと終わるようになりました。
アドバイスThxでした。
スレ違いなのは分かってるけど、ここにはエキスパートが いるんじゃないかと思って質問します。 video for windows での問題 vfwでaviファイルのフレームを取得するとき、 CODECがXviDだと、AVIStreamGetFrameOpenのところで システム側にエラーが出るんですが、原因がわかりません。 ネット検索すると、英語で同様の質問があったんですが、 誰もレス付けてないみたいで。 Xvidに関連する問題だと思うんですが、原因は分かりませんか?
うむ、スレ違い
>>478 たぶん、以下のように第2引数にNULLを渡して
デフォルトのフォーマットを指定してるんだろ。
AVIStreamGetFrameOpen ( pstm, NULL )
BITMAPINFOHEADERを正しく設定して
(とくにbiBitCount)呼び出してみろ。
>>478 山勘だけど、XvidはbiCompressionにBI_YUY2あたりしかサポートして無いと思う。
BI_YUY2 = MAKEFOURCC('Y','U', 'Y', '2') ね。
いまTVチューナー用の録画ソフトを作っているのですが ICaptureGraphBuilderでウインドウに表示するところまでは出来たけど なんかとてつもなく遅くてまるでコマ送りみたいな感じ?なわけで。 GraphEditで試しに繋いだのはちゃんと再生出来るし録画もばっちり。 ちなみにテレビ視聴ソフト”ぬふああ”使うと同じくノロノロです。
どうしてでしょうか?
抽象的すぎ、まずGraphEditで色々な組み合わせ試せ 最終表示は標準VMRなのかオーバーレイなのか... ICaptureGraphBuilderは単にデフォルトのレンダーをさせてるのか... 中間フィルタ作って明示してるのか... 等々 解ってればそういう質問にはならない、{その}フィルタがどうとかのと発展した会話になる
>>482 GraphEdit によるグラフ構築のシミュレーション 外部プロセスからのグラフのロード
とかいうところを参考にして
GraphEditだけで作ったグラフと、実行しているソフトのグラフを見比べる。
CPU負荷が全然違うのなら、Windowsアプリの作り方の問題かもな。
>>480 ,481
感謝感謝です。
スレ違いにもかかわらず、
ありがとう。うまくいきました。
>>482 必要なグラフを自分で全部用意して自力でピン接続してみれ
それで正常に機能するならRander〜がタコな繋ぎ方してるのが原因
作ったグラフを.grfに書き出して見比べる。ヘルプ上に書き出し方ある。
489 :
デフォルトの名無しさん :05/01/26 23:12:24
Directshow始めたばっかなんですが。 エンコードにdivxつかってfourcc=m4s2なasfファイルを作りたいんですけど。 aviにならちゃんとはけているので、AsfWriterフィルタ使って IConfigAsfWriter2::SetParamで AM_CONFIGASFWRITER_PARAM_DONTCOMPRESSをセットして グラフをconnectDirect()しようとするとエラーになります。 なにか呪文が足らないのでしょうか?
#生成するものやタイプには触れませんが connectのが良いですよ
491 :
489 :05/01/27 01:13:07
connectでつなぐと、asf writerがwindows mediaでエンコード するモードでネゴシエートされるので、connectDirectしろと ヘルプに書いてあったので。 そんな変なasf誰もほしくないんでしょうか? 初期のi-motionとか、小型端末系でasf食うやつって、ファイルは asfだけど、コーデックはWMでなくてmpeg4系を指定されてるのが 意外とあるんです。
>>482 その.grfファイルを
「プログラムによる GraphEdit ファイルのロード」でいいじゃん
494 :
デフォルトの名無しさん :05/01/28 11:12:44
テレビチューナつきキャプチャボードやUSBカメラを使うアプリを作ってるけど、キャプチャカードならチューナーフィルタから、USBカメラならチューナ等を除いてソースフィルタから、グラフを構築するように作りたい。 このようにデバイスに依存せずグラフを構築する方法ってありまするか? AMCAPのソースが参考になったけど、あれってUSBカメラとTVキャプチャカードの両方が接続された環境だと正しく動かないんだよね。 だれかヒントちょうだい。
>>494 Microsoft謹製 Windows Movie Maker の動作(ビデオソース、チューナ、
それぞれをユーザに選ばせる)が限界だと思われます。
IMonikerを列挙してコンボボックスとかでユーザーに選ばせる サンプル見たりヘルプみたりしてりゃ分かりそうなもんだが
497 :
デフォルトの名無しさん :05/01/29 00:52:55
>>496 自動でやる方法が知りたいんです。
ふぬああみたいなのは勘弁。
はぁ?なんか質問がずれてる気もしないでもないが 列挙でDevicePathとか固定値があればそれでもいいだろうし #言っておくがふぬああ??なんて知らないし、〜〜みたいな・・なんて言われても知らん
>>494 そもそも、キャプチャカードとUSBカメラ両方つながってたら、どうすんのよ。
↑の人たちも言ってるけど、選択させる方向か、
どうしても自動化したいなら、それこそアプリケーションで独自に実装するべきでしょ。
どうすんのよ -> どうしたいのよ。
どっちにしろさぁ、キャプするときに汎用性を考えて aviにするかwmvにするか、またまたプレビューのみとかでグラフが違ったりするでしょ >494は自分の使ってるものしか考慮していないみたいだけど、 チューナ機能の無いキャプボードもあるし、MSDVもあるし、 自動化するなら全メーカーのDevicePath毎にグラフを作るのか?そんなの現実無理だろ? ある程度のパターンは決めておけるが。 それよりデフォルト動作で何がしたいのだ? 特定フィルタの在るMonikerを選択するのか? デフォルトレンダしてQueryInterfaceが掛かったら..と判断するか それとも固定グラフの作成を試みてエラーが出たら駄目と判断するか どっちでもいいんだが、君が言ってる事は都合のいい事なだけで、 どういう実装するかはあんたが決めること。仕事で客が居るなら要件を決めること。 使う側はMonikerが複数の場合はFriendlyNameあたりで選べるようなのが良いと考える。 次回起動時に同じMonikerがあれば初期選択してもいい。←こんなのは実装次第 勝手に作られて別のキャプボードも選べないような物は要らない
502 :
ぽこぺん :05/01/30 21:31:50
DX9の画像キャプチャでISampleGrabber使ってるんですが、 こいつがD3Dのバージョン古いやつに定義してるらしくて "d3d9.h"が正しく読み込まれません。 MSDNのISampleGrabberヘルプには "ヘッダー : Qedit.h をインクルードすること。このヘッダー ファイルは、バージョン 7 以降の Microsoft® Direct3D® ヘッダーとは互換性がない。" とか書いてあるんですが、これって 「ISampleGrabber使うんだったらD3D Ver9は使うな」ってことでしょうか? 回避策ってないんでしょうか?
503 :
デフォルトの名無しさん :05/02/05 22:26:01
DirectShow使ってる人に質問。 一つの関数の使い方理解するのに丸一日使ったりする俺だけど,これは俺のスキル不足が原因で,ある程度慣れた人ならDirectX関連のプログラムってすらすらかけるの? どうなのよ?
>>503 大丈夫、2〜3ヶ月でなんとかソフトつくれるようになったから。
>>503 MSDNにあるサンプルを参考にすれば理解も早いのでは?
俺はサンプルをほとんどそのまま流用しているけど。
507 :
デフォルトの名無しさん :05/02/07 16:18:17
>>502 誰も答えてくれてないが,俺も同じ内容ではまったことがある。
結局解決できずに諦めた。
みんなはどうしてるの?
dllの中に実態があって、それがそれ以前のqedit.hで定義されている I/Fと同じなら、そこだけパクって無理やりコンパイラに分らせるとか。 試してないけど。
Win64のDirectShowは、CPU使用率が少し高くなる。 まさかWOW64経由で32bit DLL呼んでいるってことはないだろうな?
ビデオキャプチャするフィルタグラフを作成してグラフをRun→Stopすると、 毎回メモリリークしていきます。 ぐぐってみると「キャプチャデバイスのドライバによってはメモリリークする」と 書いてる開発者もいるんですが、スタックダンプを見るとリークしてる アロケーションを実行してるのはquartz.dll内部なんです。 DShow使うの止める/フィルタグラフ止めない、以外に何か対処法ないでしょうか。
510自己レスです。 取り忘れているIMediaEventが溜まっているのが原因でした。
そんな事だろうとは思ってたが面倒なのでレス入れなかった 抽象的杉
GraphEditにフィルタを追加してピン上で右クリックしてRenderPinすると フィルタを補完して簡単に繋がってくれますが (意図しない場合もありますが) そのような処理はソースコードではどのような処理になるのでしょうか? builder->RenderPin(NULL,NULL,Filter,NULL,NULL)とかだと 接続できなかったというエラーが出てしまっています。
DirectShowでいろいろなファイルを何度も再生していると徐々にメモリ使用量と ハンドル数が増えます。 かといって_CrtSetReportModeでリークをチェックしてもひっかからないし。 PowerDVD + DirectX9SDK 2004Summerなんですが、バグでもあるんでしょうか?
Microsoft DirectX 9.0 SDK (February 2005) をインストールしたんだけど、DirectShow関連のヘッダやらlibが見つからん… 8の頃は一緒にあったような気がしたんだけど、どこにいったん?
別途Extrasをダウンロードしたら入ってスマタ。
IVideoWindowでビデオウインドウの表示領域を ビデオのサイズにぴったりと合わせるにはどうすればいいの? そのまま720,480とか指定したんじゃ枠の分小さくなるでしょ? 枠のサイズはLUNA等で環境によって違うから定数使うわけにも逝かないし
>>517 IBasicVideo::GetVideoSize
>>517 子ウインドウ枠の1ピクセルや2ピクセルくらい減ってもいいだろ
枠をなくせば考える必要なし put_WindowStyle(WS_CHILD ); put_WindowStyleEx(~WS_EX_CLIENTEDGE); でIBasicVideo::GetVideoSizeの値からput_Width/Height;
9.0あたりからDirectShowはExtrasに移されたみたいだけど DirectShowに代わる新しい仕組みでもできたの?
ない
524 :
デフォルトの名無しさん :05/03/08 23:08:58
なんでこう、ライブラリの名前がコロコロ変わりますか?
>>524 MS>コロコロ変えないと、新しいものを買って&使ってくれないじゃないか
MS>MSDNの変更ネタにもなるしな!
サポート料もがっぽり
527 :
デフォルトの名無しさん :05/03/10 23:32:52
DirectShow使うとBMP形式の構造体を動画にできたりしますか?
たぶんキミの想像とは恐ろしく異なるだろう。
意味わからんが、パラパラ漫画のイメージか?できるぞ。
動画の形式を問わないのなら Windows Media SDK の方が楽だと思うけどなぁ・・・
Windows Media Format SDK だった。
extras入れて見たが、サンプルすらコンパイル出来ない状態だ・・・ 未定義のエラーが出まくり。 VC6じゃもう駄目なのか? DWORD_PTRとかそれらしいのは定義出来ても、PinとかのDShowの 根本が未定義と言われてしまってはどうにも出来ん・・・
baseclassesはbuildした?
>>533 コンパイル通って、リンクの段階で未解決だかと言われてから挑もうと
思ってましたが、先に作らないと駄目なんでしょうか?
これVC6でLIBにするのかなり無理がありそうな・・・・・・・
半分挫折な予感がしてましたが、彷徨ってたらVC7のXML>VC6の プロジェクトコンバータを発見、DWORD_PTRとLONG_PTRを定義し、 二カ所キャストしたらBaseClassesは無事ビルド出来、以前書いた ソースも殆ど手直しせずにコンパイル出来ますた。 ここで詰まった話全く見掛けませんでしたが、VC6使いの方々は 皆自力でメイクファイル書いてらっしゃるのでしょうか? それとも2/9/2005以前のリリース分にはVC6用のプロジェクトも 付いてたんですかね?
サンプルをいじくって勉強しているのですがDumpフィルターをビルドして GraphEditからはいじれる事を確認したのですが、自分でプログラムから 扱うにはどうしたらいいのでしょうか。 pBuilder->SetOutputFileName(&CLSID_Dump, L"C:\\hoge.dat", &m_pMux, &m_pSink); こんな感じであってますか? ただ上記の様に書くと > captest error LNK2001: 外部シンボル "_CLSID_Dump" は未解決です。 とリンクエラーが出てしまいます。何をリンクもしくはコードとして何を書けば 使えるようになるんでしょうか。
DumpフィルターのGUIDをCLSID_Dumpとして定義するんじゃないかね。多分。
538 :
536 :2005/03/22(火) 22:01:09
DumpUIDs.hに DEFINE_GUID(CLSID_Dump, 0x36a5f770, 0xfe4c, 0x11ce, 0xa8, 0xed, 0x00, 0xaa, 0x00, 0x2f, 0xea, 0xb5); とあるんですがこれをインクルードするとリンクエラーが出るんですよね。
539 :
536 :2005/03/22(火) 22:10:10
ぐは、自己解決しました。 #include <initguid.h>をDEFINE_GUIDの前にインクルードしてやると 実体が出来るんですね。ばっちりダンプされました。
>strmbasd.lib(strmiids.obj) : fatal error LNK1103: デバッグ情報が壊れています; モジュールを再コンパイルしてください Debugでビルドすると、こんな事言われてしまうのですが、解消する事は 出来るのでしょうか。 strmiidsは、\Lib\x86にlibとして入ってるので、再コンパイル出来ませんし・・・
>>540 strmbasd.libとちゃうのん?
>>541 strmbasd.lib(strmiids.obj)のメッセージから、strmbasd.lib構築の際に
リンクしたstrmiids.libに問題があると思ってたのですが、strmbasd.libの
構築方法で回避出来るのでしょうか?
一応デバッグ関連の設定ちまちま弄ってはみたのですが、何やっても
同じエラーでした・・・
明るさとかコントラスト変えるにはどうすれば良いですか?
544 :
デフォルトの名無しさん :2005/03/27(日) 10:12:11
DirectShowで動画を表示する際にその動画に枠を付けたりしたいのですが、 リージョンだとかレイヤードウィンドウを使ったウィンドウを被せたりする と、描画性能がやっぱり落ちてしまうのでしょうか? やはり枠を付けるのならDirectShowの映像ミキシング機能を使うべきなので しょうか? 当方では高い描画性能を必要とするアプリを書いております。
ZSnes(DirectDraw?)でヨッシーのパネポンを動かし(Windowモード)、その上でネットに転がっている不定形時計を2種類(2つ同時にでは無い)動かしてみました。 一方の時計アプリはレイヤードウィンドウ、もう一方は不定形リージョンを使用していると思われる物です。 時計アプリその物の負荷をちゃんと差し引いて考えた所、両アプリの場合でしっかりと重くなる事を確認致しました。 失礼致しました。
GraphEditで、キャプチャデバイスのプロパティで「明るさ」や「コントラスト」 を設定できますが、これをプログラム内から変更する方法を調べています。 智慧をお貸しください。 …DirectShowとは関係ないかも知れませんが!
548 :
デフォルトの名無しさん :2005/04/06(水) 15:30:39
549 :
547 :2005/04/06(水) 18:46:10
>548 ありがとうごぜぇやす!出来ました! 何故これに気付かなかったのか…。 不甲斐ない。
550 :
デフォルトの名無しさん :2005/04/06(水) 19:05:31
>>542 ところでstrmbasd.lib構築時とアプリでの使用するランタイムライブラリは一致してる?
ballをベースにソースフィルタを作ってるんですがFillBufferを2回ほど呼んだところで FillBufferが呼ばれなくなるんですが何が原因なのかさっぱりわかりません。 トレースしてみるとIMemInputPin::Receiveでブロックしてしまっているようです。 何が原因かわかる人いますか?
>>550 デフォだった、マルチスレッド(DLL、デバッグ)で揃えてみたり色々
してみましたが、変わりませんでした。
ちなみにstrmiids.libは 2004/10/29 309,056byteですが、皆さんの所と
同じ物でしょうか?
553 :
デフォルトの名無しさん :2005/04/13(水) 00:48:07
質問。 DirectShowでVBR圧縮されたMP3を再生すると、取得できるDurationが実際より長くなるという現象がおきたのですが これに関する情報ありませんか?
平均ビットレートとデータサイズから計算してるからどうしてもずれるんじゃねえ?
555 :
553 :2005/04/13(水) 03:08:14
WinAmpだとずれてないぞ!怠慢だ! mp3しか調べてないが、まさかwmaとかでもVBRだとずれるのかな? 一度wavに変換するという糞手法を使えば解決可能ではあるが……
556 :
デフォルトの名無しさん :2005/04/17(日) 18:03:27
DirectShowでwmaを再生するプログラムを作っています。 (サンプリングじゃなくて音の)周波数やゲインはどうやったら 調べられますでしょうか?
ムリ
1.なんらかの手段でデコードする(まえにちょっと調べたんだが、サンプルグラバ使うかOutputFilter自作?) 2.生データが手に入ったらあとはFFTで楽勝
そんな彼方達に、VCTK。 お金をかけずに最新環境使いたいならこれで我慢すべし。 最新のIDEも使いたいとかなめたこと言ってるならしらんが。
561 :
デフォルトの名無しさん :2005/04/23(土) 17:17:01
DirectShow で 無音検出 できますか?
出来るが、君には出来ない。
563 :
デフォルトの名無しさん :2005/04/24(日) 20:59:35
キャプチャにVFWを使ってレンダラにDirectShowを使っているアプリがあって、 偶にDirectShow関係のスレッドでデッドロックを起こすんだけど、この原因と してVFWとDirectShowの同時使用が絡んでいるという事はあるのでしょうか?
あるんじゃないの
フィルタ作成に詳しい方にお聞きします。 ファイルのソースフィルタとスプリッタの間に入る Streamを調べるフィルタを作ろうとしています。 sample\filters\Grabberをベースにしていますが そのままだとプッシュフィルタなのでプルフィルタに改造しようと CSampleGrabberInPinにCPullPinをヘルパークラスとしてメンバに追加し、 CSampleGrabberOutPinにIAsyncReaderを追加しています。 とりあえずGraphEditでソースと接続するところまではできたのですが 次のスプリッタとの接続処理中にCTransInPlaceFilter::DecideBufferSizeで 入力ピンのアロケータを取得しようとしたところでNULLが返り 例外で落ちてしまいます。(入力ピンのm_pAllocatorがNULLらしい) こういった用途のフィルタの場合、それぞれのピンのアロケータは 本来的にはどのタイミングで割り当てられるものなんでしょうか? 私の実装がおかしいんだとは思うんですが、 入力ピンが接続が完了しているのにアロケータが取れてないのがおかしいのか 出力ピンがそのタイミングで入力ピンのアロケータを参照するのがおかしいのか まったく見当がつかない状態でほとほと困っています。 このあたり見れ、とかアドバイスおながいします。 DirectShow資料なさすぎで…( ´・ω・`)
>>565 スプリッタの入力ピンは(出力側の)IAsyncReaderで動作するわけだから、
自前のアロケータは持たないんじゃない?
CSampleGrabberOutPinではダメだ、ってこと。
>>565 >ファイルのソースフィルタとスプリッタの間に入る
>Streamを調べるフィルタを作ろうとしています。
追記。もっと言えば、スプリッタはIAsyncReaderを用いてファイルを
適当に読んで動作するわけで、ファイルソースとスプリッタの間で
上の引用部にある「Stream」なるものは存在しないと考えた方が良い。
>>566 > スプリッタの入力ピンは(出力側の)IAsyncReaderで動作するわけだから、
> 自前のアロケータは持たないんじゃない?
> CSampleGrabberOutPinではダメだ、ってこと。
改造した CSampleGrabberOutPin は CTransInPlaceOutputPin と IAsyncReader から派生していて、
IAsyncReader::RequestAllocator() でスプリッタのアロケータ要求に対して
CSampleGrabberInPin のアロケータを返すような流れで考えていたのですが、
この辺の処理がちゃんと実装できていないか、
スプリッタから見て2つ上流のアロケータを使いまわそうとすること自体が
間違っているような気がしてきました…
えと、まずは RequestAllocator() の実装が正しいのかチェックしてみます。
>>567 > 追記。もっと言えば、スプリッタはIAsyncReaderを用いてファイルを
> 適当に読んで動作するわけで、ファイルソースとスプリッタの間で
> 上の引用部にある「Stream」なるものは存在しないと考えた方が良い。
そうですね…単にファイルをぶつ切りにしたものでチャンクとかそのままかも。
フィルタができれば CSampleGrabber::Transform() で吐いて調べられるんですが…
最悪自前でフォーマット解析を覚悟しておきます。
もし僕が同じことをするなら、 CTransformFilter にしないで CAsyncFilter から派生させて 入力ピンを追加するという実装にすると思います。
>>570 > CTransformFilter にしないで CAsyncFilter から派生させて
> 入力ピンを追加するという実装にすると思います。
sample\Async\Filter の CAsyncFilter から IFileSourceFilter を削って入力ピンを付けるってことですよね。
ほとんど CBaseFilter に近い形になって、フィルタ内のピン同士を連携するメソッドを
たくさんオーバーライドしないといけないような印象があるんですが実装は難しくないですか?
CTransFormFilter の中身とか全然見てなかったのでちょっと躊躇しています。
この辺を理解してないのもマズいとは思うんですが、スキルいっぱいいっぱいなので…( ´・ω・`)
あとでもうちょっと詳しく見てみます。
一連のストリームの中にPullPinが2つって。相当うまく組まないとヘタるぞ (ストリームの起点が複数存在することになる そのフィルタを作って、どんなフォーマットデータの何を調べたいのか それを教えてくれれば代替案が出てくるかもよ
>>572 SampleGrabberだとメジャータイプMEDIA_videoしか横取りできませんが
それのMEDIA_stream版を作りたいのです。
サブタイプはAVI、MPEGあたりになるでしょうか(まだそこまで絞ってません
とりあえずピン接続は完了してて
AsyncFile->SampleGrabber改->Splitter->decoder->Render
まで繋がるところまではきました。
でもフィルタグラフをPlay(orPause)状態にすると
基底ライブラリが例外を吐いて落ちてしまいます。
CPullPinが読み取り用のワーカースレッドを起動しててその中で落ちてるんですが
サブスレッド内ではブレークで止めることが出来なくてどこなのかはわかりません。
泣きそうです( ´・ω・`)
SampleGrabber上流のアロケータがらみの問題のような気はするんですが
アロケータはAsyncFileとSampleGrabberのどっちが提供してるのかなぁ…
他にもいろいろヒントになるので適当に投げてもらえると助かります。
>>573 570 に一票
てーか漏れなら CBaseFilter と CBasePin から作るけど
・入力ピンでは接続先出力ピンの IAsyncReader を取得する
・出力ピンでは、すべての要求を入力ピンで取得した IAsyncReader に丸投げする
・フィルタ本体は何もしない
これだけでしょ?
>>574 いや、そんなに簡単じゃないって。CPullPinのコード読んでみーよ
グラフがランするとPullPinがReaderに送信要求を出し
Readerが要求に答える(データを送信する)って流れだぞ?
※PauseでPullPinのワーカスレッドが起動する
>>573 >それのMEDIA_stream版を作りたいのです
Streamをグラブしてもあんまり意味ないと思うが。ソースフィルタはあくまで
サンプル流すだけで、1サンプル1フレームで完結してるなどの保証は無い
単にデータ解析したいだけなら、PullPin繋いでCompleteConnect中で
取得したIAsyncReaderのSyncReadでいいんじゃね?
NullRendererのような感じで入力ピンがプルモデル、でどうでしょう ダウンストリームに繋ぐ必要あるのかい?
自前アロケータを作成しフレームを自作のDIBバッファに 格納できるようにしました。 表示する際のサイズを可変にして拡大縮小したいいのですが、 バッファに展開する際にサイズ可変にすることは出来るので しょうか?最悪取得したDIBを表示させる際にサイズ変更し ようかと思っているのですが。 接続時にメディアタイプを直接指定でVIDEOINFOHEADERの rcTarget,rcSrcを変更してもエラーになってしまいます。 アドバイスよろしくお願いします。
>表示する際のサイズを可変にして 表示ってレンダラ?ならフォーマットチェンジ
579 :
577 :2005/05/26(木) 01:19:33
>>578 返事ありがとうございます。
表示される際のサイズ可変というのは、例えば
128×128のムービーファイルがあったとして、それを256×256や、
64×64のサイズで表示したいということです。ウインドウサイズ等にあわせて。
で、そのときに元のオリジナルサイズのデータは取得できるようになったのですが、
伸縮まで行った結果をバッファが直接受け取れるのでしょうか?
レンダラはCBaseVideoRendererを継承したものを使用しているのですが、
フォーマットチェンジが今ひとつよくわかりません。
もう少しヒントいただけますでしょうか。よろしくお願いします。
>>575 んー CPullPin に相当する部分の処理は下流につながってる AVI スプリッター
なり、MPEG スプリッターの入力ピンがやってくれるはずなので。
・ストリームグラバの入力ピンは FileSource フィルタの出力ピンと接続できる
・ストリームグラバの出力ピンは FileSource フィルタの出力ピンに見える
(こいつに下流フィルタの CPullPin 相当部分が要求を出す)
を達成できれば質問主の目的は解決するだろう。
ただ、基本的にスプリッターフィルタの IAsyncReader への要求ってランダム
アクセスになることが多いから、データを横取りしてもその先が大変だと思う。
>>580 俺が勘違いしてたよ ごめんよ馬場さん
ストリームグラバの出力ピンがスプリッタの入力ピンと繋がる時に
(ストリームグラバの入力ピンが持ってる)IAsyncReaderのポインタを
使うってことね ならストリームは流れそう
だけど、グラバフィルタのどこでサンプル捕まえる?
>>579 表示の映像に関してはレンダラ(オーバーレイ)が勝手に伸縮してくれるよ
グラバなんかで取得するバッファについてはサンプルに格納されるサイズそのまま
なので自分の都合で伸縮する必要がある
RGBにしてもYUY2にしても、それほど難しくないから自分で伸縮ルーチン書くと良いよ
>>582 どうもありがとうございます。
取得したフレームをムービー以外のDIB画像と合成したり
する必要上オーバーレイの手法ははずしています。
今現在アロケータからバッファを取得しているDIBクラスの
ほうには拡大縮小の機能を実装しているので目的の達成自体は
可能なのですが、やはり処理速度を考えると伸縮まで行った
バッファを展開してもらえる方法がないのかと思いまして
今回の質問をしました。
それでは取得したバッファを自前で拡大縮小する方向で行おう
と思います。
どうもありがとうございました。
584 :
デフォルトの名無しさん :2005/05/27(金) 13:11:58
DirectShow のサンプル PLAYWND, CEPLAYIT をコンパイルして実行しようとしているのですが、 "Cannot find 'PLAYWND'(or one of its components). Make sure the path and file name are correct and that all the required libraries are available." といわれて実行できません。 リンクしたlibの内、対応するdllがないものは strmiids.lib のみですが、これが原因なのかと疑っているものの、strmiids.dll などというものは見あたらず、 かといって、これをリンクしないと、_IID_IBasicAudio,_CLSID_OverlayMixer,_CLSID_FilterGraph,_IID_IGraphBuilder などのシンボルを解決できずにリンクできません。 途方にくれているところです。知ってる人、何か助言ください! 環境: Platform Builder 5.0 OS: Windows CE 5.0 プロジェクトの設定(Addtional libraries): $(_PROJECTROOT)\cesysgen\sdk\lib\$(_CPUINDPATH)\coredll.lib $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\Ole32.lib $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\commctrl.lib $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\commdlg.lib $(_COMMONSDKROOT)\lib\$(_CPUINDPATH)\strmiids.lib
ageてしまった...m(__)m
586 :
573 :2005/05/30(月) 14:28:32
ちょっと修羅場ってて返答が遅れております。すみません。
>>575-576 フレーム単位の加工ではなくて、
PSやTSのパケットヘッダの抜き出しとかを
ダウンストリームに流しつつ行えないかなーと思ってます。
なのでフィルタの繋がりは変えられそうにないんですよー。
>>581 > だけど、グラバフィルタのどこでサンプル捕まえる?
出力ピンのIAsyncReaderの各メソッドでは
入力ピンのPullPin->GetReader()で取ったIAsyncReaderの同名メソッドを
引数そのままで呼び出すようにしてますので
SyncRead()あたりで引っ掛ければいけそうですね。
この流れだとフィルタのTransformメソッドには来ないかも。
基本的には580さんの考え方と同じだと思うんだけど
何がいけないんだろ…( ´・ω・`)
やっぱCBaseFilterとCBasePinから作るしかないのかなぁ。うーん。
ものすごい初心者で申し訳ないのですが、 Dim fm As FilGraphManager = New FilgraphManager Dim ime As IMediaEvent = fm Dim ip As IMediaPosition = ime ip.Rate = 2.0 て書いたら(VB.net)、「実装されてません」と言われました。 どこに問題がありますか?
適当に(←適切に、というような意味)フィルタ追加を追加してピンも ちゃんと繋いであげないと、IMediaPosition等は取得できない。 初めてなら、適当なファイルでRenderFile とかするのが簡単。
589 :
587 :2005/05/31(火) 17:37:28
さんくす。画像がないと意味ないってことか… サンプル見て、↓こんなのを書いてみました。 Dim timeline As AMTimeline = ....適当データ mRenderEngine = New RenderEngine Call mRenderEngine.SetTimelineObject(timeline) mRenderEngine.ConnectFrontEnd() mRenderEngine.RenderOutputPins() Call mRenderEngine.GetFilterGraph(mFilterGraph) Dim fm As FilGraphManager = mFilterGraph fm.Run() Dim ime As IMediaEvent = fm Dim ip As IMediaPosition = ime ip.Rate = 2.0 Rate行がなければ画像が出てくるのだが、 このままだと「実装がありません」と言われる。 AMTimelineに条件でもあるのかな?
単にそのグラフがRateを実装していないだけでは? ip.Duration などは取得できる? DirectShow のコンポーネントのうち、主にスプリッタやパーサ、ソースフィルタが IMediaPosition を実装しているわけだけれども、メディアの種類毎にある各種の フィルタが必ずしもなんでも実装しているわけではない、ということ。 再生レート変更不可能なものも普通に存在する。
591 :
587 :2005/05/31(火) 18:22:55
Durationは取得できる。 RenderEngineが使うグラフはたぶんIMediaPositionを実装してない場合があるという意味ですか? RenderEngineからグラフを取得してるので 自分でグラフを選んでいるわけではない点がまずい? どうすれば実装してるものを選べますか?
>>591 COM では「この機能は実装していない」というエラーコード(E_NOTIMPL)が存在します。
で、今回の Rate プロパティのように、インタフェイス自体は実装していても、
その中の特定の機能が実装されていない、ということもあるわけです。
>どうすれば実装してるものを選べますか?
簡単な方法はありません。
Rateでの速度調整はあきらめて、タイマー等で CurrentPosition を変更して
早送りなどをするのが妥当だと思います(うまくいかないこともありますが)。
593 :
587 :2005/06/01(水) 09:06:41
>592 たびたびすいません。 >簡単な方法はありません。 簡単でなければ方法はあるんでしょうか?
>>593 >簡単でなければ方法はあるんでしょうか?
set_Rate をサポートしているスプリッタやパーサフィルタを持つ
グラフを自前で構築して、それを用いればよいわけです。
ファイルからの再生で単に加速や原則だけしたいのであれば、
オーディオレンダラ(多くの場合基準クロックを供給する)を自作して、
音声の加減速処理を行いつつ速いクロックや遅いクロックを供給する
という手段もあります。
DirectShowを使って、複数の静止画からaviファイルを作成することは可能でしょうか?
できるよ。 プッシュソースが静止画連続で読み込んで タイムスタンプつけてポンポン送ればおーけー 静止画用意するほうが大変だと思う。
595ではありませんが似たような質問。 DirectGraphicsで描画したサーフェスをムービーとして取り込もうとしています。 ↑を参考に、CPushSourceBitmapを改造して、ようやくサーフェスの絵がAVIに出力できたというところです。 それで、現在はFillBufferとDirectXの画像が非同期なので、これを同期させてやりたいと思っています。 IMediaSeekingを使ってフレームの最終フレーム数と現在のポジションを取得できるようですが、 CPushSourceBitmapやCPushPinSourceBitmapとIMediaSeekingがどのようにつながっているのかイメージできません。 なんとなくIMediaSeekingがどこかでpinとつながっていて、pinが必要な値を返すのだろうと考えたのですが、 pinやCStreamにそれらしいメンバ変数やメソッドはありません。 このあたりどのように考えればよいのでしょうか?
598 :
デフォルトの名無しさん :2005/06/21(火) 00:08:40
おっと、ageておきます。
VFWなら十数行で書けると思うよ。 デバッグとか個人的な物で2Gオーバーとか考える必要無いなら、 VFWで書いてしまうのがてっとり早いと思う。
ありがとうです。 実はVFWは以前使ったことがあります。 それで非圧縮のAVIに出力していました。だいぶ昔のことです。 やっぱりVFWがいいのかなぁ…。
VFWSDKのみでの話なら解るが、 DirectShowでなんで非圧縮の話を持ち出すんだ つか、最終的に得たいファイルはaviなのか
・・・VFWでも普通にコーデック選択して圧縮出来るが。
プッシュソースならあれだCPushSourceSeekingとか そんな名前だったけか? とにかくソースの出力ピンクラスを派生元に向かって見ていけば IMediaSeekingがいるよ たぶん いなかったらいない
604 :
デフォルトの名無しさん :2005/07/12(火) 21:56:08
DirectShowでMPEGから音声を抽出するのは可能でしょか?
音が入ってるならヨユー
GraphEdit使ってDVDを再生してみたんですが CyberLink DVD Navigatorを使うと上手く再生できますが DVD Navigatorだと再生できません。 なぜでしょうか?
607 :
taka :2005/07/21(木) 20:47:32
DirectShow サンプルについている VMR\Text プロジェクトについての質問です。 Text.cpp ファイル20行目に #include "vmrutil.h" とありますが、このファイルは VMR\inc フォルダに入っているのであって、 Textプロジェクト内には挿入されていないですよね。 どうしてこのプロジェクトはこのファイルを参照することができるのでしょうか? 教えてください。 Visual Studioの環境設定なのでしょうか? それともコード中のどこかでこのファイルを参照できるように設定しているのでしょうか? 初歩的な質問ですみませんが、よろしくお願いします。
プロジェクトのどこかでこのファイルを参照できるように設定しているのでしょうな
609 :
taka :2005/07/21(木) 22:05:00
>608 お返事ありがとうございます。 その設定画面の場所を教えていただけますか?
それは断る
Asyncで大体100Mを超えるファイルを再生すると、途中で EC_COMPLETE します……。 読み込み速度を、 0x8000 で動かしていると、 0x65b000 からの読み込みを最後に終了。 実際は Length( ... ) でもって取得しても 0x8a6e804 と存在はしているのですけどねぇ。
なんじゃそりゃ
614 :
612 :2005/07/23(土) 16:43:00
てっきり書き忘れてたけど、 DirectX9実践プログラミングのSampleのAsyncで140Mほどのmpgを再生すると途中で再生が終了しちゃうのですよ。
速度が0x8000 とか意味わかんない
616 :
612 :2005/07/24(日) 07:07:32
あ、変な言い方だったし、別に書く必要は無かったかな? えっと、起動時の第2引数。通信速度、だったっけ、あそこは。 そこに適当に32768と入れてる。まぁ、これが1024だったところで、うちでは同じ幻象が起きてましたけど。
>>612 もっと人に伝えられる文が書けるようになってからおいで
618 :
612 :2005/07/24(日) 21:52:02
うっ……ごもっともですorz 色々書きすぎて何のことやらわからないね……。 簡潔に言うと、 DirectX9実践プログラミングのSampleのAsyncで140Mbyte以上のmpgを再生した時に 正常に再生は始まるけど、途中で終わっちゃうのです。 結構中身を色々とデバッグで覗いて見るも原因が分からないのです(;´Д`)
619 :
618 :2005/07/25(月) 17:23:12
( ゚д゚)ハッ! よく考えたら…… DirectX9実践プログラミングのSampleじゃなくて、DirectX9SDKのでしたorz
620 :
618 :2005/07/25(月) 18:02:19
……今思ったこと。 初心者質問スレに書いた方がよかった希ガス orz あまり気長にも待てないけど……それでも気長に待とう o...rz マルチするのもアレだし(;´Д`)
XPのマシンでDirectShowでwmvを再生するとCPU使用率が100%になったまま止まってしまいました。 一旦Ctrl+Alt+Deleteからタスクマネージャを起動して止めようとすると、何故か再生が始まっています。 ちなみにMCIウィンドウから再生しようとしても同じ症状が起こってしまいました。 ちなみに設定→読み込みまでは何ともなくて、再生メソッドに来たとたん止まります。 これってwmvの方に何か問題があって止まってしまうんでしょうか?
622 :
デフォルトの名無しさん :2005/09/13(火) 17:09:53
USBカメラからの画像を加工して表示したいのですが、 フィルタを作るのと、 ISampleGrabberにてイメージを取得して加工し、DrawDibDrawで描画するのは、 どっちがいいのでしょうか。簡単な方はどちらでしょうか。
サンプルもあるのでTransformFilterを使って実装するほうが簡単だと思う。
test
625 :
デフォルトの名無しさん :2005/09/14(水) 12:38:52
>>623 ありがとうございます。フィルタ作ってみます。
新たに質問ですが、フィルタって、動作中に外部からイベントやらなんやらで値を与えて
処理を変化させることってできますか?
626 :
625 :2005/09/14(水) 17:59:14
ちょっと調べてみたところ、インターフェースを作ればいいんですね。 結構いろんなことが出来るんですね。楽しいです。
627 :
デフォルトの名無しさん :2005/09/14(水) 19:53:33
DirectShowを使って不要部分の切り取るアプリケーションを作成しています。 IMTimelineを使用して必要な部分を設定し、IRenderEngineを通じてpCaptureGraphBuilder2 から出力をしています。この部分はほぼサンプル通りです。 ところが、元のファイルが720×480、29.97fpsのDV-AVIファイルなのですが、 これで出力したファイルは320×250、15.00fpsの非圧縮(RGB)ファイルになってしまいます。 元の形式のまま出力したいのですがやり方がわかりません。どのようにしたら元の形式で出力できるのでしょうか。 ご存知の方よろしくお願いいたします。
>>627 IRenderEngineの代わりにISmartRenderEngineを使えばできるはずです。
でも、使用するCODECが対応している必要があります。
AVIだったら大丈夫だと思うのですが・・・。
629 :
627 :2005/09/15(木) 22:57:15
>>628 ISmartRenderEngine使ってできました。thx
元ソースと同じ形式で出力するので、CODECは必要なかったです。
フィルタのISpecifyPropertyPagesで設定できる項目をプログラムからさわる方法をご存知ありませんか? VideoCaptureFilterに付いてるノイズリダクションの設定をいじりたいのです。 どなたかお知恵を拝借お願いします。
>>630 VideoCaptureFilterって何なのかよくわからんが、プロパティページはあくまでデバッグ用UIだからな
別インターフェースでノイズリダクションの取得/設定が行えるようになってるはず
それ探してみ
632 :
630 :2005/10/11(火) 09:23:58
>>631 サンクス.プロパティはデバッグ用だったのか.
IKsPropertySetがそれっぽい感じがするので試してみます.
ちなみに,AM_KSCATEGORY_CAPTUREカテゴリのフィルタです.
633 :
KT06 :2005/10/25(火) 16:38:59
VC++でUSBカメラの動画像を表示するプログラムを作成しているんですが、 VBのピクチャーボックスなどに表示できたりはできるのでしょうか?
所詮COMだし、できるだろー きっとな ビデオレンダラを こう チャチャッと組んで ボーンとな VB使ったことねーケド 泡盛うめえええ
>>633 へんな奴に回答されるとまともな人がレスつけなくなるから困るよな
その程度の質問ってことだがな。
637 :
デフォルトの名無しさん :2005/10/30(日) 17:30:02
音声キャプチャデバイスからサンプルグラバにつないでCallbackで音声を取ってるんですけど 正確に測っていないから分らないけど1秒単位でしか取得できていないみたいです。 (サンプルのデータ数が88200バイトだから多分ステレオ、44.1KHzで1秒だとおもう。) もっと細かく取れないでしょうか?
まだ書き込んでない。のろまだなぁ。さっさと答えろよ
グラフ構成くらい書けスカタン
というか質問した5分後にはわかっちゃったから別にいいんだけどね。
641 :
デフォルトの名無しさん :2005/11/01(火) 08:58:06
IVMRSurfaceAllocatorNotify9の実装が書かれているファイルってどれでしょうか? サンプル漁ってるのですが見当たりません・・・た、助けてください
642 :
デフォルトの名無しさん :2005/11/03(木) 12:27:09
製品検査のため、AD変換機(IEEE1394出力)の忠実度をおおまかに 調査したく、DirectShowでキャプチャするプログラムを作っています。 そこで質問なんですがDirectShowは、1394から流れてきた輝度と色差信号から RGBに変換する際、忠実に変換しているのでしょうか? 例えば全白画面をAD変換機が忠実に変換していれば、キャプチャしたRGB値は 全て255でしょうか?お願いいたします。
信頼性が心配なら、自分でYUV→RGB変換フィルタを書くよろし
あと、色空間の問題とか色々あるから一概になんともいえない
645 :
デフォルトの名無しさん :2005/11/03(木) 22:06:51
>>643 ,644
アドバイスありがとうございました。調べてみるとAD、Directshowとも
スケーリングの面でITU.601の規格を忠実に守っているかどうかなど
不明な点も多いので自作はとりあえず確認だけに留めておいて、複数の
機器で出力してみることにします。IEEE1394出力も付いた信号発生器
売ってないかなー。
646 :
641 :2005/11/04(金) 18:16:41
別な質問してもいいでしょうか。 VMR-9ってハードウェアに依存したフィルタなんですか? 例えばDirect3DTexture9がきちんと作成できる環境であっても ピクセルシェーダが使えないと機能しなかったりするんでしょうか? 私の環境はピクセルシェーダ対応のビデオカードでサンプルは動いているのですが、 dxdiagで3Dアクセラレータを切るとダメになります。(AGPテクスチャアクセラレータは切ってもOKでした) 3Dアクセラレータには色々な機能が入ってると思うのですが、どれがVmr9で使用されているのか分かりません・・・
647 :
デフォルトの名無しさん :2005/11/05(土) 21:13:46
directshowのインターフェイスやらオブジェクトの関係を分かりやすく説明してる所ないでかね? ここ取れると思ったインターフェイスがとれなくてノイローゼになってまつ
どこで何がとれると思ったのか相談したまへ
>>647 わかる。
動くであろうことを前提に、脳内ハイテンションでコードを書いたはいいが、
ハード側のアウトオブメモリやら何やらでコードの大幅な撤回を余儀なくされた時、
凄く虚しくなる。
650 :
デフォルトの名無しさん :2005/11/06(日) 21:39:46
>>648 IAMMultiMediaStreamから出力pinを取りたいんです
IBaseFilterとったり色々やってるんですがどうにも取れません
>>650 IAMMultiMediaStream使ったこと無いから実経験に基づいたアドバイスできねーけど
IAMMultiMediaStream::GetFilterGraphで取得したIGraphBuilderからEnumFiltersで
フィルタ列挙して、知りたいフィルタがいたらEnumPins って流れでいけねーかな
DirectShowに関するサイト作るとしたらどの辺の情報が欲しい? フィルタ開発とかグラフ構築方法とかサンプルグラバの使い方とか
全部!! がだめなら、グラフ構築方法かなぁ。
DirectXのヘルプが一番いいよ。
理解しやすいように、DirectShowのサイトを作ろうとすると、 ”MSDNの読み方”って感じのサイトになっちゃうんだなこれがw
657 :
デフォルトの名無しさん :2005/11/13(日) 11:57:23
USB Camera からの画像を mjpeg エンコードした後に取り込むアプリを書いています。 グラフは、USB Camera -> Smart Tee filter (preview はレンダラー) -> mjpeg encode filter -> SampleGrabber filter -> Null Renderer filter となっていて、取り込む方法は SampleGrabber の call back です。 グラフを Run して call back をセットすると、callback 関数は呼ばれるのですが、 渡されてくる bufferLen(bufferCB 時)、GetActualDataLength()(sampleCB時)が 毎回同じ値(mjpeg encode filter を入れないで RGB24 でとるのと同じ値)で 戻ってきます。 mjpeg encode して圧縮されてもっと小さい値になってると 思うのですが、どこが「まずそう」か心当たりがある方、ご教示ください。 なお、graph の中に mjpeg encode filter が入っているのは GraphEdit で 確認してあります。
実際にバッファの中をのぞいてRGB24形式だったか確認しましたか?
659 :
デフォルトの名無しさん :2005/11/15(火) 21:58:52
スレ違いになるかもしれませんが、質問させてください。 DirectShowを使いUSBカメラから動画をキャプチャーしています。 で、サンプルグラバーでフレームを抜くところまでは出来ているのですが その後、OpenCVに渡して、動画処理をしたいのですが、OpenCVへ渡すことが どうしてもできません。だれか、方法をご存知の方はいませんでしょうか? よろしくお願いします。
660 :
デフォルトの名無しさん :2005/11/17(木) 06:06:43
RenderFileをやるとAVIならAsyncReader,WMVならASFReaderなどをフレキシブルに追加して フィルタの接続なんかもやってくれるんですけど、ソースフィルタに何を使ったらよいのかだけを知りたい場合 なにかよい方法はありますか?RenderFileの機能からダウンストリームの構築機能を取っ払ったような感じのAPIとか。 あとWMVをデコードする場合、WMVideo Decoder DMOとか言うやつが自分のマシンにはあるんですが、 最近のマシンだったら大体これが入っていて、これをつかって再生するものなんですよね?
663 :
デフォルトの名無しさん :2005/11/20(日) 22:24:32
カメラ(ソース)のプロパティーを30fpsとかにしても サンプルコールバックで呼ばれる間隔が10fpsくらいなんだけど こんなもんなの? サンプルグラバから得られた画像をつなげて動画にしようと思うのですが、 グラフ全体のフレームレートが10fps固定のような感じです。 なぜだかわかる人、教えてください。
カメラによってサポートされているフレームレートは異なるが10fpsってことは無いと思う。 カメラのフィルタの出力ピンのcaptureピンにつなぐときにメディアタイプが指定できたはず。 そこでVIDEOINFOHEADER(だっけ?)に平均のフレーム間隔を指定できるから それを33msとかにしてconnectしてみるとか。(自信ないけど) GraphEditorで出力ピンのプロパティーを見れば大抵はフレームレートがかえられるから、 そのあたりのインターフェースを探してみれば?
IAMStreamConfig だか IAMVideoStreamConfig だか そんなのを使う > キャプチャする動画の設定
666 :
デフォルトの名無しさん :2005/11/28(月) 23:01:33
>>664 >>665 ありがとう。
久々に覘いたらレスがついててうれしいかった。
OleCreatePropertyFrameでプロパティウィンドウを出して設定変更してるので
IAMStreamConfig だか IAMVideoStreamConfig だかの代わりになるんだと思ってるけど
違うかもね。
VIDEOINFOHEADERは見てなかった。RGBとかしか設定してなかったから見てみる。
ちなみに10fpsってのはSampleCB関数のなかで、呼ばれたごとに前回からの時間を
GetTickCountでとって調べたんで、誤差があるかも。これが一番あやしい。
33fpsなんで、30ms前後を期待してたけど、100msくらいだったので・・・
もっと精度のある時間測定が知りたいところ。よかったらよろしくおねがいします。
それは本当に10fpsしか出てないんだと思う。
668 :
デフォルトの名無しさん :2005/12/10(土) 01:37:17
タイムラインで動画を加工した後にファイルとして保存したいのですが SmartRenderEngineの使い方がわからなく困っています。 RenderEngineでの書き出しは出来ているのですが・・・ IAMTimelineGroup::SetSmartRecompressFormatを呼び出した後は 圧縮されたストリームがRenderEngineのOutputPinから出てくるという解釈で良 いのでしょうか?
669 :
デフォルトの名無しさん :2005/12/10(土) 18:00:29
すいません質問です。フィルタを作っているのですが、 VisualC++でコンパイルでき、実行できたファイルをWindowsCEで動かしたく、 embedded Visual C++でコンパイルすると error LNK2001: unresolved external symbol DllCanUnloadNow error LNK2001: unresolved external symbol DllGetClassObject とリンクエラーとなってしまいます。 strmbase.libもリンクしてあります。 どうしても解決できないのでよろしくお願いします。
670 :
デフォルトの名無しさん :2005/12/13(火) 20:56:17
VC++6.0でDirectshowの勉強始めようと思ってます。 いろんなサイトを見るとDirectX8.0〜9.0bに関しての記述が多いですが、Directshowって今はPlatformSDKってのに入ってるんですよね? さて、質問ですがPlatformSDKってのはVC++6.0で使えるのでしょうか?
「今は」というなら今は .NETであるぞえ
672 :
デフォルトの名無しさん :2005/12/14(水) 15:52:14
お前らどういう環境でプログラム書いてるわけ?
もちろんMS-DOS2.0 + EDLIN
675 :
デフォルトの名無しさん :2005/12/14(水) 23:18:29
USBカメラ、ヘッドセットマイクを用いての動画、音声キャプチャプログラムを作っています。 長時間の記録を行うにあたって問題が出てきたので質問させていただきます。 問題とは、映像が音声に対し3%ほど再生時間(MediaPlayerで確認)が長くなってしまうということです。 フレームレートが高すぎるのかとも思い、フレームレートを減らしてみたのですが解決できませんでした。 音声の再生時間が正しいことは、キャプチャ開始時、終了時にtimeGetTime()を行うことにより確認しております。 動画を記録するさい、正確な時間で記録するためになにか工夫が必要なのでしょうか? 現在のグラフは以下のようになっています。 [USB Camera]->[SmartTee]->[AVI Mux]->[File Writer] [Audio Capture]->[AVI Mux] よろしくおねがいします。
676 :
デフォルトの名無しさん :2005/12/15(木) 02:06:29
久々に覘いたら、やっぱ廃れてるねこのすれ
>>675 音声を主にしてみたら?
最初につなげたほうが主になるから、
[Audio Capture]->[AVI Mux]
[USB Camera]->[SmartTee]->[AVI Mux]->[File Writer]
もっと精度のある時間測定はどうなった?
なんでティーで割ってるの?
>>677 Teeを挿入しているのはCameraからのデータにはタイムスタンプがついておらず
そのままではAVIMuxに接続できたかったためです。
>>676 レスありがとうございました。
で、一応解決できました。
今回はAudioストリームが正確な時間で記録できていたので
AVIMuxからIConfigAviMuxインターフェイスを獲得しSetMasterStream()により
Audioストリームをマスターストリームとしファイルに保存したところ、3%の遅れが出ていた30fpsにおいては
まだきちんとテストはしていませんが動画もほぼ正確な時間で記録することができ、
同期もほぼ取れているようでした。
カメラのキャプチャピンにつないでる?
なんだそのUSB Cameraデバイス ライブデータなのにタイムスタンプついてねーの??
681 :
デフォルトの名無しさん :2005/12/23(金) 16:57:02
DirectX9 SDKからDirectShowがなくなったらしいけど、ランタイムはDixrectX9ランタイムでいいの?
DirectX9 SDKからDirectShowがなくなった なんでー
Platform SDKに移行しますタ
だれかIMediaTypeStream、IMediaTypeSampleの使い方しりませんか? エンコした動画データをバッファで取得したいのだけど、どうもうまくいかない。 やっぱり自作フィルタ作らないとだめ?
685 :
デフォルトの名無しさん :2006/01/06(金) 17:57:09
↑IAMMediaTypeStream、IAMMediaTypeStreamでした、すいません、間違えました。
,.r'彡 i i :''´ `~`'''‐- :.、 ,......,_ r'´ ,..::'' 'i.、 ,r:'´ .,. `'::.、.i',....=-ヽ /::'' :: ,/´~>´::.. ../ ::/ ,::' ./'; '; , y'´DirectShow '´ / / ,::'´ / ./ .,/:' :/ '; '!、 .':, ':, / は ./´ ,r:' ;:' ./ ./ / / / 'il ! ', ', 't! だ ;/ / ,:' ,:' /// // i.!: i .'; i:、 |. め .// ./ ,y / ;r' /;' j'´ i i i い::!':, .!.. な '/ ,/ /' / ;:' j'' /_,,.:ノ !.!i ! :| .'; i、. .の i. /! // / :,/--=‐ ''''''"~` ゝ,i ! i !:'; ? /i'/ ; /j /.,..-===‐k `''‐ .,_.!i' !:', .i.i.;' ;' r'ソ! t!'"´/,ノ`ヾヽ ___ `j''‐: ,i i!', i ii' .; !/.!:! .'i:, .!,.i .,,,:'!、 ,..r=-j‐ミミ:.、i!T `''''!''~! .! i! ! :! ! :. !:ゝノ´ソ ' ,r''ソ-:'´ :ノ`ミk| ! ! i i ! i'; !!:! ⊂:,t,.....::r'' , ´ i:''t ノyソ ノ''! ソ .i __!_i,,i ':, !|i/〃 ,ri -t,_ `´ ;:' ´ ! /! ;' ''"~ `ヽ,''t,y " /// ヾj /// ,.`''''"-,つ /! /! / 'k, `k, ,r=‐--- :.,、 /////~´ //i .i:j.;' .':, i\ ;' ; ノ_/ノ /:i/ '; ' i! `>、 ', ! _,r''"~// :/ ノ だ A DShow tj'"~/! ''-,`'‐- ..,,,..ノ ,,...- ''"i'; | './ / . め P み '! i ! t `'-=--‐ ''" /:!';`'k-y___/:/ . な. I た i ! ';'k, i/' ノ i! 丶丿~'''''‐-:., . の はい ! ヽ, '‐=..,,,,,,,,=-‐:'" ノ / /' ヽ . ? も な i `ヽ,__ _,..;r" / " . う |'-:., ~''''''""~ ,/
こんなやつがでてくるなんていよいよダイレクトショウもクライマックスだね!
PSDKだから昇格じゃないか?
土方
テレビが台から落ちて天ぷら鍋の上に
IAMVfwCompressDialogsでSetStateが機能しない問題は解決法があるのでしょうか? SendDriverMessageでICM_SETSTATE送りつけるのもだめでした。
オーバーレイミキサーで合成された画像ストリームをファイルに落としたいのですが どうすればよいでしょうか
693 :
692 :2006/01/11(水) 18:38:19
↑ すみません、XP,DirectX8です。
初歩的な質問で申し訳ないですが、 LINK : fatal error LNK1104: ファイル "C:\Program.obj" を開けません。 link.exe の実行エラー というエラーがでて、実行できません。 どのような理由が考えられますか? 誰かレスお願いしますです。。
最新のSDKに見当たらないのですが
確認しないで答えるけどちゃんとオプション選択したか?
WinGのスレってないのね(´・ω・`)
今更何のために使うのか、理由を明確かつ簡潔に説明せよ。
ttp://www.geekpage.jp/programming/directshow/ivideowindow-3.php を参考に、DirectShowでビデオのキャプチャに挑戦中です。(VC7 + DirectX9)
CCDカメラ <=(NTSC)=> キャプチャユニット <=(USB)=> PC という組合せでやっております。
狙ったウィンドウへの表示は特に問題無くできますが、サイズで疑問があります。
手持のものだと、各種初期化後にIBasicVideo::get_VideoWidth で320が得られます。
この場合、「幅320pixelより大きいウィンドウに表示させても、所謂『デジタルズーム』に
なって、画像そのものの情報量に変わりはない」という認識で正しいのでしょうか?
またキャプチャユニットが、上記の様なデジタルズーム***でなく***、複数の画像サイズ
(例えば320x240と640x480)に対応している事はあり得るのでしょうか?というのも、附属の
ビューアに複数のサイズを選択できる項目があったもので・・・デジタルズームなら
納得のゆく話なのですが。
素人質問で申し訳ないです。「ヘルプ&文献のこの辺読んでこい」というヒントでも
良いので何卒御教示下され
いまいちポイントがよくわかんねーけど 入力のデータサイズ自体はかわんねー ウィンドウサイズを変更しても表示自体はレンダラが上手いことやってくれる キャプチャユニットが対応してるかどうかはしらね グラフエディットでキャプチャユニットのプロパティページでも見てみれば? 変更できるなら設定項目があるはず
おそらくUSBキャプチャデバイスにカメラをつないでやってるんでしょ? カメラから入ってくる信号はNTSCとかそういう奴でしょ。 よく知らないけどたぶんそれはアナログ信号だから1ラインを何ピクセルにするかはキャプチャデバイスで決める事が可能なんだと思う。 で、何ピクセルにするかはキャプチャデバイスに設定された画像サイズできまるのでは? ユーザーがCCDカメラについた操作パネルを操作して光学ズームさせたら そのズームされた映像が取れて、それがキャプチャデバイスに入るだけだろう。 ソフトでキャプチャデバイスにVGAとかやってもキャプチャデバイスからカメラに電文がとんで 光学ズームしてくれますとか、そういう機能はないと思う。
Platform SDKに移ってウィザード無くなったのね
703 :
699 :2006/01/15(日) 02:40:05
お返事ありがとうございました。
>>700 わかりにくくて申し訳ないです。要は「どこまでレンダラが上手くやってくれるか?」なのです。
Platform SDK附属のDirectShowサンプルの"AMCap"でストリーム形式のプロパティページ
が呼べる(IAMStreamConfigから)のですが、手持のキャプチャだと、そこの「出力サイズ」
コンボボックスに320x240、640x480両方の項目あるのです。
ここで640x480を選択することと、手でウィンドウをみょーんと640x480に伸ばすことに、
違いがあるのだろうか?という点で悩んでおるわけです。(見た目には区別がつきません)
恐らく前者がキャプチャデバイスそのものの設定で、後者がレンダラ(StretchBltとか?)の
仕事だと思うのですが・・・
>>701 > 1ラインを何ピクセルにするかはキャプチャデバイスで決める事が可能なんだと思う。
> で、何ピクセルにするかはキャプチャデバイスに設定された画像サイズできまるのでは
私めもそう思います。で、その「何ピクセルにするか?」という設定は、どこから行うか御存知でしょうか?
上記のプロパティページがそうかなと思うのですが、自信が持てないでおります。。。
その設定はプロパティーページでもできるし グラフを作るときにキャプチャデバイスの出力ピンにメディアタイプを設定するなどでも変更できると思う。 DirectShowに付属のAMCAP.EXEを動かして望みの動作があったらAMCAP.EXEのソースを見てくれ。 で、まともなキャプチャデバイスならQVGAで取った奴を縦横x2してVGAだとはやらないと思う。
補足 キャプチャデバイスが入力されるアナログ信号を 何ピクセルにサンプリングするかで入力画像サイズが決まる VGAでキャプチャした映像はQVGAより緻密。 つまりQVGAでとったものをVGAにレンダラで引き伸ばせば荒くなり、 さいしょからVGAでとったものをそのままレンダラに表示させれば荒くならない と、思います。
706 :
sage :2006/01/18(水) 07:13:15
GraphEditでUSBカメラからWMVに保存って出来るのでしょうか
DirectSnow
grapheditで簡単な再生グラフを作ろうと思ったのですが、どうも上手くいきません アナログ信号→USB接続のハードウェアMPEG2エンコーダ→パソの流れで アナログ信号をディスプレイ上に映すだけ…なんですが CrossBar→WDMEncorder→MPEG2DemultiPlexerとつないだところで DemultiPlexerのプロパティが開けません(Requested Property page could not be displayedと出る) ネットの資料とかではプロパティからDemuxの出力Pinを作るのですが、これじゃレンダラに届きません ご教授願います
709 :
708 :2006/01/28(土) 19:29:05
カキコ後、Platform SDK\Sampleのリドミを見たら 「grapheditを使用する前にproppage.dllを登録してください」と言う記述が 登録したら解決しました…orz graphedit上ではVideo Render迄つながったのですが、実際にグラフを走らせると 真っ黒なウィンドウが出るだけになってしまいました この場合は、MPEG-2 DemultiplexerのPID設定がマズイのでしょうか stream_id Mapping、分からない部分は適当にいろいろ試してみたのですが駄目でした 引き続き素人丸出しですが、よろしくお願いします
710 :
デフォルトの名無しさん :2006/02/24(金) 01:05:56
aviとかmpgだと速度変更できるのですがwmvだとできません。 どうすればいいのでしょうか?
自分でWMVのコーデック書けばいいんでない?
712 :
デフォルトの名無しさん :2006/03/07(火) 00:18:33
StreamRenderでつなげたフィルタのピンを解除するにはどうすれば よいのでしょか? できれば参考ソースおよび参考サイト等教えてください。
>>710 avi,mpgでエンコードしてからファイル名拡張子をwmvに変更する。
>>712 切断すればいいだろ
サンプルソースをあてにする時点で無理だろうけど
>>713 素人さんにそんなこと教えちゃダメポ
信じちゃうでしょwww
MP3やWAVをDirectShowで再生しているのですが、 IMediaSeeking::SetRate()で再生速度を変更した上で、 IMediaSeeking::GetCurrentPosition()で再生位置を取得すると、 実際に再生している位置と、取得された位置が一致しません。 例えば、1.2倍速に設定すると、GetCurrentPosition()は1.44倍速(?)で 進んでいき、GetCurrentPosition()が終了位置に達しても、 実際には再生が続いているという現象が起きています。 正しい再生位置を取得する方法はありますか。
Audio renderの前に入るダミーのフィルタを作って 送られてきたメディアサンプルのタイムスタンプを取得すればいいんジャマイカ?
ダミーフィルタですか。フィルタの作り方が全く分かっていないので、 まずはそこから調べないと・・・。 もう少し挙動を調べてみたのですが、GetCurrentPosition()が終了位置に 達したもののまだ再生が続いている状態で、さらに速度変更を行うと、 突然再生が終了してしまいます。ちょっとやっかいかも。 速度変更なんてただのおまけってことでしょうか。
SampleGrabberフィルタをグラフに挿入して、 サンプルキャプチャ通知コールバックさせれば 現時点でレンダリングしてるサンプルの時間が取れるね。
TextSS のWindowsXP(Professional)64bit対応化おながいします もしくは64bitにネイティブ対応したテキスト置換ソフトありますか? そういや64bitにネイティブ対応している2chブラウザてありましたっけ?
>>718 グラブビルダからの指示を受けたフィルタ内部の話をすると
GetCurrentPositionはレンダラフィルタが返すからね
んでSetRateはシークを担当するフィルタ(普通はパーサ)が処理するんだわ
なのでパーサとレンダラの挙動が上手く一致しないとズレが生じることになる。
通常、レンダラが処理するGetCurrentPositionはサンプルのタイムスタンプを見てるだけ
SetRateで設定した値が正しく反映されていないことも良くある話 要はパーサ次第
SetRateの後でGetRateしてみた?
スマンがちょっと教えてくれ。 SDKのサンプルの使ってプログラム組んでみたんだけど サンプルのソースコードを組み込んで使っても著作権的に問題ない?
723 :
718 :2006/03/24(金) 01:15:14
しばらくほったらかしにしていましたが、
>>719 の方法で正しい時間が
取得できました。
>>718 の後半については、取得した正しい時間で
一度SetPositionsしてから、SetRateすることで対処しました。
>>720 GetRateで確認したところ、ちゃんと設定されていました。
724 :
723 :2006/03/24(金) 01:16:15
726 :
デフォルトの名無しさん :2006/04/15(土) 00:13:58
今までSampleGrabberを用いてカメラからのフレームを取得していましたが 今回3Dテクスチャレンダラーを使用したことで、qedit.hが使えなくなってしまいました。 そこで、IMediaSampleを使ってフレームの取得を考えているのですがうまくいきません。 きれいに一枚のフレームを取り出すためにはどのような処理を行えば良いのでしょうか?
酒飲んだ勢いで書く MediaDet
graphedtで作ったgrfをCのソースにするソフトってないの? ないね うぐ〜DShow氏ぬ
Cで読み込む方法じゃなくて同様の事をCで記述する方法を知りたいんですが
733 :
デフォルトの名無しさん :2006/04/18(火) 00:48:48
VC6で作ったDirectShowのプロジェクトをビルドしたらHSEMAPHOREが無いというコンパイルエラーが・・ バカマイクロソフト視ねキチガイ さんざん調べるとDirectX9.0SDKの2004summer(ばーじょんも沢山ありやがって死ね!!!!) とか、そのあたりの奴はVC6をサポートしてやがらねぇとくらあ! お前らに教えておくぜ。そういう時はDirectX9.0 2003 summer updateを使え! これならまだダウンロードできるしバッチリビルドできた! がんばれよ!
>>731 エラー処理を除いて考えれば、プログラムで書くのはGraphEdit上でやることと大差ないよ。
フィルタを引っ張り出して、ピンを列挙して、ピン同士をコネクトして、とか、泥臭いけど。
GraphEditで作った構成を再構築したいというのであれば、
>>730 のでいいんじゃない?
今からDirectShowを使ってUSBカメラからキャプチャした画像を OpenGLに流し込む作業を行おうとしているのだけど、すこし確認させて欲しい。 OpenGLで画像を扱うとき、2の二乗(128, 256等)ピクセル長の画像が望ましい。 カメラからSampleGrabberを通じて画像を取得しようと思っているのだが、 まず使用カメラにも依るのだろうがソース自体を任意のサイズに吐き出されるのは 無理とみなしていいのだろうか? たとえば、手前のカメラだとサイズは、 (352/288) (128/96) (160/120) (176/144) (240/180) (320/240) (640/480) のモードが見つかるのだが、この中から選ぶことになると。 つまり希望するサイズが見つからなければ自分で加工しなければならないのだろうか? 最終的にSampleGrabberでキャプチャした画像を捕まえるとき、 任意の大きさで取り出せる方法があれば教えて欲しい。 サンプルが見つかれば尚うれしい。その場合、Direct3Dでもかまわない。 助言をおねがいしたい。
>>736 D3Dで任意矩形にテクスチャマッピングしてそれを取得くらいしか思いつかん
738 :
デフォルトの名無しさん :2006/04/21(金) 19:50:38
DESで暗号化したMpeg4を再生したいのですが、 ソースフィルタで複合化し、そのデータをMpeg4のフィルタに食わせてやればいいのでしょうか? サンプルはどれもすぐVideoRenderなのでイメージがつかみづらいです。
739 :
デフォルトの名無しさん :2006/04/21(金) 20:05:36
サンプルの、CAsyncFilterのファイル読み込みのところで 複合化処理すればいいんですかね? で、その右にMpeg4のフィルタですかね。 でも単純にMpeg4ファイルをDESで暗号化した場合、 そのファイルをWindowsMediaPlayerにドロップしても レンダリングしてくれなさそうです。 適切なフィルタを選んでくれる関連付けの仕組みってどうなってるんでしょうか?
741 :
デフォルトの名無しさん :2006/04/21(金) 20:27:32
ありがとうございます。 すみません、日本語のところばかり読んでました。 じっくり読んでみます。
742 :
デフォルトの名無しさん :2006/04/21(金) 20:32:02
>>735 GraphEdtではCOMインタフェースのメソッド呼べないぞー
プログラムで書くしかないぞー
744 :
デフォルトの名無しさん :2006/04/24(月) 15:12:21
音声のピッチを調節する仕方を教えてください。 IMediaPosition->put_Rate(2.0); で再生速度を変更した後、ピッチの調節がしたいからです。
746 :
デフォルトの名無しさん :2006/05/03(水) 18:31:49
Vc++2005を使っています。 directshowのCaptureGraphBuilder2 で、ファイル出力とプレビューを実現できますが、 ファイル出力ではなく、ネットワークストリームに出力するにはどうすればよいでしょうか。 よろしくお願いいたします。
748 :
デフォルトの名無しさん :2006/05/04(木) 12:19:50
>>747 返信ありがとうございます。
やっぱりActivex9の頃のDIRECTSHOWにはその様なフィルターがあったのですね。
Microsoft Platform SDKのDirectShowにはなぜか見あたらないのです。
.NETのtcpかudpと組み合わせればできるのかなとは思うのですが、
初めてなので良くわからないのです。
昔のバージョンをインストールしたほうが良いのかな・・・。
>>748 フィルターはフィルターだけど、サンプルコードだよ・・
とりあえず手元にあった DirectX 9.0 SDK Update (October 2004) Extras の中を見たらあった。
落として取り出してみれば?
DirectShowをWin32のCで使っています。 DVDの再生プログラムで、再生できるのは音のみで、映像が表示されません。何が原因だと思われます?誰か助けて下さい……
>>750 まずGraphEditでグラフ組んで、実際に映像・音声がでる確認はしたのか?
753 :
direct歴2ヶ月 :2006/05/07(日) 13:10:47
GraphEditでは大丈夫なんですが… 何度やっても映像が表示されないです。
正常にRunできてるんだよな。音が出てるくらいなんだから。 ビデオウィンドウはどんな感じなんだ?真っ黒か?ぐしゃぐしゃな感じか?
755 :
direct歴2ヶ月 :2006/05/07(日) 14:30:49
VideoWindowすら全く表示無しです(;_;) 音が流れるだけの状態です。
レンダラに繋ぎ忘れているとかいうオチはなしよ
AddGraphToRotでもやって目で確認すれば
758 :
Direct歴2ヶ月 :2006/05/07(日) 15:11:05
それは大丈夫です RenderDvdInterface()ですよね?
やってみます!
>>755 VideoWindowすら全く表示無しです(;_;)
え?表示ウィンドウは自分で用意するんだよ?
761 :
Direct歴2ヶ月 :2006/05/07(日) 15:24:01
やってますよ IVideoWindowのメソッドでしょ? 一般の動画は再生できるんです。ただDVDだけが音声のみで……
Renderで自動構築してるの?個別に自分でフィルタつないでるの? 個別につないでるならグラフ構成書いてくれ。情報少なすぎ レンダラはちゃんといるのか?こんな感じで構築後に確認してみ? IBaseFilter *vid = NULL; m_pGraph->FindFilterByName(L"Video Renderer", &vid);
そのDVDの中身は何だ? スプリッタとかデコーダが対応してないフォーマットジャマイカ
764 :
Direct歴2ヶ月 :2006/05/07(日) 16:07:52
自動構築かなぁ? CoInitialize&CoCreateInstanceの後にGetFiltergraphでIGraphBuilderへのポインタ取得 後にRendererDvdVideoVolume これ以外の、レンダラは無し。 さっきのやつそのまま書いてエラーチェックした所、S_OK以外で失敗?でした そのまま L"VideoRenderer"でいいんですよね?
765 :
Direct歴2ヶ月 :2006/05/07(日) 16:08:56
DVD-Videoです(映画)
MSDNみたらこうあったが > RenderDvdVideoVolume メソッドは、DVD-Video のボリューム再生に関するユーザー指定に従って、フィルタ グラフの作成を完了する。 いいのか?
768 :
Direct歴2ヶ月 :2006/05/07(日) 16:22:13
これじゃ出来ないんですか? もし手動で全て繋ぐとしたら、必要なインターフェースとメソッドを教えてください。
HRESULT RenderDvdVideoVolume( LPCWSTR lpcwszPathName, DWORD dwFlags, AM_DVD_RENDERSTATUS *pStatus ); 戻り値やAM_DVD_RENDERSTATUSの値はチェックしてるか S_OK以外が帰ってきてるんじゃないか?
771 :
Direct歴2ヶ月 :2006/05/07(日) 16:49:33
格納されたステータスをしらべたら、Line21とかいうのに問題が生じた見たいです。 これは一応用意はした(GetDvdInterface)んですが、使っていません。 あと、MSDNはパソコンでも携帯でも読んだんですが、何が誤っているのかがわかりません。
>>771 「問題が生じた見たい」じゃこっちはわからんよ。
助けて欲しいなら具体的にどのフラグがどの値だったから、とか書かないと。
GraphEditでは再生できるなら、構成に問題は無いんだ。
RenderDvdVideoVolumeのdwFlagsは色々と試してみたか?
773 :
Direct歴2ヶ月 :2006/05/07(日) 17:28:01
dwFlagはいじったんですが、変化無しです RenderDvdVideoVolumeに渡すAM_DVD_RENDERSTATUSの、取得したフラグの内容→失敗したストリームはAM_DVD_STREAM_FLAGSのAM_DVD_STREAM_VIDEOです
どうしてLine21に問題ありと判断したのか
GraphEditのRenderPinで自動構築されるフィルタ構成書いてくれ
>>775 最近はGraphEditでRenderDvdVideoVolumeできるように」なったのか。
うごかねえ言ってるアフォ ソース貼れ
すみません、教えて下さい。 映像ファイル(*.avi)を再生するにあたり、その再生速度を連続して(40〜60回/sec)変化させるプログラムを組んでいるのですが、よい方法をご存知ではないでしょうか。 Directshowでどうにかなるかな、と思っていたのですが、これの内部処理は"再生停止->再生速度設定->再生開始"となっているようで、実際に走らせて見るとカックンカックンになってしまいます・・・。 再生速度の可変範囲が0〜20倍(ホントは100倍くらいまでの方が都合が良い)なので、MCIを使うことができません(<-勘違い?)。 或いは、フレームをひとつずつ読み込んでは、fpsを可変にしてVRAMに投げた方が良いのでしょうか。 開発言語はCで、開発環境はVisualStudio.NETです。 よろしくお願いいたします。
> 再生速度を連続して(40〜60回/sec)変化 用途がわからんが、DirectShowでやるには無理と思ってください。
>実際に走らせて見るとカックンカックンになってしまいます・・・。 実現できたら、自分の頭がカックンカックンしそうだな・・・
781 :
778 :2006/05/11(木) 01:17:54
>>779 うぅ・・・。
更新頻度が10回/sec程度でも不可能なのでしょうか・・・。もしくは、再生速度の可変範囲を0〜2倍程度まで抑えて、MCIを使うことでは解決できるのでしょうか(スレ違いでごめんなさい)。
>>780 それほどまでに難易度の高いものなのでしょうか・・・?
一秒以内の間に再生速度が何十回も変わるって、そのプログラムは何用なの? おれには想像がつかん。
早送りとかスローとか付けて動画再生ソフトつくってみたいんじゃない?
AVIファイルなら中間フィルタを作れば高速・低速再生できるとおもう。 ただし音声は無理。
一般的な動画とすればNTSCで29.97fps、PALで25fps。
>>778 氏の要望は秒間に40〜60回の速度レート変更
仮に実現できても絵を見る人間には何がなにやら ってとこだろ
>>784 のいうように、フィルタ自作してタイムスタンプ直接いじればいいよ
アプリから好きなタイミングで指示だしたいならカスタムインターフェースつければいい
1秒間に40回も再生レート変えるってどういうこと? 1秒間に30フレームとしても、1フレームを出す間に2回速度変更とかあるわけ? いみないじゃんw
>>786 120FPSのmpeg4とかあるからジャマイカ?
788 :
デフォルトの名無しさん :2006/05/12(金) 21:05:04
キャプチャピンorプレビューピンのプロパティ中の 出力サイズにあたる部分って、 プログラムからどうやって設定するのですか? AMStreamConfigだと、 320x240までしかできないんですけど...。
amcapで設定して320x240までしか設定できないのなら そういうデバイスということ。
790 :
デフォルトの名無しさん :2006/05/13(土) 00:06:59
やりたいのは解像度を保ったままの表示と静止画とりこみなんですよ。 プロパティを表示してから 出力サイズ設定を640x480とかにすると それなりの大きさにになるし、 みた限りのPCIキャプチャボードでもそんな感じだから へんだなぁって...。 知らないだけ?
791 :
デフォルトの名無しさん :2006/05/13(土) 02:12:22
ビデオボードを使ってキャプチャープログラムを作りたいと思っています。 出力はaviファイルです。 その時、縦横を反転させて480x640といった縦長画像のプレビューを出して キャプチャー(こちらも反転)するにはどうすればよいのでしょうか。
>>791 縦横を反転させるフィルタを作って、グラフにAddする。
793 :
デフォルトの名無しさん :2006/05/13(土) 03:06:15
フィルタ自作しかないですか。。。 フィルタ自分で作ったことないですけど、今から勉強してみます むずそうだなぁ
794 :
デフォルトの名無しさん :2006/05/13(土) 16:54:41
>>790 よくわからないけどキャプチャデバイスから320x240でキャプチャして
表示を640x480にしたいの?
その場合表示に関しては単純にレンダラの能力で解像度は320x240
のものを640x480に引き伸ばして表示することは可能。
(但し1ピクセルが2x2ピクセルになるだけだから荒くなる)
静止画取り込みというのはBMPに落とす、というようなことだと思うが
この場合、サンプルグラバを使うと、サンプルグラバを通過するときのサイズが
320x240なら、そのサイズでしか取り出せない(と思う)
795 :
デフォルトの名無しさん :2006/05/14(日) 07:05:39
http://pc8.2ch.net/test/read.cgi/tech/1026666092/794 ありがとうございます。
やりたいたいのは、
キャプチャデバイスの出力サイズを
640x480にすることなんです。
クロスバー->キャプチャ->グラバ->レンダラ
とかでフィルタグラフを作っておいて、
キャプチャフィルタのキャプチャピンの
プロパティ表示から手設定で出力サイズを
640x480にすることは可能なんです。
手設定してやれば、
表示サイズも静止画サイズも640x480になるんですけど、
ソースコードから設定する方法が判らない...。
IAmStreamConfig::SetFormatで画像サイズも正しく指定したAM_MEDIA_TYPEをセットすればできるはず。
797 :
デフォルトの名無しさん :2006/05/14(日) 23:37:24
それも思って過去にやったんですけど、 エラーで返ってくる結果だったんですよ...。 Bt系とかSAA系のPCIボードって、 いくつもみたんですけど、 全部320x240だったんです。 (プロパティからの640x480は可能。)
キャプチャの入力って何? クロスバーってことはS端子入力とかTVチューナーとかついてるボードなのか?
799 :
791 :2006/05/15(月) 07:37:26
少し前に縦横回転の質問をしたものです。
http://son-son.sakura.ne.jp/mt/blog/2006/04/directshow_1.html このサイトを参考にDirectShowのカスタムフィルタを作っているのですが、
入力と出力で画像サイズが変わる場合は、どのようにサイズを設定すれば
よいのでしょうか。
とりあえず、GetMediaType()関数の最後に、
*pMediaType = m_pInput->CurrentMediaType();
// 追加部分
VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER *) pMediaType->pbFormat;
ASSERT(pvi);
int width = pvi->bmiHeader.biWidth;
int height = pvi->bmiHeader.biHeight;
pvi->bmiHeader.biWidth = height;
pvi->bmiHeader.biHeight = width;
このようにして、下流フィルタに縦横の大きさを伝えようとしましたが、
graphedt.exeでつないごうとすると、「接続に必要な中間フィルタが見つかりません」
と出て実行できません。
追加部分をばっさりとってしまうと実行できるのですが、正しく表示はされませんでした。
(480x640でデータが並んでいるのを640x480とVideoRendereが見ているため)
よろしくお願いします。
800 :
デフォルトの名無しさん :2006/05/15(月) 10:55:56
逃げてないで戦えよ
>>799 拒否られてんだよ そんなサイズじゃ満足できないってよw
>>799 それじゃ入力ピンのサイズもろとも変更しちゃってね?
たいしたコード量じゃないならGetMediaType全部さらしてみ
803 :
791 :2006/05/15(月) 22:03:47
リンク先のコードとほぼ同じですが、こういう風に書いています // このフィルタのアウトピンが接続可能なメディアのタイプを返す HRESULT Through::GetMediaType(int iPosition, CMediaType *pMediaType) { // outputピンが対応するメディアタイプを返す if (m_pInput->IsConnected() == FALSE) { return E_UNEXPECTED; } // ピンの位置のチェック if (iPosition < 0) { return E_INVALIDARG; } if (iPosition > 0) { return VFW_S_NO_MORE_ITEMS; } // ピンをチェック CheckPointer(pMediaType,E_POINTER);
804 :
791 :2006/05/15(月) 22:04:49
(続き) *pMediaType = m_pInput->CurrentMediaType(); // ここから追加した部分 VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER *) pMediaType->pbFormat; ASSERT(pvi); int width = pvi->bmiHeader.biWidth; int height = pvi->bmiHeader.biHeight; pvi->bmiHeader.biWidth = height; pvi->bmiHeader.biHeight = width; return NOERROR; }
805 :
791 :2006/05/15(月) 22:10:14
コードを見ていると、Transform()関数の中でサンプリングタイムのコピーや 同期用のポイントを設定しています。 その中に、入力ピン側のメディアタイプを出力側のメディアタイプへコピーする という部分があるのですが、ここも関連しているのでしょうか?
まず出力ピンをレンダラなどにつなぐときのメディアタイプで 480x640を提示しないとダメなのでは。 (単に縦横逆転だからサイズは同じだろうが) 次にTransformの中でメディアタイプをコピーしてはダメだと思う。 出力メディアタイプのサイズが入力メディアタイプと異なる(縦横逆転)わけだから。 そして自分の力で640x480のビット列を480x640に並べ替えてあげないとダメだと思う。
TransFormは実際にストリームが流れる時に呼ばれる。 なのでグラフエディットでピンが繋がらないのとは関係ない。 グラフエディットで自作フィルタのアウトピンとダウンストリームのフィルタのインピンをつなぐときに ダウンストリームのフィルタが自作フィルタに「お前が流す形式は何だ」と聞いてくる これがGetMediaTypeにあたる。ピンのコネクト中なんかで呼ばれるんだわ ※CopyMediaTypeとか上手く使えよな 自分の入力ピンの保持してるMediaTypeの ポインタそのままダウンストリームフィルタに渡さないように。 ダウンストリームフィルタはGetMediaTypeで返された形式をみて、受け付けられないものなら 拒否される(結果失敗となる)されることがある。これはダウンストリームの仕様による。
「ビデオデコーダ」→「自作フィルタ」→「ビデオレンダラ」 これがだめなの? 「ビデオデコーダ」→「自作フィルタ」→「AVI MAX」→「ファイルライタ」 で一回AVI形式にできないかな
810 :
791 :2006/05/16(火) 04:48:02
皆さんレスありがとうございます。
>>806 >まず出力ピンをレンダラなどにつなぐときのメディアタイプで
>480x640を提示しないとダメなのでは。
上に書いたGetMediaType()でこれをやってるつもりなのですが、
何か根本的に間違っているのでしょうか?
>>807 とりあえず接続できるかということと実際に処理できるか、というのは別という
ことですね。
んで、GetMediaType()を正しく書かないと接続すらさせてもらえない、と。
サイズを変えてるだけだから、つなげそうに思うのですがうまくいきません。
ポインタのアドレスの件は少し書き換えてみました。
>>808 「ビデオデコーダ」→「自作フィルタ」→「ビデオレンダラ」ができません。
AVI MUXをGraphEdtで自作フィルタの後ろにつなごうとしたら、
「接続に必要な中間フィルタがありません」のエラーがでて、同様にできませんでした。
>>809 とても参考になります。恥ずかしながら知りませんでした・・・
ただ今回の場合、画像をトリミングするわけじゃないので
直接は関係ないように思うのですが、ここも設定がいりますか?
解説の日本語がすごい難解でw勘違いしているかもしれません。
全領域を使うつもりなので、rcSource,rcTargetともにすべて0設定で
やってみましたがだめでした。
811 :
791 :2006/05/16(火) 04:54:18
804のコードをこのように書き換えてみました。 // 縦横のサイズ以外は一緒なのでコピー CMediaType pCurrentMediaType = m_pInput->CurrentMediaType(); CMediaType output(pCurrentMediaType); *pMediaType = output; VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER *) pMediaType->pbFormat; ASSERT(pvi); long width = pvi->bmiHeader.biWidth; long height = pvi->bmiHeader.biHeight; pvi->bmiHeader.biWidth = height; pvi->bmiHeader.biHeight = width;
812 :
791 :2006/05/16(火) 04:55:29
(続き) pvi->rcSource.bottom = 0; pvi->rcSource.left = 0; pvi->rcSource.right = 0; pvi->rcSource.top = 0; pvi->rcTarget.bottom = 0; pvi->rcTarget.left = 0; pvi->rcTarget.right = 0; pvi->rcTarget.top = 0;
あのさ・・・ もしかしてVIDEOINFOHEADERじゃなくて 「VIDEOINFOHEADER2」 なんじゃないの? フォーマットタイプ見て無いだろ
814 :
791 :2006/05/16(火) 23:55:50
>>813 上のコードで、bmiHeader.biWidthとbmiHeader.biHeightを入れ替えないと
正常に接続できるので(画面は一部が縦になる)、VIDEOINFOHEADERでいいのじゃ
ないかと思うのですが・・・
816 :
791 :2006/05/17(水) 03:51:37
>>815 今確認してみたところVIDEOINFOHEADERでした。
いろいろ調べていますが、うまくいきません・・・
817 :
791 :2006/05/17(水) 08:39:41
ついに解決しました! 原因はほんとうにくだらないことでした・・・ プログラムは、EZRGB24 Filter Sampleをもとに作っていたのですが、 その中のCheckTransform()関数に、 if (*mtIn == *mtOut) return NOERROR; return E_FAIL; なんていう記述が・・・ つまり入力と出力の形式を変えると、ここでエラーがとんでたようです。 サンプルコピペはだめですね、ちゃんと読むことにします。 いま縦向きに映るテレビをみていますw レス下さった皆さん、ありがとうございました。
おめ
819 :
デフォルトの名無しさん :2006/05/17(水) 22:33:50
VC++でファイルからFourCCの情報を取得したいのですが、DirectShowを使うかVFWを使うか迷っています。 どちらを使うべきでしょうか?速い方がいいんですが・・・
821 :
819 :2006/05/18(木) 00:04:42
>>820 どうもありがとうございます。
ISO/MPEG-4なども扱います。RIFFではないようなので使えませんねぇ。
DirectShowが無難な気がしてきました。
Directshowを使って動画変換ツールを作ろうとしているんですが ・動画変換が実時間でしか行われない。CPUはできたらパツパツまで使いたい (Clockを与えなければいけない?) ・エンコードのプロパティを毎回ウィンドゥで設定しなければならないので 設定情報を一括でなにか取り出したり登録したりする方法はないか。 という2点がわからず困っています。開発言語は現在サンプルで検証している 段階なんで、VCかVBです。AviSynthなどを使えばいいのかもしれませんが できましたら前述2点の解決方法を知りませんでしょうか。 というか、動画変換はDirectshowでやるものではないのでしょうか?
>>822 基本的にコーデック依存の話だけど、
エンコーダのプロパティは(UIでは)IAMCompressDialogで設定させといて
GetState / SetState で取出し、再設定が可能なことが多いですよ。
ただし GetState の cbState とかはアテにならないこともあるので注意。
DivX の場合はレジストリのどっかに書かれてるので丸ごと保存・復帰が
無難かも・・・
>>823 レスありがとうございます。あれからいろいろしらべて、GetState/SetState
でやる方法で解決しそうな感じにはどうにかなったのですが、どうやらCodec
によってはできないこともある様子…というか使いたいCodecは非対応でした。
さらにXvidなどはプロパティも出ないし!
Icodecなどというものがよい予感ですが使い方がちんぷんかんぷんです。
動画変換の時間についてはサンプルグラバ取って圧縮するほうがいいので
しょうか。その場合コールバックをとるのがよいのですか?
>>824 XvidはプロパティもAboutも表示できるよ。
昔AMCapを改造した時のコードからの抜粋を、以下に載せておきます。
------------------------
//xvid filter のインターフェースポインタを取得
IBaseFilter *pXvidFilter = GetCompressorByName(CLSID_VideoCompressorCategory, szName);
//↑これは自前関数
//IAMVfwCompressDialogsを取得
IAMVfwCompressDialogs *pVfwCompressDialogs;
hr = pXvidFilter->QueryInterface(IID_IAMVfwCompressDialogs, (void **)&pVfwCompressDialogs);
//各ダイアログが使用可能かチェックする方法
hr = pVfwCompressDialogs->ShowDialog(VfwCompressDialog_QueryConfig, hwnd);
hr = pVfwCompressDialogs->ShowDialog(VfwCompressDialog_QueryAbout, hwnd);
//各ダイアログを表示する方法
hr = pVfwCompressDialogs->ShowDialog(VfwCompressDialog_Config, hwnd);
hr = pVfwCompressDialogs->ShowDialog(VfwCompressDialog_About, hwnd);
>>824 普通にグラフを作って、音声のレンダラを
入れなければ全速になると思うけど。
SetDefaultsyncSource(NULL) も必要かもしれない。
SetSyncSource(NULL)でOK
828 :
デフォルトの名無しさん :2006/05/21(日) 05:36:32
CSource派生でソースフィルタを作ってます。 CBaseFilter::QueryVendorInfo(LPWSTR* pVendorInfo)などが未解決になってしまいます。 XXX.obj : error LNK2001: 外部シンボル ""public: virtual long __stdcall CBaseFilter::QueryVendorInfo(wchar_t * *)" (?QueryVendorInfo@CBaseFilter@@UAGJPAPA_W@Z)" は未解決です。 これは私のプロジェクトではLPWSTR*はwchar_t*となり、strmbasd.libではLPWSTR*はunsigned short *としてバイナリ化されているためのようです。 私のプロジェクト(デバッグ用のテストプログラムもかねて作っているのでMFCのダイアログベース)です。 stdafx.hの中でLPWSTR*がwchar_t*にでもされているのでしょうか? LPWSTRをunsigned short *に解釈されるようにするにはどうすればよいのでしょうか?
うにこーど
自分でstrmbasd.lib (strmbase.lib) をビルドすれば良いんじゃない?
831 :
デフォルトの名無しさん :2006/05/22(月) 13:36:18
BaseClassesを使い、自分で作ったCMyFilterというフィルタをaxファイルにしないで C++クラスの状態で自分のアプリの中だけで使いたいのですが pUnk = CMyFilter::CreateInstance(NULL, &hr); pUnk->NonDelegatingQueryInterface(IID_IBaseFilter, (void **)&m_pFilter); m_pGraph->AddFilter(m_pFilter); とやって使えるには使えるのですが、 m_pFilter->Release(); delete pUnk; としてもメモリリークしてしまいます。 AddFilterしなければOKでした。 axファイル化してCOMとして登録しないと使うことはできないのですか?
833 :
デフォルトの名無しさん :2006/05/22(月) 14:43:57
ではやり方が問題なのでしょうか? どのようにやったらよいか教えていただけませんか? よろしくお願いします。m(_ _)m
たぶん Release がひとつ足りないんでしょう。 フィルタグラフを解放した後、自前で Release を呼んで、 デバガで中までステップインして行って開放されることを確認してみてください。
ありがとうございます。 Releaseをもうひとつ追加したところ m_pFilter->Release()としたときに m_pUnkの参照カウントm_cRefが0になり、いくつかのフィールドも0xfeefeefeのようになり、開放されているようです 最後にm_pUnkをdeleteするとデバッガが固まってしまいました。。 NonDelegatingQueryInterfaceを使ってIBaseFilterを得ることが間違っているのでしょうか? もう少しがんばってみます。
できました!
最後にm_pUnkをdeleteしているのが間違いのようでした。
参照カウントが0になった時点で自分で開放しているらしく
その状態でアプリを終了すればリークしないことがわかりました。
>>834 さん、本当にありがとうございました!
どなたか教えてくらはい ->SetWindowPosition(0,0,SCREEN_WIDTH,SCREEN_HEIGHT);//上の方で#define ->RenderFile(L"hoge"); で再生させてるんですが 親ウインドウフルスクリーン時にwmvを使った場合だけ wmvファイル側の元サイズのまま左下にちょこんっと描画されます。 aviやmpeg1,2だとSetWindowPositionで指定した範囲にきっちり描画してくれるのですが wmvの場合なにか指定するべきモノがあるんでしょうか?
>>826-827 音声入れるとやはり等速になるんですね…
もう少し修行してきます。レスありがとうございました。
>音声入れるとやはり等速になるんですね…
>>826 は正確には「音を鳴らす」音声のレンダラを入れると、
ということだと思う。再圧縮するだけなら全速力で動くよ。
事前にバッファへ読み込ませたWMVのデータを再生させたいのですが どうすればいいのでしょうか? サンプルのDirectShow/Filters/Async/MEMFileを使って MPEGやAVIは再生できたんですが…
WMMEDIATYPE_ と WMMEDIASUBTYPE_ じゃだめなの? と適当に答えてみる
>>841 ありがとうございます。
DirectShow/Commonを組み込めば良いという事でしょうか?
とりあえずやってみます。
VMR使ってるひといる?
はい
オーディオのコーデックをDirectShowFilterで書いてみました。 MediaPlayerでは使われるのですが、WindowsMediaPlayerで使われません。 WindowsMediaPlayerで認識させる方法をご存知のかた、いません? ちなみに、拡張子ax形式のファイルです。 regsvr32で登録してます。
846 :
デフォルトの名無しさん :2006/06/07(水) 22:49:50
DirectXのSDKを探していたんだが、ダウンロードセンターに行って検索すると DirectX February 2006 Redistributable for Software Developers とかいう奴があるんですよ。「開発者向け」ってあるからSDKかな〜?って思うじゃないですか。 これをダウンロードしてみたら、いつの間にか単なるEnd User Run-timeをダウンロードさせられるんだよ。 インストーラがもっともらしく出てくるからインストールしてみるとしっかり単なるRunTimeだし。 つーか動作変わったらどうしてくれるんだ?どの辺が開発者向け? これって詐欺じゃね?
>>845 ヒント:MP64とWMPでは出力画面のフィルタが違う。よって、フィルタグラフも違う。カラースペース変換周りも違う。
MediaPlayerとWindowsMediaPlayerの違いがわからないオレは素人
>>847 レス、ありがとうございます。
ということは、WMPが対応するような出力のフィルタをサポートするように、
自作フィルタのピンを設定する必要がある。
もちろん、そのピンに出力できるようなデコードを行う、
ですかね。
できればWMPがさぽーとするような出力フィルタの形式、もしくはそれを調べるのに
参考になるサイトのURLでも教えてもらえませんでしょうか?
850 :
847 :2006/06/08(木) 03:01:34
851 :
デフォルトの名無しさん :2006/06/23(金) 02:16:50
あげ
852 :
デフォルトの名無しさん :2006/06/28(水) 10:23:16
platformSDKに移行してからプロジェクトファイルがなくなり、 makefileしかなくなったのでしょうか? コマンドライン上だとデバッグしづらいので Win32の空プロジェクトを作ってソースを突っ込んで DLLにしてビルドしてみたのですが、 エントリポイントが無いと言われ、登録できませんでした。 いったいどうすればいいんでしょうか? プロジェクトの設定が悪いんですか?
>>852 このスレでも既出の件だと思うのですが、(キーワード:extras)
私はDirectX 9.0 SDK Update (February 2005) Extrasを展開して
プロジェクトだけコピーして使ってますよ。
DLLにするっつーことはFilterか? んー defファイルっぽいな
855 :
デフォルトの名無しさん :2006/06/29(木) 15:44:53
>>853 ありがとうございます。解決できました。
>>854 defファイルはSDKに入ってたものをそのまま使ってます。
いまさらですが、コーデック作るのにはDMO使うほうがいいんですね。
こっち使ってみます。
856 :
デフォルトの名無しさん :2006/06/29(木) 23:01:32
DMOか〜。便乗で質問 デバイスからのキャプチャやビデオレンダラのように多機能な描画系は やっぱり既存のフィルタを使うしかないんですかね? 特にデバイスキャプチャはVFWが無い今はDirectShowしかないですか?
レンダラはそれなりに簡単に作れますよ。 VMR がサポートしてる DirectX VA についてだけは、DDKでも資料がなくて 自前で実装するのは無理っぽいですが。 キャプチャフィルタも(そのハードの使い方がわかってるなら)自分でドライバなり 専用のフィルタなり書けば作れますよ。DDKにサンプルもあります。
レンダラのほうはDirectDrawを使って自作するとか、そんなイメージですか? レンダラウインドが複数枚重なったり、ウインドをストレッチしたりした時などを考えると面倒ではないのでしょうか? キャプチャも世の中に出ているいろいろなキャプチャデバイスが広く利用できる というのは、ほとんどのアプリケーションにおいては必須な要件だと思うので やっぱりDirectShowを使うのが一番手っ取り早いのですかねぇ。
>レンダラウインドが複数枚重なったり、ウインドをストレッチしたりした時などを考えると面倒ではないのでしょうか? その面倒さはDirectShowの責任ではないような・・・
しかしながら現実にはそのような機能が要求されることは多々ありますので。。 そういう事まで含めるとDirectShowというソリューションがベストなのかな。
いや、だから >レンダラウインドが複数枚重なったり、ウインドをストレッチしたりした時などを考えると面倒ではないのでしょうか? これはレンダラに限らずDirect3D とか DirectDraw 全般そういうものだし、 「自作」っていうのは自分で書くことなわけで、自分で書くのは当然と思いますが。 自分で書くのが面倒なら自作なんてせずにVMRを使えばいい。
比較的簡単に作れるんじゃなかったの?
863 :
デフォルトの名無しさん :2006/07/03(月) 02:14:32
ばかな862はイチからaviファイルのプレイヤ作ることをお勧めする
>>862 そのとおり、レンダラなんて簡単ですよ。
それでも自分でコード書きたくないほどの面倒くさがりなら、
「自作」は諦めたほうが良いということです。
ケーキ自作したい・・・
→簡単だよ!
→粉混ぜたり焼いたりとか面倒ですよね?
というような気分
質問の意図がまったく理解されていなかったんですね。 もう良いんですよ? 別にあなたたちに聞いても私が知っている以上のことは出てこないでしょうから。
流れをぶったぎって845なのですが、 DMO形式で再度オーディオコーデックを書いてみました。 で、WMPは認識してくれるのですが、InternalProcessOutputが呼ばれず、 出力されません。 graphieditを使うとInternalProcessOutputは呼ばれます。 原因がまったくわからないので何かDMOフィルタを書いたことのある方 アドバイスをください。 おながいします。
867 :
デフォルトの名無しさん :2006/07/06(木) 14:22:57
デジタルビデオカメラから映像音声を取り込み、DV Splitterフィルタにて映像音声に別け、 映像をMicrosoftWindowsMediaVideo9 VCMコーデックにて圧縮。その後、映像・音声をAvi Muxフィルタ にてまとめ、ファイルに書き出すと音声が音声がコマ落ちした様になってしまいます。 ※graphieditで調査してます。 不具合?VCM?スペック不足?デジタルビデオカメラ?って感じでどーにもこーにもです。 アドバイスをどうかお願いします。 また、以下では不具合現象が発生しません。 USBカメラ・ラインマイクのように映像・音声を別々のデバイスから取得する。 MicrosoftWindowsMediaVideo9 VCMの代わりにMPEG4を使用。
868 :
デフォルトの名無しさん :2006/07/16(日) 18:59:17
モニカって可愛いの?
Oh, モニカー♪
どうやってdshowで簡単にmp3/aviをプレーしますか。codeおねがいします。
ファイルコンテナを解析しているんだが、途中でわけがわからんなくなった
質問です。
IBasicVideo::GetCurrentImage()で取得したイメージを下のような方法でHBITMAPにしようとしているのですが、
long bufSize = 0; BYTE* pBuffer = NULL;
pBasicVideo->GetCurrentImage(&bufSize, NULL);
pBuffer = new BYTE[bufSize];
pBasicVideo->GetCurrentImage(&bufSize, (long*)pBuffer)
long width, height;
pBasicVideo->GetVideoSize(&width, &height);
BITMAPINFO bmpinfo;
memset(&bmpinfo, 0, sizeof(bmpinfo));
bmpinfo.bmiHeader.biSize = sizeof(bmpinfo);
bmpinfo.bmiHeader.biWidth = width;
bmpinfo.bmiHeader.biHeight = height;
bmpinfo.bmiHeader.biPlanes = 1;
bmpinfo.bmiHeader.biBitCount = 32;
BYTE* pImageBits = NULL; HBITMAP hBmp = NULL;
hBmp = ::CreateDIBSection(NULL, &bmpinfo, DIB_RGB_COLORS, (void**)&pImageBits, NULL, 0);
int size = ???;
memcpy(pImageBits, pBuffer, size);
sizeはどのように設定すればいいのでしょうか。
int bits = bmpinfo.bmiHeader.biWidth * bmpinfo.bmiHeader.biBitCount;
size = ((bits+((0x20-bits&(0x20-1))&(0x20-1)))
>>3 ) * bmpinfo.bmiHeader.biHeight;
とすると、対象のファイルによってAccessViolationといわれてしまう場合があります。
size = std::min(((bits+((0x20-bits&(0x20-1))&(0x20-1)))
>>3 ) * bmpinfo.bmiHeader.biHeight, bufSize);
とすると、AccessViolationは発生しませんが、上1/4程が真っ黒で残りの部分も白黒(グレイスケール)という画像になってしまいます。
size = bufSize;
とすると、両方の現象が起こってしまいます。
875 :
874 :2006/07/22(土) 08:30:16
すみません、自己解決しました。
他の場所で使用したIMediaSeekingをReleaseするのを忘れていたので直したところ、
1つめと2つめの方法でうまく取得できるようになりました。
謎ながらいちおうこれで取得できるようになったのですが、さらに検証したところ
どうやら常に bufSize - ((bits+((0x20-bits&(0x20-1))&(0x20-1)))
>>3 ) * bmpinfo.bmiHeader.biHeight == 40 のようなので
次のようにするのが正しいようですね。
long bufSize = 0; BYTE* pBuffer = NULL;
pBasicVideo->GetCurrentImage(&bufSize, NULL);
pBuffer = new BYTE[bufSize];
pBasicVideo->GetCurrentImage(&bufSize, (long*)pBuffer)
BITMAPINFO bmpinfo;
memcpy(&bmpinfo, pBuffer, sizeof(BITMAPINFO));
BYTE* pImageBits = NULL; HBITMAP hBmp = NULL;
hBmp = ::CreateDIBSection(NULL, &bmpinfo, DIB_RGB_COLORS, (void**)&pImageBits, NULL, 0);
memcpy(pImageBits, pBuffer + sizeof(BITMAPINFO), bufSize - sizeof(BITMAPINFO));
動画を再生中に IVideoWindow::SetWindowPosition を繰り返し呼ぶと動画の再生がとまってしまうことがあるのですが、 どうすれば回避できるのでしょうか? とまるのは動画のみで、音声は再生されたままです。 IMediaControl::Stop などを呼んでもリセットされません。 また、IMediaEventEx でイベントを見ても特に何も通知されていません。 試した限りではWMV形式の動画のみで起こるようです。
877 :
876 :2006/07/29(土) 00:32:22
Media Player 10 をインストールしたら直りました。
878 :
デフォルトの名無しさん :2006/07/31(月) 19:54:25
USBカメラの画像をICaptureGraphBuilder2インターフェースを使用して表示しています。 しかし、どうやらオーバーレイ表示されていないようです。 オーバーレイにするにはどうしたらいいのでしょうか
VC-1 Advanced Profileβ入れたら、モジュール読み込み違反が起きるように なったので戻した。AmCapは動くのになあ。
880 :
もー :2006/08/22(火) 11:34:10
初めて質問します。 VMR9 を使って、BMP画像を取得するアプリを作ろうとしてます。 あるフレーム位置の画像を取得するには、IVMRWindowlessControl::GetCurrentImage を使って取得できますが、カレントのフレーム位置を変更して直後に GetCurrentImage をすると、 意図したフレームの画像ではなく、直前の画像が取得されてしまうことがあります。 おそらく、VMR のレンダラが間に合っていない為だと思われます。 どのようにしたら、意図したフレームのイメージを取得できるか、ご存知の方がおられましたら、 ご教授ください。
881 :
デフォルトの名無しさん :2006/08/22(火) 15:55:34
DirectShowって、いわゆるDirect2D?
むしろDirectXから追放された
VISTAはWinGをサポートするんだろうか。
DSFの書籍が全くないのはなぜ?
誰も書かないからに決まってるだろ。
886 :
デフォルトの名無しさん :2006/08/22(火) 23:47:14
>>881 Direct2Dにあたるのは、DirectDrawのはず。
DirectShowプログラミングで CComPtrとかCComQIPtrを使う人が少ないのは何故ですか?
あれはあれで使い方を習得しないといけないからな。
なるほど ただでさえ、把握しきれないほどのDirectShowという難解なものがあるのに CComPtrやらのインターフェースにまで手が回らないというのが、風潮なのですね。 CComPtrを使うメリットはいろいろ自動でやってくれるというのもありますが、 デメリットしては熟知していないが故の予期せぬ失敗みたいなものがついてまわる。 そんな感じなんですかね。 CComPtrを使ってみようと思っているのですが、 間違っているのかと不安になりました。 決して、完全なる悪というわけでないということですよね。 CComPtr<IGraphFilter> pGF CComPtr<IMediaControl> pMC ・・・・ pGF.CoCreateInstance(CLSID_....) ・・・ pMC = pGF なんか、このインターフェースって 物凄いことがおこなわれているような気がします。 でも、あまり情報がないという、諸刃の剣!
なんだそりゃw
物凄いことって? 参照カウンタが上がるたびにレジストリをガーっと検索したり?
> CComPtr ATLやってるやつからすれば普通のことだよ
んーなるほど ATLをやってる人からすれば、普通のことなんですね。 ググった感じだとアレですが、 このような過疎スレで、いくつか反応があったので、 結構、知ってる人は多そうですね。安心しました。 CComPtr とか・・・ 他人任せはいけないことですが、もっと皆にも使って欲しいと、 そのように思いました。
ATLが過疎なのさ
COMのせいで無用に難解になったからな。 もう何もかも終わりだ
Win32と同じ関数体系がいいとも思わないがw
COMよりはいいと思うんだけど。
要は慣れ
マナゲト最強
いやCOMよりは、どっちかって言うと、すいている方がいいな。
あのー、こんなおり、つまらない質問で恐縮なのですが、 フィルタ一覧の中にあったんですけど、 {WDMストリーム標準データ タイプ ハンドラ}って何ですか?
902 :
デフォルトの名無しさん :2006/09/01(金) 02:40:45
FilterGraph等の名前のGraphって 単に「graph=表」だと意味がさっぱり通りません。 この場合のgraphは、日本語にするとどんな意味になるんでしょうか?
>>902 コンピュータや数学の世界では、グラフとは頂点とそれらを結ぶ線分の集合のこと。
(そもそも日常の用法でもグラフ=表じゃないと思うけど)
レンダラ自作しようと思い、 CBaseRendererを継承させようとしたところ、 そんなクラスは知らないと怒られてしまった。 ヘルプを見ると、CBaseRendererはRenbase.hに宣言されているらしいけど、 そのRenbase.hがそもそも見つからない。 ということで、レンダラを自作するのに必要なものってなんでしょうか?
> Renbase.hがそもそも見つからない 最近のDirectShowだとわからんが、少なくとも俺はBaseClassesフォルダの中にあるよ。
DirectShowのサンプルは今はPlatformSDKにあるよ
そんなことも自力で解決できない奴がレンダラなんか作れるのか?
数学能力あっても調査能力がない奴たまにいるよな
俺のことかよ! σ(゚д゚ )
本物のプログラマは数学能力重視でいい ライブラリ調査に時間をとられるなんて本末転倒だ
Javaプログラマに言っているのか?
ライブラリ調査も何も、BaseClassは基本だろ?
プログラム=ライブラリを使用する
914 :
デフォルトの名無しさん :2006/09/21(木) 00:52:20
フィルタを自作しているのですが、 アプリケーションからフィルタにパラメータを設定したいと思っています。 それには、IKsPropertySetを使えばよさそうなんですが、 それをフィルタに実装する方法がわかりません。 サンプルを探しても見当たらなかったので、具体的にどうしたらよいかご教示頂けないでしょうか?
フィルタはクラスじゃないの?
916 :
914 :2006/09/21(木) 09:37:21
フィルタはクラスです。 ある人から、フィルタをIKsPropertySetから派生させろ、 と言われたのですが、良く分かりませんでした。 ↓のような感じ? class EncFilter : public CTransformFilter, public IKsPropertySet { public: DECLARE_IUNKNOWN;// CUnknownのインターフェース定義 EncFilter(TCHAR *tszName, LPUNKNOWN pUnk, HRESULT *phr); virtual ~EncFilter(); static CUnknown *CreateInstance(LPUNKNOWN punk, HRESULT *phr); HRESULT CheckInputType(const CMediaType *mtIn); HRESULT CheckTransform(const CMediaType *mtIn, const CMediaType *mtOut); HRESULT Transform(IMediaSample *pIn, IMediaSample *pOut); HRESULT DecideBufferSize( IMemAllocator *pAlloc,ALLOCATOR_PROPERTIES *pProperties); HRESULT GetMediaType(int iPosition, CMediaType *pMediaType); };
>>916 別にIKsPropertySetじゃなくても自分で勝手に作ったインターフェースでもOK
DECLARE_INTERFACEとかいうマクロがあったような。。
GraphEditでピンの名前が文字化けして不明になるものがあるんですが、 正常に表示する方法はありますか?
920 :
デフォルトの名無しさん :2006/10/01(日) 12:18:14
>>920 そのAVIをまずGraphEditにつっこんでみなよ
directshowを使ったキャプチャソフトを作っています。 フレームレートを変化できるようにしたいのですが、なかなか実装できずに困っています。 SampleGrabber を使って流れてくる情報を二回に一回捨てるみたいなイメージでいるのですが 具体的なコードがさっぱりわからないのですが、誰か同様のことをやってらっしゃる方、教えていただけませんでしょうか?
記録のタイミングでフレームレートをいじりたいってこと? 動画の使用によるよなあ。大概はヘッダ情報にフレームレートとか持ってるでしょ その辺りもいじらないとね AVIにしろMPEGにしろ サンプルグラバで2回に1回捨てるというけど、それは1サンプル1フレームならではの 理屈なので確認してね あとタイムスタンプも(フレーム飛ばす分)適切に変更してね
キャプチャソフトというからにはUSBカメラとかキャプチャデバイスからの取得だろうな。 キャプチャデバイスにはあらかじめフレームレートを設定できるが、それを動的に変えたいということかな? AVIファイルに落とすのならサンプルグラバではなく、自作のTransformフィルタを作成するのがよいと思う。 そいつで、偶数フレームに関してはIMediaSample::SetTimeをつかって再生時間が2倍になるようにし、 奇数フレームは捨ててしまう。これでよいと思う。 グラフ構成は [SRC]-[自作Trans]-[AVI MUX]-[FileWriter]
925 :
デフォルトの名無しさん :2006/10/06(金) 15:14:09
フレームレートが変わるならメディアフォーマットも変わるだろ。 たとえば未圧縮ビデオストリームの場合VIDEOINFOHEADERのAVGTIMEPERFRAMEとか。
926 :
デフォルトの名無しさん :2006/10/06(金) 15:17:28
920で質問したものです。 下のようなコードを書いたのですがファイルの保存がうまくいきません。 アドバイスお願いします。 // pCap は、前のコードのキャプチャ フィルタである。 pGraph->AddFilter(pCap, L"Video Capture"); // プレビュー。 pBuilder->RenderStream( &PIN_CATEGORY_PREVIEW, &MEDIATYPE_Video, pCap, NULL, // 圧縮フィルタなし NULL // デフォルトのレンダラ ); IVideoWindow *pVidWin = NULL; HWND g_hwnd=NULL; pGraph->QueryInterface(IID_IVideoWindow, (void **)&pVidWin); g_hwnd=reinterpret_cast<HWND &>(panel1->Handle); pVidWin->put_Owner((OAHWND)g_hwnd); pVidWin->put_WindowStyle(WS_CHILD | WS_CLIPSIBLINGS); RECT grc; GetClientRect(g_hwnd, &grc); pVidWin->SetWindowPosition(0, 0, grc.right, grc.bottom);
927 :
デフォルトの名無しさん :2006/10/06(金) 15:18:58
926の続き //保存 hr = pBuilder->SetOutputFileName( &MEDIASUBTYPE_Avi, // ターゲット ファイルの AVI を指定する。 L"d:\\Example.avi", // ファイル名。 &pMux, // Mux へのポインタを受け取る。 NULL );// (省略可能) ファイル シンクへのポインタを受け取る。 hr = pBuilder->RenderStream( &PIN_CATEGORY_CAPTURE, // ピン カテゴリ。 &MEDIATYPE_Video, // メディア タイプ。 pCap, // キャプチャ フィルタ。 NULL, // 中間フィルタ (省略可能)。 pMux ); // Mux フィルタまたはファイル シンク フィルタ。 pGraph->AddFilter(pMux, L"Mux"); // Mux フィルタを解放する。 //pMux->Release(); // ビデオ キャプチャ ストリームを制御する。 IMediaControl *pControl; REFERENCE_TIME rtStart = 10000000, rtStop = 50000000; const WORD wStartCookie = 1, wStopCookie = 2; // 任意の値。 hr = pBuilder->ControlStream( &PIN_CATEGORY_CAPTURE, // ピン カテゴリ。 &MEDIATYPE_Video, // メディア タイプ。 pCap, // キャプチャ フィルタ。 &rtStart, &rtStop, // 開始タイムおよび終了タイム。 wStartCookie, wStopCookie // 開始イベントおよび終了イベントの値。 );
928 :
デフォルトの名無しさん :2006/10/06(金) 15:24:55
>>927 Mux を AddFilter してから RenderStream するように。
929 :
デフォルトの名無しさん :2006/10/06(金) 16:35:38
下記のように変更してみたのですが、WindowsMedeaPlayerで見ると 同じようにエラーがでます。 ファイルサイズは0でないので何かはできているようなのです。 引き続きアドバイスお願いします。 //保存 hr = pBuilder->SetOutputFileName( &MEDIASUBTYPE_Avi, // ターゲット ファイルの AVI を指定する。 L"d:\\Example.avi", // ファイル名。 &pMux, // Mux へのポインタを受け取る。 NULL );// (省略可能) ファイル シンクへのポインタを受け取る。 pGraph->AddFilter(pMux, L"Mux"); hr = pBuilder->RenderStream( &PIN_CATEGORY_CAPTURE, // ピン カテゴリ。 &MEDIATYPE_Video, // メディア タイプ。 pCap, // キャプチャ フィルタ。 NULL, // 中間フィルタ (省略可能)。 pMux ); // Mux フィルタまたはファイル シンク フィルタ。 // ビデオ キャプチャ ストリームを制御する。 IMediaControl *pControl;
>>920 AMCAPみたいな、ちゃんと動くサンプルのソース眺めたほうが早いんじゃない?
エラーが起きるって具体的に何よ? 小出しにされるとイライラする
小出さんもイライラ
タイムラインオブジェクトを再生する際にフレームレートやビットレートを変更することは可能でしょうか? ご存知の方いらっしゃれば教えて下さい。 (デフォルトフレームの設定はできるようですが実質役に立ちません)
935 :
デフォルトの名無しさん :2006/10/20(金) 03:46:44
VBでUSBカメラのコントラスト等を設定したいだけど、検索してサンプルを 見つけられなかったです。 設定方法をご存知の方、教えてください。
SDKのドキュメント嫁
937 :
デフォルトの名無しさん :2006/10/22(日) 06:38:39
DirectShowがプラットフォームSDKに移動したというけれど プラットフォームSDKをインストールしてビルドしてみたらstreams.hが見つからないと怒られてしまいました。 もしかしてヘッダファイルもAPIもBaseClassesも変更されちゃったの?
目には目を サンプルはサンプルに
ごめん。ちゃんとあった。。ありがと
940 :
Direct将 :2006/10/27(金) 01:11:01
Windows Mobile 5.0 向けにDirectShowフィルタを作成しているのですが、 作成したフィルタ(*.ax)を登録するにはどうしたらよいでしょうか。 PCの場合は、 regsvr32.exe *.ax として、フィルタを登録できたのですが、 Windows Mobile 5.0 上では、このようなコマンドはないのでしょうか。 どうかご教示お願い致します。 Visual Studio 2005を使って、フィルタを作成しています。 (PC版はVC++で作っていました。)
regsvrce はないの?
942 :
Direct将 :2006/10/27(金) 21:48:48
試してみました。 Windows Mobile 5.0用のregsvrce.exeが見つからなかったので、 C:\Program Files\Microsoft eMbedded C++ 4.0\EVC\WCE400\TARGET\ARMV4I からregsvrce.exeを実機にコピーし、フィルタの登録を試みましたが、 「Loadlibrary(""\Windows\フィルタ名.ax"")failed. GetLastError returns 7e」 というエラーが出て登録できませんでした。
>>940 プロジェクトのプロパティ→構成プロパティ→配置→サーバー側のアクション→出力の登録→はい
これでいけるはず。
avi再生でISampleGrabberCBを継承してコールバックを受け取ってるんだけど 再生中(コールバックが繰り返し呼ばれている状態) Ctrl+Alt+Deleteまたは、Winキー+'L'によりデスクトップ画面から ロック画面またはセキュリティ画面に切り替えて、普通にデスクトップに 復帰するとコールバックが停止してしまうんだけど、なんで?? (ちなみにこのとき、IMediaControlのGetState()はRUN、IBaseFilterのGetStateはPAUSEとずれてた) デスクトップから画面切り替えなきゃまったく問題ないです。
とりあえず原因というか、再開する契機はわかりました。
946 :
デフォルトの名無しさん :2006/10/29(日) 03:22:10
ソースフィルタを作ってるんですが、シーク後の再生する瞬間にノイズが入ります。 デバッグするとソースフィルタからは正しくデータを渡しているように見えます。 どこかのフィルタのバッファがクリアされてないのでしょうか? 対策方法はあるのでしょうか?
947 :
デフォルトの名無しさん :2006/10/29(日) 03:26:42
プル型のソースフィルタを作ってます。 ネットワークのストリーミング再生ということもあり、シーク時にバッファリングの時間がかかる事があります。 その時にIMediaSeeking::GetCurrentPosition()すると、勝手に無音状態のまま時間が進んでしまいます。 バッファリングが完了して音が出始めると正しく同期しようとします。 再生開始まで時間がかかる場合にGetCurrentPositionの値が進まないようにはできないのでしょうか?
プル型ってことはソースフィルタの後ろにあるパーサフィルタが時計を管理していると思われ。 パーサフィルタが時間が来たと思えば、データが無くてもメディアサンプルをレンダラに渡すから時間が進むのだろう。 パーサフィルタも開発しているなら何とかできるのかもしれない。 そうでなければプッシュ型にするのがよいと思う。
949 :
デフォルトの名無しさん :2006/10/29(日) 15:45:47
IAMVideoProcAmpでチラツキの設定を50Hz、60Hz、なし のどれかを設定する方法を教えてください。
おれもIAMVideoProcAmpの設定方法知りたい
951 :
947 :2006/10/29(日) 19:54:46
>>948 バッファリングが必要な場合は一般的にはプッシュ型にするのでしょうか?
プッシュ型だとソースのコーデックが分かってないとSeekの解決(time → byte)などができなくないですか?
ネットワーク越しにファイルを再生するの? ソースフィルタは何をベースに作ってるの?CSource ? IFileSourceFilter?
953 :
947 :2006/10/29(日) 21:12:16
>>952 IFileSourceFilterです。ネットワーク越しにファイルを再生します。
WaitForNextがパーサフィルタから呼び出されるのでは? そこでバッファが完了するまでブロックさせればよいのでは
955 :
947 :2006/10/29(日) 21:41:01
>>954 WaitForNextはよくわかってないのですが、
SyncReadされる場合は無意味ではないでしょうか?
SyncReadでブロックしているにもかかわらずオーディオの時間がどんどん経過するって事?
957 :
947 :2006/10/29(日) 21:57:16
>>956 だという理解なんですが。。ありえないでしょうか?
オーディオレンダラとパーサフィルタの間にサンプルグラバを仕込んでチェックしてみるとよいかもね。
959 :
947 :2006/10/29(日) 22:03:55
>>958 それでやってみます。
ありがとうございました。
960 :
デフォルトの名無しさん :2006/10/30(月) 00:35:46
物によるとは思うけど、動画編集ソフト(フレーム単位で扱えるもの)って一般的にDirectShow使ってる?/使ってない? 使ってないソフトの場合は、特定のコーデックを直に使うとか、 自前でファイル読んだりしてるのかな?
グラフが稼動中はオーディオレンダラーの時間は勝手に進んでいき、 基準クロックよりも前のタイムスタンプを持ったサンプルが届くと クロックに追いつくまで基準クロックが止まるけど、そーいう話の ことをしてるの? あと、上はエンドタイムを持たないオーディオサンプルの場合で、 エンドタイムも持ってる場合は、基準クロックは止まらずに、 基準クロックに追いつくまでオーディオサンプルは捨てられて いくけど。 これは MS の標準オーディオレンダラーの挙動なんで、カスタム レンダラーつかってる場合はまた別ね。
962 :
947 :2006/10/30(月) 23:20:06
>>961 まさしくそういう話です。
MSの標準レンダラーはそういう仕様なのですね。
結局根本的にはレンダラを自作する必要があるのですね。
勉強になりました。
オーディオレンダラの動きってそうなんだっけ? オーディオメディアサンプルに与えられたタイムスタンプが、現在の時間になるんだと思ってた。 たとえば完全に連続したPCMデータを、タイムスタンプだけイタズラして、あるときゼロにして渡すと、 オーディオの再生は問題ないが、フィルタグラフ全体の時刻がゼロに戻ってしまうため、 ビデオのフレームはそのフレームのタイムスタンプになるまで待つため、ビデオがとまって見える と理解してたんだけど。
964 :
デフォルトの名無しさん :2006/11/01(水) 14:03:43
USBカメラの設定画面を呼び出すC++のコードを紹介しているページ 教えてください。数行ならここで教えていただけると助かるのですが・・。
え。。
968 :
デフォルトの名無しさん :2006/11/02(木) 20:31:09
DirectShowの簡単フィルタ作成入門のウェブページ作ろうかと思うが需要ある? 僕自身やり始めて一週間程度なのでインスコ〜グラフエディット〜プロジェクトのつくりかた〜DLL作成 までしかわからんが
>>968 おれおれ
といいたいけど、Win2K + VC6でライブラリのビルド、挫折したからな…
おれおれなんだけど、 実際にこの辺のちゃんとしたやり方が知りたい。 自分のわかったとこまで公開してツッコミもらいたい VC.NET2003でaxファイルを作るのにはなんのプロジェクトを新規作成するのがただしいの?
972 :
971 :2006/11/02(木) 23:05:25
>>970 プラットフォームSDKの場合、基底クラスのフォルダにプロジェクトファイルがない。
で、MakeFileをつかってビルドしてみたがVC6じゃあリンク通らない関数があった。
えぇきっぱり諦めましたさVC6を…。
>>971 新規作成しなくてもフィルタのサンプルをパクってくればいいんじゃね?
974 :
971 :2006/11/03(金) 00:09:30
>>973 新規で作りたくならない?
後どのみち環境設定し直ししないとaxファイルのファイル名が変えられないのだが。
DirextX SDKの8.1くらいまでならVC6用のプロジェクトファイルがあったと思う。
977 :
976 :2006/11/03(金) 15:19:17
補足:俺もWin2K。
>>976-977 Win2K + VC6でstrmbase.libをビルドできなくて挫折したんだが、
なくてもできるの?
>>979 DirectX8.1SDKでつくればおkwwwww
ってそれじゃあ無意味だもんな
981 :
976 :2006/11/03(金) 23:23:51
Win2K + VC6でstrmbase.libは C:\Program Files\Microsoft Visual Studio\VC98\Lib\strmbase.lib に置いてあったんだが・・・。 普通は無いの?
982 :
976 :2006/11/03(金) 23:31:36
ビルド出来て動いてるのはDirectX8以降のインターフェイス使ってないからかもしれない。 VC6でビルドしたやつは↓しか使ってない。 IGraphBuilder IMediaControl IVideoWindow IMediaEvent IMediaSeeking
たぶんそれ以降に実装されたものは 僕みたいにビルドがとおらないんだろう。 まとめサイトとか作って strmbase.lib とかそれぞれのSDKバージョンでビルド されたものがアップされてたほうがよいね
(゚д゚)
調べたところ、重要なのは strmiids.lib みたいだ。 strmbase.libはstrmiids.libにほんの数個のインターフェイスを追加しただけ。 strmbase.libをビルドするとき、VC6のstrmiids.libをリンクすれば VC6でリンクするとき「デバッグ情報が壊れています」エラーは出なくなる。 しかしVC6のstrmiids.libには新しいDirectXの インターフェイスが入ってないから意味が無い。 VC6でビルドしたstrmiids.libが無いかぎり、 どうstrmbase.libビルドしても デバッグ版strmbase.lib(の中のstrmiids.lib)をリンク出来ない。
>>986 了解。
僕のやった環境はPlatformSDKの最新版の基底クラスを
VC6でビルドした際に出たんだ。
しょうがないので基底クラスは別環境で作って自作ソースを
ビルドした際に出たので、今度同じ環境をつくって試してみるよ。
ちょっと混乱してるのでまとめてほしいんだけど。 PlatformSDKに移ったDshowの何が問題になってるの?
dshowはdoushowもないのでDirectX SDKから外されました。
VC6など古い環境ではライブラリのビルドが素直にできない
991 :
987 :2006/11/04(土) 21:46:44
まぁ結局出来た訳だが自分がつまづいたところを「おれおれ」 であっても公開するために纏めてる さっきUSBカメラ買ってきた。画質悪い(´・ω・`)
>>989 988への回答かと思ってちゃんと読んだ瞬間ガム吹いてモニタに付いたw
('A`)
ちったあ埋めようとしようぜ
( ´ー`)
('_')
(-"-)
つづくしーーー(^・^)
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。