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

2 名前:デフォルトの名無しさん mailto:sage [2006/11/08(水) 00:30:59 ]
>>1
それだけかよ。

3 名前:デフォルトの名無しさん mailto:sage [2006/11/08(水) 02:05:53 ]
DirectShowプログラマーのみなさん。
メソッドのデッドロックとか、わけわからん現象多くないすか。
このスレに怒りやテクをぶつけましょう。

関連スレ
Win32API質問箱 Build46
pc8.2ch.net/test/read.cgi/tech/1159158014/
鬱だ氏のう DirectX (Part 16)
pc8.2ch.net/test/read.cgi/tech/1133007002/
くだすれDirectX(超初心者用)
pc8.2ch.net/test/read.cgi/tech/1132965206/
【C++】 DirectX初心者質問スレ Part11 【C】
pc8.2ch.net/test/read.cgi/tech/1159456184/
DirectX総合スレ (Part5)
pc8.2ch.net/test/read.cgi/gamedev/1157727402/

4 名前:デフォルトの名無しさん mailto:sage [2006/11/08(水) 02:06:48 ]
関連サイト
MSDN Microsoft DirectX9.0 DirectShow
msdn.microsoft.com/library/ja/DirectX9_c/directx/htm/directshow.asp
DirectX ホームページ
www.microsoft.com/japan/windows/directx/
MSDN ホームページ
www.microsoft.com/japan/msdn/
MSDN ライブラリ
msdn.microsoft.com/library/ja/
MSDN 2 ライブラリ
msdn2.microsoft.com/ja-jp/library/
Geekなページ DirectShowプログラミング [VC++]
www.geekpage.jp/programming/directshow/
あひるのホームページ DirectShowをよりよく使いたい人たちのサイト
hammer.prohosting.com/%7Earabo/DirectShow.shtml
Windowsでビデオキャプチャを作るため参考資料まとめ
www1.bbiq.jp/kougaku/link_videocap.html
奈良高専 土井研究室  動画あれこれ
wwwdoi.elec.nara-k.ac.jp/html/jisyu/doga/index.html
東京理科大 Kato Laboratory プログラミングキャプチャ
www.katolab.ee.kagu.sut.ac.jp/programing/capture.htm
京大川嶋氏 DirectShowのビデオキャプチャプログラミング
vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html
M.Oshikiri's HomePage
www.geocities.jp/konbiki/tips/index.html
DirectShowを利用した透明ウィンドウでのビデオ再生
codezine.jp/a/article/aid/322.aspx

Google
www.google.com/

5 名前:デフォルトの名無しさん [2006/11/08(水) 07:40:31 ]
スレたて乙

6 名前:デフォルトの名無しさん mailto:sage [2006/11/09(木) 00:26:04 ]
フィルタロックとストリームロックの使いどころとか使い方とかよくわからない。
効果があったんだかないんだかもよくわからない。

7 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 00:36:32 ]
Windows SDKにも入ってないしDirectShowのSDKはどこいったんだ

8 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 00:45:55 ]
プラットフォームSDKに行ったよ。
プラットフォームSDKとはPlatform SDK for WindowsServer2003 みたいな名前の奴だよ。
一瞬WindowsServer2003かよ、関係ないね
っと思うところがミソ。

9 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 03:38:34 ]
976 :デフォルトの名無しさん [sage] :2006/11/03(金) 15:16:44
   フィルタは知らんけどVC6でDirectShowを使うなら
   #include <dshow.h>
   #pragma comment(lib, "strmbase.lib")
   と
   Platform SDKの
   audevcod.h
   DShow.h
   specstrings.h
   strsafe.h
   が有ればビルド出来るはず。
   インクルードパスに直接Platform SDK指定しても良いけど
   俺は上記ファイルだけ抽出したフォルダをパス指定した。
 
   Platform SDK
   www.microsoft.com/downloads/details.aspx?familyid=D8EECD75-1FC4-49E5-BC66-9DA2B03D9B92&displaylang=en
   (ページ下にWeb Installも有る)


986 :デフォルトの名無しさん [sage] :2006/11/04(土) 19:07:47
   DirectX 9.0 SDK (October 2004)のstrmiids.libはVC6でリンク出来た。
   VC6でDirectShow使うソースでリンクエラー出た人、エラーでたインターフェイス教えてくれない?
   リンク出来るか試してみたい。

   ※ DirectX 9.0 SDK (October 2004)
   download.microsoft.com/download/1/5/1/1513e3ec-f6e2-4fb1-bf27-7c8983b3bf91/dxsdk_oct2004.exe


10 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 11:03:04 ]
うーん
Windows SDK以外に
旧式のPlatform SDKも入れないといけないのか



11 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 11:58:13 ]
Win2K+VC6ならね。
Windows SDK(for Vistaのアレ?)はWinXP SP2以降しかサポートしてないから。

12 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 11:59:11 ]
素のVC6でDX9SDKを使う手抜き技。

#include <windows.h>
#ifndef _W64
typedef unsigned long DWORD_PTR;
typedef long LONG_PTR;
typedef unsigned long ULONG_PTR;
#endif
#include <dshow.h>

13 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 12:03:11 ]
何故summer 2003を使わない?>VC6

14 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 12:05:01 ]
どのdshow.h使ってる? >>9のPlatform SDKでは
#include <dshow.h> だけでコンパイル出来たけど。
マクロあたりで引っ掛かるのかな。

15 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 12:12:54 ]
MicrosoftのSDKはいいかげんにして欲しい。
単体で良いかどうか、出た日付、サポートする環境を書いて一覧ページを置いて欲しい。
BaseClasses入ってたり入ってなかったりするし。

16 名前:10 mailto:sage [2006/11/12(日) 12:22:01 ]
ってよく見たらWindows SDKにもDirectShow入ってた。

17 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 16:46:47 ]
Webカメラの映像の解像度を変更する処理にチャンレンジしているが、
初期化時に
pAMStreamConfig->SetFormat(*****);
で解像度を変更するには成功。

しかし、
pCaptureGraphBuilder2->RenderStream(****);
を実行してしまうと解像度の変更ができない。

これを解決する方法か、または
RenderStreamで接続したピンを未接続にする方法はないでしょうか?

再起動後ではなく、リアルタイムに解像度を変更したいので。


18 名前:適当に答えてみる mailto:sage [2006/11/12(日) 18:01:27 ]
IID_IMediaControlでプレビューをSTOPして
SetFormatして
プレビュー再開じゃだめなの?

19 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 19:30:42 ]
>>18
いえ、Runする前にでもRenderStream後だと
SetFormatが失敗するようなのです。

ですのでRun後、Stopしたとしても
それまでに一度RenderStreamが実行されていると
SetFormatがうまくいかず、苦労しています。

初期化の過程で、RenderStream前に
SetFormatした場合は成功しています。
しかし、リアルタイムに変更するからには
それができずにいます。

なので、RenderStreamをする前の状態に
戻すような方法はないのかと。


20 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 21:18:01 ]
一度止めて初期化からやり直すのは無理なの?



21 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 21:30:45 ]
DirectShow関連をすべてReleaseしてから
再度初期化からやり直しても
やはり二回目のSetFormatが失敗します。

やはりRenderStreamを解除するような手段が必要な気がします。

22 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 21:57:59 ]
> 再度初期化からやり直しても
そうか、それは困るね。
CoUninitializeとかプロセス起動し直しでも失敗する?

23 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 22:22:39 ]
丁寧にありがとうございます。
CoUninitializeまでやっても同様でした。

プロセス再起動というのは初耳ですが、
カメラに関する処理以外(DirectShow以外)には
影響を与えたくないんですが、大丈夫でしょうか?

いろいろ調べてますが、
IFilterChain::RemoveChainが怪しいのですがネット上の情報が皆無で
コンパイラを通すところですでに引っ掛かってます。

24 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 22:43:25 ]
子プロセス作ってパイプで、とかアドホックな手もあるだろうけど
CoUninitializeで無理なら駄目かもね。
インターフェイス使ってどうにかする方は俺には分からない。

25 名前:デフォルトの名無しさん [2006/11/12(日) 22:50:09 ]
>>23
1.IPin::Disconnectでピンの接続解除
2.SetFormat
3.RenderStream


26 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 22:55:41 ]
AMCapみたいに、USBカメラのプロパティダイアログを呼んで
解像度変更するのはダメなの?

27 名前:デフォルトの名無しさん mailto:sage [2006/11/12(日) 23:01:34 ]
Managed DirectXが先に死亡したのねw

28 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 17:05:24 ]
>>25
うおーー!!
成功しました。ありがとうございます。
FindPinで2つのフィルタ間の出力ピンと入力ピンとを見つけ、
そのピンをDisconnectで接続を外し、SetFormat。
そののちRenderStreamでできました。

ヘルプのDisConnectの欄をを見るとIPin::Disconnectの方は
「アプリケーションからこのメソッドを呼び出さないこと」
とか書いてて「じゃあヘルプに載せるなよ」とか思いました。
なんとかIFilterGraph::Disconnectの方で成功。

本当に助かりました。1つの問題で何時間も悩み、
DirectShowのクセの強さを痛感しました。

29 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 19:51:12 ]
今のSDKに GraphEdit って付いてないんだっけ。

あれでちょっと調べてみれば接続済みのときには設定変更できないとか
あれこれ挙動もわかるし悩まずにプログラミングできるんだけど。

30 名前:デフォルトの名無しさん mailto:sage [2006/11/13(月) 21:24:48 ]
ん???ついてるよ



31 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 14:14:48 ]
Videos for Windoewsは
前スレにも過去スレにも話題も出てないし
スレも立っていないようですが
もはや今の時代こんなの使うべきじゃない
って解釈でOKでしょうか?

32 名前:デフォルトの名無しさん mailto:sage [2006/11/14(火) 23:03:16 ]
XPが最後でVistaでは廃止されて使えないんじゃなかったっけ?

33 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 00:20:58 ]
使えないと困るだろ。
今後改善・改良されないだけ。

34 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 00:22:11 ]
そういえば64bitプロセスからDShow使うとどうなるんだろう。
フィルタも64bit用DLLを用意しないとダメ?

35 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 09:13:55 ]
MDX2.0は期限切れで使えません

36 名前:デフォルトの名無しさん [2006/11/15(水) 12:41:43 ]
質問があります。
DirectShowフィルタのプロパティー画面を制作しているのですが、
タブを追加する方法がわかりません。
CBasePropatyという基底クラスにタブ追加メソッドがないのでどうしたらいいのかがわからんです。

WindowsAPIでいうところの「TabContrl_InsertItem」みたいなことをするにはどうしたらよいでしょうか?

37 名前:デフォルトの名無しさん mailto:sage [2006/11/15(水) 12:46:31 ]
>>33
どっかで廃止って見て、かなり前に作ったVideos for Windoews使いまくりのアプリを
どうしようって思ってたんだけど、勘違いだったか。
よかったよかった。

38 名前:デフォルトの名無しさん [2006/11/15(水) 17:22:27 ]
VFWは最近のボードだと、
正しく動作しないことも多いような...。


39 名前:デフォルトの名無しさん [2006/11/15(水) 17:55:43 ]
>>36
ISpecifyPropertyPages::GetPagesで複数のCLSIDを返せば良いだけでは?

40 名前:デフォルトの名無しさん [2006/11/15(水) 18:30:09 ]
うちのUSBカメラはVFWはすでに無視してます



41 名前:デフォルトの名無しさん [2006/11/15(水) 23:17:00 ]
>>39
せっかく教えてもらったのにヽ(´ー`)ノ


42 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 01:01:49 ]
VFWtってC#マネージドでも使えますか?

43 名前:デフォルトの名無しさん [2006/11/16(木) 02:01:34 ]
動画をデスクトップに保管しそのファイルを解凍し(解凍ソフト)、そのファイルをMPG2AVIに
入れて変換開始ボタンを押すと<DirectShowフィルタが構築されません>
とでて変換出来ません。どなたか親切な方教えて下さい。ちなみに私は初心者です。
宜しくお願いします

44 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 07:56:15 ]
動画板池

45 名前:デフォルトの名無しさん [2006/11/16(木) 08:09:05 ]
>>43
保管したファイルを解凍の時点でわかんない
向こうで質問するにしても気をつけれ

46 名前:デフォルトの名無しさん [2006/11/16(木) 20:15:19 ]
つかDirectShowも所詮はCOMだしなぁ
.NETで動画触ろうと思ったら
結局何が一番良いんだろうなぁ

47 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 21:46:09 ]
所詮はCOMってどーゆー意味だろ

48 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 22:14:38 ]
COM拒否症かも

49 名前:デフォルトの名無しさん mailto:sage [2006/11/16(木) 23:22:12 ]
>>38とか>>40とか色々まとめると
動画に静止画とかを挿入するような
単純な機能だけならVFWで十分
と思って良い?

50 名前:デフォルトの名無しさん [2006/11/17(金) 08:50:22 ]
じゃあSHOWってなにがすごいのさ?



51 名前:デフォルトの名無しさん [2006/11/17(金) 09:02:24 ]
すごいかどうかは別にして、VFWでできることはDirectShowでも簡単にできる。
あえてVFWを使う必要なしってことかな。

52 名前:デフォルトの名無しさん mailto:sage [2006/11/17(金) 13:17:19 ]
COMでとっつきにくいのを乗り越えてDirect Showで書いても
別に局.NETでマネージされてくれるわけでもないし
じゃあ結局どの辺にご利益があるのかなあ
と言うことだとエスパー

53 名前:52 mailto:sage [2006/11/17(金) 13:20:15 ]
スマソ2行目の局は入力ミス
脳内あぼーんしてくれ

54 名前:デフォルトの名無しさん mailto:sage [2006/11/17(金) 14:20:12 ]
>>50
AVI 以外を扱いたくなったときに対応可能ってとことか。

>>46
.Net で動画触るなら、C++/CLI で書くのが一番。
DirectShow でも WMF でも SDK 使って普通に使える。

55 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 01:06:37 ]
単にVFWを捨ててDirectXに統合したかったんでしょ。
で、のちのち気が変わってDirectShowだけプラットフォームSDKに移動したと。

56 名前:デフォルトの名無しさん mailto:sage [2006/11/18(土) 14:11:04 ]
プラットフォームSDKへの移動は、どちらかというと昇格だね。

57 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 09:52:40 ]
DVDでコマ送り、コマ戻しはどのようにやるのがよいのでしょう?

58 名前:デフォルトの名無しさん mailto:sage [2006/11/19(日) 11:44:04 ]
。みいかはいつ対応するの?

59 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 01:32:42 ]
なんでそんな書き方する?普通にドットネットってかけよ。

60 名前:デフォルトの名無しさん mailto:sage [2006/11/20(月) 01:46:12 ]
最初のshiftが同時押しになったらしい



61 名前:デフォルトの名無しさん [2006/11/20(月) 18:26:00 ]
.NETのことだったのか

62 名前:デフォルトの名無しさん [2006/11/24(金) 02:05:52 ]
質問です。
変換フィルタを使って動画の画面サイズ解像度を変更(下げる)するフィルタ
を作ろうかなと考えております。
中身の処理はアンチエイリアスを自作する予定です。
【質問】
壱:OutPinに解像度を設定する項目があると思うんですがどうやってするんでしょうか?
弍:動画(1秒に15枚のBMP画像)を周波数解析したら普通のPCでは処理重杉でしょうか?

63 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 03:31:07 ]
1.希望サイズ、フォーマットの出力メディアタイプの提示をする。(TransformフィルタならGetMediaTypeで提示したいメディアタイプを返す。)
2.JPEG圧縮だって一応周波数に変換するから何とかなるんじゃない?

64 名前:デフォルトの名無しさん [2006/11/24(金) 04:46:37 ]
>>63
壱:InputPinからGetMediaTypeで解像度取得してSetMediaTypeで
下流ストリームに教えてあげるのね。やってみます。
弍:JPEGはDCT。コサイン変換で周波数解析すればおk
と言う事と深読みしてみる(`・ω・´)
回答いただきありがとうございます。

65 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 14:39:06 ]
なんか公式の解説ページにあるコードが間違いだらけな気がするのは俺だけ?
明らかにNullのクラスポインタからメソッド呼び出そうとしてたり

66 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 15:04:07 ]
>>44
動画板って特別企画の動画2ch板のことか?
あそこに初心者質問スレが立つことなんてあるのか?

67 名前:デフォルトの名無しさん [2006/11/24(金) 20:07:34 ]
>>64
下流ストリームに教えてあげるのはGetMediaTypeと思われ。。。

68 名前:デフォルトの名無しさん [2006/11/24(金) 21:10:08 ]
>>67
なんですと〜。ちゃんと
確認の意味で書いてよかった。

へるぷ見て勉強しなおします

69 名前:デフォルトの名無しさん mailto:sage [2006/11/24(金) 23:31:34 ]
>>68
ヘルプもいいけど、ベースクラスのソースとサンプル見た方が早いよ

70 名前:デフォルトの名無しさん [2006/11/25(土) 01:01:26 ]
>>68
「おいおい、あんた何を俺にくれるのよ?」が GetMediaType



71 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 01:05:01 ]
>>65
あるね。ビルドやってないだろ、見たいなの。

72 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 02:43:18 ]
DirectShowってやっぱ"Show"って言ってるだけあって
入力方向より出力方向の方が充実してるって感じなんでしょうか?
正直、他アプリからDirectShowへの入力はかなりイマイチな希ガス

73 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 03:07:28 ]
ソースフィルタ側ってあんまり活用されてないよねえ

74 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 08:05:50 ]
上流はプッシュ、プルモデルを正しく理解して実装するのは(最初のうちは)大変かと 
トランスフォームなら良くわからなくても実装しやすいからね

75 名前:デフォルトの名無しさん mailto:sage [2006/11/25(土) 12:15:15 ]
フィルタ開発しているとピン接続を拒否されたときの理由を調べるのがつらい。
もっと簡単にわかってほしい。

