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

296 名前:268 mailto:sage [2007/03/11(日) 20:31:37 ]
>>294
向こうで聞くべき質問じゃないと思ったので・・・。orz

297 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 20:32:01 ]
FilterのサンプルにNullInplaceフィルタってのがあるんだけどさ
それをキャプチャデバイスとレンダラの間に入れてみてくれ。
やっぱり色空間変換フィルタが必要とされるか?されないか?

298 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 20:35:02 ]
dvsdはDVのSD形式。それがわかんねーなら帰れw

299 名前:265 mailto:sage [2007/03/11(日) 21:09:48 ]
>>297
自前のWindowsSDKにないのでDirectXのExtrasをダウンロードし、その中からNullInplaceフィルタを見つけたのですが、
ビルドすると、PC内に存在しないatlbase.hが無いと言われてしまいます。
無念です・・・

300 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 21:44:59 ]
> >CTransformFilter::Receive内でもDeliverしてるからな。その辺り大丈夫だよね?
> どうなんでしょう・・・影響があるかは判断しかねます・・・

どう実装してるかわからんけど、もしかしてTransformメソッドの中で2回Deliverしてる?
CTransformFilter::Receive良く読んで理解してるよね?


301 名前:デフォルトの名無しさん [2007/03/12(月) 08:02:05 ]
俺もフレームレート変換フィルタを作って断念した者ですが、
上流フィルタからの映像が来る来ないに関わらず非同期でフレームレートを作るフィルタが出来なかったんだよな。
今悩んでいる子がここまでやるのなら全力でサポートするよ

302 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 08:04:43 ]
最近変換フィルタの話題がちょくちょく出ててうれしい。


303 名前:265 mailto:sage [2007/03/12(月) 08:07:00 ]
>>300
そうです、Transformメソッドの中で2回Deliverしてます。
サンプルの流れがいまいち理解できないです。
そこで今行っている処理の流れを分かる範囲でまとめてみました。

[キャプチャフィルタ]-[変換フィルタ(自作)]-[色空間変換フィルタ]-[VMR9]

[色空間変換フィルタ]の入力ピンからの[変換フィルタ]への呼び出し
CTransformFilter::Receive (CTransformFilter::InitializeOutputSampleを呼び出す)
 ↓
CTransformFilter::InitializeOutputSample (新しいサンプルを[キャプチャフィルタ]の出力ピンから取得する)
 ↓
CTransformFilter::Transform
  (サンプルの処理)
   ↓
  CBaseOutputPin::Deliver (IMemInputPin::Receiveを呼び出す) ←これを>>286のように2回呼び出しています
   ↓
  IMemInputPin::Receive ([変換フィルタ]の出力サンプルを取得する)
   ↓
  [色空間変換フィルタ]での処理
   ↓
  [VMR9]が付与されたタイムスタンプに従って画面に表示

疑問点
>>289さんの言う、CTransformFilter::Receive内でもDeliverしている、という記述がMSDNで見つけられませんでした。
 上記で言えばどの時点で発生するのでしょうか?
・最初のCTransformFilter::Receiveが呼び出されるタイミングが分かりません。
 サンプルが変換フィルタで処理されるサイクルはどのようになっているのでしょうか?

304 名前:265 mailto:sage [2007/03/12(月) 10:06:54 ]
この問題に関していろいろと試してみた結果を書いておきます。

・タイムスタンプがないプレビューピンからの映像に対して変換を行ったところ、同じうなり現象(>>284)が起きた。
・一枚のサンプルに対して二度の処理を行うが、片方の絵を真っ黒にしてみると、フレームが倍化していないときは
二枚目の絵のみが表示される状態であることが分かった。
・二度目のDeliverを外したところ、フレーム倍化の時間が若干延び、倍化していない期間においても
一枚目の絵と二枚目の絵が交互に表示された。
このとき、キャプチャーピンからの映像では倍化していない期間で絵が0.5秒ほどストップすることが頻繁に起こった。
プレビューピンからの映像ではこのストップ現象は起きない。



305 名前:265 mailto:sage [2007/03/12(月) 10:08:49 ]
すみません、
>>284じゃなくて>>286です。

306 名前:268 mailto:sage [2007/03/12(月) 13:35:12 ]
>>298
SD形式はいいんですが、これって普通にBITMAPINMFO構造体として取り出せないんでしょうか?

