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

DirectShowと戦うスレ Part 2

■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん2006/11/08(水) 00:25:56
前スレ
http://pc8.2ch.net/test/read.cgi/tech/1026666092/
0657デフォルトの名無しさん2007/07/22(日) 19:41:18
作れたら私にも使わせてください
0658デフォルトの名無しさん2007/07/23(月) 00:55:08
質問です。
2つの映像入力を何らかの形で合成し
1つの出力として吐き出すフィルタを作成しています。

最終的に、出力ピンに繋がった入力ピンのReceive()に
合成結果であるIMediaSampleを渡せば良いというのはわかるのですが、
映像の同期がうまくとれません。
(同期というかそれぞれの入力から1フレームずつ取得して出力したい)

どのようにすればよいでしょうか?
0659デフォルトの名無しさん2007/07/23(月) 07:56:53
【派遣ネガティブ根性チェック】

3つ以上、チェックがつけばアナタの性格はひん曲がっており、
ネガティブ負け組派遣人生を歩んでいます。

□派遣先正社員の作った糞開発ツールはたとえ腐っててもマンセーして使う
□派遣先の人事権のある社員の意見はたとえ間違っていてもマンセーする
□仕様とは正社員から口伝されるものだ
□耳で聞いた仕様を正確に覚えていないのは自分の責任だ
□昼食は必ず派遣先の社員と行くべきだ
□自分の仕事で問題が発生しても解決するのは派遣の仕事ではない
□派遣先から「いつまでもここで仕事してくださいね(安い金でw)」と言われて嬉しい
□自社で仕事なんてできるわけがない
□派遣労働の問題点の話題が出ると感情剥き出しにして反論する
□派遣労働の問題を指摘する人は嫌いだ
□派遣先には仕事だけでなくプライベートについてもグイグイ引っ張って欲しい
□奢ってくれる派遣先正社員を尊敬する
□自分の月額金額を知らないのは当然だ、単金を聞いてはいけない
□派遣先正社員より自分の生涯収入が低いのは当然だ
□チビは派遣先にかわいがってもらいやすいから派遣には有利だ
0660デフォルトの名無しさん2007/07/23(月) 21:04:26
>>658 入力Aと入力B、両方受信を確認してから合成、出力すればいいだけの話じゃないの?
入力ソースがライブ(プッシュ)だったりする?
06616582007/07/24(火) 10:24:31
>>660
AddSourceFilterでハードディスク上のムービーファイルを扱う場合って
どっちになるんですかね?
プッシュモデルにするかプルモデルにするかは
やっぱりソースフィルタに依存します?
0662デフォルトの名無しさん2007/07/24(火) 21:32:14
>>661
ハードディスク上のムービーファイルなら通常プルモデル。
パーサー(スプリッタ)がデータを引っ張り出して後ろに流します。
んで入力2系統あるらしいけど、両方ともハードディスク上のムービーファイルなの?
ファイル形式はなんですかね?
0663デフォルトの名無しさん2007/07/25(水) 17:12:59

AMCap を参考にプログラムを作っています.

OleCreatePropertyFrame() でビデオキャプチャピンのダイアログを表示できますが,

ttp://pukapuka.sakura.ne.jp/cgi-bin/upload/puka/img-box/1185348928740.jpg

 上記の 「色空間/圧縮」,「出力サイズ」をダイアログからではなく,プログラム上から制御
したいのですが,どのようにすれば可能でしょうか?
 具体的には,これらの値の列挙,現在の値の取得・変更を行いたいと思っています.

 参考になるページ等もありましたら御教示下さい.
0664デフォルトの名無しさん2007/07/25(水) 17:21:17
キャプチャピンのIAMStreamConfig で設定する。
Connect する前にね。
06656632007/07/25(水) 21:56:05
>>664 有難う御座います.おかげさまで以下のようにして取得と変更が出来ました.

 CComPtr<IAMStreamConfig> pAMStreamConfig;
 hr = pCaptureGraphBuilder2->FindInterface(&PIN_CATEGORY_CAPTURE, &MEDIATYPE_Video,
                              pVideoDeviceFilter, IID_IAMStreamConfig,
                              (void **)&pAMStreamConfig);
 if( SUCCEEDED(hr) )
 {
   AM_MEDIA_TYPE* pMediaType;
   pAMStreamConfig->GetFormat( &pMediaType ); // 現在の設定を取得

   pMediaType->subtype = MEDIASUBTYPE_YUY2;// YUY2 に変更

   VIDEOINFOHEADER* pVideoInfoHeader = (VIDEOINFOHEADER*)pMediaType->pbFormat;
   pVideoInfoHeader->bmiHeader.biWidth = 640; // 640 wide
   pVideoInfoHeader->bmiHeader.biHeight = 480; // 480 height に変更

   pAMStreamConfig->SetFormat( pMediaType );//設定を反映

   DeleteMediaType( pMediaType );
 }


 列挙も pAMStreamConfig->GetNumberOfCapabilities() と GetStreamCaps() で実現できそうです.
有難う御座いました.
06666582007/07/27(金) 15:52:03
>>662
>両方ともハードディスク上のムービーファイルなの?
>ファイル形式はなんですかね?

とりあえずは両方ともハードディスク上のもので
ファイル形式はAVIでやってます。
0667デフォルトの名無しさん2007/07/31(火) 15:19:35
枯れてる内容かもしれないんだけど・・・

ttp://wwwdoi.elec.nara-k.ac.jp/html/jisyu/dxm/ds/index.html
ここのlist702サンプルを実行して、mpgファイルなんかだと問題なく静止画取り込みができるんだけど、
とあるDivX6エンコードのaviファイルで実行すると、GetConnectedMediaType()で取ったAM_MEDIA_TYPEの
pbFormatがNULLになってしまい、ビデオ情報が取れないみたいなんですが一体どういう原因が考えられるんでしょうか。
ファイル自体はMediaPlayerで再生できています。
06686672007/07/31(火) 15:46:23
補足です。

DivXファイルだとISampleGrabberCBでのコールバックの指定も無視されてしまうようです。
キャプチャされないように何かロックされてる?
0669デフォルトの名無しさん2007/07/31(火) 17:13:25
まずフィルタグラフ全体がどうなっているか調べると良い。
あとpbFormat以外のメジャータイプとサブタイプを見たほうがいい。
もしかするとDivX6はパーサーとデコーダがセットで使用されていて、
パーサーとデコーダは互いを知っているのでpbFormatなんか使わないっていう実装かもしれん。
そこにサンプルグラバがパーサーとデコーダの間に挟まれば、ありうる。
06706672007/07/31(火) 17:32:37
>>669
ありがとうございます。
さらに調べてみたら、どうもDivXはRGB24への自動変換をサポートしていなかったり結構中途半端な模様。
で、レンダラまで自前実装してやるとキャプチャできる(SDK付属サンプルのWindowlessなら動く)ようなので、
そっちをベースにした実装にしたいと思います。
0671デフォルトの名無しさん2007/07/31(火) 20:55:11
フィルタの中でビットマップをリサイズするようにしたらすごく遅くなった
コマ落ちばっかりです
なんか早くする方法はありませんか?
0672デフォルトの名無しさん2007/07/31(火) 23:18:45
リサイズ処理を見直す
0673デフォルトの名無しさん2007/08/01(水) 22:13:09
どうやってリサイズしてるんだ?

普通にCで書いて間に合わないんなら、SIMD命令使え。
それでも間に合わないんならPCをパワーアップ。
0674デフォルトの名無しさん2007/08/01(水) 22:25:01
ロジックが悪い。
0675デフォルトの名無しさん2007/08/01(水) 22:40:55
すいません。質問です。
CTransformFilterの中で今の時間を取得することはできますでしょうか?
シークするとTransformに渡ってくるIMediaSampleのGetTimeやGetMediaTimeの時間が0に戻ってしまって、今の時間がわからなくなってしまいます・・・

