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

DirectShowと戦うスレ Part 2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/08(水) 00:25:56
前スレ
http://pc8.2ch.net/test/read.cgi/tech/1026666092/
0002デフォルトの名無しさん2006/11/08(水) 00:30:59
>>1
それだけかよ。
0003デフォルトの名無しさん2006/11/08(水) 02:05:53
DirectShowプログラマーのみなさん。
メソッドのデッドロックとか、わけわからん現象多くないすか。
このスレに怒りやテクをぶつけましょう。

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

Google
http://www.google.com/
0005デフォルトの名無しさん2006/11/08(水) 07:40:31
スレたて乙
0006デフォルトの名無しさん2006/11/09(木) 00:26:04
フィルタロックとストリームロックの使いどころとか使い方とかよくわからない。
効果があったんだかないんだかもよくわからない。
0007デフォルトの名無しさん2006/11/12(日) 00:36:32
Windows SDKにも入ってないしDirectShowのSDKはどこいったんだ
0008デフォルトの名無しさん2006/11/12(日) 00:45:55
プラットフォームSDKに行ったよ。
プラットフォームSDKとはPlatform SDK for WindowsServer2003 みたいな名前の奴だよ。
一瞬WindowsServer2003かよ、関係ないね
っと思うところがミソ。
0009デフォルトの名無しさん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
   http://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)
   http://download.microsoft.com/download/1/5/1/1513e3ec-f6e2-4fb1-bf27-7c8983b3bf91/dxsdk_oct2004.exe
0010デフォルトの名無しさん2006/11/12(日) 11:03:04
うーん
Windows SDK以外に
旧式のPlatform SDKも入れないといけないのか
0011デフォルトの名無しさん2006/11/12(日) 11:58:13
Win2K+VC6ならね。
Windows SDK(for Vistaのアレ?)はWinXP SP2以降しかサポートしてないから。
0012デフォルトの名無しさん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>
0013デフォルトの名無しさん2006/11/12(日) 12:03:11
何故summer 2003を使わない?>VC6
0014デフォルトの名無しさん2006/11/12(日) 12:05:01
どのdshow.h使ってる? >>9のPlatform SDKでは
#include <dshow.h> だけでコンパイル出来たけど。
マクロあたりで引っ掛かるのかな。
0015デフォルトの名無しさん2006/11/12(日) 12:12:54
MicrosoftのSDKはいいかげんにして欲しい。
単体で良いかどうか、出た日付、サポートする環境を書いて一覧ページを置いて欲しい。
BaseClasses入ってたり入ってなかったりするし。
0016102006/11/12(日) 12:22:01
ってよく見たらWindows SDKにもDirectShow入ってた。
0017デフォルトの名無しさん2006/11/12(日) 16:46:47
Webカメラの映像の解像度を変更する処理にチャンレンジしているが、
初期化時に
pAMStreamConfig->SetFormat(*****);
で解像度を変更するには成功。

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

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

再起動後ではなく、リアルタイムに解像度を変更したいので。
0018適当に答えてみる2006/11/12(日) 18:01:27
IID_IMediaControlでプレビューをSTOPして
SetFormatして
プレビュー再開じゃだめなの?
0019デフォルトの名無しさん2006/11/12(日) 19:30:42
>>18
いえ、Runする前にでもRenderStream後だと
SetFormatが失敗するようなのです。

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

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

なので、RenderStreamをする前の状態に
戻すような方法はないのかと。
0020デフォルトの名無しさん2006/11/12(日) 21:18:01
一度止めて初期化からやり直すのは無理なの?
0021デフォルトの名無しさん2006/11/12(日) 21:30:45
DirectShow関連をすべてReleaseしてから
再度初期化からやり直しても
やはり二回目のSetFormatが失敗します。

やはりRenderStreamを解除するような手段が必要な気がします。
0022デフォルトの名無しさん2006/11/12(日) 21:57:59
> 再度初期化からやり直しても
そうか、それは困るね。
CoUninitializeとかプロセス起動し直しでも失敗する?
0023デフォルトの名無しさん2006/11/12(日) 22:22:39
丁寧にありがとうございます。
CoUninitializeまでやっても同様でした。

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