307 名前:265 mailto:sage [2007/03/12(月) 17:31:09 ]
特定の場合についてのみですが、フレームレートの倍化(30fps→60fps)ができました。
(同時にこの手法のダメさを裏付けるものでもありましたが・・・)
条件は
・キャプチャフィルタのプレビューピンに繋げる(よってタイムスタンプの設定は意味なし)
・二度目のDeliverを無くす(あるともたつきが起こる)
・画面表示をビデオのネイティブサイズである640×480に対し、約2倍以上にするとフレームレートのうなり現象が
無くなり約60fpsで一定となる。
このとき、CPUの使用率はサイズが大きくなるにつれて上がる。

これらの現象から導き出される結論として、
一度目のDeliverと二度目の(本来行われる)Deliverは連続ですぐに行われ、二度目のDeliverにより送信された
二枚目は一枚目で設定したタイムスタンプがあろうが無かろうが即座に描画される。
CPUの負荷が上がり、すぐに二度目のDeliverが処理できない場合、その間一枚目が表示されることとなり、この時間が
ちょうど1/60秒となるときキレイにフレームが倍化されることとなる。
描画サイズが小さいときはCPUに余裕がある期間が存在し、そのときは二枚目のみが表示される。(フレームが倍化されない)
ということが言えると思います。

よって、一度のTransformメソッドで二度のDeliverを用いる作戦はアウトということになりました・・・。

308 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 18:47:41 ]
何度も書かれているけど、接続状態がその倍のレートでないと、レンダラはそのfpsで処理してくれないと思うよ。つまり余計に送られてきたサンプルは捨てる。
出力メディアタイプと違うサンプルを出力しても、期待した通りに動かないよね。
あと処理が間に合わない時も、どこかのフィルタが捨てると思う。

一度CPU負荷がほとんど発生しないプロトタイプを作って実験して、処理遅れなのかそれとも別の問題なのか調べて見ては?接続の問題も解決を。

リアルタイムで処理したいんだよね?

それとDirectShowで「サンプル」といえば、IMediaSample2などのデータの事をしめします。
>>287 は、一度ダウンストリームに送信したサンプルをまた再利用するなよってこと。

309 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 21:53:42 ]
ビデオレンダラからの品質メッセージをNotifyで受け取ってQuality::Lateを見てみると良いよ。
これがマイナスだとレンダラに間に合って届いている。
プラスだと間に合ってないので到着したとたんにレンダリングされたりして
動きがギクシャクしたり捨てられてカクついたりする

310 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:14:45 ]
休日の夜中になっても頑張ってるから応援したくなるよ あんまり教えすぎはよくないんだけど

>303 サンプルの流れについて

まず上流(キャプチャデバイス)の出力ピンが、変換フィルタの入力ピンCTransformInputPin::Recieveにサンプルを渡す。
入力ピンRecieveはCTranscormFilter::Receiveを呼ぶ。んでTransformメソッドでサンプルを変換した後、
出力ピンから下流(色変換フィルタ)のRecieveを呼び出す(サンプルを渡す) という流れ

>289で「Deliverしてる」って表現したのはマズかったかな。要は下流にサンプルを渡すってことなんだ。
下流の入力ピンのReceiveを呼び出す(サンプルを渡す)。コレがDeliverの正体。
CBaseOutputPin::Deliverメソッドのソースを見てみるといいよ(Baseclassesのamfilter.cppな)

んでTransformフィルタなんだけど、出力ピンのDeliverメソッドは呼んでいないんだ
どうやって送信してるかというと、CTransformFilter::Receiveの中に次のコードがある

hr = m_pOutput->m_pInputPin->Receive(pOutSample);

これ。ここで送信してる。直訳(?)すると、自分の出力ピンに繋がってる入力ピンのReceiveに
Transoformメソッドで変更を加えたサンプルを渡す ってこと。

長いので続く

311 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 22:48:26 ]
303のカキコミについて説明していくよ

> CTransformFilter::InitializeOutputSample (新しいサンプルを[キャプチャフィルタ]の出力ピンから取得する)

InitializeOutputSampleは出力するサンプルの準備をするメソッドなんだ。
ここでは送信するサンプルのバッファをサンプルと結びつける(バッファ自体は出力ピンが確保してる)