それからCTransformFilterから動画の長さ(再生時間の合計)を知る方法ってありますか
0676デフォルトの名無しさん2007/08/02(木) 09:54:52
今の時間・・・?エスパーすると聞きたいことは「動画スタートしてからの時間」だとは思いますが、現在時刻の取得は下記のようにできます。
SYSTEMTIME st;
GetLocalTime( &st );
こんな感じ。

CTransformFilterから動画の長さをとることはできますが、フィルタ設計上
カメラもつなげる想定で作るべきっぽいから書いていいんだろうか
0677デフォルトの名無しさん2007/08/03(金) 01:26:18
動画スタートしてからの時間でした。すいません
教えてください〜
0678デフォルトの名無しさん2007/08/03(金) 03:13:20
動画であれば投げてきたフレーム枚数をカウントしてやって
それをfpsで割るのが「動画スタートからの時間」を得るのには最適だと
思うよ。変にタイマを使ったりすると動画のレートが変わった時点で
使えなくなっちゃうから。わからんならコードをどっかにうpするよ

んで動画の長さを得るのは、ソースフィルタから変換フィルタに渡してやるような
つくりにするのはどうでしょうか?
0679デフォルトの名無しさん2007/08/03(金) 19:35:31
DirectX SDKのドキュメント探したけど
"シーク可能ストリームでは、メディア タイムは常にストリームの開始タイムから相対的になる。"
とあるからGetMediaTimeはシークしても時間は0にならないみたい。
さっき試してみたけどそうなっていました。
0680デフォルトの名無しさん2007/08/04(土) 01:05:41
>>678-679
ありがとうございます
試してみます
0681デフォルトの名無しさん2007/08/06(月) 23:28:44
IAMCameraControl::GetRange()でCameraControl_Exposureの範囲を調べたのですが、
手持ちのWebカメラでは0〜100や0〜130といった値が返ってきました。
http://msdn2.microsoft.com/en-us/library/ms779747.aspx
によると、2^0 = 1sec〜2^130secといった、大きな値に相当してしまいますが、
単位はあてにできないのでしょうか?
せめて+1する毎にexposure timeが二倍になってほしいのですが、
何か方法があったら教えてほしいです。
0682デフォルトの名無しさん2007/08/07(火) 00:48:42
Webカメラに露光時間なんて設定可能なの?
露光時間って、写真の撮影で、弱い光でも感光版が感光できるようにシャッタースピードを遅くするとかのあれだよな?
0683デフォルトの名無しさん2007/08/07(火) 00:54:49
キャプチャをするのに

pCaptureGraphBuilder2->SetOutputFileName( &MEDIASUBTYPE_Avi , L"test.avi" , &pFileOut , &pSink );
pCaptureGraphBuilder2->RenderStream( &PIN_CATEGORY_CAPTURE , NULL , pDeviceFilter , NULL , pFileOut );

というようなグラフ構築を行ったのですが、何回かテストしてtest.aviを上書きするとき、
上書き前の容量より小さいと、ファイルのプロパティに表示される容量が上書き前のまま
になります。(上書き前より大きいと更新されます)
再生してみると、正しくキャプチャされているのですが、この容量表示の問題はどのように
すれば解消できるでしょうか?
(表示上だけでなく、実際に無駄な容量が付加されているのかも?)
0684デフォルトの名無しさん2007/08/07(火) 14:30:46
>>683
DeleteFile
06856832007/08/07(火) 21:00:18
>>684
上書きは基本的にしないようにするもの、ということですね。
ありがとうございました。
0686デフォルトの名無しさん2007/08/08(水) 05:39:26
領域確保しとくとキャプチャの時パフォーマンスが良くなる効能があると言っておこう。
削除の場合は実際にエントリが書き換えられるので、サイズを0にするのも有り。
RIFF解析して自前でサイズ調整するのも意外と簡単だよ。一番外側のチャンクだけ計算するだけで済むしな。
06876832007/08/09(木) 00:58:47
>>686
そういう方法もあるんですね。
ありがとうございます。
0688デフォルトの名無しさん2007/08/09(木) 07:52:41
3:2プルダウンを行うDirectShowフィルタってあるんでしょうか?
0689デフォルトの名無しさん2007/08/09(木) 21:37:52
サンプル元に作っちゃえば早くね?
0690デフォルトの名無しさん2007/08/09(木) 22:26:35
>>688
世界中のソフトハウス探せばどっかにあると思う。
06916882007/08/09(木) 23:30:48
なるほど。
簡単に手に入れられるなら作る必要もないと思ったのですが、作る価値はありそうですね。
やってみます。
ありがとうございました。
0692デフォルトの名無しさん2007/08/11(土) 10:56:07
Nullレンダラが作れなくて困っています。
GraphEditではあるのですが、アプリでインスタンスを作成できません。