いろいろ調べてますが、
IFilterChain::RemoveChainが怪しいのですがネット上の情報が皆無で
コンパイラを通すところですでに引っ掛かってます。
0024デフォルトの名無しさん2006/11/12(日) 22:43:25
子プロセス作ってパイプで、とかアドホックな手もあるだろうけど
CoUninitializeで無理なら駄目かもね。
インターフェイス使ってどうにかする方は俺には分からない。
0025デフォルトの名無しさん2006/11/12(日) 22:50:09
>>23
1.IPin::Disconnectでピンの接続解除
2.SetFormat
3.RenderStream
0026デフォルトの名無しさん2006/11/12(日) 22:55:41
AMCapみたいに、USBカメラのプロパティダイアログを呼んで
解像度変更するのはダメなの?
0027デフォルトの名無しさん2006/11/12(日) 23:01:34
Managed DirectXが先に死亡したのねw
0028デフォルトの名無しさん2006/11/13(月) 17:05:24
>>25
うおーー!!
成功しました。ありがとうございます。
FindPinで2つのフィルタ間の出力ピンと入力ピンとを見つけ、
そのピンをDisconnectで接続を外し、SetFormat。
そののちRenderStreamでできました。

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

本当に助かりました。1つの問題で何時間も悩み、
DirectShowのクセの強さを痛感しました。
0029デフォルトの名無しさん2006/11/13(月) 19:51:12
今のSDKに GraphEdit って付いてないんだっけ。

あれでちょっと調べてみれば接続済みのときには設定変更できないとか
あれこれ挙動もわかるし悩まずにプログラミングできるんだけど。
0030デフォルトの名無しさん2006/11/13(月) 21:24:48
ん???ついてるよ
0031デフォルトの名無しさん2006/11/14(火) 14:14:48
Videos for Windoewsは
前スレにも過去スレにも話題も出てないし
スレも立っていないようですが
もはや今の時代こんなの使うべきじゃない
って解釈でOKでしょうか?
0032デフォルトの名無しさん2006/11/14(火) 23:03:16
XPが最後でVistaでは廃止されて使えないんじゃなかったっけ?
0033デフォルトの名無しさん2006/11/15(水) 00:20:58
使えないと困るだろ。
今後改善・改良されないだけ。
0034デフォルトの名無しさん2006/11/15(水) 00:22:11
そういえば64bitプロセスからDShow使うとどうなるんだろう。
フィルタも64bit用DLLを用意しないとダメ?
0035デフォルトの名無しさん2006/11/15(水) 09:13:55
MDX2.0は期限切れで使えません
0036デフォルトの名無しさん2006/11/15(水) 12:41:43
質問があります。
DirectShowフィルタのプロパティー画面を制作しているのですが、
タブを追加する方法がわかりません。
CBasePropatyという基底クラスにタブ追加メソッドがないのでどうしたらいいのかがわからんです。

