トップページ⇒tech
990コメント427KB

DirectShowと戦うスレ Part 2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/08(水) 00:25:56
前スレ
http://pc8.2ch.net/test/read.cgi/tech/1026666092/
0455デフォルトの名無しさん2007/04/19(木) 21:04:09
TMPEGEnc買っちゃいなYO!
0456デフォルトの名無しさん2007/04/19(木) 23:22:24
>>455
GRAPHEDTがあれば買わなくてもいいな俺は。

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

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

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

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

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

をやっといた方がはやい
04574542007/04/20(金) 10:39:55
どうもです、回答ありがとうございます。
一応あの後がんばった結果、DV形式とモーションjpegでは圧縮に成功しました
「うーん、なんかサイズ大きいね。asfで圧縮できない?」
といわれたわけで、メディアフォーマットSDKを読んで泣いています。
小さければ文句言われないのでmpeg4の方が楽かもしれません。
なんか進歩日記みたいになってすいませんが...。
0458デフォルトの名無しさん2007/04/20(金) 20:55:50
>>457
御礼を言うのは大変素晴らしいが、どこまで書いたことを理解できたのか
解るように(回答が的外れでなかったか知りたい)
内容についても一言触れて欲しかったな

と、会社では立場が最下層回答者の愚痴。
0459デフォルトの名無しさん2007/04/20(金) 21:39:00
最後志貴の方、速度で無い中、対戦お疲れ様でした。
飯食うので、この辺で。
0460デフォルトの名無しさん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での圧縮を模索したのですが、なかなか動くコードにならないで今日が過ぎていきました
0461デフォルトの名無しさん2007/04/20(金) 22:51:49
>>460
ふむ。成る程。
GraphEdtでのフィルタ登録の操作の仕方なのかそれをコーティングするときの方法なのかわからんです。

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

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

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

それとも「Graphedt.exe」のアプリを「フィルタグラフ」(コーティング上の概念)と勘違いしてるのかなぁ…
0462デフォルトの名無しさん2007/04/20(金) 23:07:45
asfはWM ASF ライターを登録して入力ピンにつないでやるだけだから
圧縮コーデックの列挙が必要なavi再圧縮に比べたらよっぽど簡単だよ。
04634602007/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の、 {ランダムな文字} の間の部分って事ですね。
多分理解しました。