CoCreateInstance( CLSID_NullRenderer , NULL , CLSCTX_INPROC_SERVER , IID_IBaseFilter , ( void** )&pNull );

このように書いたところ、ビルド時にCLSID_NullRendererが定義されていない、と言われます。
調べてみると、qedit.hにあるようなので、includeしたところ、今後はdxtrans.hがないと言われました。
でも、このヘッダファイルはPC内にはありませんでした。

どのようにすれば作成できるでしょうか?
0693デフォルトの名無しさん2007/08/11(土) 13:10:14
>>692
そのファイル名で検索すると幾つか情報が見つかるんだが・・・

俺のPCにはDirectX SDKの中に普通に入ってた。
つかDirectXSDKとPlatformSDKはいつのを使ってるかくらいは書いたほうがいいと思うぞ。
06946922007/08/11(土) 14:06:01
>>693
Windows SDKのバージョンは最新だと思います。
DirectX SDKはインストールしていませんでした。
最新版のJune 2007を入れたら、それに入っていました。
VC++でインクルードパスを指定したのですが、それでもコンパイルはエラーになります。
エラーの内容は、DirectX SDKのIncludeフォルダにあるd3drmobj.hというファイル内に
構文エラーがある、というものがたくさん。
あと、
To compile qedit.h you must install the DirectX 9 SDK, to obtain the dxtrans.h header.
というエラーメッセージも。
0695デフォルトの名無しさん2007/08/11(土) 14:31:58
FLVファイルのシークでIMediaSeeking::SetPositions()を使うとフリーズしてしまいます。

必ず発生するというわけではないのですが、高確率で発生します。
スプリッタにflvsplit.dllを使用した時のみこの現象がおきます。
WMPやMPCでは普通にシークできているので、コーディングの問題だと思うのですが...
思い当たる点として、WMPやMPCと違う部分はISampleGrabberを咬ませていることぐらいです。
(シーク時にSetBufferSamples(FALSE)を指定しても変化無しでした)

原因が分かる方はいませんでしょうか。
0696デフォルトの名無しさん2007/08/11(土) 14:34:08
>>694
なんか言ってることが
>>564-565 とか
>>621-623 あたりと全く同じに聞こえるんだが、これは試したの?ちゃんとレスを検索してる?
06976952007/08/11(土) 14:34:19
>>695に追加
フリーズと言ってもCPU使用率が0%なので、処理をしているわけでは無いみたいです。
06986922007/08/11(土) 15:47:32
>>696
すみません、そのレスは見てませんでした。
早速、試しましたけど、ダメでした。
0699デフォルトの名無しさん2007/08/11(土) 16:01:43
ダメって何だよ
>>565ためしても>>621みたいなのが出るってこと?
0700デフォルトの名無しさん2007/08/11(土) 16:57:43
>>698
GUID CLSID_NullRenderer = {0xc1f400a4, 0x3f08, 0x11d3, {0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37}};
0701デフォルトの名無しさん2007/08/11(土) 17:28:22
>>698

レスがそうさくしてめんどいのであまり読んでないが、
NULLレンダラのCLSIDが定義されているヘッダを読み込んだら
こんどはDirectXのヘッダが見つからないって言われたんだろ?

最新のPlatformSDKでDirectShowを使うには同時にDirectXSDKをインストールする必要がある。
もう試した?