76 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 01:07:10 ]
>>51とかよぉ、VFWとやらがどんなもんなのかはまあ知らねぇんだが
DirectShowが簡単ってこたぁねぇ気がすんだがなぁ。
普及させたいからかなんか知らんが誤解を与えるような表現はイクナイ

77 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 01:40:18 ]
簡単じゃないけどそれはハードルであって
そこを超えると何もかもが簡単になるという

RUBYYYYYYYYYYYYYYYYYYY

ってやつ

78 名前:デフォルトの名無しさん mailto:sage [2006/11/27(月) 13:03:01 ]
質問です。
長さ無制限のストリームを供給し続けるプル型のソースフィルタを実装することは可能でしょうか?
IAsyncReader::LengthでTotalバイトを取得できるようになっていますので、ここに長さ無制限を示す数値を設定しないといけないのかとは思うのですが、
0や-1を返すとかありなのでしょうか。

ご存知のかたいらっしゃいましたら、ご教示お願いします。



79 名前:デフォルトの名無しさん [2006/11/27(月) 23:36:33 ]
素人でスマンが、DrectXからDirectShowへ入力しようとしてるんだが、
俺なりに調べてみた所、サーフェイスを云々してRECT型使ってGDI経由で入力、
と言うようなスマートじゃない方法しか思いつかないんだが、
何か調べ方間違ってるんだろうか?
WindowsXP限定なら他にもありそうな感じだったがそれはしたくない。

そもそもこういう用途でDirectShowを使おうとすること自体間違いなんだろうか?
Directつながりでやりやすそうとか安易に思ってたんだが。

80 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 00:48:21 ]
よくわからんがDirectShowのレンダラに絵を表示させる仕事をさせたいわけ?
できなくはないが簡単にはできない。



81 名前:79 mailto:sage [2006/11/28(火) 01:35:49 ]
編集とか圧縮とかもできればやりたいが基本的にはまずは動画を出力したい、
レンダラ側とかは何とかなりそうだが、ソース側が‥
「プッシュ型ならどっちかって言うと簡単」みたいな記述を↓で見かけて
m--takahashi.com/old/09850.html
鵜呑みにしてソースフィルタ自作しようと思ったものの失敗だったか?
かと言ってFile Monikerとやらも簡単そうには見えないし

と言った状況であります。

82 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 13:36:05 ]
>>81
DirectX でレンダリングした結果を動画ファイルにしたいってこと?
それってソースフィルタ書くことになるわけだけど、ソースフィルタ書くってのは
DirectShow のアレコレの中でも非常に難しいことなので、覚悟してやってくれ。
あとプッシュにするかプルにするかは勝手に選べるわけでもないんで、
その辺の理解も必要(パーサが対応してる方じゃないとそもそもグラフが組めない)。
漏れならWMF SDKで WMV にするなぁ。

あと万が一もし単に画面に動画を出したいだけなら、DirectXだけでそのままやれば十分。
ってかDirectShowのレンダラもDirectXで描いてるわけで。

83 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 15:58:15 ]
WMF SDKは日本語のドキュメントが公開されてないっぽいので躊躇してたが
実際インストールしてマニュアル見たらこっちのほうが簡単そう

>>82ありがとうございました

84 名前:デフォルトの名無しさん [2006/11/28(火) 19:34:50 ]
62ですが動画サイズ変換フィルタでしました
ありがとうございました

なぜGetMediaTypeの中に出力Pinの設定をかくのか未だ謎。
まぁもう少し使い勝手(入力画像サイズの自動判断など)よくしたら
ソースとバイナリうpします
今後の為にも

85 名前:デフォルトの名無しさん [2006/11/28(火) 19:36:21 ]
う〜〜〜ん 何をしたいのか よくわからん。
DirectXで描画したイメージを100%忠実に取り出すことなんて そもそもできるのか? 

86 名前:デフォルトの名無しさん mailto:sage [2006/11/28(火) 22:49:29 ]
> なぜGetMediaTypeの中に出力Pinの設定をかくのか未だ謎。
ココわからないと、この先しんどいと思われ

87 名前:デフォルトの名無しさん [2006/11/28(火) 23:01:47 ]
>>86
GetMediaTypeは上流ストリームの設定を取るインターフェースだけではなく

下流ストリームの接続の設定も取るしくみなのかしら?
だとしたらPinそれぞれにMediaTypeを取れるインターフェースを作ってもらいたいものよね

88 名前:デフォルトの名無しさん [2006/11/28(火) 23:52:18 ]
>>87
だからそうなってるだろ?

89 名前:デフォルトの名無しさん mailto:sage [2006/11/29(水) 17:43:12 ]
>>84
後学の為の資料としてソースうpしてくれるなら
ソースは直接書き込んだ方がいいかも。
うpろだだと後々検索でこのスレ見た人とかは拾えないから。

>>85
DllInjectionでDirect3D乗っ取ってフロントバッファを取得して、
それを直接DirectShowに流して動画キャプチャソフトを作りたいんじゃないかな?
俺は>>83じゃないからわからんけど。質問見た感じそんな所じゃないかなーと思った


90 名前:デフォルトの名無しさん [2006/11/29(水) 19:49:16 ]
>>89
わかりました。
えいちてぃーえむえるにしてソースをどこかに貼りますね。
ただまだ解決出来ない問題がありますので暫くかかると思うけど…

画面の解像度変更すると出力Pinとレンダラの間に中間フィルタ「Colorコンバータ」が何故か入る
(´・ω・`)

中間フィルタさえはいらなきゃちゃんと表情されるのに…



91 名前:デフォルトの名無しさん [2006/11/30(木) 02:41:37 ]
>>89
フロントバッファと画面イメージって必ずしも同じじゃないんじゃ?
よくわからんけど。。。

92 名前:デフォルトの名無しさん mailto:sage [2006/11/30(木) 22:47:39 ]
>>91
え、BeginScene()とEndScene()の間のレンダリング結果が
Present()によってバックバッファからフロントバッファに
Blt(あるいはFlip)されると思ってたけど、違う?

93 名前:デフォルトの名無しさん [2006/12/07(木) 14:28:29 ]
class CGrabCB: public CUnknown, public ISampleGrabberCB
{

          ・
          ・
とコールバックとかいうのをすると、下記のようなエラーがでるのですが
どうすればよいのでしょうか?

.\AAA.cpp(489) : error C2504: 'CUnknown' : 定義されていない基本クラスが宣言されています。
.\AAA.cpp(492) : error C2501: 'CGrabCB::DECLARE_IUNKNOWN' : 識別名を宣言するのに、型が指定されていません。
.\AAA.cpp(1057) : error C2259: 'CGrabCB' : 抽象クラスをインスタンス化できません。
次のメンバが原因です :
'HRESULT IUnknown::QueryInterface(const IID &,void ** )' : 純粋仮想関数は定義されていません。
c:\Program Files\Microsoft Platform SDK\Include\Unknwn.h(113) : 'IUnknown::QueryInterface' の宣言を確認してください。
'ULONG IUnknown::AddRef(void)' : 純粋仮想関数は定義されていません。
c:\Program Files\Microsoft Platform SDK\Include\Unknwn.h(117) : 'IUnknown::AddRef' の宣言を確認してください。
'ULONG IUnknown::Release(void)' : 純粋仮想関数は定義されていません。
c:\Program Files\Microsoft Platform SDK\Include\Unknwn.h(119) : 'IUnknown::Release' の宣言を確認してください。

94 名前:デフォルトの名無しさん mailto:sage [2006/12/07(木) 14:38:30 ]
まず、CUnknownはどこから出てきた?
仮にCUnknownがIUnknownのメソッドを実装するクラスとして存在したとしても、
C++ではCGrabCBがCUnknownを継承しただけでは、
ISampleGrabberCBのIUnknownのメソッドを実装したことにはならないはず。

95 名前:デフォルトの名無しさん [2006/12/07(木) 14:51:07 ]
実はうまくできてるパソコンがあって、別のPCでも動かそうと思ったら、
このエラーが出てしまって。前も出たのですがどうやって修正したのか忘れてしまった
次第です。
やり方は
ttp://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html
を真似しました。

96 名前:93 [2006/12/07(木) 14:59:05 ]
streams.hをインクルードし忘れてました。。
で、インクルードすると
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlconv.h(1000) : error C2084: 関数 'LPDEVMODEA AtlDevModeW2A(LPDEVMODEA,const DEVMODEW *)' は既に本体を持っています。
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlconv.h(548) : 'AtlDevModeW2A' の前の定義を確認してください
C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\atlmfc\include\atlbase.h(6683) : warning C4193: #pragma warning(pop) : 一致する '#pragma warning(push)' がありません

またエラーが出てきてしまいました。前はこれでうまく言ったのですが・・

97 名前:デフォルトの名無しさん mailto:sage [2006/12/10(日) 22:24:56 ]
DirectShowでWEBカメラ映像を表示するプログラムを作ったのですが、
TVチューナーの付いたパソコンだとTV映像が表示されてしまいます。

なんとかWEBカメラに限定させることはできないでしょうか?

98 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:08:23 ]
今、WMVを無圧縮AVIにするプログラムを作っているのですが
(最終的に別のソフトでxvidでmp4にする予定)
出力されるAVIが映像の再生時間だけ2倍になってしまいます
(音は普通に再生)

Directshowでの調整がうまくいかなかったので一度AVI作成後にRateとScaleとMicroSecPerFrameを調整して
AVI状態ならずれの修正はできたのですが、それをmp4に変換すると再生がおかしくなってしまい
原因がつかめなかったのでDirectshowでAVI作成するところまでもどってきたのですが
Grapheditでマスターストリーム指定で30秒くらいのファイル一個だけですがうまくいったので<wmv9
IConfigAviMuxをソースに追加してみてSetMasterStreamが成功はしているのですが
結果に反映されてくれません。

ソースは以下のようなものなのですがどこがいけないのでしょうか

-------------------------------------------------------------------------
IGraphBuilder*pGraph= NULL;
ICaptureGraphBuilder2*pBuilder= NULL;
IBaseFilter*pSrc= NULL;
IBaseFilter*pMux= NULL;
IBaseFilter*pAudioDec= NULL;
IBaseFilter*pAVIDec= NULL;
IPin*pPinIn= NULL;
IPin*pPinOut= NULL;
IMediaSeeking*pSeek= NULL;
IMediaSeeking*pRate= NULL;
IMediaEvent*pMediaEvent= NULL;
IMediaControl*pMediaControl;
longevCode;


99 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:08:55 ]
CoInitialize(NULL);

CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&pGraph);
CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL, CLSCTX_INPROC, IID_ICaptureGraphBuilder2, (void **)&pBuilder);

IBaseFilter *pAVIMux =NULL;//+id{CLSID_AVI mux}_GUID
pAVIMux = searchFilter(pGraph, L"AVI Mux" );

IConfigInterleaving *pConf = NULL;
IConfigAviMux *pConfMux = NULL;
pGraph->AddFilter(pAVIMux, L"AVI Mux");

LONG lo = -1;

pBuilder->SetOutputFileName(&MEDIASUBTYPE_Avi, OutputFile, &pMux, NULL));

pBuilder->GetFiltergraph(&pGraph));
pGraph->AddSourceFilter( InputFile, L"SourceFilter", &pSrc));

pAVIDec = AVI Decompressorフィルタ取得
pAudioDec = WMAudio Decoder DMOフィルタ取得

pGraph->AddFilter(pAVIDec, L"AVI Decompressor");
pGraph->AddFilter(pAudioDec, L"WMAudio Decoder DMO");

pPinOut = GetPin(pSrc, PINDIR_OUTPUT);
pPinIn = GetPin(pAudioDec, PINDIR_INPUT);
pGraph->Connect(pPinOut, pPinIn);

pBuilder->RenderStream( NULL, NULL, pSrc, pAVIDec, pMux );

100 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:10:19 ]
pBuilder->RenderStream( NULL, NULL, pSrc, NULL, pMux );
pGraph->QueryInterface(IID_IMediaControl, (void **)&pMediaControl);
pGraph->QueryInterface(IID_IMediaEvent, (void **)&pMediaEvent);

pMux->QueryInterface(IID_IMediaSeeking, (void**)&pSeek);

CLSID id;
pAVIMux->GetClassID(&id);
CoCreateInstance(id, NULL, CLSCTX_INPROC, IID_IConfigAviMux, (void **)&pConfMux);
pAVIMux->QueryInterface(IID_IConfigAviMux, (void**)&pConfMux);
pConfMux->QueryInterface(IID_IConfigAviMux, (void **)&pAVIMux);
pConfMux->GetMasterStream(&lo);
pConfMux->SetMasterStream(1);
pConfMux->GetMasterStream(&lo);

if (pMediaControl->Run() == S_OK)
{
途中経過表示など
}

//終了処理
if(pRate != NULL) pRate->Release();
if(pConf != NULL) pConf->Release();
if(pAVIMux != NULL) pAVIMux->Release();
if(pConfMux != NULL) pConfMux->Release();

if(pAudioDec != NULL) pAudioDec->Release();
if(pAVIDec != NULL) pAVIDec->Release();
if(pGraph != NULL) pGraph->Release();
if(pBuilder != NULL) pBuilder->Release();



101 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:11:22 ]
if(pSrc != NULL) pSrc->Release();
if(pMux != NULL) pMux->Release();
if(pMediaEvent != NULL) pMediaEvent->Release();
if(pSeek != NULL) pSeek->Release();
if(pMediaControl != NULL) pMediaControl->Release();
if(pPinIn != NULL) pPinIn->Release();
if(pPinOut != NULL) pPinOut->Release();
CoUninitialize();
-----------------------------------------------------------------------
いろいろ試行錯誤していたので少し読みにくくてもうしわけありません。

102 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:21:22 ]
CLSID id;
pAVIMux->GetClassID(&id);
CoCreateInstance(id, NULL, CLSCTX_INPROC, IID_IConfigAviMux, (void **)&pConfMux);
pAVIMux->QueryInterface(IID_IConfigAviMux, (void**)&pConfMux);
pConfMux->QueryInterface(IID_IConfigAviMux, (void **)&pAVIMux);

の辺りを主にいじっていました(コードを実行する場所をかえたりなども)

103 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:33:02 ]
>>98-102
WMV: 各サンプルにタイムコードあり
AVI: 各サンプルにタイムコードなし

とかこのあたりの問題はOK?

104 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:42:49 ]
AVI→mp4の変換がうまくいかなかずに調べていて自分で出力済みのAVIを
いじるのは無理と判断しまして、Directshowで出力前設定をいじれば勝手に
それをはさんでくれるのではないかと思いまして(Grapheditではうまくいったので)

動画関係をいじりはじめたのがつい最近なので色々調べはしましたが
細かいところはよくわかっていないと思います

105 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 17:46:28 ]
「AVI→mp4の変換がうまくいかなかずに」

「AVI→mp4の変換がうまくいかずに」
が誤字なのとそのあとの調べたものを書きそこねました
自分で無理だと判断↓原因がタイムコードです


106 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:56:38 ]
GraphEditではどんなフィルタ構成になった?

107 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 19:57:30 ]
>>97 ソースをWEBカメラになるように明示的に指定すればいいんじゃね?

108 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 20:26:13 ]
>107
そういうのって、どこかで指定できましたっけ?
接続してるカメラを列挙してるから
カメラ以外は入ってこないと思ってたんですが。

109 名前:デフォルトの名無しさん mailto:sage [2006/12/11(月) 22:20:47 ]
なんかフレームの持続時間が意識されていないような気がするけどどうだろう。
>>103氏の懸念していることに近いけど。

入力のWMVと出力されたAVIの総フレーム数は一致しているだろうか。
また、それぞれのフレームレートはどうなっているのかな?
その辺の具体的な数値があった方が状況を確認しやすいと思う。

110 名前:98 mailto:sage [2006/12/12(火) 10:44:27 ]
GraphEditでは
WMVファイル →WMAudioDecoderDMO          →AVIMux →FileWriter
       →WMVideoDecoderDMO →AVIDecompresser→
となっています

変換結果は
フレームレートは両方30fpsなのですが、
出力されたAVIのフレーム数は1723です(WMVのほうは調べ方がちょっとわからなかったです)
再生時間がWMV時点で28.7秒でAVIにすると57.4秒で丁度綺麗に2倍になる感じです
フレームの持続時間のほうはフレームレートの調整程度しか意識していませんでしたので
また少し自分でも調べてみようと思います。



111 名前:98 mailto:sage [2006/12/12(火) 10:55:08 ]
出力済みAVIファイルは下のようにヘッダを書き換えればAVI状態ではうまく再生できたのですが
mp4に変換するとファイルによって色々な症状がでて3個ほどサンプルを試した内では
ひとつもまともに再生できませんでした。

dwAudioTime = (double)dwAudioLength * dwAudioScale / dwAudioRate;

dwMicroSecPerFrame = dwAudioTime / dwVideoLength * 1000000.0+0.5;

dwVideoRate = 1000000L;
dwVideoScale = dwMicroSecPerFrame;

112 名前:98 mailto:sage [2006/12/12(火) 11:05:27 ]
3連続で書いてすいません。
書き換えた部分はstrhヘッダ(ストリームタイプがvids)の
rateとscale、avihヘッダのmicrosecperframeです

113 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 11:10:40 ]
>>110
>フレームレートは両方30fpsなのですが、 出力されたAVIのフレーム数は1723です
30fpsで1723フレームなら、57秒ちょっとで合ってるじゃないですか。

GraphEdit で WMV ファイルを再生して、ビデオレンダラのプロパティで再生フレーム数を見れば
おおむねのフレーム数がわかると思います。それでフレーム数を確認してみてください。

それから、WMV はフレーム毎にタイムスタンプが付いていますから(≒フレームの時間的間隔が
一定ではない)、デコードして AVIMux で結合という簡単な処理では決して正しい AVI ファイルは
出来ないということも理解する必要があります。



114 名前:98 mailto:sage [2006/12/12(火) 13:05:01 ]
指示いただいた通りGraphEditでフレーム数確認したところ861フレームでした

WMV(変換元ファイル)のほうは28秒ちょっとなので57秒でフレームが丁度2倍になっている感じですね

>それから、WMV はフレーム毎にタイムスタンプが付いていますから(≒フレームの時間的間隔が
>一定ではない)、デコードして AVIMux で結合という簡単な処理では決して正しい AVI ファイルは
>出来ない

やはりちょっとヘッダー部などをいじった程度だと無理でしたか
Directshowのフィルターがその辺の処理をやってくれるのではないかと
甘く見ていました

115 名前:98 mailto:sage [2006/12/12(火) 13:17:20 ]
あと、AVIDecompressorのあとにビデオレンダラにつなげるとその時点では
まともに再生されるのですが、AVIMuxでファイル保存できるようにするときに
タイムスタンプが抜かれてしまうのでしょうか?

116 名前:デフォルトの名無しさん mailto:sage [2006/12/12(火) 16:42:29 ]
>>115
AVI 形式のファイルは、メディアフォーマットで指定された同一持続時間の
サンプルがずらーっと並ぶだけというようなフォーマット。
なので正しいフレームレートでかつ1フレームの欠落もないデータじゃないと
正常に再生できない。

変換元ファイルを走査して、真のフレームレートを計算してWMV側で落ちている
フレームも捏造して自分でmuxするとかやり方はあるような気がするけれども、
絵と音がずれないAVIファイルを作るのはとても難しいです。

117 名前:98 mailto:sage [2006/12/12(火) 19:17:37 ]
やはり、自分でやるしかないとなると相当むずかしいみたいですね
とりあえずWMVファイルを調べてその最小公倍数分のフレームレートをAVIファイルに設定、
フレームの余計な部分に空フレーム挿入などで試してみようと思います。

途中で挫けそうですが、もしうまくいったら報告だけでもさせていただきます。
…WMVとかに使っているコーデックで圧縮かかってるとその別ソフトが読み込んでくれないから大変です...orz

色々教えていただいてありがとうございました。

118 名前:デフォルトの名無しさん [2006/12/21(木) 21:42:10 ]
ボコノン教授
どこみても質問に回答してる。
ネ申ですか?それともM$の中の人ですか?

119 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 00:43:59 ]
教徒だろw

120 名前:デフォルトの名無しさん mailto:sage [2006/12/22(金) 08:57:53 ]
>>119
教徒と言う事は宗教団体さんみたいなもんなんすね。
DirectShow究めるためにボコノン教に入ってみたいかも



121 名前:デフォルトの名無しさん [2006/12/23(土) 17:14:46 ]
パーサー(スプリッタ)フィルタを自作したいのですが、
参考になるサンプルなどありますか?
情報が少なくて困っています。
変換フィルタはいくつか作成したことがあります。

122 名前:いつでもどこでも名無しさん mailto:age [2006/12/23(土) 23:31:06 ]
YUY2の16bit列をRGB16bit列に変換したいのですが、便利な関数またはフィルタありませんか?

123 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 00:00:48 ]
>>121
ソースがプルなのかプッシュなのかによりスプリッタの挙動が大きく異なるわさ
プッシュなら来たサンプルバラして後方にポンポコ投げろや
プルなら入力ピン繋がった時点でソース先読みして各種情報提供してやるとか色々とアレ
年末ゆえ酒飲んでて上手く得ないけど、まあ察しろ
出力ピンに関してはINFTeeのサンプルが参考になるよ

>>122
変換式ならググればゴロゴロみつかるし、後は自分でやってもたいしたことないだろ がんばれー

124 名前:デフォルトの名無しさん mailto:sage [2006/12/27(水) 00:01:47 ]
上手く得ないけど → 上手く言えない タイプミスうぜー

125 名前:デフォルトの名無しさん [2006/12/27(水) 20:37:01 ]
>>123
変換を自作したがいちピクセル単位でやると遅くてつかいものにならんかったよ。
そこで私は
趣味→オーブンしーぶい(ただだけど配布できない)仕事→あいぴーぴー(よっしゃでかえるレベル)
を使った。一個関数呼ぶだけだった


126 名前:122 mailto:age [2006/12/28(木) 02:18:06 ]
>>123
変換式は見つかりました。でもSSE命令とか使いたいところです。
アセンブラ画像処理プログラミング って本買ってきたので頑張ります

>>125
OpenCVやIPPの場合、どんな関数使えばいいですか?
正にIplImageが欲しいです

127 名前:122 mailto:age [2006/12/28(木) 02:23:55 ]
>>125
OpenCVって配布できないんですか?

journal.mycom.co.jp/news/2006/11/08/360.html
e-words.jp/w/BSDE383A9E382A4E382BBE383B3E382B9.html

BSDライセンスってことですが

128 名前:122 mailto:age [2006/12/28(木) 02:57:28 ]
IPPの関数は見つかりました。しかしOpenCVのcvHoughLines2が使いたいので
OpenCVで変換する関数を是非教えて下さい

129 名前:122 [2006/12/28(木) 09:22:06 ]
>>123
アドバイスありがとうございます。
ソースフィルタはFile Source(Async)です。
とりあえず、空の変換フィルタ(CTransformFilter)を作成し、
ソース→空フィルタと接続して解析しようと思ったのですが、
「同じトランスポートをサポートしていない為、ピンを接続できません。0x80040266」
というエラーが起こり、接続することすらできません…

130 名前:121 [2006/12/28(木) 09:23:06 ]
↑121でした。



131 名前:デフォルトの名無しさん mailto:sage [2006/12/28(木) 12:47:29 ]
>>129
FileSource にTransformFilterがそのまま接続可能(かも)と思う時点で
知識が少なすぎて説明とか不可能なレベル。
SDK の DirectShow のドキュメントを先頭からちゃんと読むべし
(大した分量じゃないでそ)。

132 名前:デフォルトの名無しさん [2006/12/30(土) 08:42:31 ]
#define D3D_DEBUG_INFO
が定義されているとムービー再生時に
VMR9のRenderlessが無視されてActiveMovie Windowが
ポップアップで出てくるんだけど、これ抑制させる方法ないでしょうか?


133 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 18:38:31 ]
どこの何の話?

134 名前:デフォルトの名無しさん [2007/01/05(金) 01:08:09 ]
お、スレッド落ちてたの直ったのか。
>>127>>128
オープンしーぶいの話し少し待ってもらってもいいか?
仕事始まれば家に帰るからさ

ライセンスの話は多分私が間違えていると思う。
ただインターネットの書き込みで気になるのがあった
それを張り付けますよ〜。

135 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 11:16:08 ]
落ちてたんじゃなくてサーバ移転しただけじゃないのかな

136 名前:デフォルトの名無しさん [2007/01/09(火) 19:46:03 ]
[MSDN Online 更新情報] December 2006 DirectX SDK が公開されました。 [DirectX] (2006-12-22 09:00)
www.microsoft.com/japan/msdn/directx/downloads.aspx

137 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 20:55:30 ]
かなり前にインスコ済みなんだが

138 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 21:07:56 ]
December 2006 DirectX SDK
DirectShow関係で何か変わってます?

139 名前:デフォルトの名無しさん [2007/01/10(水) 00:15:22 ]
VMRってWin2KではDirectX9.0およびビデオカードがサポートしていればサポートするよ、
見たいな事言ってるけど実際Win2Kではどうですか?
ぶっちゃけウインドレスモードが欲しいだけなんですが。
オーバーレイとかDirect3Dで描画なんたらとかじゃなく


140 名前:デフォルトの名無しさん [2007/01/10(水) 07:56:14 ]
【ネガティブ派遣根性チェック】

3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。

□派遣先の社員の意見にはたとえ間違っていても反対しない
□派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい
□自社に仕事を持ち帰れるように言われるとムカつく
□自社で仕事なんてできるわけがない
□派遣/受託の差異を指摘する人間はムカつく
□派遣先には仕事だけでなく自分のプライベートについても指示して欲しい
□自分の月額金額を知らない
□派遣先社員より自分の生涯収入が低いのは当然だ
□派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ
□今のプロジェクトが終わっても同じ派遣先に常駐したい




141 名前:デフォルトの名無しさん [2007/01/12(金) 02:18:08 ]
ネガティブ派遣社員(σ´Д`)σゲッツ!!
正社員なんだが仕事の為なら派遣さんにも尻尾ふりますよ。寧ろ俺が最下層。