0464デフォルトの名無しさん2007/04/21(土) 12:37:04
MEDIASUBTYPE_Aviだからじゃねーの?
0465デフォルトの名無しさん2007/04/21(土) 13:49:11
>>463
ちゃんとMSDNでリファレンス見てから書いたほうがいいよ。
CoCreateInstanceでCLSID_WMAsfWriter作らなくても
SetOutputFileNameが作ってpAsfFilterに入れてくれる。
http://msdn2.microsoft.com/en-us/library/ms779904.aspx
http://msdn2.microsoft.com/en-us/library/ms784861.aspx
04664602007/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つのフィルタがちょっと見たりませんので上の様に逃げています(汗
探し方が足りないのかな?

とりあえず、相手に見せてみます。ありがとうございました。
まだ格闘しなければいけないところがあるので、ほとほと困ったらまた来るかもしれません。
0467デフォルトの名無しさん2007/04/25(水) 16:01:46
以前に出力ピンが2つある場合の出力ピンの区別のことで質問させてもらったのですが、
スプリッタの2つの出力ピンからデータを出力するようにしました。
が、再生すると何も表示されません(音も映像も)。
一方の出力ピンだけ接続し、もう一方の出力ピンは未接続の状態にすると再生はできます。
しかし、オーディオ、ビデオ両方を同時に再生しようとすると、どちらも
再生されなくなります。
原因は何が考えられるでしょうか。
0468デフォルトの名無しさん2007/04/25(水) 16:15:00
それはただのバグっぽいぞ・・・
各ピン(のインタフェイス)は別々のスレッドから呼ばれる可能性があることを
ちゃんと考慮した作りになっているか、デッドロック等はないか、など考えてみるべき。

あと「再生されません」ではなく、グラフのステートが再生状態になるのかならないのか、
なる場合には停止で止まるのか止まらないのかなど、プログラマらしい情報の出し方を
04694672007/04/25(水) 19:34:56
>468
もともと1つの出力ピンのソースに、無理やりもう1つの出力ピンを
追加したのが問題かもしれません。
基本的にm_pOutput(元々あった出力ピン)が出てくるところに、
もう1つのピンの処理を追加したような感じです。

>あと「再生されません」ではなく、グラフのステートが再生状態になるのかならないのか、
>なる場合には停止で止まるのか止まらないのかなど、プログラマらしい情報の出し方を
すみません、情報不足でした。GraphEditで確認しているのですが、
再生ボタンを押した後、再生状態にはなっているようです。
しかし、停止ボタンを押すとフリーズし,
The graph was unable to complete pause within 10 seconds.〜
という警告がでる状況です。
0470デフォルトの名無しさん2007/04/25(水) 19:37:18
deliver で送るプッシュ型のピンですよね。
2つある場合はそれぞれ別のスレッドで動く必要がありますが、
そのあたりは問題ありませんか?
04714672007/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つのスレッドで動かしているような気がします。
スレッドを別々に持つとは、オーディオピンがストップしたとしても、
ビデオピンは関係なく出力できる、みたいな感じですよね。
どう実装すればいいのか…
0472デフォルトの名無しさん2007/04/25(水) 21:15:13
ビデオレンダラにつながっているピンのReceiveが時間調整のためにブロックすると、
オーディオレンダラにつながっているピンにもデータが来なくなるので、
時間が進まなくなって永遠にブロックするという動作。

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

個人的にはスプリッタを作るなら、ソースフィルタのサンプルコードをもとにして
出力ピンと入力ピンを追加するのが簡単だと思う。
0473デフォルトの名無しさん2007/05/08(火) 16:19:57
質問です、Direct3Dで、ゲーム中のテクスチャに動画ファイルの映像の
ビットマップを入れ、音声もゲームのカメラ位置に従って右の方にあれば
右寄りの位置から聞こえてくるようにしたいのですが、

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

Windows2000上でフィルタを継承するようなコードを書いてる方は、
どのようにやっているのでしょうか?
他にも「別にRendererFilterを継承しなくてももっといいやり方がある」とか
ツッコミがあればお願いします。
04744732007/05/08(火) 16:25:19
すみません、間違えてさげてしまったΣ
ついでに訂正・・・
×streams.hとやらがありませんでした。
○streams.hとやらが必要みたいですが、ありませんでした。

何がやりたいかわかりやすく書くと、
ゲームの中のテレビに任意の動画を流したい、ということです。
0475デフォルトの名無しさん2007/05/08(火) 18:11:28
>>473
D3Dのテクスチャに動画をレンダリングするのは、
SDKのサンプルにそのものずばりのがある。

DirectShow 関連のSDK が利用できないのであれば、
動画ファイルをWMVなりAVIで用意して、AVI関連APIや
Windows Media Format SDKでデコードすれば良いと思う。
04764732007/05/08(火) 18:42:40
回答ありがとうございます!
>WMVなりAVIで用意して、AVI関連APIやWindows Media Format SDKでデコード
なるほど!動画関連のAPIに詳しくなかったので盲点でした。
その辺はこれから調べようと思うんですが、一つ質問させてください。

>SDKのサンプルにそのものずばりのがある。
これなんですが、WindowsSDKのことでしょうか?
最初DirectXSDKのサンプルかと思ったのですが見当たらなかったので・・・
0477デフォルトの名無しさん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
0478デフォルトの名無しさん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を使わざるを得ないのですが・・・
0479デフォルトの名無しさん2007/05/16(水) 14:14:00
どうもすいません。

Webカメラから取った動画を保存できるようにプログラムを書いたのですが、そこまで完成したのを見せたところ。
「こんどはコレ再生して、再生時間を表示できるようにできないかな?」
と言われてしまいましたが、正直何を使って実現すれば良いかどうかから思い当たるところがありません。
そのインターフェースを使えばよいかどうかだけでも、教えていただけないでしょうか…。
IAMDroppedFramesあたりかな、とも思ったのですがいまいち思ったように動いてくれていません。
04804792007/05/16(水) 14:43:41
すいません。
先ほど、話をしなおしたのですが。私の勘違いがあって。
「Webカメラから取った動画」に「現在の時間」を残せないか?という要求でした。
具体的には動画の何処かの隅っこに、現在時間を画像として書き込んでしまうようなものを想像していたみたいです。
質問するのではなく、自前でフィルタを書くべきみたいですね。すいませんでした。
0481デフォルトの名無しさん2007/05/16(水) 17:19:42
でも正確なキャプチャ時刻を得るのは難しいよな。
誤差が33ms以内とか
0482デフォルトの名無しさん2007/05/17(木) 00:56:53
あぁ。僕もそんな要望きたからやった。
単に秒まで出すだけならたやすい。
インプレイスフィルタが1番楽。次点は資料がたくさんあるトランスフォームフィルタ。
1・TranceFormメソッドをオーバーライド
2・IMediaSampleからDIBポインタをとる
3・DIB→デバイスコンテキストに変換
4・WinAPIのTextOutで文字書く
5・デバイスコンテキスト→DIB変換
たったこれだけでおk
04834602007/05/20(日) 19:49:18
ごめんなさい。弱音を吐きます。
結構頑張ったけど、2,3のステップの所のコードが作れません。
0484デフォルトの名無しさん2007/05/21(月) 05:05:45
時間でいいなら、必要な文字の画像を準備して、合成するだけでいいんじゃね?
厳密なアルファブレンドだと処理が重いから、切り抜き程度でいいと思う。
0485デフォルトの名無しさん2007/05/21(月) 08:39:41
CreateDIBSectionとかググれ
0486デフォルトの名無しさん2007/05/21(月) 15:14:30
>>483
客の要求仕様に基づいてプログラムを作ってるならしようがないけど、もしかすると
「>>460 が作業する工数 >>>>>>> 撮影時に時計を一緒に写す手間」じゃないか?

もしそうなら道楽で予算を無駄遣いしてることになるから、正直適当なとこでやめて
本業に精を出した方がいいような気がする・・・
04874832007/05/21(月) 17:40:41
みなさん、ありがとうございます。

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

>>484
ヒントありがとうございます。
後日完成を目指すです。
0488デフォルトの名無しさん2007/05/21(月) 21:30:57
フィルタを作成しているのですが、リリースモードでビルドした場合に、そのフ
ィルタを使用すると強制終了が起こってしまいます。
コンパイルエラーは出ません。
デバッグモードでビルドした場合は、問題は起こりません。
強制終了が起こる場所は、おそらくmallocをしているところだと思います。
正確にはmallocを使用している関数で落ちるのですが、その関数の内部は見えま
せん。
デバッグとリリースで、mallocが使えないことってあるのでしょうか。
0489デフォルトの名無しさん2007/05/21(月) 21:47:43
>デバッグとリリースで、mallocが使えないことってあるのでしょうか。
ありません。
0490デフォルトの名無しさん2007/05/22(火) 03:24:02
GrapEditをホストにして普通にデバッガで追ってみれば?
04914882007/05/23(水) 00:27:49
何かよくわかりませんが、msvcrt.libをリンクしないようにしたら上手く行きました。
どうもありがとうございました。
0492デフォルトの名無しさん2007/05/23(水) 08:32:54
>>460よ
フィルタを作るのが最善の解決方法かどうかまだ悩んでいるようだけど自分はそれが1番楽な方法だと思う。
俺はヒントというかフィルタの作り方手順を書いたものだが、手順2、3のどこがわからんのか明確化してくれ。
手順3については>>485で調べられると思うけど
04934832007/05/24(木) 10:22:39
>>492
どうも、お手間をおかけして申し訳ありません。
インプレイスフィルタということで、SDKサンプルのEZrgb24を基本に作っておりました。
フィルタのTansform関数で、引数としてIMediaSampleを受けりますが
これを
・DIB形式に変換
・それをデバイスコンテキストの代入
のところで躓いておりました。

一応やっつけ実装で納得はしてもらったのですが、自分で恥ずかしいので、後で直したいというのが正直なところです。
若輩者で申し訳ありません。
0494デフォルトの名無しさん2007/05/24(木) 21:37:23
いや、俺も若輩ものだから…。楽なのはソースを渡して解析して貰う事なんだがな
それすら今は体力的に自信ない
0495デフォルトの名無しさん2007/05/25(金) 02:39:17
ちょっといいことを教えてあげよう。
EZrgb24ってさインプレイスフィルタじゃないお( ・ω・)∩
違いはね。何のフィルタクラスを継承してるかで決まるんだ
ちなみに「EZrgb24」は「CTransformFilter」を継承してるお
0496デフォルトの名無しさん2007/05/25(金) 03:59:41
WinAPIのDIBってボトムアップ形式のみでなかった?
0497デフォルトの名無しさん2007/05/25(金) 08:12:46
ボトルアップってどういう意味?
座標原点の話しかな。DIBは他画像形式に比べると上下逆さまだけど、変換時にY座標をマイナス値を指定すればどうとでもなる
0498デフォルトの名無しさん2007/05/25(金) 08:34:21
ボトムアップなら単語そのままの意味だが
ボトルアップは飲み終わったボトルを投げ上げるという意味だな
0499デフォルトの名無しさん2007/05/25(金) 18:04:09
なるほど〜私はてっきりボトルを飲み干す事かとおもたよぉ〜

で、、意地悪しないでDIBのボトムアップを教えてくれ
0500デフォルトの名無しさん2007/05/25(金) 23:13:53
>>497でほざいていることがまさにボトムアップ

つーかキーワードがこれだけでてんのに自力で検索くらいしようとは思わんのかね
0501デフォルトの名無しさん2007/05/25(金) 23:26:22
ただ単にBITMAPの話じゃん 画像いじるなら基礎の基礎
0502デフォルトの名無しさん2007/05/26(土) 12:58:18
自作ソースフィルタってどうやってフィルタグラフに追加するんですか?
IGraphBuilder::AddSourceFilterを使ってもデフォルトのソースフィルタが呼ばれるし、
普通のフィルタ同様に、
CoCreateInstance&AddFilterすると、ソースフィルタに読み込むファイル名が指定できません。
0503デフォルトの名無しさん2007/05/26(土) 20:01:49
>>500
>>496の聞きたいことの意味がわからんかっただけで
俺は知ってるからおk。

今日はPCだからしらべてみたけど、ボトムアップという表現
はあんまり使われてないぞ??
■Google調べ 「DIB ボトムアップ」検索結果
っミ【114件】
0504デフォルトの名無しさん2007/05/26(土) 20:27:02
DirectShow スレということで、本家のDirectShowカテゴリ内のページ。

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

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

サンプル画像のセンスの無さには相変わらず笑わせてくれる。
0505デフォルトの名無しさん2007/05/26(土) 21:27:48
ありがとう。本家MSDNが使ってる言葉なのか
今後使っていくよ。
まぁBITMAPの仕様の話であって
あんまりDirectShowとは関係ないとこで使うことになりそうだけど
0506デフォルトの名無しさん2007/05/26(土) 21:32:32
>>502
ごめんボトムアップに気を取られていた
自作フィルタを登録する方法はコマンドラインから
「regsvr32 ぱす&自作フィルタ.ax」でレジストリ登録が必要です。

その後「Graphedt」でフィルタグラフに登録できることを確認するんだよ
それでもできなかったらまた質問しましょう
05075022007/05/27(日) 02:21:11
>>506
すいません、説明不足でしたが、レジストリ登録、GraphEditでの確認は出来ています。
ただアプリケーションから自作ソースフィルタを使ってファイルを読み込む方法がわかりません。
GraphEditで追加したときは、読み込むファイルを聞いてくるのですが、アプリからソースフィルタを追加しても、ファイルを聞いてこないのです。
0508デフォルトの名無しさん2007/05/27(日) 04:22:30
なるほど。
窓枠の提供はどこがやるの?って事だと認識しました。
自作ソースフィルタを「GraphEdit」で開いた場合、
ファイル選択ウィンドウはディスクトップ画面のド真ん中に出ますか?

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

自作ソースフィルタのファイル選択ダイアログを出す部分のソースを晒せば解決できると思いますよ
0509デフォルトの名無しさん2007/05/27(日) 04:26:48
ソースフィルタはIFileSourceFilterインターフェースを持ってるでしょ。
AddFilterした後でそれを呼び出して(QueryInterface)、Loadメソッドを
実行してやるんだよ。
でも、そんな基本的な所でつまずいてるのにソースフィルタ自作とかよく出来たな。
0510デフォルトの名無しさん2007/05/27(日) 12:31:49
手っ取り早くソース晒せといいたい
05115022007/05/28(月) 12:17:00
>>508,509,510
回答ありがとうございます。

>>509
まさにそれでした!ありがとうございました。
無知ですいません。
0512デフォルトの名無しさん2007/05/28(月) 18:24:46
簡易動画編集のようなことをやるために、複数の動画ファイルを連結して1つのファイルにエンコードしようとしています。
いまのところ、ファイルごとに構築した再生用のフィルタグラフから静止画を取り込みまくって
録画用のフィルタグラフに流し込むやり方を考えているのですが、
こういうバカっぽいやりかたでなく、もっとエレガントな方法はないもんでしょうか。
0513デフォルトの名無しさん2007/05/28(月) 23:44:50
この辺を使ってビデオ再生やってます。
IGraphBuilder
IMediaControl
IMediaEventEx
IVideoWindow
IBasicVideo
ビデオ再生自体は問題ないのですが、サウンドデバイスが複数
あった場合に、音声の出力先を指定するにはどうしたら良いで
しょうか?

現状、Windowsの標準のサウンドデバイスのみ音が出ます。
よろしくお願い致します。
0514デフォルトの名無しさん2007/05/29(火) 00:38:22
DirectShowを使わない
0515デフォルトの名無しさん2007/05/29(火) 03:07:01
ええええええ
まじっすかあああ?
DirectShowって使えねーなぁ!!
ゴミじゃん。M$てめえやる気あんのか?殺すぞ
0516デフォルトの名無しさん2007/05/29(火) 06:00:31
>>515
真偽の程が全く不明な一文にそこまで熱くなれるのもすげえな
05174732007/05/29(火) 14:57:28
かなり亀レスですみません、あまり作る暇なくて
少しずつやっていたんですが、出来ました。
教えていただいた
ttp://www.shader.jp/xoops/html/modules/xfsection/article.php?articleid=17
↑ここと、あとはここのサンプルソース↓
ttp://www.greenwood.co.jp/~k-aki/article/directshow_movie/directshow_movie.html
を見ながらやって作れました。
(下のURLのサンプルソースは、多分GraphEditで使えるようなDLLとして作るものではなく、
ほぼCBaseRendererを継承してメソッド書いてるだけだったのでわかりやすかったです)
色々ありがとうございました。次は音を取得するのに挑戦しまつ ヽ( `・ω・)ノ
0518デフォルトの名無しさん2007/06/01(金) 16:33:46
test
0519デフォルトの名無しさん2007/06/01(金) 17:49:21
DirectShow編集サービスでWMV9のAVIファイル作ろうとしてるんだけど、
エンコードパラメータの設定がうまくできません。
IAMVfwCompressDialogsで出したダイアログだと、変更が反映されないし。
かといってWMV9フィルタの出力ピンからIAMStreamConfigをqueryしてGetFormatするとエラーになります。
AviUtilだとうまくやっているみたいなんですが、やり方が間違ってるんでしょうか・・・
0520デフォルトの名無しさん2007/06/10(日) 04:56:19
           __
         /:::::::::::::`ヽ_    _
  n      /::::::::::::::::::::::::::l   l L_
,─' ヽ_    _|::::::::::::::::::::::::/)  /   _彡__
三_  ヽ、 l/::::::::::::::::::::::::ヽ / ∠, - 、:::::::\
    `丶、 `/::::ノT` ^ 'l´l:::::|´ /(・|・)) |::::::::::::ヽ
      `ヽW ̄     ̄W /ヽ、_●_/ \::::::::l
        `1  l ヽ  /'´`\_|__三、ヽ::::|
         l  /    / |  __       | l:::l
         l      |__\(  ヽ-'"´)  //:/
         /  ,    |::::::::::ヽニ二二ニ_∠_'/__
         |  l    /つ 、/(〒) ヽ::::::::::::::::::

0521デフォルトの名無しさん2007/06/10(日) 23:23:28
すいませんが教えてください。
この↓を参考にしてMFCで動画再生アプリを作っているのですが、
ttp://www.geekpage.jp/programming/directshow/setnotifywindow.php
DirectShowで動画再生しているウインドウが、別のウインドウの陰に隠れてから
手前に表示されたときなどに再描画されません。
再描画するにはどうすればいいですか?
0522デフォルトの名無しさん2007/06/10(日) 23:34:50
ビデオウインドの親ウインドでWM_ERASEBKGNDをDefaultWindowProcに渡さない。
0523デフォルトの名無しさん2007/06/10(日) 23:50:53
>>522
できました。ありがとうございます
0524デフォルトの名無しさん2007/06/11(月) 22:13:25
まさかだが、>>520 は DirectShow にかけたネタなのか?
0525デフォルトの名無しさん2007/06/11(月) 22:36:29
どらえもんだとおもいます
0526デフォルトの名無しさん2007/06/11(月) 22:43:54
直見せというか、モロダシ?
0527デフォルトの名無しさん2007/06/12(火) 07:31:58
ドラえもんShoWです。
スマンむしゃくしゃしてやった。
今は反省してる
0528デフォルトの名無しさん2007/06/12(火) 10:11:14
静ちゃん・・・
0529デフォルトの名無しさん2007/06/12(火) 21:39:31
静ちゃんは原作名だよね。
原作も途中からアニメに合わせて「しずかちゃん」になってる。

最近にふにふ動画やようつべを見てるんだけどフレームレート変更フィルタ作れば「速聞」みたいなサービス作れるかな
0530デフォルトの名無しさん2007/06/12(火) 21:49:48
最近ようつべてw
いつの人間だよ
0531デフォルトの名無しさん2007/06/14(木) 01:02:27
新しいほうがいいにきまってる
:::::::::::::::::::::::::::::    ,.-ヽ
::::::::::::::::::::::   ____,;' ,;- i                         へ、     /;へ\
::::::::::::::::::   ,;;'"  i i ・i;                       // _l::|___l::|_ヽ:ヽ
:::::::::::::::  ,;'":;;,,,,,, ;!, `'''i;          / ̄ ̄ ̄ ̄\,,     |l/−、 −、:::::::::::::::`::|
:::::::::::  ,/'"   '''',,,,''''--i        /       __ヽ    /::::::|  ・|・  | 、::::::::::::::\
:::::::::  ;/  .,,,,,,,,,,,,,,,,,   ;i'⌒i;       |       |   |、   /::/ `-●−′ \:::::::::::ヽ
:::::::  i;"     ___,,,,,,,  `i".       |       ∩─| |  ,|/ ── |  ──   ヽ:::::::::|
::::::: i;    ,,;'""" `';,,,  "`i;      |      ∪  `l   |. ── |  ──   .|::::::::|
::::::: |  ''''''i ,,,,,,,,,,  `'--''''"       ヽ __/  _.ノ    | ── |  ──     |:::::_l__
::::::: |.    i'"   ";               |――― 、".      ヽ (__|____  /::::| 新 |
::::::: |;    `-、.,;''"             /  ̄ ̄ ̄ ̄^ヽ∞=、  \           /:::,/| 品 |
::::::::  i;     `'-----j          | |      |  |っ:::::)  l━━(t)━━━━┥ |___|
0532デフォルトの名無しさん2007/06/16(土) 00:31:23
Platform SDK インストールしたけど、GraphEdit入ってなかった
0533デフォルトの名無しさん2007/06/16(土) 06:58:35
>>532
C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin\graphedt.exe
0534デフォルトの名無しさん2007/06/16(土) 14:14:45
カメラって暗くなると露光を変化させるためにフレームレートがころころかわるやん?
フレームレートを一定にするフィルタを作った人いる?
0535デフォルトの名無しさん2007/06/16(土) 15:54:38
>>533
あ、あった。さんきゅー
スタートメニューにショートカット作ってよねー
0536デフォルトの名無しさん2007/06/16(土) 16:27:00
フレームレートがころころ変わる??
0537デフォルトの名無しさん2007/06/17(日) 00:43:24
>>536
うん。そのカメラの最低露光付近で以下を調べる
「カメラ」-「レンダラ」
の接続で「レンダラ」のプロパティ「品質」タブ
平均フレーム率が明るさで変化するのがわかるよ
0538デフォルトの名無しさん2007/06/17(日) 00:51:45
操作説明する前に何の設定をしている場面なのかを言ってくれ
我々はエスパーじゃないんでね
0539デフォルトの名無しさん2007/06/17(日) 02:49:07
確かにそういうカメラもあったような気がする。
っていうか安物のカメラは結構フレームレートいい加減だったりする

0540デフォルトの名無しさん2007/06/17(日) 02:58:43
>>537
「そのカメラ」ってどのカメラよ?
0541デフォルトの名無しさん2007/06/17(日) 03:47:55
つかカメラやらタブやら、話が唐突すぎるし悪文だしで理解不能
0542デフォルトの名無しさん2007/06/17(日) 08:57:09
プロパティ「品質」タブってグラフエディットでの話か?
だとしたらあれはソースそのもののフレームレートではないよ?
俺ならよくわからん糞カメラだけのためのフィルタなど作る気にはなれないな
0543デフォルトの名無しさん2007/06/17(日) 16:58:49
まあ作ってやってもいいが、ここから先はビジネスになるよ
0544デフォルトの名無しさん2007/06/17(日) 17:22:39
たぶんグラフエディットのことだろうね。

ところでソースそのもののフレームレートじゃないっていうのはどういうこと?
レンダラが捨てるって事?
0545デフォルトの名無しさん2007/06/17(日) 18:00:33
>>543
まじで?たのむ っ�I

>>544
ソースフィルタが一定間隔に絵を出してこなくなるということだよ
レンダラが捨てるわけではないみたい
0546デフォルトの名無しさん2007/06/17(日) 18:32:00
>>545

>ソースフィルタが一定間隔に絵を出してこなくなるということだよ
>レンダラが捨てるわけではないみたい
つまりソースフィルタが実際に出力しているフレームレートだよね。
それが明るさで変動するね、って話だったと思うんだけど。
0547デフォルトの名無しさん2007/06/17(日) 19:12:30
>>546
うん。その話です。

私は「フレームレートを一定にするフィルタを作った人はいますか?」
という質問をした者なんですが、
暗いときに光を映す場合、フィルムに光を取り込む時間を長めに
取ってやる必要があります。ちゃんとした画像を取り込むのと
シャッタースピードはトレードオフ関係になるのかと思います。

一般的なカメラは上記を自動で行っているので周囲の明るさが変化すると
フレームレートがころころ変わっていく・・・と思っています。
これを時系列処理が必要なフィルタに通した場合問題がおきるので、
フレームレートを一定にするフィルタが必要なのでは?と考えています

どなたか作成した人はいらっしゃいませんか?
0548デフォルトの名無しさん2007/06/17(日) 19:21:29
>>544
メディアタイプとしてののフレームレートってことだとおもう。
レンダラのレートはレンダラが表示できてるレートってことじゃね?
デコーダがうんこだったりPCすぺっくがうんこだと激低かと
0549デフォルトの名無しさん2007/06/17(日) 19:26:05
カメラって何だ?デジカメ?かむコーダ?
記録するフォーマットは何よ?グラフ構成は?DirectShow経験有り?
出すべき情報が出てない感じ。
0550デフォルトの名無しさん2007/06/17(日) 19:36:52
>>549
カメラ・・・USBカメラ(Qcam)を想定していただければいいです
記録フォーマット・・・なし。記録してもしなくてもよし。
グラフ構成・・・ソースフィルタのみ。
        ただ、見るために「ソース」-「レンダラ」でお願いします
Directshow経験・・・およそ3ヶ月。画像関係の変換フィルタ作成ならわかるくらい

>>548
PCスペックが悪くてフレーム落ちすることはこの際無いという前提でお願いします

>>538->>548
「ソースフィルタのフレームレートが外光によって変化すること」
に話の争点がいっていますが、できれば
「フレームレートを一定にする変換フィルタ」についての事を話したいです。

0551デフォルトの名無しさん2007/06/17(日) 19:48:10
そのカメラが本当に正しい絵を取るために露光時間を調節しているのかどうかは不明だが
本来なら正しいレートでがんばって出すべきだと思う(この辺はMSがどう設計しているのかによるが。)
で、そのメーカのソースフィルタがそう実装されてないから後ろでなんとかしましょう、ってことですね?
(Qcamって路地クールのやつでしょ。あれはなんかキャプチャした絵を解析しているっぽいから感光待ちじゃないような希ガス)


どっちかっていうとそのカメラのソースフィルタの性能の問題、あるいはバグに近いので
そもそも、それを正しくするフィルタの需要って無い気がする
自分もそういうフィルタはしらない。

でも一般化して「レートを一定にする中間フィルタ」という意味では需要もあるかもしれないね。

0552デフォルトの名無しさん2007/06/17(日) 19:51:12
タイムスタンプチェックしてバッファしておいた前回映像を投げてやれば良いような気もするが
グラフ構成ソースフィルタのみ??ダウンストリームが無いのに変換フィルタ??
うーん 何がしたいのかますますわかんねーな…

[ソース]-[レンダラ]はダイレクトで繋がるの?メディアタイプはRGB?
本来期待されるべきフレームレートはいくつですか?
ソースが吐き出すタイムスタンプ確認してみた?てんでバラバラの間隔だったのかな
0553デフォルトの名無しさん2007/06/17(日) 20:24:27
>>552
ご回答ありがとうございます。
「タイムスタンプにて・・・の件」
DirectShowのフィルタ同士の動きはイベントドリブンです。
なので、スレッドを立てて別レートで処理するシステムを考えました
>「ソースフィルタ」-ここ6fps-「レート安定フィルタ」-ここ15fps-〜
私のコーディング技術の問題でレート安定フィルタ以降のアロケータを6fps以上で
使うとロックしてしまいうまくいきません。

>[ソース]-[レンダラ]はダイレクトで繋がるの?
繋がりますが私の想定する使い方とは若干違います。
カメラのフレームレートを争点にしていたのでこれを出しました。
本来使いたいのは
「ソース」-「時系列処理が必要なフィルタ」-「レンダラ」
です。

>メディアタイプはRGB?
なんでもいいです。私の作ったフィルタは「RGB24」「RGB555」「RGB565」「IYUV」
「I420」のいづれかを想定して設計しております。

>本来期待されるべきフレームレートはいくつですか?
固定されていれば何でも。あえて決めるとすれば15fpsでよいです
6fpsのカメラであれば同じ画像を2.5回程度下流ストリームに投げるものでいいです

>ソースが吐き出すタイムスタンプ確認してみた?てんでバラバラの間隔だったのかな
う〜ん。どのカメラでやったか定かではないのですがQcamかbuffaloのカメラでは
バラバラでした。自分でも少々不確定なので試していないということでお願いします
0554デフォルトの名無しさん2007/06/18(月) 16:38:27
ちょっと前のFPS倍化の話と同じじゃん。
つーか、サンプルのレートばらばらでも動くように作れよ。
■ このスレッドは過去ログ倉庫に格納されています