WindowsAPIでいうところの「TabContrl_InsertItem」みたいなことをするにはどうしたらよいでしょうか?
0037デフォルトの名無しさん2006/11/15(水) 12:46:31
>>33
どっかで廃止って見て、かなり前に作ったVideos for Windoews使いまくりのアプリを
どうしようって思ってたんだけど、勘違いだったか。
よかったよかった。
0038デフォルトの名無しさん2006/11/15(水) 17:22:27
VFWは最近のボードだと、
正しく動作しないことも多いような...。
0039デフォルトの名無しさん2006/11/15(水) 17:55:43
>>36
ISpecifyPropertyPages::GetPagesで複数のCLSIDを返せば良いだけでは?
0040デフォルトの名無しさん2006/11/15(水) 18:30:09
うちのUSBカメラはVFWはすでに無視してます
0041デフォルトの名無しさん2006/11/15(水) 23:17:00
>>39
せっかく教えてもらったのにヽ(´ー`)ノ
0042デフォルトの名無しさん2006/11/16(木) 01:01:49
VFWtってC#マネージドでも使えますか?
0043デフォルトの名無しさん2006/11/16(木) 02:01:34
動画をデスクトップに保管しそのファイルを解凍し(解凍ソフト)、そのファイルをMPG2AVIに
入れて変換開始ボタンを押すと<DirectShowフィルタが構築されません>
とでて変換出来ません。どなたか親切な方教えて下さい。ちなみに私は初心者です。
宜しくお願いします
0044デフォルトの名無しさん2006/11/16(木) 07:56:15
動画板池
0045デフォルトの名無しさん2006/11/16(木) 08:09:05
>>43
保管したファイルを解凍の時点でわかんない
向こうで質問するにしても気をつけれ
0046デフォルトの名無しさん2006/11/16(木) 20:15:19
つかDirectShowも所詮はCOMだしなぁ
.NETで動画触ろうと思ったら
結局何が一番良いんだろうなぁ
0047デフォルトの名無しさん2006/11/16(木) 21:46:09
所詮はCOMってどーゆー意味だろ
0048デフォルトの名無しさん2006/11/16(木) 22:14:38
COM拒否症かも
0049デフォルトの名無しさん2006/11/16(木) 23:22:12
>>38とか>>40とか色々まとめると
動画に静止画とかを挿入するような
単純な機能だけならVFWで十分
と思って良い?
0050デフォルトの名無しさん2006/11/17(金) 08:50:22
じゃあSHOWってなにがすごいのさ?
0051デフォルトの名無しさん2006/11/17(金) 09:02:24
すごいかどうかは別にして、VFWでできることはDirectShowでも簡単にできる。
あえてVFWを使う必要なしってことかな。
0052デフォルトの名無しさん2006/11/17(金) 13:17:19
COMでとっつきにくいのを乗り越えてDirect Showで書いても
別に局.NETでマネージされてくれるわけでもないし
じゃあ結局どの辺にご利益があるのかなあ
と言うことだとエスパー
0053522006/11/17(金) 13:20:15
スマソ2行目の局は入力ミス
脳内あぼーんしてくれ
0054デフォルトの名無しさん2006/11/17(金) 14:20:12
>>50
AVI 以外を扱いたくなったときに対応可能ってとことか。

>>46
.Net で動画触るなら、C++/CLI で書くのが一番。
DirectShow でも WMF でも SDK 使って普通に使える。
0055デフォルトの名無しさん2006/11/18(土) 01:06:37
単にVFWを捨ててDirectXに統合したかったんでしょ。
で、のちのち気が変わってDirectShowだけプラットフォームSDKに移動したと。
0056デフォルトの名無しさん2006/11/18(土) 14:11:04
プラットフォームSDKへの移動は、どちらかというと昇格だね。
0057デフォルトの名無しさん2006/11/19(日) 09:52:40
DVDでコマ送り、コマ戻しはどのようにやるのがよいのでしょう?
0058デフォルトの名無しさん2006/11/19(日) 11:44:04
。みいかはいつ対応するの?
0059デフォルトの名無しさん2006/11/20(月) 01:32:42
なんでそんな書き方する?普通にドットネットってかけよ。
0060デフォルトの名無しさん2006/11/20(月) 01:46:12
最初のshiftが同時押しになったらしい
0061デフォルトの名無しさん2006/11/20(月) 18:26:00
.NETのことだったのか
0062デフォルトの名無しさん2006/11/24(金) 02:05:52
質問です。
変換フィルタを使って動画の画面サイズ解像度を変更(下げる)するフィルタ
を作ろうかなと考えております。
中身の処理はアンチエイリアスを自作する予定です。
【質問】
壱:OutPinに解像度を設定する項目があると思うんですがどうやってするんでしょうか?
弍:動画(1秒に15枚のBMP画像)を周波数解析したら普通のPCでは処理重杉でしょうか?
0063デフォルトの名無しさん2006/11/24(金) 03:31:07
1.希望サイズ、フォーマットの出力メディアタイプの提示をする。(TransformフィルタならGetMediaTypeで提示したいメディアタイプを返す。)
2.JPEG圧縮だって一応周波数に変換するから何とかなるんじゃない?
0064デフォルトの名無しさん2006/11/24(金) 04:46:37
>>63
壱:InputPinからGetMediaTypeで解像度取得してSetMediaTypeで
下流ストリームに教えてあげるのね。やってみます。
弍:JPEGはDCT。コサイン変換で周波数解析すればおk
と言う事と深読みしてみる(`・ω・´)
回答いただきありがとうございます。
0065デフォルトの名無しさん2006/11/24(金) 14:39:06
なんか公式の解説ページにあるコードが間違いだらけな気がするのは俺だけ?
明らかにNullのクラスポインタからメソッド呼び出そうとしてたり
0066デフォルトの名無しさん2006/11/24(金) 15:04:07
>>44
動画板って特別企画の動画2ch板のことか?
あそこに初心者質問スレが立つことなんてあるのか?
0067デフォルトの名無しさん2006/11/24(金) 20:07:34
>>64
下流ストリームに教えてあげるのはGetMediaTypeと思われ。。。
0068デフォルトの名無しさん2006/11/24(金) 21:10:08
>>67
なんですと〜。ちゃんと
確認の意味で書いてよかった。