OctoberではVC6のサポートしていたんだが、December 2006 DirectX SDK は打ち切ったようだね。
「.dws」と言うプロジェクトファイルがなくなっとる

142 名前:デフォルトの名無しさん [2007/01/12(金) 02:48:15 ]
正社員は「自分の仕事のため」に尻尾ふり

派遣は「切られないため」に尻尾ふり

143 名前:デフォルトの名無しさん [2007/01/15(月) 03:19:51 ]
変換フィルタの自作しているんですけど、
上流フィルタの出力pinにたとえばVGAの解像度を優先接続して欲しいん
ですが、そんなことって可能でしょうか?

msdn.microsoft.com/library/ja/default.asp?url=/library/ja/dnwmt/htm/grabbersample.asp
このページをみながら「EnumMediaType」と「GetMediaType」はオーバーライド
したんですが、
まだ接続しきっていないせいか上流フィルタの出力pinに解像度の情報が乗っていない。。

できないのかな?

144 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 13:44:33 ]
>>143
GetMediaType で解像度入れたメディアタイプを返せばいいんじゃない?

145 名前:デフォルトの名無しさん [2007/01/15(月) 16:31:10 ]
>>144
回答ありがとうございます。
そのあたりを嗜好錯誤してかつできませんでした。
解像度を返すにはCMediaType->Formatのポインタが必要ですがそこが
空になっているんです。


146 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 16:54:48 ]
>>145
それは当たり前でソ。フォーマットタイプによってpbFormatの先の構造体のサイズは変化するんだから、
事前にアロケートしてもらうのは無理。>>145が自分で SetFormat & SetFormatType してあげないと。

147 名前:デフォルトの名無しさん [2007/01/15(月) 17:15:08 ]
>>146
できました。
優先的に上流フィルタの解像度を選んでくれるようになりました。


148 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 08:27:54 ]
Direct3D9+VMR9 Renderlessモードでビデオ画像を表示しているのですが
60fpsで描画すると(SetTexture→DrawPrimitiveUP→Present)
フルスクリーンモードでDirectShowが固まってしまいます。(デコードが停止)
同じような問題に遭った方いらっしゃいますか?

フルスクリーンでもビデオに合わせて30fps程度に落としたり
(ソースは典型的な29.97fps)、ウィンドウモードにすると問題は無いんですけども・・・。
VGAは NVIDIA GeForce4MX , DirectX9 2006-feb
ドライバは ForceWare 93.71 (2006年11月2日) WHQL認定 です。

149 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 01:45:21 ]
RenderFileでディスク上のmp3が鳴らせる、というとこまでわかりました。
メモリ上のmp3を鳴らす場合、ソースフィルタをどうにかこうにか、
と言うことのようですが、それ以降さっぱりわかりません。
なにかいいサンプルがあったら教えてください。

150 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 04:40:47 ]
>>149
C:\Program Files\Microsoft Platform SDK\Samples\Multimedia\DirectShow\Filters\Async\MemFile
と、よく知らないのに返答してみる・・・



151 名前:デフォルトの名無しさん mailto:sage [2007/01/18(木) 10:57:19 ]
>>149
まず標準的なPCにプレインストールされているMP3デコーダフィルタがある、と仮定すると
それが何なのかGraphEdtで調べる。
次にそのMP3デコードフィルタとつながるソースフィルタを自作する。
そしてソースフィルタがそのMP3デコーダフィルタに対してどのようなメディアタイプで接続できるのか調べる。
メディアタイプがわかったらそのメディアタイプにあった形式に、メモリ上のデータとやらを加工してMP3デコーダに渡す。
フィルタ作ったことが無いなら相当大変だよ。



152 名前:149 mailto:sage [2007/01/19(金) 03:05:59 ]
レスありがとうございます。
サンプルも151もまるで理解できないのでとりあえずDirectShowを1から勉強してます。

153 名前:デフォルトの名無しさん mailto:sage [2007/01/19(金) 04:54:19 ]
最終的にどういう条件で何がしたいのかを書いたほうがいいかもよ。
他の選択肢があるかもしれんし。。。

154 名前:デフォルトの名無しさん [2007/01/19(金) 23:55:04 ]
MPEG3Layer-3デコーダ
これが標準にインストールされてるデコーダだよ。
このデコーダ通ったストリームがWAVEファイルみたいな生な音声ファイルになってるからそこに変換フィルタを自作してやればいいよ。

意外と簡単にいけるかもしれん…

155 名前:デフォルトの名無しさん [2007/01/24(水) 10:52:40 ]
ttp://mobiquitous.com/programming/usbcamera.html
この↑ページをみながらDirectShowLibを使ってC#で
USBのマイク&カメラ(LogicoolのQcam10.0)からの入力をCaptureGraphBuilderを使って
MuxAVI経由でAVIファイルとして保存しているのですが、
フィルタグラフマネジャIGraphBuilderのRun(),Stop()およびIFileSinkFIlterのSetFileName()を使って、
Run 5秒間保存 Stop 保存先変更 Run 5秒間保存 Stop 保存先変更・・・
と繰り返すと、できあがったファイルは
1つ目、所望のものが得られた
2つ目、映像が〜5秒フリーズして5秒後から再生される。音声は再生直後から5秒までにちゃんと入っている
3つ目、映像が〜10秒フリーズして再生される。音声は同上
のようになっていて、どうもVideoのほうの時間がおかしいのですが、
そこをうまく扱えるような方法があったら教えてください。



156 名前:デフォルトの名無しさん [2007/01/24(水) 12:34:32 ]
それQCAMのバグだと思ってる。
厳密に言うとMediatimeの初期化をしてくれてないからそうなる。

カメラの後に「Smart Tee」繋いで、さらにフレビューピンに繋いだら?

157 名前:155 [2007/01/24(水) 17:57:20 ]
ありがとうございます!
とりあえずそれでやってみます!

158 名前:155 [2007/01/24(水) 20:43:33 ]
GraphEditでも再現できる現象だと(いまさらながら)わかったのですが、
>>156さんの
>>カメラの後に「Smart Tee」繋いで、さらにフレビューピンに繋いだら?
のおっしゃるように
VideoSource->SmartTee->PreviewPin->AviMux->FileWriter
とつないだら、Runできずに

The graph could not change the state.
タイムスタンプがこのサンプルに設定されていません。(Return code:0x80040249)

と出て行き詰まっています。
知識不足でお聞きしたいのですが、
タイムスタンプがないのはバグなのでしょうか、
それとも当然の動きで設定になにか必要なのでしょうか・・?

もともと連続でファイルを区切って数秒間の音声付き映像をキャプチャできれば違う方法でもよく、
いちいちGraphBuilderを解放してまた作るとうまくいくことはいくんですが、
それでは解放と作成に時間がかかるのでもっと早くできる方法を探していて
上記155みたいな試行錯誤してます。

159 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 20:47:14 ]
>>158
previewピンからの出力にはタイムスタンプがつかないのがDirectShowのお約束です。

>いちいちGraphBuilderを解放してまた作るとうまくいくことはいくんですが、
QCAMのフィルタだけDisconnectして取り除いて作り直して挿入して接続するとか。

160 名前:デフォルトの名無しさん [2007/01/24(水) 20:58:38 ]
そうそう。そのタイムスタンプを付けないのがプレビユーピンなんだ。

で、なんでそうしろといったかと言うと
キャプチャピンとプレビューピン両方にレンダラ繋いで再生→停止を繰り替えすとわかる。
キャプチャピンに繋いだ方は画像が流れて来なくなる以前に5秒再生してたら5秒間固まる。
これはQCAMがタイムスタンプを初期化してないからだと思う。

多分自分でスタンプ情報作ってやればよかったと思うけどソースが会社なんだ…
コンブライアンスが厳しい



161 名前:155 [2007/01/24(水) 22:07:33 ]
>>159,>>160
ご返答ありがとうございます。
なるほど。
タイムスタンプが設定されていません。はPreviewPinより下流のFilterが発していたことがわかっていませんでした。(恐らくFileWriter?)
>キャプチャピンに繋いだ方は画像が流れて来なくなる以前に5秒再生してたら5秒間固まる。
まさにそのとおりです。
>多分自分でスタンプ情報作ってやればよかったと思うけどソースが会社なんだ…
>コンブライアンスが厳しい
っということは諦めるかタイムスタンプを自分で打つfilterを作るかでしょうか・・キビシイですね
とりあえず>>159さんの
>QCAMのフィルタだけDisconnectして取り除いて作り直して挿入して接続するとか。
をやってみます。


162 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 23:03:55 ]
外で携帯打つと手がかじかんでまともに文入力できてないな俺w
フレビューピン、コンブライアンスワラタ


163 名前:155 [2007/01/25(木) 08:21:37 ]
現在、問題がどういうわけか再現しなくなって直ってしまったので嬉しいような複雑な気分です。
たぶん(としかいえないのがつらいのですが)Qcam10.5をインストールした後に直ったと思われるので、
Qcam側の原因が自動的に解決されたのだろうと解釈しています・・
いろいろと本当にありがとうございました。

164 名前:155 [2007/01/25(木) 08:23:22 ]
>>162
携帯だったのですね
感謝してます

165 名前:162 mailto:sage [2007/01/25(木) 18:45:16 ]
最新のカメラドライバを入れる事でこの問題が解決されるのですね。
どうもありがとう。自分も試してみますm(__)m

