DirectShowと戦うスレ Part 2at TECH
DirectShowと戦うスレ Part 2 - 暇つぶし2ch596:デフォルトの名無しさん
07/07/07 01:13:03
DirectShowで画像を回転させるフィルタでいいのない?
逆さ向けてビデオとってしまったんだorz

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

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

598:592
07/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:デフォルトの名無しさん
07/07/07 19:58:50
それは、親ウインドのバックグラウンド再描画で映像ウインドが消されてしまうからじゃないかな。
親ウインドのWM_ERASEBKGNDをDefaultWindowProcに渡さないようにして試してみな。

case WM_ERASEBKGND:
return 0;
でOK


600:デフォルトの名無しさん
07/07/08 13:54:57
>>599ご返事ありがとうございます。

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

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


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


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

WS_POPUP | WS_SYSMENU | WS_VISIBLE | WS_BORDER


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

604:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/08 20:24:33
ふとスレ見直したんだけど、ownerじゃなくてparentでないのか?
窓の設定が間違っている予感。

606:デフォルトの名無しさん
07/07/08 20:35:11
もうDirectShow関係なくね?

607:デフォルトの名無しさん
07/07/08 20:47:08
>>605ご返事ありがとうございます。

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


608:デフォルトの名無しさん
07/07/08 21:17:56
Owner指定なしで、最大化はできんの?

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

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


610:599
07/07/08 22:11:45
ウインド関係がよくわからない。

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

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



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

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

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

613:592
07/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
07/07/09 12:22:04
皆さん色々と助言をありがとうございます。
すこし原因らしきものが見えましたのでご報告します。

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

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

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

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

616:デフォルトの名無しさん
07/07/10 00:26:34
なぜそんな重要なことを。。

617:デフォルトの名無しさん
07/07/10 00:31:05
Direct3Dということはゲームのムービーでしょうか?

618:デフォルトの名無しさん
07/07/10 10:40:38
聞いてどうすんの

619:デフォルトの名無しさん
07/07/10 14:01:52
#include <qedit.h>

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

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

対応策ってありますか?

620:デフォルトの名無しさん
07/07/10 14:16:28
環境とエラー内容は?

621:デフォルトの名無しさん
07/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:デフォルトの名無しさん
07/07/10 14:51:17
>>621
d3drm~ってファイル名から明らかだが
qeditがDirectX7を使ってるからだろ?
一つのコンパイルパスにおいて複数のバージョンのDirectXは同居できない。

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

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

624:619
07/07/10 14:56:28
>>565
で通りました。
ありがとうございます><

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

626:デフォルトの名無しさん
07/07/10 16:02:52
うわ

627:デフォルトの名無しさん
07/07/10 16:42:41
まいったねこりゃ

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


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

630:デフォルトの名無しさん
07/07/11 07:02:28
ない

631:629
07/07/11 07:35:29
>>630
ありがとうございました!

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

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





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

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

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


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

637:デフォルトの名無しさん
07/07/15 19:51:58
幼女と老婆を酷使する番組w

638:デフォルトの名無しさん
07/07/15 19:52:58

間違えた。無視して

639:デフォルトの名無しさん
07/07/15 22:03:20
だが断る

640:デフォルトの名無しさん
07/07/17 18:48:32
DirectShowはょぅじょとばばぁを酷使しますね。

フィルタをシェアウエアで出したいんだがいいとこある?

641:デフォルトの名無しさん
07/07/18 00:19:37
どんなフィルタ?

642:デフォルトの名無しさん
07/07/18 12:24:38
たとえば
>>401の拡張したやつ
顔を検出するやつ
動物体を検知するやつ
あとはサンプルグラバのこったやつ

643:デフォルトの名無しさん
07/07/18 13:49:33
パターン認識のフィルタならどっかになかったっけ?フリーで。

644:デフォルトの名無しさん
07/07/18 22:06:45
javaで顔認識で心霊写真チェッカーみたいなのがあったけどね。

645:デフォルトの名無しさん
07/07/18 22:32:22
windows2000で最新のPlatformSDK入れたヤツ居る?
BaseClassesをnmakeしようとすると
makefile(53) : fatal error U1083: ターゲット マクロ '' が展開されません。
って出るんだけど・・・。

646:デフォルトの名無しさん
07/07/19 13:38:03
複数のBMPから、AVIを作りたいなーと思って調べていたのですが、
DirectShowのフィルタを自作しなければできないのでしょうか??


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch