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


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

DirectShowと戦うスレ Part 2



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

415 名前:414 mailto:sage [2007/04/04(水) 23:23:49 ]
貼り忘れた
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdx8_c/ds/des/Oview/whatisDES.asp

416 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:35:12 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<>>415 それも考えたんだぞ。大人の都合ってヤツでダメなんだぞ。
  ヽ    |フ くやしいぞ。オマンコクロスファイヤーハリケーンだぞ。
   /_ _| 明日、ためしに作ってみるぞ。

417 名前:デフォルトの名無しさん [2007/04/04(水) 23:45:11 ]
いいから↑はほっといてやれ。


418 名前:359 mailto:sage [2007/04/04(水) 23:57:28 ]
>>407
今のところ問題なさそうですよ。
ただ、スレの流れを見ると私以外で使ってみた人いないのかな?w

もう少し使ってみて気がついたことがあったら報告しますね。

419 名前:デフォルトの名無しさん mailto:sage [2007/04/05(木) 00:03:51 ]
>>418
>私以外使ってる人いない…
(´・ω・`)ショボーン




420 名前:デフォルトの名無しさん [2007/04/05(木) 21:34:17 ]
おまえら便利なフィルタの一覧サイト作ろうぜ!
あと、××の製品かうと着いてくるフィルタは…とか語ろう

421 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 11:53:29 ]
pc11.2ch.net/test/read.cgi/avi/1030190329/
・・・とはいえ、思いっきり過疎ってるスレだし>>419のニーズには合わんかな。


ところで質問です。
AddSourceFilterで追加したファイルソースの
出力ピンのメディアタイプを指定する方法はないでしょうか?

あるファイルを指定したとき、ただRender()しただけでは期待しているフィルタに
繋がらない(ファイルソースのメディアタイプがGUID_NULLになっている)ので
強制的に指定してみたいのですが・・・。

422 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 12:41:37 ]
>>421=>>359さん??
質問は>>419に聞いてるのかな?
だったら応えます。

上流フィルタがカメラとかの入力デバイスの場合は「フィルタのピンプロパティ」から出力タイプを変更できるものがほとんどです。

仮に「動画」などのファイルであれば変換フィルタを噛ます事で変更は出来ますが新たに付けてやることは出来ません。

新規にフィルタを作成すればメディアタイプを付加しる物を作れるよ。
他の方法はわかりません

423 名前:デフォルトの名無しさん mailto:sage [2007/04/06(金) 13:13:09 ]
>>422
> >>421=>>359さん??
うわー、なんで分かるの?w

> 新規にフィルタを作成すればメディアタイプを付加しる物を作れるよ。
> 他の方法はわかりません
やっぱりそれしかなさそうですね。
AsyncRdrサンプル辺りをベースに1つ作ってみます。



424 名前:デフォルトの名無しさん mailto:sage [2007/04/07(土) 01:07:30 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<無圧縮タイプのAVIなら時間切り出しできたぞ。
  ヽ    |フ ただ、無駄に時間がかかるぞ。切り出すまでフィルタにデータが流れて処理してるんだぞ。
   /_ _| ポンドルウォーリア特殊召喚だぞ!ゴルァ!

425 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 10:32:36 ]
>レンダラは知らないけど、画面の上側にプレーヤを持っていくと少し(体感しないけど)
>速くなるらしい。なんかPresent(?)の戻りが早くなるとか言ってた。

これ本当?

426 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 11:42:57 ]
>>425
画面描写しないぶんタイムスタンプに忠実になるだけかと。。
>>424の話とは全然違う話

427 名前:デフォルトの名無しさん [2007/04/08(日) 17:03:02 ]
Presentの戻りって何?
プリロールかな?としても意味通じないし…
予測ツカナス

428 名前:デフォルトの名無しさん mailto:sage [2007/04/08(日) 17:45:38 ]
IDirect3DDevice9::Present()の話だな。

429 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 21:41:47 ]
 初心者です。SDKサンプルで分からない点があるのですが、お教え頂けないでしょうか。

 プログラム動作としては、3つのmp3ファイルをタイマーで順繰りに再生するだけです。※1
 この中でソースフィルタを変更してグラフを再構成する部分で分からない点があります。

流れ
 1.新しいソースフィルタをグラフに追加する。
 2.古いソースフィルタをグラフから削除する。
 3.新しいソースフィルタの出力ピンからRenderする。


2の部分の詳細は以下のようになっています。

 A.グラフ内のフィルタを列挙する。
 B.列挙された全フィルタについて

     a.一旦グラフから削除する
     b.古いソースフィルタでなければグラフに追加する

疑問点
 b.の部分がある意味がわかりません。自分としては、グラフ内の全フィルタを削除して、新しい
ソースフィルタを追加して、Renderすれば簡単に思えるんですが...
 
 どうかよろしくお願いします。

※1 ソースはSDK_Path\Samples\C++\DirectShow\Players\BGMusicです。

430 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 22:16:14 ]
SwapSourceFilterのメソッドのこと?


431 名前:デフォルトの名無しさん mailto:sage [2007/04/09(月) 23:29:52 ]
>>429
Render は重いから。

432 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 00:46:05 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<>>429 サウンドってのは、レンドルァすると全部のcodecを試すんだぞ。
  ヽ    |フ だから、全て消して再構築すると連続再生とかできんぞ。
   /_ _| アイマスの魔法をかけて!から、とかちつくちての連続技の間に途切れるって事だぞ。

433 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 01:13:25 ]
>>432
やべぇ見直した。。



434 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 01:55:46 ]
ありがとうございます。
なるほど、それで以前使ったフィルタは残してたんですねφ

ところでその時、つながっていないフィルタがグラフ上に散在している状態ですよね。

その状態でRenderしたら、全Codecを試さず、散在しているフィルタを繋げてくれるんですか?
それともRenderを使わず、ピンを繋ぐ方法が別にあるのでしょうか?

この板のレベルに達するまで勉強して、出直してきます。(時間かかりそう...)

435 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 07:21:49 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<>>434 朝勃ち中だが答えるぞ。
  ヽ    |フ レンダーすっと、フィルタが追加されている物から試すんだぞ。
   /_ _| そのため、レンダーする前にvmr9のフィルタとかを入れておくとただのビデオレンダーじゃなくなったりするぞ。
      だから、先に自分で作ったフィルタを入れておくと正しく繋がったりするぞ。
もちろん、Renderを使わずにグラフビルダのほうでConnectすることができるぞ。
IPinってのをフィルタから抜き出して接続できるみたいなんだぞ。
使った事無いからうまんちんまんだぞ。

436 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 07:39:07 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<なんか、間違ってるかもしれんが許してほしいマンコ!んじゃ為替予想書いてくるぞ。
  ヽ    |フ
   /_ _|

437 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 12:02:08 ]
すみません、質問いいですか?
今、DirectShowでUSBカメラからサンプルグラバでBMPをキャプチャするプログラムを作っています。
コールバックを使用してキャプチャをしようとしているのですが、
SetOneShotを使って1フレームだけキャプチャすることは出来ないのでしょうか?
ためしにSetOneShot(TRUE)としてみても、コールバックされ続けてしまいます。

438 名前:デフォルトの名無しさん [2007/04/10(火) 17:56:39 ]
出力ピンがオーディオとビデオの2つある、Splitterフィルタを作成しています。
フィルタのGetMediaTypeでは、ピンによって2通りの設定が必要と思っています。
(オーディオの方の出力ピンからGetMediaTypeが呼ばれた場合はオーディオの値をセット、
ビデオの出力ピンからGetMediaTypeが呼ばれた場合はビデオの値をセットというように。)
しかし、GetMediaTypeでは、現在どちらの出力ピンから呼ばれているのか判別できないのですが、
どうしたら良いでしょうか。

出力ピンのクラスは同じものを使っているのですが、オーディオ用のピンクラス、ビデオ用の
ピンクラスと別に作成しなければならないのでしょうか?


439 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 19:30:13 ]
>>438
自分がどっちのピンかを区別して処理を変えればいいじゃん。

440 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 21:10:34 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<>>437 ただいまんこー!ドピュンコしたあとに、コールバックを外せばOKだぞ。
  ヽ    |フ コールバックをセットしたままだと永遠にデータが流れるぞ。
   /_ _| オレだったらSampleCBのあるクラスに BOOL m_Ochinpoいれて
データを流したくない時はfalseいれて SampleCBのなかでreturn S_OKしちゃうぞ。
オマンコクロッサー!


441 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 21:13:06 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<>>438 IPin淫乱フェラにあるQueryPinInfoで解決できる気もするぞ。
  ヽ    |フ 俺も調べないと分らんぞ。スマソだぞ。力になれんぞ。
   /_ _|

442 名前:デフォルトの名無しさん mailto:sage [2007/04/10(火) 22:06:54 ]
VBプログラマにVisual C++を教えるスレ★ Part25

443 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:10:36 ]
>>441タソ
フィルタ内部の話だからQueryはちがうとおもうぞ。
自分も>>439の意見に賛成です。
@純粋仮想メソッドGetPinを実装してピン番号を取得
AGetMediaTypeにてまず@を呼び出す。
Bピン番号が「1」ならビデオだから・・・メディアタイプ「Video」を要求
Cピン番号が「2」ならAudioだから・・・・メディアタイプ「PCMAudio」を要求
iPositionにて要求するものをそれぞれ数個書いてやればいいかな。。




444 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:49:17 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<>>443 オレはトランスフォーマーフィルタで1対1の戦いしかやったこと無かったぞ。
  ヽ    |フ これでピンが複数あるフィルタも手だせそうだぞ。
   /_ _|

445 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 00:50:19 ]
>>444
コンボイの謎を2週くらいクリアしとけ

446 名前:438 [2007/04/11(水) 14:38:35 ]
返事ありがとうございます。

>>439
僕はどっちのピンか区別できなくてコマッてます…

>>443
GetPinはピン番号を指定して、その番号のピンを取得するのだと思うのですが。
それだとピンの区別はできなくないですか?

実際には、フィルタはm_pOutputAudioとm_pOutputVideoの二つの出力ピンを持ってます。GetMediaTypeの中で、CBasePin::Name()でピンIDを取得して、判断しようかと思いましたが、結局ピンの指定によって取得値が変わってしまいます。
m_pOutputAudio->Name() とすればAudioが返るし、
m_pOutputVideo->Name() とすればVideoが返るので、
結局どちらのピンかわかりません。(両方が存在するので当たり前ですが)
※m_pOutputAudio,m_pOutputVideoはフィルタ作成時に作られます。

どうしたらよいですかね…


447 名前:デフォルトの名無しさん mailto:sage [2007/04/11(水) 14:59:29 ]
>>446
if (pOutputAudio == this) {
 //オーディオピンの処理
} else {
 //それ以外
}

448 名前:448 [2007/04/11(水) 17:09:38 ]
>>447
参考にします。

フィルタのGetMediaTypeでピンを判別するから良くなかったみたいです。
フィルタのGetMediaTypeは、出力ピンのGetMediaTypeからコールされるので、
出力ピンのGetMediaTypeでどっちのピンか判断し、それを記憶しておくことにしました。
CSplitterOutputPin::GetMediaType()
{
if(0==lstrcmpW(this->m_pName, L"Audio")){
//フィルタのメンバ変数にオーディオだと記憶させる。
m_pSplitterFilter->m_bOutputPinAudio=true;
}
else{
//フィルタのメンバ変数にビデオだと記憶させる。
m_pSplitterFilter->m_bOutputPinAudio=false;
}
return m_pSplitterFilter->GetMediaType();
}

↑のようにして、フィルタのGetMediaTypeでは、m_bOutputPinAudioを見て、
オーディオ、ビデオの設定をするようにしました。
一応接続はこれで上手くいきました。何かとても簡単な質問をしてしまった気がしますが…


449 名前:デフォルトの名無しさん mailto:sage [2007/04/18(水) 22:36:27 ]
1500円の2割引はいくら?
時速80km/hで走る車が1時間何キロ走る?

・・・ポカーン

450 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 00:29:28 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<1500円の2割引きは計算不能だぞ。俺の脳が再起不能(リタイア)したぞ。
  ヽ    |フ 時速80kmでオレは走れないので1時間も車を見張れないぞ!
   /_ _| 果てしなく遠くが答えだぞ。

451 名前:デフォルトの名無しさん [2007/04/19(木) 06:23:08 ]
都合でDirectshowを使い始めることになりました初心者です。
Webカメラで取った映像を扱いたいので、SDKにあるAMCapを参考に機能を探しているのですが

キャプチャした動画をaviではなくmpeg1等で圧縮して吐き出したいのですが
フィルタを何処の関数で挟めばよいのでしょう。
あと、映像のガンマや彩度等がプロパティで調整できてしまいますが、これはなんのフィルタを使用しているのでしょうか?

初心者質問すいません。

452 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 07:35:23 ]
>>451

プロパティはソース見りゃわかるんじゃない。
以下推測
色調節のフィルタが存在するのではなくて
キャプチャデバイスやそのピンのプロパティじゃないのか。
Webカメラのデバイスドライバが変わればその機能も変わる。

MPEG-1エンコーダって標準装備か?
俺持ってない。存在しないフィルターは使えんよな。

453 名前:デフォルトの名無しさん [2007/04/19(木) 07:54:41 ]
沖縄県の方へ(命に関わる注意事項です)

沖縄県での選挙ですが、どうか民主党だけは避けてください。県民の生命に関わる可能性があります。
民主党の最大の公約は一国二制度(※)ですが、一度「一国二制度 沖縄」等で検索をお願いします。
この際、民主党のHPで調べても良いです。以下の注釈↓と矛盾することは書いてないはずですから…

※一国二制度
 簡単に言えば沖縄を中国と日本の共有物にし、そこに3000万人の中国人を入植させます。
 (つまり沖縄人口の 96% を中国人にして、実質、沖縄を中国人の居住地とします。)
 さらに「自主」の名の下、沖縄で有事が起きても自衛隊は干渉できません。
 3000万人の中国人が、少数派となった130万人の日本人に何をしても、です。
 そして中国人の反日感情の強さは、ほとんどの日本人の理解を超えるものです。

今回の選挙で民主党が勝った場合、「自主」「発展」を連呼しつつ段階的に進めていくことになります。
自主と言っても、自主を認めるのが「住人の96%が中国人となった」後だということに気をつけてください。
発展と言っても、新沖縄の少数派となった「少数民族日本人」の発展ではないことに気をつけてください。



454 名前:451 [2007/04/19(木) 14:09:38 ]
>>452
えっと、回答ありがとうございます。
トライ&エラーしながら死んでおります。

>色調節のフィルタが存在するのではなくて
>キャプチャデバイスやそのピンのプロパティじゃないのか。
...確かに、自宅で違うWebカメラで試したときは、設定ダイアログの内容がぜんぜん違っていましたね。

>MPEG-1エンコーダって標準装備か?
もう一度探しなおしたデコーダーだけで、エンコーダーはありませんでした。死んできます。
aviだと保存するにも重いから、実用的なサイズに直して自動保存しておいてって言われたんですが、asfかモーションJPEGかDVか、しか使えないのかな?

まぁ、いくらか頑張ってみます。

455 名前:デフォルトの名無しさん mailto:sage [2007/04/19(木) 21:04:09 ]
TMPEGEnc買っちゃいなYO!

456 名前:デフォルトの名無しさん [2007/04/19(木) 23:22:24 ]
>>455
GRAPHEDTがあれば買わなくてもいいな俺は。

>>454
MPEG4のコーディック2なら標準装備であるよ。

GraphEdtで↓な構成を書いてみるよろし
「WebCam」→「MPG4Codec2」→「AUXMix」→「FileWriter」

んで「WebCam」のPinプロパティを開いてみる

自分の思った通りに出来る場合
⇒そのままコーディング

自分の思った通り出来ない場合
⇒出来る方法を模索

をやっといた方がはやい

457 名前:454 [2007/04/20(金) 10:39:55 ]
どうもです、回答ありがとうございます。
一応あの後がんばった結果、DV形式とモーションjpegでは圧縮に成功しました
「うーん、なんかサイズ大きいね。asfで圧縮できない?」
といわれたわけで、メディアフォーマットSDKを読んで泣いています。
小さければ文句言われないのでmpeg4の方が楽かもしれません。
なんか進歩日記みたいになってすいませんが...。

458 名前:デフォルトの名無しさん [2007/04/20(金) 20:55:50 ]
>>457
御礼を言うのは大変素晴らしいが、どこまで書いたことを理解できたのか
解るように(回答が的外れでなかったか知りたい)
内容についても一言触れて欲しかったな

と、会社では立場が最下層回答者の愚痴。

459 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 21:39:00 ]
最後志貴の方、速度で無い中、対戦お疲れ様でした。
飯食うので、この辺で。

460 名前:デフォルトの名無しさん [2007/04/20(金) 22:14:15 ]
あ、はい。もうなんか恥ずかしいですがこの際だから正直に言います。

>GraphEdtで↓な構成を書いてみるよろし
>「WebCam」→「MPG4Codec2」→「AUXMix」→「FileWriter」
ここらへんから実は分かっていません。
GraphEdtは分かるのですが、圧縮用のcodecをどう呼び出せばいいのか…
directshow標準のDVだと
CoCreateInstance( CLSID_DVVideoEnc, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pDvFilter);
と書いたら作れたんだけど、標準外のものはクラスIDを何処で知れば良いんだと悩んでおりました。
そこで摘んだのでasfでの圧縮を模索したのですが、なかなか動くコードにならないで今日が過ぎていきました

461 名前:デフォルトの名無しさん [2007/04/20(金) 22:51:49 ]
>>460
ふむ。成る程。
GraphEdtでのフィルタ登録の操作の仕方なのかそれをコーティングするときの方法なのかわからんです。

Clsid(クラスIDの事ね)がわからないと言ってるから↓↓がわからんのでは??

>自分の思った通りに出来る場合 ⇒そのままコーディング

ClsidはGraphedtでフィルタ登録する時に表示されてるよ。

それとも「Graphedt.exe」のアプリを「フィルタグラフ」(コーティング上の概念)と勘違いしてるのかなぁ…

462 名前:デフォルトの名無しさん mailto:sage [2007/04/20(金) 23:07:45 ]
asfはWM ASF ライターを登録して入力ピンにつないでやるだけだから
圧縮コーデックの列挙が必要なavi再圧縮に比べたらよっぽど簡単だよ。

463 名前:460 [2007/04/21(土) 06:14:41 ]
これは直にソース出してみた方が良さそうなので。
以下asfの書き出しの部分です。(短くするためにエラー処理省略です

IBaseFilter *pAsfFilter;
hr=CoCreateInstance(CLSID_WMAsfWriter, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pAsfFilter);
hr = gcap.pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"cccc.asf", &pAsfFilter, &gcap.pSink);
hr=gcap.pFg->AddFilter( pAsfFilter, L"asf filter" );
pAsfFilter->Release();
hr = gcap.pBuilder->RenderStream(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video, gcap.pVCap, NULL, pAsfFilter );

このコードだとファイルの書き出しはしてくれるんだけど、何故か無圧縮aviが出力される。何ででしょうね…

> ClsidはGraphedtでフィルタ登録する時に表示されてるよ。
Gapheditでフィルタ選択したときに出るDisplayNameの、 {ランダムな文字} の間の部分って事ですね。
多分理解しました。





464 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 12:37:04 ]
MEDIASUBTYPE_Aviだからじゃねーの?

465 名前:デフォルトの名無しさん mailto:sage [2007/04/21(土) 13:49:11 ]
>>463
ちゃんとMSDNでリファレンス見てから書いたほうがいいよ。
CoCreateInstanceでCLSID_WMAsfWriter作らなくても
SetOutputFileNameが作ってpAsfFilterに入れてくれる。
msdn2.microsoft.com/en-us/library/ms779904.aspx
msdn2.microsoft.com/en-us/library/ms784861.aspx


466 名前:460 [2007/04/23(月) 04:44:00 ]
お返事が送れて申し訳有りません。
一応頂いたアドバイスからちまちまと頑張っております。

>>465
hr=CoCreateInstance(CLSID_WMAsfWriter, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void**)&pAsfFilter);
hr = gcap.pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, L"cccc.asf", &pAsfFilter, &gcap.pSink);

上2行からCoCreateInstance関数でのインターフェースの取得をやめて、メディアサブタイプをMEDIASUBTYPE_Asfに改めたのですが、何故かエラー。
どこかまだ問題があるのかも知れません。
というわけで、他のcodecに逃げる方に切り替えて、Graphedit.exeを弄りながらクラスIDを探したのですが書いたグラフをGRFファイルで書き出して、無理矢理テキストエディタで開いたら、それらしいクラスIDがあったので
キャプチャカード -> ffdshow -> File Writer
とフィルタを繋いだ所、無事に書き出しに成功しました。
サイズ的には納得してもらえそうな所にまぁ、落ち着きました。
フォーマットがXViDですが、あはは…。

> >>454
> MPEG4のコーディック2なら標準装備であるよ。
そこなのですが
・MPG4Codec2
・AUXMix
の2つのフィルタがちょっと見たりませんので上の様に逃げています(汗
探し方が足りないのかな?

とりあえず、相手に見せてみます。ありがとうございました。
まだ格闘しなければいけないところがあるので、ほとほと困ったらまた来るかもしれません。

467 名前:デフォルトの名無しさん [2007/04/25(水) 16:01:46 ]
以前に出力ピンが2つある場合の出力ピンの区別のことで質問させてもらったのですが、
スプリッタの2つの出力ピンからデータを出力するようにしました。
が、再生すると何も表示されません(音も映像も)。
一方の出力ピンだけ接続し、もう一方の出力ピンは未接続の状態にすると再生はできます。
しかし、オーディオ、ビデオ両方を同時に再生しようとすると、どちらも
再生されなくなります。
原因は何が考えられるでしょうか。

468 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 16:15:00 ]
それはただのバグっぽいぞ・・・
各ピン(のインタフェイス)は別々のスレッドから呼ばれる可能性があることを
ちゃんと考慮した作りになっているか、デッドロック等はないか、など考えてみるべき。

あと「再生されません」ではなく、グラフのステートが再生状態になるのかならないのか、
なる場合には停止で止まるのか止まらないのかなど、プログラマらしい情報の出し方を

469 名前:467 [2007/04/25(水) 19:34:56 ]
>468
もともと1つの出力ピンのソースに、無理やりもう1つの出力ピンを
追加したのが問題かもしれません。
基本的にm_pOutput(元々あった出力ピン)が出てくるところに、
もう1つのピンの処理を追加したような感じです。

>あと「再生されません」ではなく、グラフのステートが再生状態になるのかならないのか、
>なる場合には停止で止まるのか止まらないのかなど、プログラマらしい情報の出し方を
すみません、情報不足でした。GraphEditで確認しているのですが、
再生ボタンを押した後、再生状態にはなっているようです。
しかし、停止ボタンを押すとフリーズし,
The graph was unable to complete pause within 10 seconds.〜
という警告がでる状況です。


470 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 19:37:18 ]
deliver で送るプッシュ型のピンですよね。
2つある場合はそれぞれ別のスレッドで動く必要がありますが、
そのあたりは問題ありませんか?

471 名前:467 [2007/04/25(水) 20:27:13 ]
>>470
deliverは使ってませんが、内容は一緒です。
プッシュ型です。
具体的にはフィルタのReceiveでは、下記のようにしてます。

if(m_bOutputSampleAudio)
{
// オーディオならオーディオピンから出力
if(m_pOutput->IsConnected())
return m_pOutput->m_pInputPin->Receive(pSample);
}
else
{ // ビデオならビデオピンから出力する
if(m_pOutputVideo->IsConnected())
return m_pOutputVideo->m_pInputPin->Receive(pSample);
}

1つのスレッドで動かしているような気がします。
スレッドを別々に持つとは、オーディオピンがストップしたとしても、
ビデオピンは関係なく出力できる、みたいな感じですよね。
どう実装すればいいのか…

472 名前:デフォルトの名無しさん mailto:sage [2007/04/25(水) 21:15:13 ]
ビデオレンダラにつながっているピンのReceiveが時間調整のためにブロックすると、
オーディオレンダラにつながっているピンにもデータが来なくなるので、
時間が進まなくなって永遠にブロックするという動作。

出力ピンをCSourceStream から派生させて実装するのが base classes 的には常道。
パースしたビデオ、オーディオのデータをそれぞれのピンの中の Queue (自分で作ること)
に入れておいて、FillBuffer で Queue にあるデータをもとにメディアサンプルを作る。

個人的にはスプリッタを作るなら、ソースフィルタのサンプルコードをもとにして
出力ピンと入力ピンを追加するのが簡単だと思う。

473 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 16:19:57 ]
質問です、Direct3Dで、ゲーム中のテクスチャに動画ファイルの映像の
ビットマップを入れ、音声もゲームのカメラ位置に従って右の方にあれば
右寄りの位置から聞こえてくるようにしたいのですが、

とりあえず入門にあるようなSampleGrabberを使う方法ではなく
RendererFilterを継承するのが正解なのだろう、というところまでは
わかったのですが、フィルタを継承して自前で書くのにstreams.hとやらが
ありませんでした。Windows2000ではWindowsSDKがインストールできないので
迂回策を探しています(ちょっと前のPlatformSDKには入ってませんでした・・)。

Windows2000上でフィルタを継承するようなコードを書いてる方は、
どのようにやっているのでしょうか?
他にも「別にRendererFilterを継承しなくてももっといいやり方がある」とか
ツッコミがあればお願いします。



474 名前:473 [2007/05/08(火) 16:25:19 ]
すみません、間違えてさげてしまったΣ
ついでに訂正・・・
×streams.hとやらがありませんでした。
○streams.hとやらが必要みたいですが、ありませんでした。

何がやりたいかわかりやすく書くと、
ゲームの中のテレビに任意の動画を流したい、ということです。

475 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 18:11:28 ]
>>473
D3Dのテクスチャに動画をレンダリングするのは、
SDKのサンプルにそのものずばりのがある。

DirectShow 関連のSDK が利用できないのであれば、
動画ファイルをWMVなりAVIで用意して、AVI関連APIや
Windows Media Format SDKでデコードすれば良いと思う。

476 名前:473 mailto:sage [2007/05/08(火) 18:42:40 ]
回答ありがとうございます!
>WMVなりAVIで用意して、AVI関連APIやWindows Media Format SDKでデコード
なるほど!動画関連のAPIに詳しくなかったので盲点でした。
その辺はこれから調べようと思うんですが、一つ質問させてください。

>SDKのサンプルにそのものずばりのがある。
これなんですが、WindowsSDKのことでしょうか?
最初DirectXSDKのサンプルかと思ったのですが見当たらなかったので・・・


477 名前:デフォルトの名無しさん mailto:sage [2007/05/08(火) 19:01:25 ]
>これなんですが、WindowsSDKのことでしょうか?

そうです。
Windows 2000 だと Windows server 2003 SP1 Platform SDK を利用することになります。
SDK の導入あたりから書かれたページを見つけたので読んでみてはいかがでしょうか。
ttp://www.shader.jp/xoops/html/modules/xfsection/article.php?articleid=17

478 名前:デフォルトの名無しさん [2007/05/10(木) 01:38:59 ]
DirectShowに足突っ込んで間もないのですが、質問です。
VMR9を使って動画の再生を行おうとしているのですが、動画の
元サイズとアスペクト比を取得しようと
IVMRWindowlessControl9::GetNativeVideoSizeを使っているのですが、
このメソッドのセットする値が期待した値になりません。

long x, y;
long aspx, aspy;
HRESULT hr = pVMRWindowlessControl9->GetNativeVideoSize(&x, &y, &aspx, &aspy);

このコードで720×480のmpeg2ファイルを読み込むと期待としては
x = 720
y = 480
aspx = 4
aspy = 3

こんな感じになると思っていたのですが、実際は

x = 720
y = 540
aspx = 720
aspy = 540

となってしまいます。元々のサイズとアスペクト比を取得したいのですが、
これではできません。他の方法があるのでしょうか?

ちなみに、IBasicVideo2を使うとちゃんとできるんですよね。他の機能を実装
するためにVMR9を使わざるを得ないのですが・・・


479 名前:デフォルトの名無しさん [2007/05/16(水) 14:14:00 ]
どうもすいません。

Webカメラから取った動画を保存できるようにプログラムを書いたのですが、そこまで完成したのを見せたところ。
「こんどはコレ再生して、再生時間を表示できるようにできないかな?」
と言われてしまいましたが、正直何を使って実現すれば良いかどうかから思い当たるところがありません。
そのインターフェースを使えばよいかどうかだけでも、教えていただけないでしょうか…。
IAMDroppedFramesあたりかな、とも思ったのですがいまいち思ったように動いてくれていません。

480 名前:479 [2007/05/16(水) 14:43:41 ]
すいません。
先ほど、話をしなおしたのですが。私の勘違いがあって。
「Webカメラから取った動画」に「現在の時間」を残せないか?という要求でした。
具体的には動画の何処かの隅っこに、現在時間を画像として書き込んでしまうようなものを想像していたみたいです。
質問するのではなく、自前でフィルタを書くべきみたいですね。すいませんでした。


481 名前:デフォルトの名無しさん mailto:sage [2007/05/16(水) 17:19:42 ]
でも正確なキャプチャ時刻を得るのは難しいよな。
誤差が33ms以内とか

482 名前:デフォルトの名無しさん [2007/05/17(木) 00:56:53 ]
あぁ。僕もそんな要望きたからやった。
単に秒まで出すだけならたやすい。
インプレイスフィルタが1番楽。次点は資料がたくさんあるトランスフォームフィルタ。
1・TranceFormメソッドをオーバーライド
2・IMediaSampleからDIBポインタをとる
3・DIB→デバイスコンテキストに変換
4・WinAPIのTextOutで文字書く
5・デバイスコンテキスト→DIB変換
たったこれだけでおk

483 名前:460 [2007/05/20(日) 19:49:18 ]
ごめんなさい。弱音を吐きます。
結構頑張ったけど、2,3のステップの所のコードが作れません。




484 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 05:05:45 ]
時間でいいなら、必要な文字の画像を準備して、合成するだけでいいんじゃね?
厳密なアルファブレンドだと処理が重いから、切り抜き程度でいいと思う。

485 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 08:39:41 ]
CreateDIBSectionとかググれ


486 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 15:14:30 ]
>>483
客の要求仕様に基づいてプログラムを作ってるならしようがないけど、もしかすると
>>460 が作業する工数 >>>>>>> 撮影時に時計を一緒に写す手間」じゃないか?

もしそうなら道楽で予算を無駄遣いしてることになるから、正直適当なとこでやめて
本業に精を出した方がいいような気がする・・・

487 名前:483 [2007/05/21(月) 17:40:41 ]
みなさん、ありがとうございます。

>>484
うん、最初にそんな感じのことを思いついて、ドット絵の様な汚い文字を無理やり表示させてみました。
どうしても気持ち悪いので、なんとかしたいですが、後回しかも…。

>>484
ヒントありがとうございます。
後日完成を目指すです。

488 名前:デフォルトの名無しさん [2007/05/21(月) 21:30:57 ]
フィルタを作成しているのですが、リリースモードでビルドした場合に、そのフ
ィルタを使用すると強制終了が起こってしまいます。
コンパイルエラーは出ません。
デバッグモードでビルドした場合は、問題は起こりません。
強制終了が起こる場所は、おそらくmallocをしているところだと思います。
正確にはmallocを使用している関数で落ちるのですが、その関数の内部は見えま
せん。
デバッグとリリースで、mallocが使えないことってあるのでしょうか。


489 名前:デフォルトの名無しさん mailto:sage [2007/05/21(月) 21:47:43 ]
>デバッグとリリースで、mallocが使えないことってあるのでしょうか。
ありません。

490 名前:デフォルトの名無しさん mailto:sage [2007/05/22(火) 03:24:02 ]
GrapEditをホストにして普通にデバッガで追ってみれば?

491 名前:488 [2007/05/23(水) 00:27:49 ]
何かよくわかりませんが、msvcrt.libをリンクしないようにしたら上手く行きました。
どうもありがとうございました。

492 名前:デフォルトの名無しさん [2007/05/23(水) 08:32:54 ]
>>460
フィルタを作るのが最善の解決方法かどうかまだ悩んでいるようだけど自分はそれが1番楽な方法だと思う。
俺はヒントというかフィルタの作り方手順を書いたものだが、手順2、3のどこがわからんのか明確化してくれ。
手順3については>>485で調べられると思うけど


493 名前:483 [2007/05/24(木) 10:22:39 ]
>>492
どうも、お手間をおかけして申し訳ありません。
インプレイスフィルタということで、SDKサンプルのEZrgb24を基本に作っておりました。
フィルタのTansform関数で、引数としてIMediaSampleを受けりますが
これを
・DIB形式に変換
・それをデバイスコンテキストの代入
のところで躓いておりました。

一応やっつけ実装で納得はしてもらったのですが、自分で恥ずかしいので、後で直したいというのが正直なところです。
若輩者で申し訳ありません。



494 名前:デフォルトの名無しさん [2007/05/24(木) 21:37:23 ]
いや、俺も若輩ものだから…。楽なのはソースを渡して解析して貰う事なんだがな
それすら今は体力的に自信ない

495 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 02:39:17 ]
ちょっといいことを教えてあげよう。
EZrgb24ってさインプレイスフィルタじゃないお( ・ω・)∩
違いはね。何のフィルタクラスを継承してるかで決まるんだ
ちなみに「EZrgb24」は「CTransformFilter」を継承してるお

496 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 03:59:41 ]
WinAPIのDIBってボトムアップ形式のみでなかった?

497 名前:デフォルトの名無しさん [2007/05/25(金) 08:12:46 ]
ボトルアップってどういう意味?
座標原点の話しかな。DIBは他画像形式に比べると上下逆さまだけど、変換時にY座標をマイナス値を指定すればどうとでもなる

498 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 08:34:21 ]
ボトムアップなら単語そのままの意味だが
ボトルアップは飲み終わったボトルを投げ上げるという意味だな

499 名前:デフォルトの名無しさん [2007/05/25(金) 18:04:09 ]
なるほど〜私はてっきりボトルを飲み干す事かとおもたよぉ〜

で、、意地悪しないでDIBのボトムアップを教えてくれ

500 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:13:53 ]
>>497でほざいていることがまさにボトムアップ

つーかキーワードがこれだけでてんのに自力で検索くらいしようとは思わんのかね

501 名前:デフォルトの名無しさん mailto:sage [2007/05/25(金) 23:26:22 ]
ただ単にBITMAPの話じゃん 画像いじるなら基礎の基礎

502 名前:デフォルトの名無しさん [2007/05/26(土) 12:58:18 ]
自作ソースフィルタってどうやってフィルタグラフに追加するんですか?
IGraphBuilder::AddSourceFilterを使ってもデフォルトのソースフィルタが呼ばれるし、
普通のフィルタ同様に、
CoCreateInstance&AddFilterすると、ソースフィルタに読み込むファイル名が指定できません。

503 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 20:01:49 ]
>>500
>>496の聞きたいことの意味がわからんかっただけで
俺は知ってるからおk。

今日はPCだからしらべてみたけど、ボトムアップという表現
はあんまり使われてないぞ??
■Google調べ 「DIB ボトムアップ」検索結果
っミ【114件】



504 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 20:27:02 ]
DirectShow スレということで、本家のDirectShowカテゴリ内のページ。

トップダウンとボトムアップの、メモリ上のピクセルの並びの違いについてごくごく簡単に説明している

Top-Down vs. Bottom-Up DIBs
ttp://msdn2.microsoft.com/en-us/library/ms787796.aspx

サンプル画像のセンスの無さには相変わらず笑わせてくれる。

505 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 21:27:48 ]
ありがとう。本家MSDNが使ってる言葉なのか
今後使っていくよ。
まぁBITMAPの仕様の話であって
あんまりDirectShowとは関係ないとこで使うことになりそうだけど

506 名前:デフォルトの名無しさん mailto:sage [2007/05/26(土) 21:32:32 ]
>>502
ごめんボトムアップに気を取られていた
自作フィルタを登録する方法はコマンドラインから
「regsvr32 ぱす&自作フィルタ.ax」でレジストリ登録が必要です。

その後「Graphedt」でフィルタグラフに登録できることを確認するんだよ
それでもできなかったらまた質問しましょう

507 名前:502 [2007/05/27(日) 02:21:11 ]
>>506
すいません、説明不足でしたが、レジストリ登録、GraphEditでの確認は出来ています。
ただアプリケーションから自作ソースフィルタを使ってファイルを読み込む方法がわかりません。
GraphEditで追加したときは、読み込むファイルを聞いてくるのですが、アプリからソースフィルタを追加しても、ファイルを聞いてこないのです。


508 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 04:22:30 ]
なるほど。
窓枠の提供はどこがやるの?って事だと認識しました。
自作ソースフィルタを「GraphEdit」で開いた場合、
ファイル選択ウィンドウはディスクトップ画面のド真ん中に出ますか?

もし真ん中に出ない場合、「hWnd」をデスクトップから取っていないことになります。
アプリケーションから渡してやる(=ファイル選択ウィンドウを作って選択結果をフィルタに渡すような設計)
にしてやる必要があるかと思います。

自作ソースフィルタのファイル選択ダイアログを出す部分のソースを晒せば解決できると思いますよ

509 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 04:26:48 ]
ソースフィルタはIFileSourceFilterインターフェースを持ってるでしょ。
AddFilterした後でそれを呼び出して(QueryInterface)、Loadメソッドを
実行してやるんだよ。
でも、そんな基本的な所でつまずいてるのにソースフィルタ自作とかよく出来たな。

510 名前:デフォルトの名無しさん mailto:sage [2007/05/27(日) 12:31:49 ]
手っ取り早くソース晒せといいたい

511 名前:502 [2007/05/28(月) 12:17:00 ]
>>508,509,510
回答ありがとうございます。

>>509
まさにそれでした!ありがとうございました。
無知ですいません。

512 名前:デフォルトの名無しさん [2007/05/28(月) 18:24:46 ]
簡易動画編集のようなことをやるために、複数の動画ファイルを連結して1つのファイルにエンコードしようとしています。
いまのところ、ファイルごとに構築した再生用のフィルタグラフから静止画を取り込みまくって
録画用のフィルタグラフに流し込むやり方を考えているのですが、
こういうバカっぽいやりかたでなく、もっとエレガントな方法はないもんでしょうか。

513 名前:デフォルトの名無しさん [2007/05/28(月) 23:44:50 ]
この辺を使ってビデオ再生やってます。
IGraphBuilder
IMediaControl
IMediaEventEx
IVideoWindow
IBasicVideo
ビデオ再生自体は問題ないのですが、サウンドデバイスが複数
あった場合に、音声の出力先を指定するにはどうしたら良いで
しょうか?

現状、Windowsの標準のサウンドデバイスのみ音が出ます。
よろしくお願い致します。



514 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 00:38:22 ]
DirectShowを使わない

515 名前:デフォルトの名無しさん [2007/05/29(火) 03:07:01 ]
ええええええ
まじっすかあああ?
DirectShowって使えねーなぁ!!
ゴミじゃん。M$てめえやる気あんのか?殺すぞ






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

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

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