166 名前:デフォルトの名無しさん mailto:あげ [2007/01/26(金) 20:48:07 ]
DirectSHOWと直接は関係ない質問かと思いますが、教えてください。

変換フィルタにてRGB24ビットのIMediasampleを扱っているのですが、
カメラから入ってきた画像に線を書いてレンダラに渡したいと思ってます。

DIB形式のBMP画像に直接線を描く関数を探しております。
なにが難しいと思っているかというと、デバイスコンテキストが得られない事で、「LineTo」などを代表するWinAPIが使えない事です。

みなさんはどのように画像の加工をしているのでしょうか?
やっぱりオーバーレイとかですか?

167 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 00:44:03 ]
生のRGBデータ配列を渡してHBITMAPを返すようなWin32APIがあったはず。
それをメモリデバイスコンテキストでセレクトしてやればGDIで描画できるんじゃないかな。




168 名前:デフォルトの名無しさん mailto:sage [2007/01/27(土) 01:10:27 ]
>>167
ありがとうございます。
www.greenwood.co.jp/~k-aki/pc/directshow_movie/directshow_movie.html#h-7
↑このページのレンダラ処理に>>167さんのおっしゃるようなことが書いてあったため
試して見ます
ちなみにこんなソース
// ビデオ ヘッダーへのポインタを獲得する。
const VIDEOINFOHEADER *pVideoHeader
= (const VIDEOINFOHEADER *)pMediaType->pbFormat;

// ビデオ ヘッダーには、ビットマップ情報が含まれる。
// ビットマップ情報を BITMAPINFO 構造体にコピーする。
ZeroMemory(&m_bitmapInfo, sizeof(m_bitmapInfo));
CopyMemory(&m_bitmapInfo.bmiHeader
, &(pVideoHeader->bmiHeader)
, sizeof(BITMAPINFOHEADER));

// ビットマップ ヘッダーから DIB を作成し、バッファへのポインタを獲得する。
HBITMAP hBitmap
= CreateDIBSection(0, &m_bitmapInfo, DIB_RGB_COLORS, &m_buffer, NULL, 0);
if(hBitmap){
m_hdc = CreateCompatibleDC(NULL);
SelectObject(m_hdc, hBitmap);

169 名前:デフォルトの名無しさん [2007/02/05(月) 11:52:49 ]
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/directx9_c/directx/htm/creatinganaudiocapturegraph.asp
ここを参考に、DirectShowLib + C#で、
waveレンダラを
マイク--> tee --> スピーカ(default audio renderer)
--> wavDest(wavFilter) --> file writer(sinkFilter)
なる構成で作ろうとしています。(GraphEditではできました。)
上記URLによるとcaptureGraphBuilderが使えないので、FindPinとフィルタグラフマネジャのconnectを使って
つなげていこうとしています。
しかし、実行時に、各Filterを作ってAddFilterをした後に、つなげる段階でエラーが出てしまいます。
エラーの出る場所
//wavDest(wavFilter) --> file Writer(sinkFilter)
wavFilter.FindPin("Out", out outPin);
sinkFilter.FindPin("in", out inPin);
graphBuilder.Connect(outPin, inPin);//ここでエラー0x80040217

他のフィルターの結合はすべてGraphEditによるデバッグ(?)で確認しましたが、
最後のファイル書き込み部分がつながりません。
なにかヒントをいただけたらよいのですがどうでしょうか・・



170 名前:169 [2007/02/05(月) 11:53:51 ]
ちなみに
wavFilterは
Guid id = new Guid("3C78B8E2-6C4D-11D1-ADE2-0000F8754B99");
Type comType = Type.GetTypeFromCLSID(id);
object comObject = Activator.CreateInstance(comType);
wavFilter = (IBaseFilter) comObject;

sinkFIlterは
sinkFilter = (IBaseFilter)new FileWriter();
sinkSetFilter = (IFileSinkFilter) sinkFilter;
AMMediaType mediaInfo = new AMMediaType();
mediaInfo.majorType = MediaType.Audio;
mediaInfo.subType = MediaSubType.PCM;
sinkSetFilter.SetFileName(sinkFileName, mediaInfo);
こんな感じでやっております。



171 名前:169 mailto:sage [2007/02/05(月) 21:45:12 ]
自己レスです。
sinkSetFilter.SetFileName(sinkFileName, null);
にしたらできました。
なんでやろ

172 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 19:24:44 ]
DirectShowのフィルタプロジェクトを作成できるアドインか何か、
むかしここかどこかに貼ってあった気がするんだけど、
誰か知りませんか?

173 名前:デフォルトの名無しさん [2007/02/07(水) 12:21:04 ]
>>172
「拡張ストアド プロシージャーDLL」
これで作っちゃだめなの?
自分はいつもこれで作って、
〇「proc.c」を削除
〇「stdafx.c」にStreamヘッダを追加
〇追加インクルード
〇モジュール定義
〇ライブラリ追加
をしていた。これがめんどいです?

174 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 13:28:32 ]
>>69
 有り難うございます。
 あちらで聞いた方が良かったですか。でも、今から同種の質問を飛ばすとマルチですし。
やはり、October 2004かsummer 2003ですか。試してみます。

私もVC6やめたいところですが、色々としがらみと要望がありまして。
未だにVC6の需要があるので困ります。

175 名前:174 mailto:sage [2007/02/07(水) 13:30:27 ]
すみません、DirectX初心者質問スレ宛を誤爆しました。

176 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 15:53:05 ]
>>173
ありがとうございます。めんどいとかじゃなくて
そのやり方を知りませんでした。
参考になりました。

177 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 16:14:12 ]
と思ったけど、2005には拡張ストアド〜がありませんでした。
Sampleを改造することにします。

178 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 16:17:44 ]
さがしてみたらここにありましたがVC6用でした。
hammer.prohosting.com/~arabo/DirectMediaWz.shtml

179 名前:デフォルトの名無しさん [2007/02/07(水) 19:02:10 ]
え〜2005無料版でもほとんど一緒なのあるよ
ぶっちゃけDLL作るプロジェクトならなんでも可

まぁ結局新規プロジェクトでフィルタ作れるようになってもサンプル改造に落ち着くんだけど

180 名前:デフォルトの名無しさん [2007/02/08(木) 08:58:22 ]
DirectShow使う開発で一番多く使われているプログラム言語ってVC2003かな?
VC6…DirectXサポート切れていて最新の盛り込みできない
VC2005無料版…リソースエディタがないため扱いづらい
VC2005…普及してる?
C#…これ自体存在が微妙
VB…本格的にやるには不向き
他…資料がなさすぎね??




181 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 11:44:35 ]
>>180
VC2005無料版はいろいろ難関がありそうだよね。
ただVC2003のプロジェクト(非DirectShow)をコンバートしただけなのに
PlatformSDKのセッティングとか初めてだと面食らう。

なぜかウチの環境だとPlatformSDKのツリーがVc7の下にあって・・・。

近いうちにVC2005導入予定だけど、普及の問題は別として開発しやすいのかな?

182 名前:デフォルトの名無しさん [2007/02/09(金) 00:09:39 ]
プログラムからビデオキャプチャを行わせることに挑戦しています。
プレビューで使われる画像サイズやフレームレートをプログラムから
指定する方法は無いでしょうか。

IVideoWindow等でウィンドウを小さくする等だと転送するデータは変わらないので
負荷が下がらないと思うので駄目だと思います。それとも変わるのでしょうか。

IPropertySetStorageで色々設定できるダイアログが表示されるが
これって使う人の立場で考えると
製品によってダイアログが違うので説明が大変だし
変にいじって品質を落としたりする可能性があって嫌なんだが
これしかないのでしょうか。


183 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 01:31:30 ]
>>182
自分でカメラの出力pinに対して要求だせばいいよ
MSDNのヘルプみるよろし


184 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 02:20:04 ]
>>183
プレビューが
[キャプチャ]->[レンダラ]
という接続なので要求の出し方わかりません


185 名前:183 mailto:sage [2007/02/09(金) 08:20:34 ]
×カメラ
〇キャプチャー

でした。誤解させてしまったかもしれませんすみません。
で、キャプチャのピンのプロパティーページにて解像度やフレームレートをかえられるのであれば

そのピンに対して「EnumMediaType」、メディアタイプの列挙型を受けとればよいです。
列挙型のなかにピン接続したいタイプがあれば接続させます。

私はフィルタ内制作ばかりやっているのでフィルタグラフ用の具体的な関数名までわかりませんが、「Free Mail」と言うSNSサイトにくれば過去ログに貴方と同じ質問の回答があります


186 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 13:29:55 ]
>>182
IAMStreamConfig

187 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 14:00:20 ]
私は流れ設定です

188 名前:デフォルトの名無しさん [2007/02/09(金) 19:51:15 ]
流れ設定ってなんですか?

189 名前:デフォルトの名無しさん mailto:sage [2007/02/10(土) 01:59:59 ]
IAMNewAboutDirectShow


190 名前:デフォルトの名無しさん [2007/02/11(日) 02:17:48 ]
YUVで映像が流れてるとき「IMediaSample」には
どんな形で入ってるんですか?
RGBTRIPLEしか構造体ワカランス(´・ω・`)



191 名前:デフォルトの名無しさん mailto:sage [2007/02/11(日) 23:20:45 ]
YUVにも色々あるわけだが

192 名前:デフォルトの名無しさん [2007/02/12(月) 00:04:10 ]
>>191
はい。IYUV、I420の2つでお願いします。
どちらもU値とV値が四分の一に圧縮されていてMediaSubTypeは違っていても中身は同じフォーマットだと思います。

193 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 01:29:29 ]
質問の意味が良くわからないが、IMediaSampleからデータにアクセスするには
IMediaSample::GetPointer(), IMediaSample::GetActualDataLength()というメンバ関数を通してバッファにアクセスできる。
ただし幅や高さなどの情報はAM_MEDIA_TYPEという構造体に収められていて、
これはIMediaSampleからは限定的な用途でしか取得できない。
その用途とはメディアタイプがダイナミックに変化したことをダウンストリームに伝えるという用途である。
そのため、IMediaSampleにはGetMediaTypeという気の利いた名前のメンバ関数があるが、
この関数を通してAM_MEDIA_TYPEが取得できるのはメディアタイプがダイナミックに変化した瞬間だけであり、
取得できるのは変化した後のメディアタイプである。
常に今流れているサンプルのAM_MEDIA_TYPEが取得することはできない。





194 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 01:47:42 ]
>>192
ネットで調べたところ、どうやらプレーンぽいなあ。

最初にYプレーン
次に縦横がそれぞれ1/2に縮小されたU
次に縦横がそれぞれ1/2に縮小されたV
となっているようです。


195 名前:デフォルトの名無しさん mailto:sage [2007/02/12(月) 06:07:34 ]
MSDNのドキュメントに普通にある

196 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 01:56:31 ]
SONYが設備投資を縮小だってね。
なにやってるんだかよくわからんよ。
このままだとVAIO部門も潰されるんじゃないか?
潰されたとしてNECあたりが買い取ってくれるといいけどね。

197 名前:デフォルトの名無しさん [2007/02/14(水) 22:02:18 ]
>>196
誤爆(^ω^)おつ

>>190なんですがMSDNと睨めっこしてたけどまだワカランス
>>193の内容は理解出来てるんだけどプレーンがわからんのだな。GetPointer()で映像の画素情報にアクセスできるんだけどプレーンってどうアクセスするの(`・ω・´)??

>>194
そう自分もググッたんでそれは大丈夫。IYUVは一画素にYに8bit、UVに2bitの計12bit使うほーまっと

198 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 22:58:43 ]
>>197
LPBYTE pY = GetPointer で得たポインタ。
LPBYTE pU = pY + width*height;
LPBYTE pV = pU + width*height/4;

Y値は pY から width*height バイト。
U値は pU から (width/2) * (height/2) バイト(縦横ともに半分の解像度ってこと)。
V値は pV から (width/2) * (height/2) バイト。
こんな感じ。UVは逆かもしれない。

パック形式のYUYVとかの場合は(4:2:2ってやつ)、UとVだけ水平解像度が半分で
UとVがYと交互に入ってる式。

>IYUVは一画素にYに8bit、UVに2bitの計12bit使うほーまっと
UVは4ピクセル辺り1バイトだから、8/4で2bitと言ってるだけ。

199 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 23:42:16 ]
>>198
ありがとう了解それがわからんかったです。


200 名前:194 mailto:sage [2007/02/15(木) 08:07:41 ]
>>197
なんだよプレーンの意味がわかってないのかよ




201 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 08:14:54 ]
うん。ビットマップみたいにピクセル毎に並んでるかと思ってた。


202 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:32:41 ]
DMOというのでフィルタを既に作ったんだけどさ
これって何かいまいちだね。

データを得られればとりあえずはいいので
サンプルグラバっていうのを使ったほうが簡単だったみたい。

でも微妙な動作が違うような。
まあ、既にリリースもしたし、いまさら作り直して挙動が変わるのは困るので
このまま突き進むしかない。

DMOだとピン接続決定とか切断とかわからないみたいだね。
ピン接続できるかの問い合わせがあるけど、
これにOkで答えてもその後同じ条件でまたピン接続できるか問い合わせがある。
接続したとか接続してないとかないみたい。

データの出力が能動的じゃなくて受動的なのもなんか作りにくいな。
DirectShowって難しい。

203 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 18:35:23 ]
DMOだけどさ
カテゴリにオーディオエンコーダってのを指定しているんだけど
接続できるか問い合わせされるときビデオ関係が含まれていやがんの。

別に問題ないけどさ。

204 名前:デフォルトの名無しさん mailto:sage [2007/02/18(日) 00:39:21 ]
サンプルグラバを使う道もそれなりに険しいと思うよ。



205 名前:デフォルトの名無しさん mailto:sage [2007/02/21(水) 00:47:18 ]
>>186
これでサイズ指定が出来ました。

使えないフォーマットがあるし
RGB555とかYUY2とかはどれ選んでいいのか(負荷の一番低いもの)わからないので
とりあえず設定ファイルに入れて変更可能にしといた。

プレビューがデフォルトで640x480になって高負荷になり
画像サイズ変更はプレビュー(レンダラ接続)前じゃないと変更できない
という不便さから解放されました。

206 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 12:06:13 ]
USBカメラではなくて、ネットワークの映像取り込みをしたいと思ってます。
ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/htm/selectingacapturedevice.asp
レベルが低くて大変恐縮なんですが、上記のページのようにすると
キャプチャのデバイスで、ネットワークカメラも選択できるようになるのでしょうか?

・USBカメラのプログラム作成すると、ネットワークカメラも
そのまま取り込み出来るのでしょうか?

・プログラミングも初級レベルなので、サンプルプログラム
などあると勉強しやすいのですが、本やサイトなどありますでしょうか。
USBカメラについてのサンプルプログラムは、いくつか見つかりました。

よろしくお願いします。

207 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 13:07:39 ]
206です。いろいろと検索しております。
ttp://homepage1.nifty.com/MADIA/vc/vc_bbs/200307_03070013.html
こちらにネットワークカメラについての制御の仕方について
少し書いてありました。

USBカメラのように一律なプログラムでなくて、
ネットワークカメラごとに、プログラムを変えないといけないのでしょうか。
なにを考えていけば、わからないのですが。
・ネットワークカメラごとのマニュアルを読んで、HTTPでネットワークカメラに
 接続、画像を取り込む
・そのあとは、USBカメラと処理が同じ
こんな感じなのでしょうか?

具体的なコードはまだわからないのですが、方針として
ネットワークカメラの制御が、HTTPだけですむなら、
USBカメラのプログラムで、画像を渡す部分だけ、
改造すれば大丈夫でしょうか。

スレ違いでしたら、誘導していただけますと助かります。
よろしくお願いします。

208 名前:デフォルトの名無しさん mailto:sage [2007/02/24(土) 23:27:29 ]
特殊なカメラ(業務向けの何十万もするような奴)で遠隔地で画像を取ってネットワークにストリームしてくれるカメラならあると思う。
そういう場合、そのカメラを操作するにはそのメーカーが提供するライブラリを使うことになるだろうね。
映像を受ける側はカメラ用のフィルタグラフではなくネットワークからのストリームを受信するような感じになると思う。

209 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 01:49:42 ]
>>208
お返事ありがとうございます。

livecaptureっていうフリーのすごいソフトありますが、
どうやって複数のネットワークカメラに、対応しているのか疑問でしたが、
メーカーさんが公開しているマニュアルを見て、プログラミングしてるのかもしれないですね。
通信の仕方をメーカーさんが、公開してないとだめなんですね。ふむふむ。。

210 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 14:22:29 ]
専用のカメラを使ってるね。その手のカメラは買えば当然遠隔操作のコマンドとかマニュアルが付いてくるはず。





211 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 10:33:36 ]
>>210
>当然遠隔操作のコマンド
付いてくるけど画像ストリームの仕様は無いのよ
とりあえずメーカーに問い合わせてみる


212 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 18:16:38 ]
っ自分で解析

213 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 01:19:35 ]
キャプチャデバイスのプロパティへアクセスするにはIAMVideoProcAmpや
IAMCameraControlがありますが、これらでサポートされていないパラメータへ
アクセスする方法はありますか?

具体的には、USB Video Classのサポートで追加された、

KSPROPERTY_VIDEOPROCAMP_DIGITAL_MULTIPLIER
KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENT

辺りへアクセスしたいんですが。(対象デバイスがそれらのプロパティをサポート
してるのは確認しています)
axextend.idlやstrmif.hのenumにはidが定義されていないし、WHITEBALANCE_COMPONENTの
NODE_S2タイプのアクセス関数(パラメータが2個あるタイプ)もヘッダに見つかりません。

これはカスタムで書くしかないんでしょうか。

214 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 13:54:19 ]
IKsPropertyとかなんかそんな名前のインタフェイスで出来ると思う。

