楓の掲示板

タイトル Re^2: ムービー拡張 組み込み進捗状況
投稿日: 2004/11/29(Mon) 13:26
投稿者W.Dee   <dee@kikyou.info>
参照先http://kikyou.info/

不在のときにいらしたようで申し訳ありません。
今日は休みなので(食事などで離席していなければ)深夜まで居ると思います。

> > まず、私のHPに置いてある、実行ファイルを使っても、同様の結果になりますか?

MPEG I Splitter のメリット値を元に戻した場合 (つまり、標準で
"MainConcept MPEG Splitter" が使われる状態 )

krmovie.dll では
[1] × [2] ○ [3] ○ [4] ○

krlmovie.dll では
[1] × [2] ○ [3] △ [4] ×


MPEG I Splitter のメリット値を換え、標準のスプリッタが
標準で使われるようにした場合 )

krmovie.dll では
[1] × [2] ○ [3] ○ [4] ○

krlmovie.dll では
[1] × [2] ○ [3] △ [4] ×

MPEG I Splitter のメリット値による状況の変化はありませんでした。

あれ、とおもってこちらでビルドした物でもやってみましたが...
メリット値による状況の変化はありませんでした (上記と同じになりました)。

> スプリッターもCLSID_MPEG1Splitterで生成しているので、標準のが使われると思っていたのですが、違うのでしょうか? って、現に違うんですよね。

そうですね、おかしいと思っていましたが...
確かに前回の実験ではkrmovie.dllによる再生ができていたので、
もしかしたら何か別の要因(スプリッタとは別の)が影響しているのかも知れません。

あるいは私の勘違いという可能性もあります。でしたらスミマセン。
うーん、眠い頭でやったのが悪かったか


> > 問題の、
> m_GraphBuilder->Connect( pIPinUpstream, pIPinDownstream)
> で返ってきている、hr値はなんでしょう?

ここで例外が発生しているのでこの関数は戻っていません。
# それで "Unknown error" となるようです

> そのスプリッターが、そのように接続要求が来ることを想定していない(面倒だから例外にしてる?)ので、例外を出しているのか。
> その接続前のグラフが見たいですね。
> DLLをデバッグビルドすると、ROTに登録するようになるで、GraphEditから接続されているフィルタを見ることが出来ます。
> GraphEditでFile -> Connect to remore Graphとしたら、ROT登録されている物の一覧が出る(たぶん、1つしか出ません)ので、そこで今回のものを選択してください。
> ただし、この時にグラフが作られていて、プログラムが動作していないといけないはずですので、問題の接続前でopenが返るようにソースに変更を加える必要があります。なので、ちょっと面倒ですから、下に書いていることを先に確認してください。
> ちなみにGraphEditは私の環境ではC:\DXSDK\bin\DXUtils\graphedt.exeです。

なるほど。

とりあえず、krmovie.dll のほうで、"MainConcept MPEG Splitter" の方が
使われるようなメリット値の状態で、例の

	if( FAILED(hr = ConnectFilters( pMPEG1Splitter, pMPEGVideoCodec )) )
		return L"Failed to call ConnectFilters.";

の前で強制的に return NULL; で帰るようにしてやってみましたが

+-------------+    +-------------------------------------+
|[0001] Output| -> |Input [MPEG-I Stream Splitter]  Audio|
+-------------+    |                                Video|
                   +-------------------------------------+
+---------------------------------+
|Input [MPEG Video Decoder] Output|
+---------------------------------+
+----------------------+
|Input [Video Renderer]|
+----------------------+

となっていました。[0001] から [MPEG-I Stream Splitter] は接続されていますが、他は接続されていません。
"MainConcept MPEG Splitter" ではなく ちゃんと "MPEG-I Stream Splitter" がフィルタとして
登録されていました。


> CLSID_MPEG1SplitterのクラスIDはどうなっているでしょうか?
> 私の環境では 336475d0-942a-11ce-a870-00aa002feab5 です。

同じです。336475d0-942a-11ce-a870-00aa002feab5 となっています。

> CLSID_MPEG1Splitterはuuids.hにあると思います。
> で、そのクラスIDをレジストリエディタで検索すると、私の環境ではMPEG-I Stream Splitterとなっています。
これも同じです。"MPEG-I Stream Splitter" となっています。

> 後、oleviewでAll Objectsを開いて、MPEG-I Stream Splitterを探し、Implementationタグを見ると、C:\WINNT\system32\quartz.dllとなっています。クラスIDは上述の物と同じです。

はい
うちでは「C:\WINDOWS\system32\quartz.dll」になっていますが、quartz.dll を挿していますね。

> > GraphEditで問題のファイルをFile -> Render Media File...で読み込ませた時、どのようなグラフが構築されますか?
> "MainConcept MPEG Splitter"が使われてますか?

ちょっと図で書きにくいですが

+-----------------+  +---------------------------------------+       +---------------------------------+  +---------------------------+
|[lake.mpg] Output|->|Input [MainConcept MPEG Splitter] Video|-----> |Input [MPEG Video Decoder] Output|->|VMR Input0 [Video Renderer]|
+-----------------+  |                                  Audio|--+    +---------------------------------+  +---------------------------+
                     +---------------------------------------+  |    +---------------------------------------+  +---------------------------------------+  +----------------------------------------------------------------------+
                                                                +--> |XForm In [MPEG Audio Decoder] XForm Out|->|Input01 [Morgan Stream Switcher] Output|->|Audio Input pin (rendered) [Default DirectSound Device] (clock source)|
                                                                     +---------------------------------------+  |Input02                                |  +----------------------------------------------------------------------+
                                                                                                                +---------------------------------------+


となっています。標準の "MPEG-I Stream Splitter" を使うようにメリット値を変更すると、
上記の "MainConcept MPEG Splitter" が "MPEG-I Stream Splitter" に変わります。

Morgan Stream Switcher って前から気になっていたんですがなんなんでしょうね...
標準で入る物でしょうか。C:\WINDOWS\system32\MMSwitch.ax にあって、説明は

   This filter allows you to use multiple-language AVIs in
   Windows Media Player and to switch the audio stream
   on the fly.

   Go in the "Language" menu of Windows Media Player to select
   the active audio stream.

   http://www.morgan-multimedia.com

となっています。

# Nimo Codec pack というコーデック詰め合わせ (キワモノ) をインストールしたときに
# 入ったのかも知れません http://nimo.titanesk.com/


- 関連一覧ツリー (▼ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)
おなまえ
Eメール
タイトル
メッセージ   手動改行 強制改行 図表モード
参照先
reCAPTCHA
下に表示されている二つの英単語を、スペースで区切って入力してください。

暗証キー (英数字で8文字以内)

- 以下のフォームから自分の投稿記事を修正・削除することができます -
処理 記事No 暗証キー