HRESULT hr = m_pOutput->m_pAllocator->GetBuffer(

その後で、上流から受け取ったサンプルのプロパティ(各種フラグと言ったほうがわかりやすいか)や時間情報を
出力するサンプルに設定していく。これがInitializeOutputSampleの役割。
このことから、上流から受けたサンプルと、自分で送るサンプルは全くの別物であるということがわかる。
送信が済んだら、このサンプルをリリースすることでバッファの開放などが行われる
(CTransformFilter::Receiveの最後の方 pOutSample->Release(); )

ちなみに上流から受けたサンプルをダイレクトにそのまま下流に出力するのはCTransInPlaceFilterだ

つづく

312 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:10:36 ]
早い話、君は2回送ってるつもりでも、3回送っていると思われる
しかも3回目のサンプルの時間情報は上流から受けた時間そのもの

313 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:13:13 ]
Transformメソッドはサンプルの内容を変更するだけじゃないと ブー
そういう設計なんでこざいます だからここから送信したら ブーブー
TransformInputPin::Receiveをオーバーライドしないとアカンねん

314 名前:デフォルトの名無しさん mailto:sage [2007/03/12(月) 23:23:29 ]
まちがえた TransformFilter::Receiveな 酒のんでるからすまんの

サンプルのタイムスタンプ見てレンダラが表示のタイミングを待ったり、時には捨てたりするアルよ
サンプルの不連続性(Discontinuity)とか同期ポイント(SyncPoint)を示すフラグの扱いとか
注意してくれよ キレイなフィルタを作りましょう。んじゃ頑張れ





315 名前:265 mailto:sage [2007/03/12(月) 23:33:31 ]
>>308
了解です。
>それとDirectShowで「サンプル」といえば、IMediaSample2などのデータの事をしめします。
そういうことでしたか・・・
失礼しました。
>>309
ありがとうございます。
調べてみます。
>>310-314
とても丁寧にありがとうございます。
がんばります。

316 名前:デフォルトの名無しさん mailto:sage [2007/03/14(水) 22:52:01 ]
>>306
dvsdなんかではCreateDIBSectionに失敗しそうな気がするけど、それはないの?

あと、フィルタいじれるなら入力ピンのCheckMediaTypeでMEDIASUBTYPEの
RGB24かRGB32以外を弾くようにすれば、その辺不問にできるような気がするけど・・・。

317 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 01:14:32 ]
すみません。
DVDをAVIにして保存したいんですが、YUYをRGBに変換するフィルタとAVIを書くフィルタは自前で作るのですか?
色々やってみてダメだったらヒントください。
ちょっと頑張ってくる。


318 名前:268 mailto:sage [2007/03/15(木) 14:03:14 ]
>>316
はい、失敗します。orz
他の方法でやらなきゃいけないんでしょうか?

319 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 14:11:19 ]
>>318
(1) 普通のDIBを用意して、そこにDrawDibDrawで描く
(2) 入力ピンのフォーマットをRGB24/RGB32に限定して、フィルタグラフ側で変換してもらう
(3) 自分でDVをでコードする

1,2は実質的にはaviのというかvfwのdvコーデックが使われる。

「やらなきゃいけない」かどうかは自分で決めればいい。
やりたくないならやらなくていいんじゃない?

320 名前:268 mailto:sage [2007/03/15(木) 16:40:18 ]
>>319
うお、ありがとうございます!
ちょっくら試してみます!

321 名前:268 mailto:sage [2007/03/15(木) 18:38:43 ]
とりあえず(1)はDrawDibOpenの時点で落ちるので保留。
(2)を試してみます。

ttp://webcamxtra.sourceforge.net/
これを活用すればいけそうな気もしてるんですけどね・・・。
今までウェブカメラは自力で処理できていたのでどうにかしたいもんです。orz

322 名前:268 mailto:sage [2007/03/15(木) 18:52:30 ]
ん、DrawDibOpen動いた。
あとはDrawDibDrawの引数だけだと思うので、ちょっくら追ってみます。

323 名前:デフォルトの名無しさん mailto:sage [2007/03/15(木) 23:07:58 ]
ICaptureGraphBuilderを利用してSetOutputFileNameやって、
DVD Navigaterのフィルタを取ってRenderStreamすればAVIにできると思ったのにダメでした。