215 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 02:00:42 ]
キャプチャボードからの映像信号に処理を加えて、それを表示するプログラムを作りたいと思い、
DirectShowの勉強を始めました。
一通り調べた結果、以下の事を勉強する必要があると思いましたが、他にも「これ知っとけ」
みたいなことがあったら教えてください。

〜既にある知識〜
C、Win32API、grapheditの扱い

〜これから学ぶべきと思うこと〜
C++、COM、自作フィルタの作成と登録の方法

216 名前:デフォルトの名無しさん [2007/03/01(木) 07:21:37 ]
俺も似たような事やってる…
概念理解が勉強の中心になると思う。ガンガレ〜

既に知ってるとは思うが、「BMP構造」を理解しておくとよいよ。

基本はBMP画像のぱらぱら漫画を加工する事になりますので。

217 名前:215 mailto:sage [2007/03/01(木) 14:07:11 ]
>>216
ありがとうございます。
BMPについてはWin32APIでいじり倒してきたのでいけると思います。
DirectShowについてはその仕様と情報の少なさに辟易していますが、
地道にがんばろうと思います。

218 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 17:23:44 ]
>>215
学ぶべきことがわかってるのはすばらしい!

ただし、下手に段階踏むと挫折しかねないので、
とりあえずサンプルコードからはじめるといいと思う。

「これで動くけど、なんでだろー?」って形で勉強するといいかも。

219 名前:デフォルトの名無しさん [2007/03/01(木) 21:52:11 ]
簡単なサンプル作ってあげよか?インプレイスフィルタとトランスフォームどっちの変換フィルタ使ったらいいか調べるだけでも最初は一苦労だろ

220 名前:デフォルトの名無しさん mailto:sage [2007/03/01(木) 22:30:27 ]
SDKのサンプルが一番いいよ



221 名前:デフォルトの名無しさん [2007/03/01(木) 22:44:15 ]
そりゃサンプルで自分も勉強したけど、映像の処理なら「コントラスト」、「RGB」この2つから入ると思う。
この2つを最初にみたとき何が最低限実装が必要なメソッドかわからんかった。
そんな意味でのもっとシンプルなサンプル

222 名前:215 mailto:sage [2007/03/01(木) 23:19:46 ]
>>218
ありがとうございます。
そうすることにします。
>>219
助かります!
是非お願いします!

223 名前:デフォルトの名無しさん [2007/03/02(金) 00:06:52 ]
>>222
ひとまず、君の使ってる環境を教えてくれ。
自分はVC6+DX8SDK、VC2003+DX9(オウガスト)
の2つの環境でやっとる

224 名前:215 mailto:sage [2007/03/02(金) 00:12:39 ]
>>223
了解です。
VC++2005Express + PlatformSDK + DirectX SDK (June 2006)

225 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 00:25:29 ]
www.geekpage.jp/programming/directshow/
www.geocities.co.jp/SiliconValley/7406/tips/dshow/
hammer.prohosting.com/~arabo/DirectShow.shtml
msdn.microsoft.com/library/ja/default.asp?url=/library/ja/DirectX9_c/directx/htm/directshow.asp

226 名前:デフォルトの名無しさん [2007/03/02(金) 02:37:07 ]
>>255
わかったよ。確かにそれみりゃわかるね。
甘やかすのは無用。勉強させろと無言のプレッシャーを感じる…。

227 名前:215 mailto:sage [2007/03/02(金) 03:03:29 ]
>>225
二つ目のサイト以外は既に目を通したものばかりですが、それでも難しいと思いました。
キャプチャの出力解像度を変えることすらできませんでした・・・。
とりあえずC++から地道にべんきょーします。

228 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 04:17:44 ]
あとアセンブラの知識が必要になることもあるな

229 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 08:49:03 ]
マジすか?アセンブラワカンネ。
そしてここはsage進行なんですね。マイナーだからageてました

230 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 08:53:36 ]
DirectShowの本見ると「この本はC++を3年以上やってる方を対象に書いてます」みたいな事が書いてありますね。
C++経験者でないときついのか。



231 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 15:09:51 ]
>>227
入門や概説を一通り読んだら、リファレンスを全部読むのを薦めます。

232 名前:213 mailto:sage [2007/03/02(金) 21:13:20 ]
>>214
色々調べて試したみたところ、IKsPropertySetが使えそうなのは判りました。
ただ、これでVideoProcAmpのプロパティへアクセスしてみたところ、
旧来のKSPROPERTY_VIDEOPROCAMP_BRIGHTNESSのようなFilterベースの
プロパティアクセスをサポートしているものはうまく動作しますが、
KSPROPERTY_VIDEOPROCAMP_WHITEBALANCE_COMPONENTのような
ノードベースのアクセスしかサポートされていないパラメータへはアクセス出来ないようです。
入力インスタンス構造体のFlagsにKSPROPERTY_TYPE_TOPOLOGYをつけて
Get()を使ってみてますが、正常終了するものの中身が0です。

旧来のパラメータもノードベースでアクセス出来るようなので試したみたところ、
入力インスタンス構造体をノードベース(KSP_NODE)ではなくフィルタベース(KSPROPERTY)で
見ているようです。
どうもIKsPropertySetはフィルタベースのアクセスしかサポートしていないのでは、と
推測してるのですがどうなんでしょうか。
IKsControlを使うべきなのかと思い試してますが、こっちはnot supportedのえらーコードが返ります。

233 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 21:25:17 ]
DirectShowは最初わかんないことだらけだったな。
今でもわかんないこと多いけど。
サンプルと手助けがないとつらいね。

234 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 22:02:35 ]
>>232
勘で書いてるんだけど、IKsTopologyInfo:, CreateNodeInstanceでノードを作って、
ノードの方から IKsProperty を QueryInterface で取得して、IKsPropertySet::Setで
プロパティをセットするんじゃないだろうか。


235 名前:デフォルトの名無しさん mailto:sage [2007/03/02(金) 23:55:00 ]
>>233
DirectShowは設計がマズイと思う。
フィルタグラフマネージャは自前でスレッドをもってユーザスレッドストリームスレッドとの切り離しをすべきだ。
いつの間にかメインスレッドから呼び出されていたりしてデッドロックとか多い。



236 名前:デフォルトの名無しさん mailto:sage [2007/03/03(土) 11:14:01 ]
>>235
ほんとそのとおりだね。
IBasedPin::Reciver内で別スレッド立ててアロケータ確保すると
うまくやらないとアボーンする。。

237 名前:215 mailto:sage [2007/03/03(土) 23:03:00 ]
>>231
ありがとうございます。
そうしてみます。

C++の入門書を一通り読みましたが、新しいことがいっぱいで疲れました・・・。
次はMSDNのリファレンスを読みます。
早くキャプチャソフト作りたいです。

238 名前:デフォルトの名無しさん mailto:sage [2007/03/04(日) 00:56:51 ]
>>234
切り離すモードと切り離さないモードがある。

239 名前:213 mailto:sage [2007/03/05(月) 22:24:32 ]
>>234
DDKやPlatformSDKの情報からみて、まさに指摘されてるようなことなんじゃないかと
思って試してみてますが、IKsTopologyInfo::CreateNodeInstance自体がエラーになるんですよね。

色々調べてみると、どうもWindowsXPでCreateNodeInstance自体が完全にサポート
されていない雰囲気がするのですよ。UVC extensionを調べててこんな情報がありました。

ttp://www.codecomments.com/archive421-2005-11-657282.html

自分のやり方が間違ってるかもとも思うんで、しばらく頭を冷やしてもう一度
試してみるつもりです。

240 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:27:24 ]
現在、キャプチャカードからのプレビューをモニタするソフトを作っておりまして、
キャプチャ(640×480出力)→ビデオレンダラ
というふうに繋いでいます。
ビデオレンダラでフルスクリーンにすると、4:3のアスペクト比を守りながら拡大してくれるのは
うれしいのですが、16:9ソースの表示にも対応するために、フルスクリーンの状態で
16:9にしたいです。
しかし、どうしてもできません。
描画されるビデオウィンドウはウィンドウズアプリのメインウィンドウに貼り付けているカタチです。
ソースは640×480を保ったまま、16:9にリサイズしてフルスクリーンにしたいです。
ご助言、よろしくお願いします。



241 名前:デフォルトの名無しさん mailto:sage [2007/03/05(月) 22:40:46 ]
>>240
ビデオレンダラーから(フィルタグラフからでもいいのか?)
IVMRAspectRatioControl、IVMRAspectRatioControl9 や IVMRWindowlessControl を取得して、
SetAspectRatioModeでアスペクトレシオを無視するようにする。

レンダラのサイズは自前で16:9にしておく。

242 名前:デフォルトの名無しさん [2007/03/05(月) 22:57:06 ]
変換フィルタを作成しているのですが、再生中にいきなりビデオのサイズが変わるような場合に、
再接続することなく対応したいのですが、レンダラへ新しい縦横サイズは教えてやれたのですが、
バッファサイズを変更できませんでした。
マニュアルには現在より大きなバッファサイズが必要な場合は、ReceiveConnectionを使えとありますが、
フィルタのどこにどのようなコードを追加すればよいのか分かりません。
デタラメな文章ですが、アドバイスありますでしょうか。。

243 名前:240 mailto:sage [2007/03/06(火) 00:47:31 ]
>>241
ありがとうございます!
まずウィンドウレスモードですが、試そうとしたところ、ビデオをウィンドウに転送するところで
強制再起動が掛かかるなど恐ろしいことになってしまったので、ちょっと置いておきます。
ウィンドウモードで作りこんでしまったこともあり、できればこのままで解決したいと思っております。

他の試みとして、IVMRAspectRatioControlをVMR7から呼び出してSetAspectRatioModeで
アスペクト比固定をしないよう設定したのですが、相変わらずアス比固定でフルスクリーン
になりました・・・。
GetAspectRatioModeで確認しましたが、ちゃんとVMR_ARMODE_NONEになっていました。
そこで、grapheditで調べましたところ、
ttp://vista.jeez.jp/img/vi7310912755.jpg
二つあるフルスクリーンボタンのうち、「Set Full Screen」のほうはアス比固定拡大、「Full Screen Window」
のほうは全体に引き伸ばして表示される、という結果になりました。
先に試したプログラムのほうでは、前者のほうになっているのではないかと考えられます。
後者の「Full Screen Window」ボタンを押すことと等価な処理としては何が考えられるでしょうか?

244 名前:240 mailto:sage [2007/03/06(火) 01:37:56 ]
ttp://msdn.microsoft.com/library/ja/directx9_c/directx/htm/usingwindowlessmodewiththevmr.asp?frame=true
ここのウィンドウレスモードの説明を見ていると、こちらのほうが良さそうですし、なんとか
ウィンドウレスモードで動くようにしてみます。

245 名前:デフォルトの名無しさん mailto:sage [2007/03/06(火) 15:01:49 ]
>>243
古来より DirectShow でフルスクリーン再生をする際には、
レンダラをフルスクリーンモードにするのではなく
単に全画面のウィンドウで再生する方が好しということになっています。
後者はそれでしょう。

246 名前:240 mailto:sage [2007/03/06(火) 16:27:28 ]
ウィンドウレスモードで解決しました!

>>245
なるほど、そういうことですか。

247 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 21:22:13 ]
二つのキャプチャデバイスが接続されているPC上で、ボタンをクリックする度に
IEnumMoniker::Next()を繰り返すことでキャプチャデバイスを切り替えるというプログラムを組んでいます。
デバイスが検出されなくなったら、IEnumMoniker::Reset()をして先頭から数えなおすように
しています。
一回の切り替えを細かく説明すると、
ストリームの停止→キャプチャフィルタの削除→上記メソッドで検出した新たなデバイスをグラフに追加
→ICaptureGraphBuilder2::RenderStream()でグラフをVMR9に直に接続→再生
という流れです。

これに問題がありまして、この切り替えを8回繰り返す(4順する)と必ず画面が最後のフレームを
表示したまま固まってしまいます。
考えられる原因や対処法がありましたら、ご教授お願いします。

248 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 02:22:27 ]
どこがデッドロックしているか調べるといい

249 名前:213 mailto:sage [2007/03/08(木) 03:23:24 ]
USB Video Classキャプチャデバイスのプロパティアクセスについて質問をしていた213です。
問題が度解決できました。この辺を触る人はあまりいなさそうですがご報告だけでも。

結論からいうと、IKsTopologyInfoを使ってKSNODETYPE_VIDEO_PROCESSINGノードを
検索し、そのノードからIVideoProcAmpインタフェイスをCreateNodeInnstanceで生成することで、
拡張されたプロパティへアクセス出来ました。(IAMVideoProcAmpやIKsPropertySetではなく)
IVideoProcAmpはノードベースのインタフェイスとしてvidcap.hで定義されてますが、
Vista用のWindowsSDKで配布されているバージョンでないと定義自体存在しません。
USB Video ClassがXPSP2以降のサポートだったのでPlatform SDK(2003R2)を使っていたのですが、
これがまず失敗でした。
また、NTDDI_VERSIONとsdkddkver.hを使い、XPSP2以降であることを明示する必要がありました。

あと細かい話ですが、MSDNやWindowsSDKのドキュメントには、IVideoProcAmpノードの
生成時にIIDとしてIID_IVideoProcAmpを指定しろ、と書かれてますが、こいつのオブジェクトが
どこにも存在せずリンクエラーになります。_uuidof(IVideoProcAmp)で指定しないと駄目な模様です。

250 名前:247 mailto:sage [2007/03/08(木) 17:52:00 ]
解決しました!
原因は二つ目のキャプチャデバイスをRenderStream()するときのみ、間に色空間変換フィルタが
挿入され、キャプチャフィルタを削除したときに色空間変換フィルタ、VMR9間のピンが持つ
アロケータにバッファがどんどん蓄積されていくためだったようです。
デバイスを切り替える度、VMR9との接続を切るようにすると、うまく動作するようになりました。



251 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 00:51:33 ]
フィルタをビルドするためにstrmbasd.libとstrmbase.libが必要なのですが、それを作成するための
ビルドがどうしてもできません。
お持ちの方がおられましたらお譲りください。
お願いします。

アップローダ
ttp://www.rupan.net/uploader/

環境
WindowsXP SP2
Platform SDK for Windows Server 2003 SP1
Visual Studio 2005 Express Edition

252 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 02:40:17 ]
baseclasses.sln をダブルクリックして開いてビルドを実行するだけだろ。

253 名前:251 mailto:sage [2007/03/09(金) 03:08:44 ]
>>252
いえ、最近になって.slnや.dswのファイルが付属しなくなりまして、makefileがついているんです。
それで
ttp://www.shader.jp/xoops/html/modules/xfsection/article.php?articleid=17
このページと同じように進めてもcl.exeが見つからないようなことを示すエラーが出て、
それじゃあとcl.exeのあるフォルダを環境変数のPathに設定してやると今度はmspdb80.dllが
見つからないと言われて失敗します。

254 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 04:01:11 ]
さすがマイクロソフト


255 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 04:16:23 ]
俺の所の 2006 9月版には、baseclasses.slnがあるけどな。
お前の最近は2年前か?

256 名前:251 mailto:sage [2007/03/09(金) 04:29:10 ]
>>255
え!?そうなんですか!?
ttp://www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en
ここのPSDK-x86.exeをダウンロードしてインストールしたのですが、違うのでしょうか?
>>255さんの入手経路を教えてください。

257 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 05:18:47 ]
blogs.msdn.com/windowssdk/

258 名前:251 mailto:sage [2007/03/09(金) 07:07:13 ]
できました!!
ttp://ugd555.blog1.fc2.com/page-13.html
同じ症状を解決した方のページを見つけました。
最終的に別のフォルダから5つファイルを持ってこなければいけませんでした。
この問題に18時間費やしました・・・

259 名前:251 mailto:sage [2007/03/09(金) 09:44:34 ]
早速、いろいろなフィルタサンプルのビルドを試してみましたが、どれもPC内に存在しない
ライブラリファイルが無い、と言われどうしようもありません。
そういえば、VC2005EEでDirectShowフィルタを開発したという話を聞いたことがありません。
ちゃんとしたVCを買え、ということでFAでしょうか?
もしそうなら、観念して買いに行きます・・・

260 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 09:45:26 ]
EEどうかは関係ない気がする、2005だといろいろ不便



261 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 16:37:13 ]
いい加減最新のSDKダウンロードしろ。うざい。

262 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 16:42:53 ]
>>259
初心者スレにでも行け
DirectShowスレで語るべき内容ではないだろ

263 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 01:13:37 ]
どんな内容なら語ってもいいのですか?玄人の>>262さん。


264 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 02:25:22 ]
>>251>>263みたいな質問以外ですな

265 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 05:35:57 ]
キャプチャフィルタ→変換フィルタ→色空間変換フィルタ→VMR9
という構成の中の変換フィルタで、キャプチャフィルタからサンプルが1枚くる度に
サンプルに対し処理Aを実行→出力→表示
サンプルに対し処理Bを実行→出力→表示
というように2回の処理、出力を行いたい(フレームレートを倍化したい)のですが、
どうすればよいでしょうか?
なお、キャプチャ出力のフレームレートは上限に設定しています。
タイムスタンプをいじるだけではうまくいきませんでした。
IMemInputPin::Receiveを使うにしても、それを呼び出す頻度をどのようにすれば
合わせられるかが分からずできません。

266 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 07:16:47 ]
出力ピンのメディアタイプのレートを2倍に設定して、サンプルを1つ受け取ったら2つ出力すればいいのでは

267 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:46:39 ]
タイムスタンプは修正してやらないと駄目だろう。
仮にキャプチャフィルタが30f/secで投げてくるなら0.033...秒間隔のスタンプが設定されているだろうから
自分でつくる変換フィルタは2枚目に0.033.../2秒のタイムスタンプを足して設定してやる。
んで自分が出力ピンからDeliverするときに、自分で送りたい2枚分、下段の入力ピンReceiveを呼ぶ。
2回送信完了してから、上段にDeliverの結果を返す。