へるぷ見て勉強しなおします
0069デフォルトの名無しさん2006/11/24(金) 23:31:34
>>68
ヘルプもいいけど、ベースクラスのソースとサンプル見た方が早いよ
0070デフォルトの名無しさん2006/11/25(土) 01:01:26
>>68
「おいおい、あんた何を俺にくれるのよ?」が GetMediaType
0071デフォルトの名無しさん2006/11/25(土) 01:05:01
>>65
あるね。ビルドやってないだろ、見たいなの。
0072デフォルトの名無しさん2006/11/25(土) 02:43:18
DirectShowってやっぱ"Show"って言ってるだけあって
入力方向より出力方向の方が充実してるって感じなんでしょうか?
正直、他アプリからDirectShowへの入力はかなりイマイチな希ガス
0073デフォルトの名無しさん2006/11/25(土) 03:07:28
ソースフィルタ側ってあんまり活用されてないよねえ
0074デフォルトの名無しさん2006/11/25(土) 08:05:50
上流はプッシュ、プルモデルを正しく理解して実装するのは(最初のうちは)大変かと 
トランスフォームなら良くわからなくても実装しやすいからね
0075デフォルトの名無しさん2006/11/25(土) 12:15:15
フィルタ開発しているとピン接続を拒否されたときの理由を調べるのがつらい。
もっと簡単にわかってほしい。
0076デフォルトの名無しさん2006/11/27(月) 01:07:10
>>51とかよぉ、VFWとやらがどんなもんなのかはまあ知らねぇんだが
DirectShowが簡単ってこたぁねぇ気がすんだがなぁ。
普及させたいからかなんか知らんが誤解を与えるような表現はイクナイ
0077デフォルトの名無しさん2006/11/27(月) 01:40:18
簡単じゃないけどそれはハードルであって
そこを超えると何もかもが簡単になるという

RUBYYYYYYYYYYYYYYYYYYY

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

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

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

そもそもこういう用途でDirectShowを使おうとすること自体間違いなんだろうか?
Directつながりでやりやすそうとか安易に思ってたんだが。
0080デフォルトの名無しさん2006/11/28(火) 00:48:21
よくわからんがDirectShowのレンダラに絵を表示させる仕事をさせたいわけ?
できなくはないが簡単にはできない。
0081792006/11/28(火) 01:35:49
編集とか圧縮とかもできればやりたいが基本的にはまずは動画を出力したい、
レンダラ側とかは何とかなりそうだが、ソース側が‥
「プッシュ型ならどっちかって言うと簡単」みたいな記述を↓で見かけて
http://m--takahashi.com/old/09850.html
鵜呑みにしてソースフィルタ自作しようと思ったものの失敗だったか?
かと言ってFile Monikerとやらも簡単そうには見えないし

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