DVDをAVIにして保存する方法って何かあるんでしょうか。
サンプルグラバつなげられれば保存できる気もするんだけどPINをつなげられない。

324 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 00:54:44 ]
ビデオ形式
ビデオ タイプについては、サンプル グラバは VIDEOINFOHEADER 形式を必要とします。VIDEOINFOHEADER2 や DVINFO などの
他の形式タイプを必要とするフィルタに接続することはできません。
このため、MPEG-2 や DV ビデオ、またはフィールド ベースの (インターレース)
ビデオとの互換性はありません。
www.microsoft.com/japan/msdn/directx/techart/grabbersample.aspx#limitationsofthedirectshowsamplegrabber

うぉー、絶望的なことかいてあった。orz....
サンプルグラバに繋がらないわけだ。
Overlay Mixer −> サンプルグラバ −>AVIMUX という流れができるか明日ためしてみる。



325 名前:268 mailto:sage [2007/03/16(金) 16:53:10 ]
DrawDibBeginがfalseを返す・・・。orz
というわけで他の方法試してみます。

326 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 16:55:37 ]
BeginとEndは実は要らない。

327 名前:268 mailto:sage [2007/03/16(金) 17:12:04 ]
>>319
> (3) 自分でDVをでコードする
って、サンプルとかないですよね・・・。orz

328 名前:326 mailto:sage [2007/03/16(金) 17:19:30 ]
>>326
ま、マジですか。
ちょっくら試してみます。

329 名前:368 mailto:sage [2007/03/16(金) 17:20:05 ]
あせって名前間違えた。orz
>>328は自分です。

330 名前:268 mailto:sage [2007/03/16(金) 17:24:46 ]
うーん、DrawDibDrawがやっぱりfalse。
何か記述が足りない気がしてきた。

サンプル探してるんですけど全然見つからないんですよね。orz

331 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 21:58:23 ]
>>330
サンプルグラバ使ってるんですよね?
SetMediaTypeでMEDIASUBTYPE_RGB24指定して
dvsdで流れてこないようにしたらどうですか?

あなたのレスをすべて追っかけてるわけじゃないんで、外してるかもしれませんが。

332 名前:デフォルトの名無しさん mailto:sage [2007/03/16(金) 23:26:24 ]
散文だし小出しだし追いかける気になれない。

333 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 01:06:17 ]
OverlayMixerの後ろにサンプルグラバはつながらないと思うよ。
OverlayMixerはレンダラとつながる。そしてオーバーレイで自分が描画している。
後ろにつながっているビデオレンダラはメディアサンプルを受け取っておらず、
ウインドマネージャを提供しているに過ぎない。
つまりたとえつながってもサンプルを取ることはできない。

はず。


334 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 01:23:46 ]
>>333
はい。そうでした。全く繋がらなくて1日無駄にしました。
DVDをAVIにしなきゃ行けないんで作り方を模索中。
やるならOverlayの上流にあるDVD用デコーダフィルタですかね。
GraphEditでRendererとサウンドをぶった切ってASFライタを入れると
DVDをWMVにできたりします。
この方式で画質設定と開始位置と終了位置を設定して保存できればいいのかもしれない。

最後にWMVをAVIに変換して終了させるという最低の方法を選ぶ。
AVIMUXにつなぐ方法ありましたらヒントください。

最近のライブラリから外れたBaseClassのCtransなんたらで自作フィルタを作るしかないんですかねぇ。
それでYUYをRGB24とかに変換。

DVD Navigater -> 何かフィルタ -> Video Commplessor -> AVI MUX -> File Writer
という形で保存できればいいんですが。



335 名前:268 mailto:sage [2007/03/17(土) 21:42:01 ]
動きますた!(・∀・)
原因は>>316>>331あたりが正解だったようです。
ボスに言われてイチから書き直したらうまく動きました。

というわけで、本当にありがとうございました。
DirectShowと戦うことができたのはこのスレのおかげです。

336 名前:デフォルトの名無しさん mailto:sage [2007/03/17(土) 22:04:51 ]
>>335
おめっとさん、その二つはいずれも私ですがw
実はDirectorのXtraに興味があってちょっと追いかけてました。
Xtraの描画周りって何を参考にしました?
キャプチャした画像を直接Director上で表示するのでしょうか?

ちょいスレ違いスマソ