268 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 17:49:27 ]
pc11.2ch.net/test/read.cgi/tech/1168354839/
の658です。
たぶんこっちで質問したほうがいい気がしたので。

何度やっても同じところ(CopyMemory)で落ちます。
原因として思い当たる件があったらご教示願います。

269 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 18:11:41 ]
サイズチェックくらいしろ。
24bit以上のソースなら、BITMAPINFOHEADERだな。

270 名前:268 mailto:sage [2007/03/10(土) 18:21:52 ]
>>269
つまり、サイズが足りないということでしょうか?



271 名前:268 mailto:sage [2007/03/10(土) 19:24:59 ]
サンプルファイルを出力したところ、24bitであることは確認しました。
どこが悪いんでしょう?

272 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 19:32:55 ]
>>268

これか、
CopyMemory( &BitmapInfo.bmiHeader, &(pVideoHeader->bmiHeader), 
                sizeof(BITMAPINFOHEADER));

探すの面倒だから直リンして欲しいな。
pc11.2ch.net/test/read.cgi/tech/1168354839/658

コピー先と、コピーするサイズとか確認してみれば。

&BitmapInfo.bmiHeader が有効なメモリを指してる?
&(pVideoHeader->bmiHeader) が有効なメモリを指してる?
sizeof(BITMAPINFOHEADER) これはあっていると思うけどさ。


273 名前:268 mailto:sage [2007/03/10(土) 19:37:59 ]
&BitmapInfo.bmiHeader:1000E380
&(pVideoHeader->bmiHeader):30
むう?

274 名前:268 mailto:sage [2007/03/10(土) 19:41:33 ]
Bitmapinfoをローカルにすると
&BitmapInfo.bmiHeader:12F044
&(pVideoHeader->bmiHeader):30
&BitmapInfo.bmiHeaderが怪しいですね。

275 名前:268 mailto:sage [2007/03/10(土) 19:42:42 ]
で、怪しいのはわかったんですが対処方法がわかりませんorz

276 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 19:49:11 ]
何かおかしいときはリビルドすると直ったりするんだよ

277 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 19:50:18 ]
ヘッダに書いただけで動かなくなるとは思えないしさ!

278 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 19:51:15 ]
>>276
もう8回くらいリビルドしてますorz
手動でbmiHeaderを初期化したりしてもダメでした。

279 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 20:06:49 ]
初心者スレに戻りなはれ

280 名前:268 mailto:sage [2007/03/10(土) 20:09:10 ]
そうします。orz



281 名前:265 mailto:sage [2007/03/10(土) 23:31:42 ]
>>266
その方法を試すために、まず出力ピンのメディアタイプを取得しようとしたのですが、
原因不明のエラーが出ます。
何がまずいのでしょうか?

HRESULT (作成した変換フィルタクラス名)::Transform( IMediaSample *pIn , IMediaSample *pOut ){
    
    ・・・

    //出力ピンのメディアタイプを探す
    IEnumPins *pEnumPins;
    IPin *pPin;
    PIN_DIRECTION PinDirThis;
    AM_MEDIA_TYPE *pmt;

    this->EnumPins( &pEnumPins );
    pEnumPins->Reset();
    while( pEnumPins->Next( 1 , &pPin , NULL ) == S_OK ){
        pPin->QueryDirection( &PinDirThis );
        if ( PinDirThis == PINDIR_OUTPUT ){
            pPin->ConnectionMediaType( pmt ); ←定義されてないのに使ってるというようなエラー
        }
    }
    DeleteMediaType( pmt ); ←上と同じエラー

    ・・・

}

282 名前:265 mailto:sage [2007/03/10(土) 23:36:19 ]
>>267
タイムスタンプ修正は行えるのですが、下段の入力ピンのIMemInputPin::Receiveを
どのようにすれば呼び出せるのかが分かりません。
>>281で示したようなコードでIPinクラスは取得できるのですが、
ttp://msdn.microsoft.com/library/ja/jpdx8_c/ds/ref/class/CBaseInputPin.asp?frame=true#CBaseInputPin
ここを見ると、IMemInputPinはIPinの子クラスなので、それに実装されているReceiveメンバに
アクセスできません。
ご教授願います。

283 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 00:38:34 ]
トランスフォームフィルタのソースがベースクラスとして公開されてるんだから勉強するといいよ
CTransformFilter、CTransformInputPin、CTransformOutputPinね
入力サンプルがどう入ってきてどこで変換してどうやって出て行くのか
更にしたのベースクラスの知識も必要になるだろうけどさ

既に下段に接続してる相手のメディアタイプが欲しいなら
出力ピンのCurrentMediaTypeでいいだろ

284 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 01:14:56 ]
>>282
m_pOutput->Deliver するだけでOK

285 名前:265 mailto:sage [2007/03/11(日) 03:49:55 ]
>>283
ありがとうございます。
m_pOutput->CurrentMediaTypeでメディアタイプを取得し、pbFormat(VIDEOINFOHEADER)内の
AvgTimePerFrameを変更してやることでフレームレートの変更を試みてみました。
しかし、今まで通りの10000000/29.97[100ns]であれば下流のフィルタ(色空間変換フィルタ)に
繋がるのですが、倍の10000000/59.94[100ns]では接続できませんでした。
残念ながら対応していないようです。

286 名前:265 mailto:sage [2007/03/11(日) 03:50:22 ]
>>284
ありがとうございます。
一枚のサンプルに対し二度出力できるようになりました。
しかし、fpsがきれいに倍化する期間と倍にならない期間が移り変わってうなりのようになっています。
二度の出力中、一枚目のスタートと二枚目のエンドのタイムスタンプはいじっていないので、
そこでの同期は保障されていると思ったのですが・・・
どのようにすれば改善できるでしょうか?
一枚のサンプルに対して行う処理を以下に示しておきます。

//一枚目の処理
・・・
// 入力サンプルのタイムスタンプを取得する
pIn->GetTime( &TimeStart , &TimeEnd );
//エンドタイムを1/59.94[s]早める
TimeEnd -= 166833; //[100ns]
pOut->SetTime( &TimeStart , &TimeEnd );
//下流フィルタにDeliverする
m_pOutput->Deliver( pOut );

//二枚目の処理
・・・
// 入力サンプルのタイムスタンプを取得する
pIn->GetTime( &TimeStart , &TimeEnd );
//スタートタイムを1/59.94[s]遅くする
TimeStart += 166833;//[100ns]
pOut->SetTime( &TimeStart , &TimeEnd );
//下流フィルタにDeliverする
m_pOutput->Deliver( pOut );

287 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 05:56:40 ]
>>266 でも書かれているが、GetMediaType時にAvgTimePerFrameの時間を半分にして接続を完了させればいいんでね?

部分的コードなのでわからないが、サンプル使いまわしたりはしていないよね?

288 名前:265 mailto:sage [2007/03/11(日) 09:37:13 ]
>>287
試しに
AvgTimePerFrame /= 2;
としてみましたが、やはり受け付けませんでした。
AvgTimePerFrame /= 1;
だったら大丈夫です。
>サンプル使いまわしたりはしていないよね?
他の方が作られたサンプルを使いまわししてます。
ですが、Transformメソッドをいじるだけくらいのシンプルな変換フィルタでして、その処理部分に関しては
すべて書き換えています。

289 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 11:18:23 ]
タイムスタンプの変更は問題ないです。EndTimeが0で来る場合もあるのでチェックして下さい。

> Transformメソッドをいじるだけくらい
CTransformFilter::Receive内でもDeliverしてるからな。その辺り大丈夫だよね?

文面から察するに
OutputPin::CurrentMediaTypeでメディアタイプ取得できるってことはピンが繋がっている状態なのだが
一旦Pin接続解除した後にフレームレート倍のメディアタイプを色変換に提示(OutputPin::GetMediaTypeで設定)して
再接続を試みてるんだよね?

290 名前:265 mailto:sage [2007/03/11(日) 11:56:35 ]
>>289
>EndTimeが0で来る場合もあるのでチェックして下さい。
チェックしてみましたが、EndTimeが0で来る様子は見られませんでした。
>CTransformFilter::Receive内でもDeliverしてるからな。その辺り大丈夫だよね?
どうなんでしょう・・・影響があるかは判断しかねます・・・
メディアタイプ変更の件ですが、グラフエディタ上で接続が断たれた状態からピンを繋ごうとしたとき、
キャプチャフィルタのメディアタイプから変更しなかった場合は成功し、変更すると失敗する、というかんじです。

フレームレートの不安定ですが、もしかしたら処理負荷が大きいためかもしれません。
表示ウィンドウのサイズを大きくする(ネイティブサイズは同じ)とフレームレートが落ちていきます。
CPUの使用率は60〜70%ですが、VMR9側の問題でこのようなことになっているのかもしれません。

この負荷の原因として、変換フィルタとVMR9との間に挟まっている色空間変換フィルタが挙げられます。
キャプチャフィルタから直接VMR9に繋ぐときは介在せず、CPU負荷も小さいです。
ところが、同じメディアタイプを設定しているにも関わらず、変換フィルタを挟むと、その後に色空間変換フィルタ入ってきます。
キャプチャから直接VMR9の場合はシステムメモリは介さず、直接ビデオRAMに移す、というようなことでもしているから
こんなことになるのでしょうか?
もし変換フィルタから直接VMR9に繋げられるような方法がありましたら教えてください。



291 名前:268 mailto:sage [2007/03/11(日) 16:50:34 ]
別のソースを元にいろいろいじってたんですよ。
(そっちのソースはCopyMemoryで落ちないので)
で、そっちのBitmapInfoのbmiHeaderを調べてみたところ、他の値は想定の範囲内なんですが
BitmapInfo.bmiHeader.biCompression = 1685288548
とdでもない値が入っていて、どうやらこいつが原因だと判明。

これって何なんでしょ?
ぐぐったらdvsdとか出てきたんですがよくわかりません。

292 名前:268 mailto:sage [2007/03/11(日) 16:54:12 ]
ちなみに
BitmapInfo.bmiHeader.biCompression=BI_RGB;
なんてことをやると一応動くようにはなりました。
ただ取得できる値がおかしいので正確に動いてる感じではありませんが。

293 名前:268 mailto:sage [2007/03/11(日) 17:04:27 ]
取得部分は以下のような感じです。
void Cam::getImage()
{
HRESULT hr;

// ビットマップ ヘッダーから DIB を作成し、バッファへのポインタを獲得する。
hBitmap = CreateDIBSection(0, &BitmapInfo, DIB_RGB_COLORS, (void **)&buffer, NULL, 0);
firstDIB = FALSE;

// イメージをバッファにコピーする。
DIBBuffer = (long *)GlobalAlloc(GPTR,bufsize);

hr = pGrab->GetCurrentBuffer(DIBBuffer,NULL);

hr = pGrab->GetCurrentBuffer(DIBBuffer,(long *)buffer);

}

AVIを無理やりBITMAPにしているから無理が生じているような予感がちらほら。

294 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 18:34:30 ]
帰れといっただろ

295 名前:デフォルトの名無しさん mailto:sage [2007/03/11(日) 18:42:48 ]
>>290
レンダラに直接接続したければ、すべてのフォーマットを出力で対応する必要がある。
まあでも32bitでだいたいの環境はいける。

接続できなければレンダラが対応していないのだろう。正しい接続の仕方ならばね・・・。

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年目だけど苦労したができたぞ。
で、何がしりたいんだぼけぇ

397 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 22:32:34 ]
・質問のただしいしかた悪いしかた
【いい例】
ぽまえら!おしえやがれぃい。
QVGAをVGAにリサイズしようと思うんだがDecideBufferSizeというめそで
115200byteしかとれねええんじゃUZEEEEEE!!
これを230400byteとれるようにする方法を教えやがれ

【悪い例】
いつも大変このスレッドを読ませていただき参考にさせてもらっております。
今回拡大縮小をやりたいのですがどのようにしたらいいかわかりません。
C++、MFCはできます。
また自分は過去XXXということをやっておりました。
大変恐縮ですがなにとぞご指導をよろしくお願いいたします



398 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 22:37:54 ]
まちがえた〜
×115200
○230400

×230400
○460800
用は質問の観点を絞り込んでくるかどうかの差だからな


399 名前:デフォルトの名無しさん mailto:sage [2007/04/03(火) 23:59:22 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<>>396 ポンドルウォーリアを特殊召喚する方法がしりたいぞ。
  ヽ    |フ ナニがしたいのか忘れたぞ!
   /_ _| AVIを半分の解像度にして保存したいんだぞ!これが目的だぞ。
        逆もあるぞ。オパンツ丸見え!
>>397 うんこちんこまんこ?キョカカカ!あばーあばばー!
参考にさせてもらったぞ。面倒だから、ゴゾブログで質問に答えてくれればそれでいいぞ。
オマンコクロッサー!

400 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 00:59:12 ]
・・・>>397で極端に書いたのに意味を理解しとらんのでヌルーする



401 名前:デフォルトの名無しさん [2007/04/04(水) 01:28:29 ]
メディアタイプチェックフィルタ
作ったぞ

実は裏で機能をいろいろ盛り込んでみたが、
普通の使い方だけしてくれ。

zetubou.mine.nu/itoshiki/upload.cgi
っ【 [zetubou6474.bin] メディアチェックフィルタ 96 application/octet-stream 2007年04/04(水)01:25
これをリネーム
⇒0Mediachk.ax
それをregsvr32で登録

402 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 01:52:35 ]
ここはム板だ

403 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 08:59:19 ]
ゴゾブログのプロフ欄の写真の子カワイイ。
写真と引き換えならオニーサンがAVI半分にするフィルタ作ろう。(ただしソースはやれないがな)

404 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 14:50:04 ]
www.free-codecs.net/Moonlight_Scalar_DirectShow_Filter_download.htm

405 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 16:48:36 ]
>>404
このムーンライトフィルタってさ、カメラがI420の時は接続すらしてくれないんだね。

解像度もメディアタイプも変更してくれるいいフィルタだと思ったんだけど残念

406 名前:359 mailto:sage [2007/04/04(水) 17:35:35 ]
>>401(>>360の人?)
ありがとう、ダウンロードしてみました。
個人的には結構重宝しそうな感じです。

407 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 18:23:20 ]
>>360=>>401
です。

ちゃんと動きましたか?
バグを見つけたら速やかに報告よろ。

時間見つけ次第ちゃんとウェブページに反映しとくです。
感謝されるのに生き甲斐を感じた。ありり

408 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 19:27:31 ]
CBaseVideoRendererでフィルタを作っていて、一時停止中に画面の再描画を
行うためGetCurrentSample()でサンプルを得ています。
サンプルの取得は成功しているのですが、このあとに再生するとDoRenderSample()が
呼ばれなくなって固まってしまいます。

どうしてでしょうか?

409 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 20:04:25 ]
>>408
Releaseし忘れっぽい

410 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:07:23 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<ただいまんこ〜拡大縮小できたぞ。BokkingFilterの完成だぞ。
  ヽ    |フ ビデオのサイズが変わらなかったのはフィルタ接続後にサイズ変えてたからだぞ。
   /_ _|
CheckTransformでサイズを変更したぞ。
変更したサイズからRGB24で必要なバッファサイズを計算して保存だぞ。
ストレエッチDIBitmapだぞ。それに対してソースからストレッチDIBitsして
完成したぞ。

そして完成した後に次の問題が出たぞ。
時間指定して3分の動画で1分目から2分目を抽出したいんだが
ControlStreamにS_OK帰ってきてもダメポだぞ。

AVI再圧縮で時間指定して抜き出すテクを知ってたら教えて欲しいぞ。オマンコクロスだぞ。切実だぞ。



411 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:12:04 ]
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<あと、AVI MuxフィルタをキャプチャグラバからFindInterフェラして
  ヽ    |フ IAMStreamControlを生み出してStartAtとStopAtする方法を作ったんだが
   /_ _|  ム圧縮AVIなら何とか成功してWMVとかコーデック使うと画像が表示されんぞ。
あと、保存してない間も無駄に待たされて酷い目にあったぞ。
誰かオレがナニをすべきか教えて欲しいぞ。

412 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 21:36:48 ]
ControlStream(&PIN_CATEGORY_CAPTURE,ぬるぽ,ぬるぽ,開始時間,終了時間、0,0);
    ⊂⊃
★  ∧η∧
 \_(,,・Д・)<キャプチャビルダのコントロールストリームはこんな具合になってるぞ。
  ヽ    |フ オマンコクロスだぞ。ソースを持って変えれないので具体的に説明できんぞ。
   /_ _|

413 名前:408 mailto:sage [2007/04/04(水) 22:46:10 ]
ありがとうございます。
まさにそれでした。SDKのヘルプに書いてありましたね

414 名前:デフォルトの名無しさん mailto:sage [2007/04/04(水) 23:23:04 ]
>>410
素直にこれ使えば?
www.microsoft.com/japan/msdn/directx/techart/cplusvbappdevs.aspx
www.microsoft.com/japan/msdn/directx/techart/wm_des.aspx


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

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

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


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

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

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




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



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


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

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

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

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

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

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

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

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

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

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

これ本当?

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

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

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

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

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

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


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

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

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

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

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

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




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

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

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

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

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

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

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

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

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

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

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

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


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

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




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

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

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


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

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

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

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

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

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

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


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

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

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

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


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

・・・ポカーン

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



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

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

初心者質問すいません。

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

をやっといた方がはやい

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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



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

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


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

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

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

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

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

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

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$てめえやる気あんのか?殺すぞ

516 名前:デフォルトの名無しさん mailto:sage [2007/05/29(火) 06:00:31 ]
>>515
真偽の程が全く不明な一文にそこまで熱くなれるのもすげえな