あと万が一もし単に画面に動画を出したいだけなら、DirectXだけでそのままやれば十分。
ってかDirectShowのレンダラもDirectXで描いてるわけで。
0083デフォルトの名無しさん2006/11/28(火) 15:58:15
WMF SDKは日本語のドキュメントが公開されてないっぽいので躊躇してたが
実際インストールしてマニュアル見たらこっちのほうが簡単そう

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

なぜGetMediaTypeの中に出力Pinの設定をかくのか未だ謎。
まぁもう少し使い勝手(入力画像サイズの自動判断など)よくしたら
ソースとバイナリうpします
今後の為にも
0085デフォルトの名無しさん2006/11/28(火) 19:36:21
う〜〜〜ん 何をしたいのか よくわからん。
DirectXで描画したイメージを100%忠実に取り出すことなんて そもそもできるのか? 
0086デフォルトの名無しさん2006/11/28(火) 22:49:29
> なぜGetMediaTypeの中に出力Pinの設定をかくのか未だ謎。
ココわからないと、この先しんどいと思われ
0087デフォルトの名無しさん2006/11/28(火) 23:01:47
>>86
GetMediaTypeは上流ストリームの設定を取るインターフェースだけではなく

下流ストリームの接続の設定も取るしくみなのかしら?
だとしたらPinそれぞれにMediaTypeを取れるインターフェースを作ってもらいたいものよね
0088デフォルトの名無しさん2006/11/28(火) 23:52:18
>>87
だからそうなってるだろ?
0089デフォルトの名無しさん2006/11/29(水) 17:43:12
>>84
後学の為の資料としてソースうpしてくれるなら
ソースは直接書き込んだ方がいいかも。
うpろだだと後々検索でこのスレ見た人とかは拾えないから。

>>85
DllInjectionでDirect3D乗っ取ってフロントバッファを取得して、
それを直接DirectShowに流して動画キャプチャソフトを作りたいんじゃないかな?
俺は>>83じゃないからわからんけど。質問見た感じそんな所じゃないかなーと思った
0090デフォルトの名無しさん2006/11/29(水) 19:49:16
>>89
わかりました。
えいちてぃーえむえるにしてソースをどこかに貼りますね。
ただまだ解決出来ない問題がありますので暫くかかると思うけど…

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

中間フィルタさえはいらなきゃちゃんと表情されるのに…
0091デフォルトの名無しさん2006/11/30(木) 02:41:37
>>89
フロントバッファと画面イメージって必ずしも同じじゃないんじゃ?
よくわからんけど。。。
0092デフォルトの名無しさん2006/11/30(木) 22:47:39
>>91
え、BeginScene()とEndScene()の間のレンダリング結果が
Present()によってバックバッファからフロントバッファに
Blt(あるいはFlip)されると思ってたけど、違う?
0093デフォルトの名無しさん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' の宣言を確認してください。
0094デフォルトの名無しさん2006/12/07(木) 14:38:30
まず、CUnknownはどこから出てきた?
仮にCUnknownがIUnknownのメソッドを実装するクラスとして存在したとしても、
C++ではCGrabCBがCUnknownを継承しただけでは、
ISampleGrabberCBのIUnknownのメソッドを実装したことにはならないはず。
0095デフォルトの名無しさん2006/12/07(木) 14:51:07
実はうまくできてるパソコンがあって、別のPCでも動かそうと思ったら、
このエラーが出てしまって。前も出たのですがどうやって修正したのか忘れてしまった
次第です。
やり方は
ttp://vision.kuee.kyoto-u.ac.jp/~hiroaki/firewire/directshow.html
を真似しました。
0096932006/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)' がありません

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

なんとかWEBカメラに限定させることはできないでしょうか?
0098デフォルトの名無しさん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;
0099デフォルトの名無しさん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 );
0100デフォルトの名無しさん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();
0101デフォルトの名無しさん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();
-----------------------------------------------------------------------
いろいろ試行錯誤していたので少し読みにくくてもうしわけありません。
■ このスレッドは過去ログ倉庫に格納されています