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

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