517 名前:473 mailto:sage [2007/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を継承してメソッド書いてるだけだったのでわかりやすかったです)
色々ありがとうございました。次は音を取得するのに挑戦しまつ ヽ( `・ω・)ノ

518 名前:デフォルトの名無しさん [2007/06/01(金) 16:33:46 ]
test

519 名前:デフォルトの名無しさん mailto:sage [2007/06/01(金) 17:49:21 ]
DirectShow編集サービスでWMV9のAVIファイル作ろうとしてるんだけど、
エンコードパラメータの設定がうまくできません。
IAMVfwCompressDialogsで出したダイアログだと、変更が反映されないし。
かといってWMV9フィルタの出力ピンからIAMStreamConfigをqueryしてGetFormatするとエラーになります。
AviUtilだとうまくやっているみたいなんですが、やり方が間違ってるんでしょうか・・・

520 名前:デフォルトの名無しさん [2007/06/10(日) 04:56:19 ]
           __
         /:::::::::::::`ヽ_    _
  n      /::::::::::::::::::::::::::l   l L_
,─' ヽ_    _|::::::::::::::::::::::::/)  /   _彡__
三_  ヽ、 l/::::::::::::::::::::::::ヽ / ∠, - 、:::::::\
    `丶、 `/::::ノT` ^ 'l´l:::::|´ /(・|・)) |::::::::::::ヽ
      `ヽW ̄     ̄W /ヽ、_●_/ \::::::::l
        `1  l ヽ  /'´`\_|__三、ヽ::::|
         l  /    / |  __       | l:::l
         l      |__\(  ヽ-'"´)  //:/
         /  ,    |::::::::::ヽニ二二ニ_∠_'/__
         |  l    /つ 、/(〒) ヽ::::::::::::::::::





521 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 23:23:28 ]
すいませんが教えてください。
この↓を参考にしてMFCで動画再生アプリを作っているのですが、
ttp://www.geekpage.jp/programming/directshow/setnotifywindow.php
DirectShowで動画再生しているウインドウが、別のウインドウの陰に隠れてから
手前に表示されたときなどに再描画されません。
再描画するにはどうすればいいですか?

522 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 23:34:50 ]
ビデオウインドの親ウインドでWM_ERASEBKGNDをDefaultWindowProcに渡さない。

523 名前:デフォルトの名無しさん mailto:sage [2007/06/10(日) 23:50:53 ]
>>522
できました。ありがとうございます

524 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 22:13:25 ]
まさかだが、>>520 は DirectShow にかけたネタなのか?

525 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 22:36:29 ]
どらえもんだとおもいます

526 名前:デフォルトの名無しさん mailto:sage [2007/06/11(月) 22:43:54 ]
直見せというか、モロダシ?

527 名前:デフォルトの名無しさん [2007/06/12(火) 07:31:58 ]
ドラえもんShoWです。
スマンむしゃくしゃしてやった。
今は反省してる

528 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 10:11:14 ]
静ちゃん・・・

529 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 21:39:31 ]
静ちゃんは原作名だよね。
原作も途中からアニメに合わせて「しずかちゃん」になってる。

最近にふにふ動画やようつべを見てるんだけどフレームレート変更フィルタ作れば「速聞」みたいなサービス作れるかな

530 名前:デフォルトの名無しさん mailto:sage [2007/06/12(火) 21:49:48 ]
最近ようつべてw
いつの人間だよ



531 名前:デフォルトの名無しさん [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)━━━━┥ |___|


532 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 00:31:23 ]
Platform SDK インストールしたけど、GraphEdit入ってなかった

533 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 06:58:35 ]
>>532
C:\Program Files\Microsoft Platform SDK for Windows Server 2003 R2\Bin\graphedt.exe

534 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 14:14:45 ]
カメラって暗くなると露光を変化させるためにフレームレートがころころかわるやん?
フレームレートを一定にするフィルタを作った人いる?


535 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 15:54:38 ]
>>533
あ、あった。さんきゅー
スタートメニューにショートカット作ってよねー

536 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 16:27:00 ]
フレームレートがころころ変わる??

537 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 00:43:24 ]
>>536
うん。そのカメラの最低露光付近で以下を調べる
「カメラ」-「レンダラ」
の接続で「レンダラ」のプロパティ「品質」タブ
平均フレーム率が明るさで変化するのがわかるよ


538 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 00:51:45 ]
操作説明する前に何の設定をしている場面なのかを言ってくれ
我々はエスパーじゃないんでね

539 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 02:49:07 ]
確かにそういうカメラもあったような気がする。
っていうか安物のカメラは結構フレームレートいい加減だったりする



540 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 02:58:43 ]
>>537
「そのカメラ」ってどのカメラよ?



541 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 03:47:55 ]
つかカメラやらタブやら、話が唐突すぎるし悪文だしで理解不能


542 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 08:57:09 ]
プロパティ「品質」タブってグラフエディットでの話か?
だとしたらあれはソースそのもののフレームレートではないよ?
俺ならよくわからん糞カメラだけのためのフィルタなど作る気にはなれないな

543 名前:デフォルトの名無しさん [2007/06/17(日) 16:58:49 ]
まあ作ってやってもいいが、ここから先はビジネスになるよ

544 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 17:22:39 ]
たぶんグラフエディットのことだろうね。

ところでソースそのもののフレームレートじゃないっていうのはどういうこと?
レンダラが捨てるって事?


545 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:00:33 ]
>>543
まじで?たのむ っI

>>544
ソースフィルタが一定間隔に絵を出してこなくなるということだよ
レンダラが捨てるわけではないみたい

546 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 18:32:00 ]
>>545

>ソースフィルタが一定間隔に絵を出してこなくなるということだよ
>レンダラが捨てるわけではないみたい
つまりソースフィルタが実際に出力しているフレームレートだよね。
それが明るさで変動するね、って話だったと思うんだけど。


547 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:12:30 ]
>>546
うん。その話です。

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

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

どなたか作成した人はいらっしゃいませんか?

548 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:21:29 ]
>>544
メディアタイプとしてののフレームレートってことだとおもう。
レンダラのレートはレンダラが表示できてるレートってことじゃね?
デコーダがうんこだったりPCすぺっくがうんこだと激低かと

549 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:26:05 ]
カメラって何だ?デジカメ?かむコーダ?
記録するフォーマットは何よ?グラフ構成は?DirectShow経験有り?
出すべき情報が出てない感じ。

550 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 19:36:52 ]
>>549
カメラ・・・USBカメラ(Qcam)を想定していただければいいです
記録フォーマット・・・なし。記録してもしなくてもよし。
グラフ構成・・・ソースフィルタのみ。
        ただ、見るために「ソース」-「レンダラ」でお願いします
Directshow経験・・・およそ3ヶ月。画像関係の変換フィルタ作成ならわかるくらい

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

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





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


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

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



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

[ソース]-[レンダラ]はダイレクトで繋がるの?メディアタイプはRGB?
本来期待されるべきフレームレートはいくつですか?
ソースが吐き出すタイムスタンプ確認してみた?てんでバラバラの間隔だったのかな

553 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 20:24:27 ]
>>552
ご回答ありがとうございます。
「タイムスタンプにて・・・の件」
DirectShowのフィルタ同士の動きはイベントドリブンです。
なので、スレッドを立てて別レートで処理するシステムを考えました
>「ソースフィルタ」-ここ6fps-「レート安定フィルタ」-ここ15fps-〜
私のコーディング技術の問題でレート安定フィルタ以降のアロケータを6fps以上で
使うとロックしてしまいうまくいきません。

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

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

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

>ソースが吐き出すタイムスタンプ確認してみた?てんでバラバラの間隔だったのかな
う〜ん。どのカメラでやったか定かではないのですがQcamかbuffaloのカメラでは
バラバラでした。自分でも少々不確定なので試していないということでお願いします

554 名前:デフォルトの名無しさん mailto:sage [2007/06/18(月) 16:38:27 ]
ちょっと前のFPS倍化の話と同じじゃん。
つーか、サンプルのレートばらばらでも動くように作れよ。

555 名前:デフォルトの名無しさん [2007/06/18(月) 22:19:44 ]
VMR9でのデインターレースについて調べてるんですが、デインターレース
について何も設定しなければ、デフォルトの設定でデインターレースが有効
なってるんでしょうか?
テストプログラムで調べてるんですが、VIDEOINFOHEADER2のdwInterlaceFlags
が必ず0になってるんで、デインターレースの設定のしようがないんですが・・・

556 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 14:35:18 ]
>>555
>VIDEOINFOHEADER2 の dwInterlaceFlags が必ず0になってるんで

「なってるんで」ってのは意味不明だな。0 ならインターレース解除は行われない。
まともな MPEG2 デコーダーでインターレース物のファイルをデコードすれば
適当な値が入るはず。

557 名前:555 mailto:sage [2007/06/19(火) 16:38:40 ]
>>556
そのメディアが確実にインターレースであると確認する方法がないんですよ。
(見た目ではインターレース縞は確認できるけど)
今、手元にあるDVD数種からVOBをそのままコピーして拡張子をmpgに変えて
テストしてるんですが、InterVideo、Mainconcept、ffdshowどれも0でセット
されてますね。InterVideoはデコーダがインターレース解除じているように
見えますけど。



558 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 17:10:25 ]
ffmpeg でのビデオの設定で、インターレース解除はオフに(チェックを外す)、
出力で「オーバーレイミキサーを使用する」「ハードウェアインターレース解除」をオンに、と設定してみて。


559 名前:555 mailto:sage [2007/06/19(火) 18:07:20 ]
>>558
ありがとうございます。ffdshowでそのような設定にしたところ、
dwInterlaceFlagsに0以外が設定され、VMR9初期状態のデインターレスモード
がGUID_NULLから変化しました。何も設定しなくても、インターレース
ストリームが繋がればデインターレースが有効になっていることが確認でき
ました。「ハードウェアインターレース解除」をオンにするっていうのは
レンダラーにインターレースストリームであることを通知するって意味
だったのね。(わかりにくい)


560 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:32:28 ]
ハードウエアインターレース解除をONってのは
ハードウエアでデインタレースするって意味だが。
あとオーバーレイミキサを使用したらVMR9はつながらないということはない?



561 名前:555 mailto:sage [2007/06/20(水) 00:51:24 ]
>>560
VMR9に繋がってますねぇ。まあ、ffdshowのその設定のとこのバルーンヘルプを
見ると、VIDEOINFOHEADER2ヘッダを使用するかどうかって設定らしいので、
VMRと繋がるかどうかは関係ないんじゃないかな。
あと、ハードウエアインターレース解除をONにしないとdwInterlaceFlagsに0
を入れてくるので、VMRにハードウェアデインターレースさせるって意味みたいね。



562 名前:デフォルトの名無しさん [2007/06/20(水) 01:44:55 ]
フリーMLの方にも同じ質問してない?あっちにも途中経過報告よろ。

563 名前:555 mailto:sage [2007/06/20(水) 02:45:26 ]
>>562
あい、あっちにも報告します。

その後、ひとつ確認ミスがあったので、報告を。
InterVideoは自前でデインターレースしているのではなく、VMR9のデインター
レースを有効にしているようです。InterVideoはなぜかデバッグモードでアプリ
を起動すると、接続を拒否するようです。(デバッグトレースを見られるのが
いやなのかな)それで、InterVideoが繋がってるつもりで、実はMaincncept
が繋がっていたという落ちでした(^_^;)


564 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 00:45:35 ]
qedit.hとvmr9.hは同居できないかもな。
vmr7.hとvmr9.hは同居できない。なぜなら前者はDirectX7に基づいていて、後者はDirectX9にもとづく。
そしてDirectX7と9は定義の一部が被るので一緒に使えない。
qeditもおそらく同じだろ。

と、さりげなくレスしてみる。

565 名前:デフォルトの名無しさん mailto:sage [2007/06/22(金) 14:12:31 ]
>>564
vmr9.h (+その他もろもろ)がインクルードされた後に、

#define _D3DRMOBJ_H_
#define __D3DRM_H__
#include <Qedit.h>

でOK。

566 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:48:41 ]
カメラで画像を取り込みながら、画像処理をしたいのですが、
これはDirectShowを使えば可能なのでしょうか?
具体的にいうとカメラから取り込んだ画像は、リアルタイムで画面に描画しながら、
ある間隔でその画像を取得して画像処理を行いたいです。
また、サンプルなどがあれば教えていただきたいです。

567 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:57:54 ]
可能だYO!サンプルはたくさんあるYO!調べろYO!

568 名前:デフォルトの名無しさん [2007/06/25(月) 12:04:22 ]
まず、GraphEditで
カメラ−画像変換フィルタ−VideoRenderer
と繋いであげるといいと思うよ。
画像変換のフィルタは標準では入っていないので、SDK付属のサンプルをビルドしてOSに登録してあげてください。
個人的にはEZrgb24フィルタがお勧め。
VideoRendererはDirectShowフィルタとして標準で入っているので、探してください。

569 名前:デフォルトの名無しさん [2007/06/25(月) 22:59:28 ]
フィルタを開発するのに、ある時間の映像を静止画として、メモリに保存しておいて
その画像と現在の画像の差分を出力したいのですが、メモリ上にコピーを保存するコードが分からないのですが
似た様な事を昔やった方や、やり方分かる方いらっしゃらないでしょうか?

570 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 23:05:00 ]
単に必要な分だけバッファ確保すればいいんちゃうの?



571 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 00:53:20 ]

 EZrgb24 フィルタを改造して映像に文字を表示するフィルタを作りたいんですが,
どのような手順を踏めばいいのでしょうか?

CEZrgb24::Transform(IMediaSample *pMediaSample) 関数を改造して,

1) CreateDIBSection() で DIB 作成
2) TextOut() で表示

で試したんですが,文字が表示されませんでした….

AM_MEDIA_TYPE* pType = &m_pInput->CurrentMediaType();
VIDEOINFOHEADER *pvi = (VIDEOINFOHEADER *) pType->pbFormat;

HDC hDC    = GetDC(NULL);
HDC hdcMem = CreateCompatibleDC( hDC ); // メモリDC を作成
ReleaseDC( NULL, hDC );

void* lpRGB;
HBITMAP hDIB = CreateDIBSection( hdcMem, (BITMAPINFO*)&(pvi->bmiHeader),
                        DIB_RGB_COLORS, &lpRGB, NULL, 0);
// hDIB は NULL ではありませんでした.

このように pvi->bmiHeader から DIB を作成しているんですが,ここが間違っているんでしょうか?



572 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 04:21:27 ]

 すいません,どうやら非常に恥ずかしい間違いをしていたようです….
このやり方が標準的なのかは分かりませんが,以下のコードで無事表示できました.


int nPicels = pvi->bmiHeader.biHeight*pvi->bmiHeader.biWidth;
int nDataSize = nPicels*pvi->bmiHeader.biBitCount/8;

void* lpRGB;
HBITMAP hDIB = CreateDIBSection( 0, (BITMAPINFO*)&(pvi->bmiHeader),
                       DIB_RGB_COLORS, &lpRGB, NULL, 0);
if(hDIB && lpRGB)
{
  memcpy(lpRGB, pData, nDataSize );// DIB array を映像で初期化

  HDC hdcMem = CreateCompatibleDC( 0 ); // メモリDC を作成
  HBITMAP hOldBMP = (HBITMAP)SelectObject(hdcMem, hDIB); // メモリDC にビットマップを選択

  char szText[256] = "Test string";
  TextOut( hdcMem, 0, 0, szText, strlen(szText));

  SelectObject( hdcMem, hOldBMP);
  DeleteDC( hdcMem ); // メモリDC 削除

  memcpy( pData, lpRGB, nDataSize );//BMP を書き戻す.
  DeleteObject( hDIB );
}

573 名前:デフォルトの名無しさん [2007/06/26(火) 19:11:56 ]
Transform(IMediaSample *pMediaSample)

pMediaSample->GetSize();

pMediaSample->GetActualDataLength();
を実行して、メディアのデータサイズを取ったら、どちらも0が返ってきたのですが
これって、何かの使用ですか?

574 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 10:27:55 ]

 DirectShow のサンプルをみてると JIF, LIF マクロがよく使用されてますが,
機能や使用目的はわかるんですが,これは何の略なんですか?
 どうにも気になるんで御教示下さい.

575 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 11:47:29 ]
Jump If Failed
Leave If Failed

576 名前:デフォルトの名無しさん [2007/06/28(木) 16:02:20 ]
>>575
げ、これマジなの??

577 名前:574 mailto:sage [2007/06/28(木) 17:09:12 ]

>>575
 有難う御座います.一応ググってみたら LIF の方は Log-If-Failed のようですね.
何はともあれ助かりました.

578 名前:デフォルトの名無しさん [2007/06/28(木) 17:11:13 ]
>>577
なら書き込む前にググれよ・・・
それってすげーたち悪いぞ

579 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 17:13:43 ]
代わりにググってくれ、という書き込みだったのに
ググってくれなかったから、しかたなく自分でググリました、とさ