337 名前:268 mailto:sage [2007/03/18(日) 22:28:43 ]
>>336
自分はDirector上での描画はやってないですね。
CreateDIBSectionで取得したピクセル毎のBGR値の差分を比較して使っています。

今回DVカメラを扱う上で参考にしたのは↓ですね。
wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/cap2/index.html
処理部分コピペでもとりあえず動きます。
# コンソールも出せるみたいです。

Xtra開発者は海外の人ばっかりなので、日本人も増えてほしいもんです。

338 名前:336 mailto:sage [2007/03/19(月) 21:42:14 ]
>>337
なるほどどうもっす。
DirectShowのフィルタ書いてお茶を濁そうと思っていたのですが、
クライアントの意向によりXtraを直接弄る必要があり、
ちょいとハマってたところでした。

DirectShowも情報ない方だけど、Xtraはもっと険しい道だなこりゃ・・・。

339 名前:デフォルトの名無しさん [2007/03/21(水) 10:49:02 ]
asfを再生しようとすると
DirectShow フィルタ グラフに存在しないピンに操作を実行しようとしました。
になって再生できません、対策はありませんか?

340 名前:デフォルトの名無しさん mailto:sage [2007/03/21(水) 20:05:39 ]
どうやって再生しようとしてんの?それじゃ意味わからんよ。

341 名前:デフォルトの名無しさん [2007/03/21(水) 20:42:03 ]
若いの オラが村では派遣労働の問題を口にしちゃなんねーだ
お前さんはまだわけぇから言いたいこともあるべぇ
だべな、派遣問題を口にするとバカにされたと思ってムキになって怒る者がおるでよぉ
てめぇでの責任で派遣やってる癖に派遣問題に触れると逆ギレするバカなんだけどよぉ
そんでもこの問題の指摘は駄目だっぺぇ
派遣のことは口にしちゃなんねぇ
この村みたいな民度ゼロの会社で現実忘れるためにはよ
北朝鮮とか宗教団体と一緒でよ、駄目なものを駄目と言ってはなんねえだべさ
タブーを口にしちゃいけねぇだ


342 名前:デフォルトの名無しさん [2007/03/25(日) 16:03:45 ]
変換フィルタを作っているんですが、そのフィルタのコンストラクタでmallocを使って
メモリを確保し、デコンストラクタでfree()で解放するようにしているのですが、
アプリ側でRemoveFilter()をしても、デコンストラクタが起こらないのかメモリが解放されません。
どうすればデコンストラクタを起こすことができるでしょうか?

343 名前:342 mailto:sage [2007/03/25(日) 16:05:53 ]
↑すみません、デコンストラクタじゃなくてデストラクタです。

344 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 16:30:43 ]
RemoveFilterってグラフからフィルタを切り離すだけだろ
そりゃデストラクタは呼ばないんじゃねーの?



345 名前:342 mailto:sage [2007/03/25(日) 18:09:19 ]
>>344
そうみたいですね。
いろいろ考えたんですが、完全に削除できないのなら、そのまま残しておいて再利用しよう、という
方針で組んだところ、望む動作を実現できました。
いちいち削除する必要がなかっただけの話でした・・・。

ありがとうございました。

346 名前:デフォルトの名無しさん mailto:sage [2007/03/25(日) 21:29:18 ]
Releaseが完全に行われていないだけだろ。参照のチェック汁。

347 名前:342 mailto:sage [2007/03/25(日) 23:33:06 ]
>>346
なるほど。
調べてみます。

348 名前:デフォルトの名無しさん [2007/03/26(月) 09:07:56 ]
新規質問です。

ピン接続時のメディアタイプを調べたいのですが簡単に調べる方法がないため今回「メディアタイプチェックフィルタ」を作る事にしました。

質問1.調べるフィルタを誰か作ってませんか?

時間をかけず作りたい為、「TranceForm」をベースにしているのですが、このフィルタで入力ピンのみの構成のフィルタはできますか?(テンプレートのピン数を1本にしても2本になってしまいました何故…?)

349 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 10:16:35 ]
いくら出す?

350 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 10:17:19 ]
20円

351 名前:デフォルトの名無しさん [2007/03/26(月) 12:14:35 ]
>>349
自分なら作るのに3〜4時間位かかってしまいそうなので、
時給1000円×4hまでならなんとか。。

でも誰か作っていそうなんでそれを使いたいです。