>>700
のようにソースにじかに定義しても動くだろうが、PlatformSDKとDirectXSDKをインストールするのが正しい解決方法。
0702デフォルトの名無しさん2007/08/11(土) 17:41:03
>>701
>>693 >>694読めよ・・・ 指摘されてどっちもインストールした、って書いてんだろ

あと「レスがそうさく」、って何? 「錯綜」(さくそう)って言いたいのかな?
レス読まずに余計なレスすると余計にレスがそうさくするよ?
まずは日本語を勉強して、レスをちゃんと読むことから訓練しましょう。
0703デフォルトの名無しさん2007/08/11(土) 18:26:35
まぁまて。間違った情報で答えてる訳でもなし、がんがって回答してくれようとしてる>>701さんせめちゃらめぇぇ。

0704デフォルトの名無しさん2007/08/11(土) 18:41:20

質問者はスレを全く検索せずに質問
回答者はレスを全く読まずに回答、しかも日本語が不自由

これはひどい
0705デフォルトの名無しさん2007/08/11(土) 19:07:55


     ',::::j ==ュ  r== 〈::::::j
     fヾ}.., __ i i..__    l:イ  めんどい!
     lと', ゚ ̄ ,l l  ゚̄   ,リぅ!
     ヽ-ヘ .,_ ,ィ''。_。ヽ、_,. /_ン'   レスがそうさくしてめんどい!
        ', /  _   }  ,'
        l、{  |__〉 /!


0706デフォルトの名無しさん2007/08/11(土) 21:06:39
フィルタの作成と開放についてなんですが、
基本的には

CoCreateInstance( ・・・ );
pGraphBuilder->AddFilter( ・・・ );
・・・
pCaptureGraphBuilder2->RemoveFilter( ・・・ );
pFilter->Release();

という流れですが、以下のようにリリース前に再度作成、追加するのはマズいでしょうか?

CoCreateInstance( ・・・ );
pGraphBuilder->AddFilter( ・・・ );
・・・
pCaptureGraphBuilder2->RemoveFilter( ・・・ );
・・・
CoCreateInstance( ・・・ );
pGraphBuilder->AddFilter( ・・・ );
・・・
pCaptureGraphBuilder2->RemoveFilter( ・・・ );
pFilter->Release();
0707デフォルトの名無しさん2007/08/12(日) 21:50:14
pFilterってフィルタグラフの事じゃないの?
だとしたら基本的に下なんじゃない?
ソースフィルタだけを入れ変えたい時など、わざわざフィルタグラフごと新規で作り直したりはしないよ。
07087062007/08/12(日) 22:10:24
>>707
すみません、pFilterというのはIBaseFilter型DirectShowフィルタの例です。
おっしゃる通り、キャプチャデバイスフィルタなどを入れ替えるときに下の手順を踏んでいます。
問題ないようであれば良かったです。
ありがとうございました。
0709デフォルトの名無しさん2007/08/12(日) 23:11:46
CComPtr 使ってみれ
07107062007/08/13(月) 11:15:01
>>709
これは便利ですね。
ありがとうございます。
0711デフォルトの名無しさん2007/08/15(水) 00:41:29
SetOutputFileName()メソッドとRenderStream()でキャプチャデバイスからの映像データを
AVIファイルに保存するようにしました。
キャプタを実行 → グラフ停止 → ファイルライタに繋がるピンを切断
と進めるた時点では保存したAVIファイルは再生できるのですが、上記流れの後、グラフを再生
すると、AVIファイルが使用中となり再生できなくなります。
アプリを閉じれば再生は可能ですが、アプリ使用中においても再生できるようにするには
どのようにすればよいでしょうか?
なお、ファイルライタはRelease()で参照カウントのデクリメントを行っています。
よろしくお願いします。
07126922007/08/16(木) 08:08:47
>>700
これでできました。
ありがとうございました!
0713デフォルトの名無しさん2007/08/16(木) 17:57:09
Webカメラの映像を録画する単純なプログラムを作っているのですが
・キー入力があるまでプレビューを表示
・キー入力があると録画を開始
上記を行うために、録画前にStop()→キャプチャピンを繋ぐ→Run()としてるですが
Webカメラの露光やホワイトバランスなどの自動設定が初期化されるので
プレビューの状態からStop()せずに録画を行う方法はありますか?
0714デフォルトの名無しさん2007/08/21(火) 11:40:44
コンポジット入力から映像を取得したいんだけど
DirectShowで取得できるハード知らない?
io dataのGV-MVP/TZが手元にあるんだけど、なんか無理そうなんだ
0715デフォルトの名無しさん2007/08/21(火) 14:27:46
>>713
キャプチャピンの先にFileWriterか何かつないでるんかな。
SampleGrabberやTeeを挟んで自前で横取りするようにしてみては。
0716デフォルトの名無しさん2007/08/24(金) 03:55:14
>>714
GV-VCP3R/PCI はダメ?
これでアプリ書いてるけど普通に
S-Video×1、コンポジット×2の
キャプチャデバイスとして見えてる。

もっとも玄人志向のTVチューナ付きに比べると
かなり高いのが難点やなあ。
0717デフォルトの名無しさん2007/08/24(金) 05:13:32
>>713
ttp://www.gdcl.co.uk/articles/MultipleGraphs.pdf
0718デフォルトの名無しさん2007/08/24(金) 16:03:37
すみませーん、DirectShowとか初めて使うんですけど、仕事の書類に
「DirectShow.dllにアクセスして・・・云々」って書いてあるんです
けど、PlatformSDKインスコしてもDirectX9.0cインスコしても、そん
なのどこにもないんですよー。DirectShow.dllって自前で作るんです
か?どうやって?
0719デフォルトの名無しさん2007/08/24(金) 16:15:31
その書類、DirectShow と DLL の間のピリオドはほんとにあったのか?
0720デフォルトの名無しさん2007/08/24(金) 17:17:03
自社製の共通DLLナンジャネ?
0721デフォルトの名無しさん2007/08/25(土) 03:22:01
.NETでそんな名前のDLLを見たような気がする
0722デフォルトの名無しさん2007/08/26(日) 21:55:50
間違えてzipで固めたmp3ファイルをDirectShowに流し込んだら再生された
すげえな
0723デフォルトの名無しさん2007/08/28(火) 01:56:12
zipを展開して再生してるわけじゃないぞ
たぶん
0724デフォルトの名無しさん2007/08/28(火) 12:40:56
Stored(非圧縮)で格納されてるならmp3データの先頭まで検索してそこから再生する
Inflateで格納されてたらNG
0725デフォルトの名無しさん2007/08/28(火) 17:54:30
あっち方面ではmp3をアルバム単位なんかで無圧縮zipで固めたものが良くある。
関連付けの都合なんかで.zip.mp3なんて拡張子が付けられていることも当たり前。
0726デフォルトの名無しさん2007/09/03(月) 00:13:21
Meida Playerのレンダリングプラグインが作りたくて
Media Plyaer SDKと戦っているんですが、
どっかわかりやすいwebページありませんか?
散々ぐぐったけど日本語で書いてあるのはGoogleキャッシュにのこってた
1サイトしかありませんでした。
http://72.14.235.104/search?q=cache:msvxh08gfA0J:developer.mine.nu/
wiki/index.php%3FWMPSDK%252FDSP%25A5%25D7%25A5%25E9%25A5%2
5B0%25A5%25A4%25A5%25F3%25B2%25F2%25C0%25E2+%E3%81%82%E3%8
1%84%E3%81%9D%E3%81%B3%E3%80%80%E9%96%8B%E7%99%BA+Meida+Player+SDK&hl=ja&ct=clnk&cd=4&gl=jp
0727デフォルトの名無しさん2007/09/06(木) 04:28:02
CTransformFilterを継承してフィルタを作成すると
それを読み込んだアプリケーションの終了時にメモリリークが出る
最初は解放の手順が間違っているのかなと思ったんだけど
Grapheditでそのフィルタを読み込んだときも、終了時にエラーがでる。
CTransformFilterを継承しているインプレイスフィルタでも同じ
考える限りSDKにうついているCTransformFilter自体に根本的なバグが隠れている気がするんだが…
0728デフォルトの名無しさん2007/09/06(木) 05:01:53
アレだよ、アレ。COM。
0729デフォルトの名無しさん2007/09/07(金) 17:17:21
フィルタのピン接続について

一度接続したフィルタの画像サイズを変更することは可能でしょうか?

実際にやりたいこと
320*240で描画していたところを途中から640*240サイズのストリームを
描画する方法があれば教えてください。

CBaseOutputPinで作成しております。
0730デフォルトの名無しさん2007/09/07(金) 21:59:21
フォーマットチェンジたい
0731デフォルトの名無しさん2007/09/10(月) 19:08:17
>>730
フォーマットチェンジはどのようにすればいいですか?

(追記)
CTransformFilterからの派生でGetMediaTypeを使用して出力ピンの情報を取得
し、変更をこころみたんですがだめでした。
0732デフォルトの名無しさん2007/09/11(火) 23:13:08
フィルタグラフは再生したまま?停止してピンの再接続はだめ?
あと、入力、出力両方のメディアタイプをかえたいの?
0733デフォルトの名無しさん2007/09/12(水) 15:59:31
>>732
停止してピンの再接続はOKです。
(停止せずに出来るのであればベターです)
変更は出力のみの変更です。
0734デフォルトの名無しさん2007/09/12(水) 21:17:40
サンプルのフラグを立てるたい
ダウンストリームが受け入れるかどうかはフィルタ次第ばい
0735デフォルトの名無しさん2007/09/13(木) 11:02:14
>>734
サンプルのフラグを立てるとはどのようにすればいいですか?

YV12などのグラフィックボード依存のフォーマットでなくRGBで接続しているので
サイズ変更で受け入れが出来ないことは考慮してないです。
0736デフォルトの名無しさん2007/09/13(木) 20:53:53
CBaseInputPin::Receiveあたりをチェックするとよかばってん
受け取る相手が何をするのか書いてあるからチェックチェック
0737デフォルトの名無しさん2007/09/14(金) 11:32:34
>>736
Receive関数の引数IMediaSample *pで出力先のピン情報は取得
出来るのですが書き換える(更新する)方法がわからないです。
SetMediaTypeで新規情報(サイズ変更)を設定しても初期設定の
情報は書き換わってないです。
0738デフォルトの名無しさん2007/09/14(金) 14:49:08
メディアタイプを大きく変えるってことはサンプルバッファのサイズも変えるんだろ?
SetMediaType なんかじゃ済まず、アロケートし直しが必要になってくるような気がする。
0739デフォルトの名無しさん2007/09/14(金) 15:34:32
>>783
サンプルバッファのサイズは変更しません。
初期値で必要な最大サイズを設定しています。

メディアタイプでの変更はサイズのみです。
VIDEOINFOHEADERで設定するbiWidth,biHeightの値のみの変更です。
0740デフォルトの名無しさん2007/09/14(金) 15:36:05
すいません。
↑
>>738様でした。
0741デフォルトの名無しさん2007/09/15(土) 08:05:23
Media Foundationのスレがないみたいだから、ここで質問させてください。
Vistaで、bcdedit /debug onを実行すると、MPEGのDecodeが動作しなくなります。

Q1  これはProtected Media Pathのせいなんでしょうか?それとも、Vistaに付属しているMPEG Decoderの仕様なんでしょうか?
Q2  MPEG Decoderの仕様だとしたら、Kernel Debugできる環境で動く他のMPEG Decoderはありますか?
0742デフォルトの名無しさん2007/09/15(土) 16:23:02
VMR9で最大3つの動画ファイルを透過率を任意に変更しながら
表示を切り替えるプログラムを作成しています。

SDK内のサンプルプログラムBlenderでは、
2つのファイルの同時再生/透過率変更は行えるようですが、
個々のファイルに対し、再生/停止/シークといった制御が
行えません。(再生時には2つ同時に再生されてしまう)


このようなプログラムを開発する場合、何か参考になる
情報がありましたらお教え下さい。
0743デフォルトの名無しさん2007/09/15(土) 23:15:41
あのうVMRのインタフェースIBasicVideo2のGetPreferredAspectRatio以外から
ムービーのアスペクト比を取得するにはどうしたらいいでしょうか?

アスペクト比が設定されているのですがIBasicVideo2が使えない状況に
ありまして困っております。
0744デフォルトの名無しさん2007/09/18(火) 14:02:47
>>741
Q1. (DVD再生時以外は)おおむねベンダ独自の耐タンパの仕組みのせい。
Q2. ffdshow
0745デフォルトの名無しさん2007/09/18(火) 17:30:33
ffdshowでMPEGを有効にすると色々と不安定になるんだが…
0746デフォルトの名無しさん2007/09/20(木) 08:59:09
キャプチャーボードのチューナから動画と音声と取り込むいわゆる録画アプリを作ろうとしているものです。
Geekなページの記事を見ながら、チューナからの動画は表示(プレビュー?)できたのですが、音が出ません。
音周りの処理が書かれている様子もないので当然だと思うのですが、それに関する情報が見当たりません。
MSDNの概要あたりを眺めてもみました。
http://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdx8_c/ds/appdev/capture_intro.asp
眺めてみたのですが、どのインターフェイスを使えばいいのかわかりません。
IAMAudioInputMixerかと思っているのですが、メソッドを眺めるとミキサ全体のようでこれだけではないような気がします。
この辺りの情報ってありませんか?
ヒントがいただければと思います。
0747デフォルトの名無しさん2007/09/20(木) 15:13:22
>>4
0748デフォルトの名無しさん2007/09/20(木) 15:18:56
>>746
クロスバー
0749デフォルトの名無しさん2007/09/22(土) 06:17:44
こんなスレで質問していないで、早く試行錯誤でバグ回避策を見つける仕事に戻るんだ!
何?やる気がありません?なら辞めろや、他の派遣雇うからw
0750デフォルトの名無しさん2007/09/23(日) 18:56:30
はいはい
0751デフォルトの名無しさん2007/09/24(月) 20:52:13
GraphEditを使って目的のフィルタグラフを構築できることを確認したんですが、
これをプログラムとして記述する際、困ったことが起きました。
フィルタを生成するのにCoCreateInstance関数を使いますが、このとき必要なGUIDが
分からないフィルタがあるんです。
Microsoftから標準で提供されているフィルタはMSDNを調べればGUIDが分かりますが、
そうでないフィルタは分かりません。
どうすればそのフィルタのGUIDを知ることができるでしょうか?
ご助言、よろしくお願いします。
0752デフォルトの名無しさん2007/09/24(月) 21:18:10
GraphEditでわかると思ったけど。
07537512007/09/24(月) 21:32:35
>>752
すみません、どこを見ればよいんでしょうか?
例えば、NullレンダラーのGUIDは
{0xc1f400a4, 0x3f08, 0x11d3, {0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37}}
ですが、
GraphEditを見てもこの記述があるところが見つけられません。
0754デフォルトの名無しさん2007/09/24(月) 23:46:54
久しぶりにGraphEdit立ち上げてみたよw
メニューの[Graph]-[Insert Filter] から ダイアログ立ち上げたら
DirectShow Filter -> NULL Renderer 選んでください。んで、展開すると Display Name の後に
@device:sw:{083863F1-70DE-11D0-BD40-00A0C911CE86}\{C1F400A4-3F0B-006008039E37}
ってあるよね。
後半の { } を見てくれ。これってGUIDじゃない?

君に幸あれ
0755デフォルトの名無しさん2007/09/24(月) 23:51:19
やべー11D3-9F0B が抜けてたw 手打ちだったからゴメンな けどまあわかるよね。
最悪、フィルタ名でレジストリ検索したりとか、まあ頑張ってください
0756デフォルトの名無しさん2007/09/24(月) 23:56:18
手打ちかYO!
Guidにしては何か微妙に短いと思ったw
■ このスレッドは過去ログ倉庫に格納されています