580 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 17:16:27 ]
( ´_ゝ`)フーン



581 名前:574 mailto:sage [2007/06/28(木) 17:52:42 ]

失礼,JIF, LIF macro でググっても関係無いページばかりヒットしてしまい,
わからなかったので質問しました.

582 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 18:23:23 ]
失礼、すまんかった

583 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 21:20:37 ]
Return-If-Failed、てのがあっても良いような

584 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 22:07:33 ]
DirectShowのサンプルではこんなの使ってるな。

#define FAIL_RET(x) do { if( FAILED( hr = ( x ) ) ) \
return hr; } while(0)

585 名前:デフォルトの名無しさん mailto:sage [2007/06/28(木) 22:11:06 ]
>>584
やっぱりあるのか・・FAIL_RETか

つかそのマクロの使い方はあれだな、VC6の時のforみたいだな

586 名前:デフォルトの名無しさん [2007/06/29(金) 11:51:22 ]
DirectShowでBGMを、DirectSoundで効果音を出そうとしています。
DirectSound側で、IID_IDirectSoundNotifyを用いると、ターゲットのリンク時に
関数が重複しるぞ、ゴルァと言われてしまいます。

リンクしているのは以下のライブラリ
dsound.lib dxguid.lib uuid.lib strmiids.lib

dxguid.libを抜けば、IID_IDirectSoundNotifyのみ見つからないという状態に
なるので、これを使わないコードにすれば良いという話もあるのですが、うまく
共存させる方法はないでしょうか。ご教授お願いします。

587 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 09:29:53 ]

CComPtr を std::vector に入れても大丈夫?

std::vector< CComPtr<IMoniker> > vtIMonikerArray;

というふうに使いたいんだけど,std::auto_ptr をいれるときのような問題はありますか?


588 名前:デフォルトの名無しさん mailto:sage [2007/06/30(土) 19:15:08 ]
>>587
少なくともauto_ptrのような問題が起きることはない
安心して突っ込みたまえ

589 名前:587 mailto:sage [2007/06/30(土) 21:11:13 ]

>>588
 ありがとう,やってみます.

590 名前:デフォルトの名無しさん [2007/07/05(木) 09:35:54 ]
再生レートを設定できるようスプリッタにIMediaSeekingを実装したのですが、
実際にアプリから使用してみると、SetRate(8.0)のように高いレートを設定すると
エラー0x8004025cが返ってきます。
スプリッタ内部のSetRateでは、レートの制限をつけていないのですが、
どうしてかわかりますでしょうか?






591 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 12:35:20 ]
たぶんオーディオレンダラだな。

592 名前:デフォルトの名無しさん mailto:sage [2007/07/05(木) 22:31:42 ]
現在、プログラムを全画面モードで動作させ、そこからムービーを再生(全画面)しようと
しているんですが、なぜかムービーウィンドウがトップにならず、
プログラムウィンドウの裏にまわったりして、きちんと再生されません。
VideoWindowはトップにくるように命令を入れてるんですが、きちんと機能していないみたい。
どなたかご指導お願いします。

// 自前のウィンドウにムービーを再生する
pVideoWindow->put_Owner((OAHWND)m_hwnd);
pVideoWindow->put_WindowStyle(WS_CHILD|WS_CLIPSIBLINGS);
pVideoWindow->SetWindowPosition(0,0,800,600);
pVideoWindow->SetWindowForeground(OATRUE);
pVideoWindow->put_Visible(OATRUE);
// ストリームの再生(グラフの実行)
hRslt = pMdaCtrl->Run();
pMediaEvent->WaitForCompletion(15000, &eventCode);


593 名前:590 [2007/07/06(金) 09:52:06 ]
>>591

オーディオレンダラをフィルタグラフから外すと成功しました。
ありがとうございました。
しかし、いちいち外したり、接続したりするのは面倒ですね。。


594 名前:デフォルトの名無しさん mailto:sage [2007/07/06(金) 12:21:01 ]
>>592
何再生してもそうなる?
ビデオデコーダにDivX本家使うと、再生開始時に何かにアクティブ
ウインドウ奪われちゃうって経験はあるけど。

595 名前:594 mailto:sage [2007/07/06(金) 12:35:38 ]
>>592
それよく見たら、全画面表示するにはメインウインドウの子
じゃできないような。親をNULLにしたらいいんじゃない?


596 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 01:13:03 ]
DirectShowで画像を回転させるフィルタでいいのない?
逆さ向けてビデオとってしまったんだorz

597 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 04:03:29 ]
>>596
ワロタ
てかその修正をフィルタに任せるなよw

動画編集ソフトで回転させるとか
動画を反転回転できるプレイヤー使うとかあるだろ

598 名前:592 mailto:sage [2007/07/07(土) 18:37:34 ]
>>549>>595 ご返事ありがとうございます。

>>594
再生しているmovieは特別なコーデックを必要としないので、違う原因かと思います。

>>595
親をNULLで再生すると、再生時にメインWIndowが最小化してしまい、全画面モードが
通常画面に戻ってしまいます。(movieは左上で再生)

もうすこし詳しく症状を説明すると、まったく再生しないわけではなくて
成功・失敗をランダムで繰り返します。
成功すれば、メイン画面の前にVideoWindowが出て、普通に再生。
失敗すると、メイン画面の裏にVideoWindowがいるようで、音だけ再生。
このような感じになります。

色々とネット検索したところ、VideoWindowを再描画することで回避可能と見つけたのですが、
組んだところうまくいきません。(症状は同じ)

HWND hChild = GetWindow(m_hwnd,GW_CHILD);
InvalidateRect(hChild,NULL,true);

うーん・・・

599 名前:デフォルトの名無しさん mailto:sage [2007/07/07(土) 19:58:50 ]
それは、親ウインドのバックグラウンド再描画で映像ウインドが消されてしまうからじゃないかな。
親ウインドのWM_ERASEBKGNDをDefaultWindowProcに渡さないようにして試してみな。

case WM_ERASEBKGND:
return 0;
でOK


600 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 13:54:57 ]
>>599ご返事ありがとうございます。

入れてみましたが、現状変わらずです。
元々WaitForCompletionで処理を止めている状態ならウィンドウメッセージが
ムービー再生中に取れることも無いので、SetNotifyWindowでイベント登録
に切り替えてみましたが、やはり同じ状態です。
WaitForCompletionで再生しても裏に回った状態になるので、
WM_ERASEBKGNDを無視しても、同じ症状になるのだと思います。
再生中に定期的にInvalidateRectをVideoWindowに送ってもみましたが、
やはり裏の時は裏で再生されます。

うーむ、もう少し調べてみます。




601 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 14:11:52 ]
親ウインドは何?
ダイアログ?それともダイアログに貼り付けたCStatic?


602 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 15:00:15 ]
>>601
以下のスタイルで画面切り替え時にSetWindowLongしたものです。

WS_POPUP | WS_SYSMENU | WS_VISIBLE | WS_BORDER


603 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 19:36:06 ]
WMPみたいな全画面をやりたいなら、普通にStayOnTopで画面いっぱいのサイズにするだけでおk。

604 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 20:01:24 ]
>>602ご返事ありがとうございます。

以下のような方法でVideoWindowにTOPMOSTを指定しましたが、
どちらも結果は変わらず、表に出たり裏に回ったりします。

1.
pVideoWindow->put_WindowStyleEx(WS_EX_TOPMOST);

2.
HWND hChild = GetWindow(m_hwnd,GW_CHILD);
::SetWindowPos(m_hwnd,HWND_TOPMOST,0,0,0,0,SWP_NOMOVE|SWP_NOSIZE);

うーん。

605 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 20:24:33 ]
ふとスレ見直したんだけど、ownerじゃなくてparentでないのか?
窓の設定が間違っている予感。

606 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 20:35:11 ]
もうDirectShow関係なくね?

607 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 20:47:08 ]
>>605ご返事ありがとうございます。

すいません、それは具体的にどのようにすればよいでしょうか?


608 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 21:17:56 ]
Owner指定なしで、最大化はできんの?

609 名前:デフォルトの名無しさん mailto:sage [2007/07/08(日) 21:57:40 ]
>>608
Owner指定無しだと、元の全画面ウィンドウからVideoWindowに移る際に
全画面モードが解除されます。(Movieは左上で再生)
これは、put_FullScreenMode()を実行しでも同じような動作になります。

通常画面からput_FullScreenModeをつかえば全画面でムービー再生してくれるのですが、
全画面モードから使うと、逆に全画面が解除されるようです。
うーん。


610 名前:599 mailto:sage [2007/07/08(日) 22:11:45 ]
ウインド関係がよくわからない。

ビデオウインドの親ウインドは何?
このウインドを仮にhParentとすると、
hParentウインドに親はいるのか?(or最初からWS_POPUP?)とか
hParentウインドのスタイルにWS_CLIPCHILDRENは設定されているのか?とか
hParentウインド自身は全画面サイズに引き伸ばされ、且つTopに表示されているの?とか
hParentウインドのWM_ERASEBKGNDをちゃんと無視しているの?とか
put_Ownerするタイミングとか

そういうことが知りたい。





611 名前:592 mailto:sage [2007/07/08(日) 22:36:34 ]
>ビデオウインドの親ウインドは何?
CreateWindowしたWindowが親です。

>このウインドを仮にhParentとすると、
>hParentウインドに親はいるのか?(or最初からWS_POPUP?)とか
画面切り替え時にWS_POPUPとしています。

>hParentウインドのスタイルにWS_CLIPCHILDRENは設定されているのか?とか
指定していませんでしたが、元々メッセージ処理するつもりではなく、movie再生終了まで
処理停止するプログラムです。

pMediaEvent->WaitForCompletion(15000, &eventCode); // 15秒経過するかmovie再生が停止するまで待つ

また、入れてメッセージ処理をするようにしましたが改善されませんでした。

>hParentウインド自身は全画面サイズに引き伸ばされ、且つTopに表示されているの?とか
はい、全画面でTOPです。

>hParentウインドのWM_ERASEBKGNDをちゃんと無視しているの?とか
これも前に書きましたが入れても改善されませんでした。

>put_Ownerするタイミングとか
基本は>>592のソースですが、put_Visibleの直前まで、1行ずつ移動させても改善しませんでした。
また、その前にはVideoWindowの取得になるので移動できません。

こんな感じてす。何か判りますでしょうか。

612 名前:599 mailto:sage [2007/07/08(日) 23:12:43 ]
この手の問題は大抵は、ビデオレンダラが描画したあとに親ウインドが背景をリフレッシュすることで発生する。
タイミングによってはリフレッシュが先に発生し、あとからビデオレンダラの再描画が行われ、表示される場合もある。
したがって親ウインドがある場合、親ウインドのWM_PAINTの描画処理をクリップして、且つERASEBKGNDをさせなければならない。
WS_CLIPCHILDRENやWM_ERASEBKGNDの処理を確実にしなければ効果がない。

ビデオレンダラの親ウインドにWS_CLIPCHILDRENをいれてみたらどうなる?

もしダメならほかの理由かもね。

613 名前:592 mailto:sage [2007/07/08(日) 23:36:52 ]
>>612
>したがって親ウインドがある場合、親ウインドのWM_PAINTの描画処理をクリップして、且つERASEBKGNDをさせなければならない。
>WS_CLIPCHILDRENやWM_ERASEBKGNDの処理を確実にしなければ効果がない。
WM_PAINTのクリップ、WM_ERASEBKGNDをDefに流さない、WS_CLIPCHILDRENを入れる。
全てやってみたんですが、やはりダメでした。

>ビデオレンダラの親ウインドにWS_CLIPCHILDRENをいれてみたらどうなる?
上でも描きましたが、入れてみても症状は変わらずです。

そもそもWaitForCompletionで、再生終了まで待つ処理でも症状がでるんですよね。
で、再生終了をイベント取得に切り替えて、PAINT処理を切ったりしてもやはり同じくだめでした。

うーん、タイミング問題だとは自分も思うんですが・・・。
もう少し調べてみます。

614 名前:592 mailto:sage [2007/07/09(月) 12:22:04 ]
皆さん色々と助言をありがとうございます。
すこし原因らしきものが見えましたのでご報告します。

メインWindowの描画にDirect3Dを使用しているんですが、

全画面モードで
メイン画面の描画を一切やらない → 100%ムービー再生に成功
一度だけDirect3Dでサーフェイスのクリア → 表と裏のランダム再生
一度だけDirect3Dでメイン画面を描画 → 表と裏のランダム再生

どうやらDirect3Dのフロントバッファが問題を起こすようです。
引き続き対策を調べて見ます。

615 名前:592 mailto:sage [2007/07/09(月) 14:40:31 ]
結局、スマートな方法が見つからず、ムービー再生時には
IDIRECT3DDEVICE9のリセットをおこなってから再生するようにした所
うまくいくようになりました。
おさわがせいたしました。
貴重なご意見をいただき、ありがとうございました。

616 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 00:26:34 ]
なぜそんな重要なことを。。

617 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 00:31:05 ]
Direct3Dということはゲームのムービーでしょうか?

618 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 10:40:38 ]
聞いてどうすんの

619 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 14:01:52 ]
#include <qedit.h>

#include <d3d9.h>
を一緒にするとエラーが出るんです。

順番変えてもエラーでます

対応策ってありますか?

620 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 14:16:28 ]
環境とエラー内容は?



621 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 14:28:13 ]
環境は、
VC2003で
Microsoft DirectX 9.0 SDK Update (December 2004)
だと思います。

#include <d3d9.h>
#include <d3dx9.h>
#include <dshow.h>
#include <qedit.h>
と書くと
c:\DXSDK\Include\d3drmobj.h(46): warning C4005: 'WIN_TYPES' : マクロが再定義されました。
c:\DXSDK\Include\d3drmobj.h(274): error C2061: 構文エラー : 識別子 'LPDIRECT3D'
・・・
等が出ます。

#include <dshow.h>
#include <qedit.h>
#include <d3d9.h>
#include <d3dx9.h>
と書くと

c:\DXSDK\Include\d3dx9math.inl(1924): error C2039: 'm' : 'D3DXMATRIX' のメンバではありません。
c:\DXSDK\Include\d3dx9math.h(310) : 'D3DXMATRIX' の宣言を確認してください。
c:\DXSDK\Include\d3dx9math.inl(769): error C2065: 'm' : 定義されていない識別子です。
c:\DXSDK\Include\d3dx9math.inl(775): error C3861: 'm': 識別子は、引数依存の照合を使用しても見つかりません。
・・・

等が出ます。


622 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 14:51:17 ]
>>621
d3drm〜ってファイル名から明らかだが
qeditがDirectX7を使ってるからだろ?
一つのコンパイルパスにおいて複数のバージョンのDirectXは同居できない。

>>564-565 にズバリな事が書いているような気がするんだが、これは試したの?

623 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 14:53:34 ]
ああ、違うバージョンのDirectX自体が同居できない訳ではないな。
ちょっと訂正

624 名前:619 mailto:sage [2007/07/10(火) 14:56:28 ]
>>565
で通りました。
ありがとうございます><

625 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 15:08:21 ]
現行スレを検索することくらい、答える側にやらせないで自分でやれよ…ったく

626 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 16:02:52 ]
うわ

627 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 16:42:41 ]
まいったねこりゃ

628 名前:デフォルトの名無しさん mailto:sage [2007/07/10(火) 22:27:39 ]
まぁいいじゃん。過去ログにまさかズバリがあるとは思わないだろう。
ここ過疎気味だし。


629 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 06:48:47 ]
YUVの4:2:2→4:4:4補間するDShowフィルタってあるんでしょうか?

630 名前:デフォルトの名無しさん mailto:sage [2007/07/11(水) 07:02:28 ]
ない



631 名前:629 mailto:sage [2007/07/11(水) 07:35:29 ]
>>630
ありがとうございました!

632 名前:デフォルトの名無しさん [2007/07/11(水) 23:00:21 ]
YUV422→444作れ。簡単だ。それが嫌なら500円くれたらやる。

633 名前:デフォルトの名無しさん [2007/07/12(木) 02:13:15 ]
すいません、オーディオ、ビデオの2つの出力ピンのあるスプリッタを作成してるのですが、
2つの出力ピンともレンダラと繋いで、オーディオのみのファイルを再生すると、音声が流れません。
スプリッタのビデオ出力ピンを未接続にし、オーディオ出力ピンのみをレンダラと繋ぐと音声は再生されます。
ピンから出力データが無い場合に、そのピンを接続するのはいけないのでしょうか?
何とか、ビデオピンも繋いで、オーディオのみのファイルの再生をしたいのですが、
どうしたらよいでしょう?





634 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 02:01:04 ]
PlatformSDK WindowsServer2003 R2をインストールしました
ドキュメントにはサンプルのTextOutがさもあるように書いてあるんですが
どこにあるかわかりません。
どこにあります?

そのほかのサンプルもなんか無いんですが。。

635 名前:デフォルトの名無しさん mailto:sage [2007/07/13(金) 16:06:44 ]
それは古いSDKをとってこないと無いはず(DXSDKまで遡らないと無いものもあり)。


636 名前:デフォルトの名無しさん mailto:sage [2007/07/14(土) 00:34:35 ]
あ、そうなんだ。ありがとう。
ちょっくら探してきます。

637 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 19:51:58 ]
幼女と老婆を酷使する番組w

638 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 19:52:58 ]

間違えた。無視して

639 名前:デフォルトの名無しさん mailto:sage [2007/07/15(日) 22:03:20 ]
だが断る

640 名前:デフォルトの名無しさん [2007/07/17(火) 18:48:32 ]
DirectShowはょぅじょとばばぁを酷使しますね。

フィルタをシェアウエアで出したいんだがいいとこある?



641 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 00:19:37 ]
どんなフィルタ?

642 名前:デフォルトの名無しさん [2007/07/18(水) 12:24:38 ]
たとえば
>>401の拡張したやつ
顔を検出するやつ
動物体を検知するやつ
あとはサンプルグラバのこったやつ

643 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 13:49:33 ]
パターン認識のフィルタならどっかになかったっけ?フリーで。

644 名前:デフォルトの名無しさん mailto:sage [2007/07/18(水) 22:06:45 ]
javaで顔認識で心霊写真チェッカーみたいなのがあったけどね。

645 名前:デフォルトの名無しさん [2007/07/18(水) 22:32:22 ]
windows2000で最新のPlatformSDK入れたヤツ居る?
BaseClassesをnmakeしようとすると
makefile(53) : fatal error U1083: ターゲット マクロ '' が展開されません。
って出るんだけど・・・。

646 名前:デフォルトの名無しさん mailto:sage [2007/07/19(木) 13:38:03 ]
複数のBMPから、AVIを作りたいなーと思って調べていたのですが、
DirectShowのフィルタを自作しなければできないのでしょうか??






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前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