352 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 12:53:47 ]
>>348
Dumpフィルタベースじゃダメなんかいね?
あれは入力ピン1コだけど。

353 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 13:07:03 ]
IBaseFilter::EnumPins
IPin::ConnectionMediaType

それともこっちか
IPin::EnumMediaTypes

簡単だろ?

とりあえず、リファレンスくらい読め。

354 名前:デフォルトの名無しさん mailto:sage [2007/03/26(月) 22:49:48 ]
TransformFilterならそのまんまCheckMediaTypeで全部拾えばよかばってん



355 名前:デフォルトの名無しさん [2007/03/26(月) 23:39:39 ]
>>354
考え同じ。せっかくだから上位フィルタに優先接続して欲しいタイプも入れられるようにしようかなと検討しとるですばい。

IBaseFilter::EnumPins
これはピンごとに管理したい時につかうメソッドだよ。ピン1つでは実装いらないよ
IPin::ConnectionMediaType
これは再生途中にタイプ変更したい時に実装したほがよさそ

356 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 00:10:35 ]
突然思い出したんだけどsampleの中にnullnullフィルタだかなんだか
プロパティページで接続タイプ一式が表示されるやつがあったような ないよーな

357 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 00:40:51 ]
何か違うと思って調べてみたらNullInPlaceだったわ ごめんな
nullprop.cppのNullIPProperties::OnApplyChangesみるといいアルよ

358 名前:デフォルトの名無しさん [2007/03/27(火) 00:56:20 ]
なるほどなるほど。
NullIPPropertiesはなかなか難しいことやってますねぇ。。。
理解しずらいや。。

取り敢えず。
上位フィルタとの接続された
フォーマットタイプ、
メディアタイプ、
メディアサブタイプ
をプロパティページで表示できる変換フィルタを作成できました。
フォーマットタイプが「VIDEO」だったら解像度とかフレームレートとか付加情報を
表示できるようにしてみるか。。

このフィルタ欲しい人いる?
まぁきっとだれかもっといいものを作っている人がいるかとは思うのですが

359 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 01:23:35 ]
ノシ

360 名前:デフォルトの名無しさん [2007/03/27(火) 01:30:21 ]
了解。じゃあ
人に使ってもらうには汚すぎなんで
(改造しながら他のフィルタのデバッグしてるんで・・・)
週末にでも機能を絞り込んで
見やすくしてみます。

終わったら、
h ttp://ragesakai.web.fc2.com/
にWebpageもってるんであげてみます。


361 名前:デフォルトの名無しさん mailto:sage [2007/03/27(火) 11:29:14 ]
ありがたいっす。マタリ待ちます。

362 名前:デフォルトの名無しさん [2007/03/28(水) 07:41:45 ]
自分が知らないメディアタイプが結構あるね。
メディアタイプ一覧がわかるサイトさがさなきゃ

接続メディアタイプチェックフィルタでは、最悪知らないGUIDが出てきたら
そのまま貼っとくか…




363 名前:デフォルトの名無しさん mailto:sage [2007/03/28(水) 21:21:39 ]
uuids.hでよかばってん

364 名前:デフォルトの名無しさん [2007/03/28(水) 21:41:53 ]
九州男児さんありがとう




365 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 01:03:46 ]
AVIファイルの一部を切り出して 拡大縮小したAVIつくりたいんだけど
元AVI(640,480)でRECT(120,120,440,320)の範囲だけきりだして320x240のAVIにしたり
範囲を拡大して640x480にしたいんですが、サンプルグラバのコールバックつくって
中で処理しなきゃダメですかね?



366 名前:デフォルトの名無しさん [2007/03/30(金) 08:24:20 ]
「中」ってどこを指してる?

自分なら映像切り抜きフィルタを作って解決するけどフィルタグラフ側でもできるよ。
フィルタグラフ側でAVIの切り抜きを行った時のサンプルグラバの制御は凄く大変そう…ってか自分には無理なレベル



367 名前:デフォルトの名無しさん [2007/03/30(金) 08:30:25 ]
あ、切り抜きの手段としてグラバを使うのか。
グラバで取得した画像は元AVIと同じサイズなんね。なら出来…るかな?

だけどやっぱり、「切り抜き拡大縮小フィルタ」作るほうが簡単なのは間違いない。

368 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 20:49:08 ]
>>367 TransformFilterで切り抜けばよかばってん。
んで後ろにAviMux、FileWritterとつなげればよかよ。

369 名前:365 mailto:sage [2007/03/30(金) 21:25:10 ]
サンプルグラバのコールバック=「中」です。

TransformFilterって、ベースクラスのライブラリから自分で作るフィルタですか?
最初から用意されててAddFilterで追加できるなら使ってみたいかも。



370 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 21:38:03 ]
> TransformFilterって、ベースクラスのライブラリから自分で作るフィルタですか?
んだよ自分で作るんだよ Transformメソッドで好きにいじってよし

んで後ろにAviMuxが繋がる時にね、ビデオの縦横サイズはオリジナルサイズじゃなくて
自分が変更するサイズを提示するったい Muxは提示されたサイズをヘッダ情報に
書いてた気がするばってん

371 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 22:23:31 ]
IRenderEngine2とかで何とかなるんでしょうか。
DirectShowの編集サービスっての使えますか?


372 名前:デフォルトの名無しさん mailto:sage [2007/03/30(金) 22:37:06 ]
質問に答えてくれた皆様ありがとうございました。
ちょっくらトランスフォームフィルタつくってみます。
コンプレッサの前にトランスフォームでサイズ変える処理いれてみます。
CreateDIBSectionでHBITMAPつくってストレッチビルドして試してみます。

373 名前:デフォルトの名無しさん [2007/03/31(土) 00:03:12 ]
>>372
作り方は大正解◎。
コツを少々・・・
流す映像のサイズをかえちゃうと
設計が大変になるから
「切り出し」→「拡大」でもとのBMPサイズに合わせるようにすると
いいよ。
それとストレッチベルトを「CTransform::Transform」内でつかうんだけど
ストレッチベルトの関数1つで全体のCPU負荷が15%ぐらい上がってしまう。

もし気になるなら、画像処理ライブラリで置き換えするとよいよ


俺ここんとこ九州男児さんと考え方が似てる。。同じような職種&年齢なんだろうな。


374 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 00:27:00 ]
おいどんは昔printfをプリンテフと読んで笑われた苦い経験があるばってん
一応つっこんでおくけど、「ブリット」ですたい。
StretchBlt ストレッチブリット BitBlt ビットブリット



375 名前:デフォルトの名無しさん [2007/03/31(土) 00:37:23 ]
>>374
ほへ〜。初めて知りました。
呼び方は「Blt」⇒「ベルト」と呼んでました。。
言い訳しまくると、自分組み込み系出身でwinアプリ作るの今年から初めた門で。
WinAPIを知らなさすぎる。。この機会に他の呼び方も覚えよう

今後直しますありり^^

そして、メディアタイプチェッカーも明日だらだらし終わったら修正に取り掛かるっす

376 名前:デフォルトの名無しさん [2007/03/31(土) 00:42:28 ]
関数の呼び方議論↓
rararahp.cool.ne.jp/cgi-bin/lng/vc/vclng.cgi?print+200508/05080002.txt



377 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 00:46:01 ]
>>373
なんか、映像のサイズ変えて保存したいって突然いわれたんで
変更しなきゃいかんのです。
切り出して切り出したサイズで保存なんですよ。

切り出して元の再隋拡大だったらサンプルグラバでおわったのに。

サンプルグラバでCreateDIBSectionかけてmediasampleからバッファとって
データ加工して代入。ここまでは出来てOKだった・・・
ストレッチビルトして正しく終わったのに・・orz...

378 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 01:09:59 ]
ぶりっとっていう呼び方なんかアレだよね。アレ。
DirectX8からPresent()になったのはホント良かったと思うよ。

379 名前:デフォルトの名無しさん [2007/03/31(土) 01:26:56 ]
>>377
ごめん。。
内容的には以前自分が作った「解像度リサイズフィルタ」
これの仕組みがまんまメインになってくるんだが
教えてあげられない。。
自分で調べてくれ。

380 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 01:57:15 ]
>>379
できたから問題無し。

381 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 02:28:31 ]
TransformFilterを使わずにビデオソースの拡大縮小と切り出しする方法って無いのかな。
切り出しと拡大縮小ぐらい用意されてるような気がして探し回ってた時期があった。



382 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 16:37:52 ]
一口にビデオソースといってもRGBやらYUVやら色々あるけんね
拡大、縮小にも色々なアルゴリズムがあるったい 自分の好きなようにつくるのが一番よかよ
どうせつくるならそのへんプロパティページで色々指定できるとうれしいね

383 名前:デフォルトの名無しさん mailto:sage [2007/03/31(土) 22:24:58 ]
ここもネガティブさんが沸いてるよ。
自分で調べれって話なら書く必要ないじゃん。
教えて上げられないレス増えるからネガティブさん消えてくれwwwwwwwwwww

384 名前:デフォルトの名無しさん [2007/03/31(土) 23:03:57 ]
>>383
DirectShowやってる人の総人口が少ない。
そしてそれが理由なのかここのスレの回答側に立つ人も少ない。
このスレで役に立てばと思って結構回答をしているが、
何が難しいかわかるけど教えてあげられない状況だったので、
放置されるよりはいいと思って書き込みました。

(本スレ後半でageてるやつはほとんど自分)
>>383さんもそんなこと書き込んでないで回答側に回ってくれ



385 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 00:08:34 ]
まあ内容はともかく、少しでも盛り上がってくれるのは嬉しいわな。
その昔サンプルグラバを知らなかった自分は自前のフィルタ作っちゃったし、
話の流れで知ることもそれなりに多い・・・。かな?

386 名前:デフォルトの名無しさん [2007/04/01(日) 03:12:34 ]
>>363
uuid.hではすべてのメディアタイプは乗ってない。
「MEDIASUBTYPE_I420」
が入っていなかった。


387 名前:C++ mailto:age [2007/04/01(日) 08:46:54 ]
 C++は今最も優れているプログラミング言語だ。C++さえあればなんでも出来る。CGI一つにしたって、今はPerlなんて使わなくても全部C++で出来る。そんなC++を使わないでどうする。

388 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 13:44:39 ]
「全て」のメディアタイプって概念をどう捉えるかだな
まずはDirectX SDKのindlude、DirectShowのBaseclasses ここのソースで定義されてるものを
押さえておけば良いんじゃないの?
極端な話、guidgen使って自分で独自のMediaType作れちゃうわけだし。

389 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 22:43:15 ]
MEDIASUBTYPE_I420ってGUIDとしては存在するかもしれないけどどっかのメーカーが勝手に作っただけじゃないの?
DirectShowのオフィシャルな定義としてはMEDIASUBTYPE_IYUVじゃないのか。


390 名前:デフォルトの名無しさん mailto:sage [2007/04/01(日) 23:22:10 ]
そういや自分もmplayerの公開されているソースを見て
普通にMEDIASUBTYPE_I420という定義があるものと思い込み、
いざ実装してみたらものの見事に未定義だった、ということがあったなあ。

IYUVとI420は同じフォーマットのようなので、
私もMEDIASUBTYPE_IYUVを使ってますが・・・。

391 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 09:52:04 ]
拡張可能なばっかりにかえって不毛になってるのか

やれやれ

392 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 11:49:43 ]
ホントにDirectShowって資料少ないのね。VfW勉強した時も思ったけど
こういう動画処理インターフェースってプログラムとして人気ないのかな?

393 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 13:56:56 ]
資料は少ないなりに充実してると思うけど・・・
漏れにはACLの方がワケワカメだよ。

394 名前:デフォルトの名無しさん mailto:sage [2007/04/02(月) 14:27:52 ]
動画処理に興味をもつほど自由に弄れる動画素材を持ってる人が少ない、
という事情もあるのではないか。

後は仕事になるかどうかとか。



395 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 20:48:20 ]
+  三ミヽ、⊂⊃
 +  三ミ |∧η∧
  /⌒\ (,,・Д・)<ただいまんこ〜オレも便乗して質問だぞ。
 + 川川 l l/つ つ━☆ トランスフォーマーとかいうのをつかって
     〜(  / CTransformFilter::DecideBufferSizeここでメモリを確保する所までたどり着いたぞ。
      (/"U 俺も拡大縮小をやりたくて書き込みするぞ。オマンコクロスだぞ。
       C言語は7年目だぞ。切実だぞ。

396 名前:デフォルトの名無しさん [2007/04/03(火) 22:27:40 ]
>>395
俺は3年目だけど苦労したができたぞ。
で、何がしりたいんだぼけぇ






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

前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