DirectShowと戦うスレ Part 2
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/08(水) 00:25:56http://pc8.2ch.net/test/read.cgi/tech/1026666092/
0711デフォルトの名無しさん
2007/08/15(水) 00:41:29AVIファイルに保存するようにしました。
キャプタを実行 → グラフ停止 → ファイルライタに繋がるピンを切断
と進めるた時点では保存したAVIファイルは再生できるのですが、上記流れの後、グラフを再生
すると、AVIファイルが使用中となり再生できなくなります。
アプリを閉じれば再生は可能ですが、アプリ使用中においても再生できるようにするには
どのようにすればよいでしょうか?
なお、ファイルライタはRelease()で参照カウントのデクリメントを行っています。
よろしくお願いします。
0713デフォルトの名無しさん
2007/08/16(木) 17:57:09・キー入力があるまでプレビューを表示
・キー入力があると録画を開始
上記を行うために、録画前にStop()→キャプチャピンを繋ぐ→Run()としてるですが
Webカメラの露光やホワイトバランスなどの自動設定が初期化されるので
プレビューの状態からStop()せずに録画を行う方法はありますか?
0714デフォルトの名無しさん
2007/08/21(火) 11:40:44DirectShowで取得できるハード知らない?
io dataのGV-MVP/TZが手元にあるんだけど、なんか無理そうなんだ
0715デフォルトの名無しさん
2007/08/21(火) 14:27:46キャプチャピンの先にFileWriterか何かつないでるんかな。
SampleGrabberやTeeを挟んで自前で横取りするようにしてみては。
0716デフォルトの名無しさん
2007/08/24(金) 03:55:14GV-VCP3R/PCI はダメ?
これでアプリ書いてるけど普通に
S-Video×1、コンポジット×2の
キャプチャデバイスとして見えてる。
もっとも玄人志向のTVチューナ付きに比べると
かなり高いのが難点やなあ。
0717デフォルトの名無しさん
2007/08/24(金) 05:13:32ttp://www.gdcl.co.uk/articles/MultipleGraphs.pdf
0718デフォルトの名無しさん
2007/08/24(金) 16:03:37「DirectShow.dllにアクセスして・・・云々」って書いてあるんです
けど、PlatformSDKインスコしてもDirectX9.0cインスコしても、そん
なのどこにもないんですよー。DirectShow.dllって自前で作るんです
か?どうやって?
0719デフォルトの名無しさん
2007/08/24(金) 16:15:310720デフォルトの名無しさん
2007/08/24(金) 17:17:030721デフォルトの名無しさん
2007/08/25(土) 03:22:010722デフォルトの名無しさん
2007/08/26(日) 21:55:50すげえな
0723デフォルトの名無しさん
2007/08/28(火) 01:56:12たぶん
0724デフォルトの名無しさん
2007/08/28(火) 12:40:56Inflateで格納されてたらNG
0725デフォルトの名無しさん
2007/08/28(火) 17:54:30関連付けの都合なんかで.zip.mp3なんて拡張子が付けられていることも当たり前。
0726デフォルトの名無しさん
2007/09/03(月) 00:13:21Media 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それを読み込んだアプリケーションの終了時にメモリリークが出る
最初は解放の手順が間違っているのかなと思ったんだけど
Grapheditでそのフィルタを読み込んだときも、終了時にエラーがでる。
CTransformFilterを継承しているインプレイスフィルタでも同じ
考える限りSDKにうついているCTransformFilter自体に根本的なバグが隠れている気がするんだが…
0728デフォルトの名無しさん
2007/09/06(木) 05:01:530729デフォルトの名無しさん
2007/09/07(金) 17:17:21一度接続したフィルタの画像サイズを変更することは可能でしょうか?
実際にやりたいこと
320*240で描画していたところを途中から640*240サイズのストリームを
描画する方法があれば教えてください。
CBaseOutputPinで作成しております。
0730デフォルトの名無しさん
2007/09/07(金) 21:59:210731デフォルトの名無しさん
2007/09/10(月) 19:08:17フォーマットチェンジはどのようにすればいいですか?
(追記)
CTransformFilterからの派生でGetMediaTypeを使用して出力ピンの情報を取得
し、変更をこころみたんですがだめでした。
0732デフォルトの名無しさん
2007/09/11(火) 23:13:08あと、入力、出力両方のメディアタイプをかえたいの?
0733デフォルトの名無しさん
2007/09/12(水) 15:59:31停止してピンの再接続はOKです。
(停止せずに出来るのであればベターです)
変更は出力のみの変更です。
0734デフォルトの名無しさん
2007/09/12(水) 21:17:40ダウンストリームが受け入れるかどうかはフィルタ次第ばい
0735デフォルトの名無しさん
2007/09/13(木) 11:02:14サンプルのフラグを立てるとはどのようにすればいいですか?
YV12などのグラフィックボード依存のフォーマットでなくRGBで接続しているので
サイズ変更で受け入れが出来ないことは考慮してないです。
0736デフォルトの名無しさん
2007/09/13(木) 20:53:53受け取る相手が何をするのか書いてあるからチェックチェック
0737デフォルトの名無しさん
2007/09/14(金) 11:32:34Receive関数の引数IMediaSample *pで出力先のピン情報は取得
出来るのですが書き換える(更新する)方法がわからないです。
SetMediaTypeで新規情報(サイズ変更)を設定しても初期設定の
情報は書き換わってないです。
0738デフォルトの名無しさん
2007/09/14(金) 14:49:08SetMediaType なんかじゃ済まず、アロケートし直しが必要になってくるような気がする。
0739デフォルトの名無しさん
2007/09/14(金) 15:34:32サンプルバッファのサイズは変更しません。
初期値で必要な最大サイズを設定しています。
メディアタイプでの変更はサイズのみです。
VIDEOINFOHEADERで設定するbiWidth,biHeightの値のみの変更です。
0740デフォルトの名無しさん
2007/09/14(金) 15:36:05↑
>>738様でした。
0741デフォルトの名無しさん
2007/09/15(土) 08:05:23Vistaで、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表示を切り替えるプログラムを作成しています。
SDK内のサンプルプログラムBlenderでは、
2つのファイルの同時再生/透過率変更は行えるようですが、
個々のファイルに対し、再生/停止/シークといった制御が
行えません。(再生時には2つ同時に再生されてしまう)
このようなプログラムを開発する場合、何か参考になる
情報がありましたらお教え下さい。
0743デフォルトの名無しさん
2007/09/15(土) 23:15:41ムービーのアスペクト比を取得するにはどうしたらいいでしょうか?
アスペクト比が設定されているのですがIBasicVideo2が使えない状況に
ありまして困っております。
0744デフォルトの名無しさん
2007/09/18(火) 14:02:47Q1. (DVD再生時以外は)おおむねベンダ独自の耐タンパの仕組みのせい。
Q2. ffdshow
0745デフォルトの名無しさん
2007/09/18(火) 17:30:330746デフォルトの名無しさん
2007/09/20(木) 08:59:09Geekなページの記事を見ながら、チューナからの動画は表示(プレビュー?)できたのですが、音が出ません。
音周りの処理が書かれている様子もないので当然だと思うのですが、それに関する情報が見当たりません。
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:220748デフォルトの名無しさん
2007/09/20(木) 15:18:56クロスバー
0749デフォルトの名無しさん
2007/09/22(土) 06:17:44何?やる気がありません?なら辞めろや、他の派遣雇うからw
0750デフォルトの名無しさん
2007/09/23(日) 18:56:300751デフォルトの名無しさん
2007/09/24(月) 20:52:13これをプログラムとして記述する際、困ったことが起きました。
フィルタを生成するのにCoCreateInstance関数を使いますが、このとき必要なGUIDが
分からないフィルタがあるんです。
Microsoftから標準で提供されているフィルタはMSDNを調べればGUIDが分かりますが、
そうでないフィルタは分かりません。
どうすればそのフィルタのGUIDを知ることができるでしょうか?
ご助言、よろしくお願いします。
0752デフォルトの名無しさん
2007/09/24(月) 21:18:100753751
2007/09/24(月) 21:32:35すみません、どこを見ればよいんでしょうか?
例えば、NullレンダラーのGUIDは
{0xc1f400a4, 0x3f08, 0x11d3, {0x9f, 0x0b, 0x00, 0x60, 0x08, 0x03, 0x9e, 0x37}}
ですが、
GraphEditを見てもこの記述があるところが見つけられません。
0754デフォルトの名無しさん
2007/09/24(月) 23:46:54メニューの[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最悪、フィルタ名でレジストリ検索したりとか、まあ頑張ってください
0756デフォルトの名無しさん
2007/09/24(月) 23:56:18Guidにしては何か微妙に短いと思ったw
0758デフォルトの名無しさん
2007/09/25(火) 00:14:29困ったらまたおいでお嬢さん
0759デフォルトの名無しさん
2007/09/25(火) 02:34:15有識者だけどおっちょこちょいの>>752(褒め言葉)で盛り上がるスレはここですか。
0760デフォルトの名無しさん
2007/09/25(火) 07:12:460761デフォルトの名無しさん
2007/09/25(火) 10:24:35どのようにコーディングしたら良いでしょうか。
0762デフォルトの名無しさん
2007/09/25(火) 20:04:080763デフォルトの名無しさん
2007/10/02(火) 15:58:31QuartzTypeLib.dllに参照設定して
RenderFile()→各種設定→Play()
とすると(初回だけ)再生出来るのですが、もう一度別のファイルを
RenderFile()したあと、IVideoWindowを再取得して
スタイルを設定しようとしたところで0x80004002が発生します。
MSDNによると再度RenderFile()するためにはフィルタを全削除しろと
あるのですが、QuartzにはEnumFilters()やRemoveFilter()がないので
やむなくいったんFilgraphManagerを解放→GC.collect()してから
RenderFile()しても、結局上記と同じ場所で例外が起きてしまいます。
アドバイスよろしくお願いします。
0764デフォルトの名無しさん
2007/10/02(火) 20:53:59中で使われているフィルタが怪しい
0765デフォルトの名無しさん
2007/10/02(火) 20:55:26自作の変換フィルタ間に入れてデータがLRとなっているのをLLかRRにすればいいんじゃないの?
0766デフォルトの名無しさん
2007/10/02(火) 21:28:38単純にどんどんファイルを読んで再生とかやると継ぎ目に真白なフレームがはさまったり汚くなってしまいます
音なしのAVIなのでそこまでシビアにつなげられなくてもいいのですが
映像として奇麗につなげるには
グラフ内でソースをどんどん切り替えていく、って形になるんでしょうか?
0767763
2007/10/02(火) 22:41:48やはりそんなところですかね…。
ただ一応、開発ターゲットの端末に添付の再生アプリでは
ふつうに別のファイルを再生できるので、回避策はあるのかも知れません。
フィルタを削除するさいにやっておく後始末とかって
何かあるんでしょうか。
0768763
2007/10/03(水) 02:39:01試しに思い切ってQuartzTypeLib.dllを参照する方法を止め、
[ComImport, Guid(...), ...] interface IGraphBuilder ... { ... }
と手動で定義する方法(DirectShowNetで採用してるもの)にしたら
ちゃんと動くようになりました。
typelibでラップする方法の不具合かな? CE限定なのかは謎。
ちなみにその端末だとやっぱりIEnumFiltersは取得できても
Next()で未実装エラーが戻りました。とにかくCE要注意。
0769デフォルトの名無しさん
2007/10/03(水) 17:59:04再生リスト(.wpl)使えば順番に再生してくれる
0770デフォルトの名無しさん
2007/10/03(水) 18:00:04たまたまかもよ
デバッガで追うべし
0771デフォルトの名無しさん
2007/10/03(水) 22:06:41音なしのAVI程度なら avi 関連 API と DrawDibDraw で・・
0772768
2007/10/04(木) 05:29:28や、これまで再現率100%だったのがこの改良で全く出なくなったので、
対処方法としてはこれで間違いなさそうです。
COM相互運用(マネージドとCOMのやり取り)はけっこう高度な
トピックらしいですね。するとCEは関係ないかも。
一度QuartzTypeLib.dll(tlbimpというツールに自動生成させる)を
解析したものと、DirectShowNet方式の手動定義を比較して、
ちゃんとした原因を突き止めてみたいです。
0773デフォルトの名無しさん
2007/10/07(日) 18:30:13DirectShowで再生してる動画の上にテキストを置きたいんですけど(ニコニコ動画みたいな感じに)
普通に再生している動画をSetWindowPositionでウィンドウに表示させて、そのウィンドウの子ウィンドウとして
スタティックコントロールを動画の上に置こうとすると、動画の下に隠れてしまいます。
WS_EX_TOPMOSTを指定しても隠れてしまいました。
そこで、SetWindowPositionでウィンドウに動画を表示させるのをやめて
グラバフィルタでフレームを取得して、フレームを取得するごとに呼ばれる
コールバック関数内で取得したフレームをウィンドウに再描画するという形にしたところ
スタティックコントロールが上手く見えるようになりました。
しかし、今度は動画の再生が進むうちに動作が重くなってしまい、コマ飛びが起きるようになってしまいました。
コマ飛びが起きないような方法はないでしょうか。
0774デフォルトの名無しさん
2007/10/07(日) 18:38:020775773
2007/10/07(日) 19:08:58ありがとうございます。
VMRについて少し調べてみたんですが、確かに動画とテキストを合成して
表示するような形にすれば出来そうです。
ただ、773に書いたような方法ではテキストは表示せずに動画を再生しているだけで
重くなってしまいます。
VMRを用いて、動画とテキストを合成して再生する方法だと、動画再生自体が重くなる
ようなことはなくなるでしょうか。
0776デフォルトの名無しさん
2007/10/07(日) 20:46:420777デフォルトの名無しさん
2007/10/07(日) 22:05:35自分の書いたプログラムが悪いのに、他に原因があるように思っている時点で、
どうやって処理させても結果は同じ。
0778デフォルトの名無しさん
2007/10/09(火) 19:36:44をもとに、ISampleGrabberCBインタフェースの実装を試みているのですが、
『error C2512: 'CUnknown' : クラス、構造体、共用体に既定のコンストラクタがありません。』
『error C2614: 'mySampleGrabber' : イニシャライズ リスト内のクラス 'Cunknown' が基本クラスでもメンバでもありません。』
の2つのエラーが出てしまいます。ヘッダファイルやリンクの問題は解決したと思うんですけど
C++に慣れていないのでここからどう直せばいいかが分かりません。
以下、ソースです(行数の関係で詰めているので見にくいと思いますが…)
class CGrabCB: public CUnknown, public ISampleGrabberCB{
public:
DECLARE_IUNKNOWN;
STDMETHODIMP NonDelegatingQueryInterface(REFIID riid, void **ppv) {
if( riid == IID_ISampleGrabberCB ){
return GetInterface((ISampleGrabberCB*)this, ppv);
}
return CUnknown::NonDelegatingQueryInterface(riid, ppv);
}
// ISampleGrabberCB のメソッド
STDMETHODIMP SampleCB(double SampleTime, IMediaSample *pSample){
return E_NOTIMPL;
}
STDMETHODIMP BufferCB(double SampleTime, BYTE *pBuffer, long BufferLen){
cerr << "Sample time: " << SampleTime << "\t";
cerr << "BufferLen: " << BufferLen;
cerr << endl;
SaveOneImage("C:\\tmp.yuv", pBuffer, BufferLen); // 後に定義する
return S_OK;
}
// コンストラクタ
CGrabCB( ) : CUnknown("SGCB", NULL){ }
};
0779デフォルトの名無しさん
2007/10/09(火) 20:45:340780778
2007/10/09(火) 21:49:39今度は部分DECLARE_IUNKNOWNマクロで実装されているAddRef()周りが原因で
プログラムを起動した瞬間強制終了してしまいます。
DECLARE_IUNKNOWN部分を自分で実装して、AddRef()のみ実装しないようにしたところ
一応動作はするようになりました。
AddRef()を実装するために、他に実装する何かがあるのでしょうか。
0781デフォルトの名無しさん
2007/10/09(火) 23:38:58pCaptureGraphBuilder2->SetOutputFileName( &MEDIASUBTYPE_Avi , キャプチャファイルのパス , &pFileOut , &pSink );
pFileOut : AviMux( IBaseFilter型 )
pSink : ファイルライタのインターフェイス( IFileSinkFilter型 )
キャプチャ終了後、AviMuxのピンを切り離し、プレビュー用のグラフ再生を行うと、ファイルライタが
グラフ内に残っているため、それによって作成したファイルが使用中となって再生できません。
キャプチャが終了したファイルはすぐに再生して確認できるようにしたいのですが、
(現状はグラフ停止中かアプリを終了しないと再生できません)
どのようにすればよいでしょうか?
上記のような便利なユーティリティ関数を使わず、地道にファイルライタ( IBaseFilter型 )の
インスタンスを作成して、ファイル名の設定、フィルタグラフの構築、と進め、キャプチャ終了後、
ファイル名を変えるかファイルライタを削除するかなりをしないといけないでしょうか?
0782デフォルトの名無しさん
2007/10/10(水) 03:18:00HRESULT CGrabRenderer::DoRenderSample(IMediaSample *pMediaSample) {
HRESULT hr=S_OK;
CAutoLock mylock(&m_CritSec);
LPBYTE pbSrc=NULL;
const long lActualSize=pMediaSample->GetActualDataLength();
pMediaSample->GetPointer(&pbSrc);
// 表示ウィンドウからデバイスコンテキストを取得して描画
if(IsWindow(m_hwnd)==TRUE) {
BITMAPINFO bi={m_Vih.bmiHeader};
const HDC hdc=GetDC(m_hwnd);
RECT rect;
GetClientRect(m_hwnd,&rect);
StretchDIBits(hdc,0,0,rect.right-rect.left,rect.bottom-rect.top
,0,0,m_Vih.bmiHeader.biWidth , m_Vih.bmiHeader.biHeight
,pbSrc,&bi,DIB_RGB_COLORS, SRCCOPY);
ReleaseDC(m_hwnd,hdc);
}
return hr;
}
この実装方法をインターネット上のソース等を参考に試したのですが、音声だけが再生され、画像が表示されません。
pMediaSample->GetPointer(&pbSrc);でpbSrcにビットマップを読み込んでいると思っていたのですが、MSDNを参照したところ
GetPointer()は引数のバッファへのポインタを返すだけなようです。そうすると、直前で宣言、しかもNULLを代入しているpbSrcへの
ポインタを取得したところでビットマップを読み込めていないのではないかと考えたのですが、IMediaSampleでの画像の読み込み方法が
分かりません。
長文ですみません。
DoRenderSampleはどのように実装したら良いのでしょうか。
0783デフォルトの名無しさん
2007/10/10(水) 03:23:300784デフォルトの名無しさん
2007/10/11(木) 18:55:44を元に、DirectShowで擬似ストリーミングを行おうと思ったのですが
ネットワークからダウンロード中はプログラムが固まってしまい
ダウンロードが全て完了したら再生出来るような形になってしまいます。
単にファイル名をネットワーク上のファイルにするだけでは駄目ということでしょうか。
これだとローカルにファイルを落として、そのローカル内のファイルを
再生するのと変わらないので意味がないのですが、DirectShowで
ストリーミングを行う場合、自作のソースフィルターを作らないといけないのでしょうか。
出来れば完全なストリーミング、難しければ擬似ストリーミングを考えています。
0785781
2007/10/12(金) 21:50:32pSink->SetFileNameで名前を変更すれば録画ファイルは解放されました。
0786デフォルトの名無しさん
2007/10/17(水) 19:07:53を作成したいのですが、お勧めの書籍などありましたらご教授願えないでしょうか。
directxやdirectshowには触れたこともない初心者なのですが、これは無謀というも
のでしょうか?
0787デフォルトの名無しさん
2007/10/17(水) 20:06:54ライブラリでも何でも探してみるとよろしいかと
0788デフォルトの名無しさん
2007/10/17(水) 20:36:160789デフォルトの名無しさん
2007/10/17(水) 20:50:460790デフォルトの名無しさん
2007/10/18(木) 04:16:210791デフォルトの名無しさん
2007/10/18(木) 04:17:56ttp://www1.bbiq.jp/kougaku/link_videocap.html
が参考になると思う
0792デフォルトの名無しさん
2007/10/18(木) 14:03:41サポート外なら
DirectShowでカメラ画像取得→画像形式変換→OpenCVで処理
という手が使える・・・ちょっと面倒くさいが
0793デフォルトの名無しさん
2007/10/25(木) 18:25:240794デフォルトの名無しさん
2007/10/25(木) 18:40:251.5倍速再生で声が甲高くならないように、とか?
オーディオレンダラの前にフィルタを追加して、
再生速度に応じてピッチを変更する。
ピッチ変更の処理の実装にはLGPL のライブラリなんかもあるね。
ttp://www.surina.net/soundtouch/
GPL が嫌なら自分で作っても1.5倍位までならそう聞き苦しくないものが
簡単にできる。
0795デフォルトの名無しさん
2007/10/28(日) 03:51:40もしかして他スレで動画をフーリエ変換したいと質問されていた方かな?
そうだったらこんなところに誘導するような羽目になってすいません。
単にWebカメラから動画をキャプチャしたいというならdirectshow付属のgrapheditを使ってしまうのが楽だと思いますよ
grapheditから、フィルタを呼び出して
カメラとFilewriterフィルタを繋いで上げましょう。間に動画圧縮のフィルタを入れてもよいです。
あとは、aviutil等のツールから連番のbmpで吐き出してしまえばよいと思います。
(他のツールもあるかも)
directshow自体は、それなりにプログラム経験と能力のある人でも使い方覚えるだけで一月くらいはかかるので
大学の学部クラスで大学からプログラム覚えたとかなら苦労は避けられないかと・・・。
0796デフォルトの名無しさん
2007/11/01(木) 16:53:14DirectShowのデコーダフィルタ部で、オーディオのタグ情報(曲名など)は取得できないのでしょうか?
やりたい事は、MP3デコーダ(自作)でタグ情報を取得し、アプリに投げてやるという事です。
どうも上流のMPEG-1 Stream Splitterからは、タグのデータが流れてこない気がします。
例えば、先頭にタグの付いたMP3ファイルをDirectShowで再生すると、
デコーダにはタグ部のデータは渡されず、タグの後のフレームデータから渡されるようです。
入力ピンのWAVEFORMAT構造体の後ろにタグがあるかと考えましたが、そこにも無いようです。
どうかヒントをお願いします。
0797デフォルトの名無しさん
2007/11/01(木) 20:04:02もしスプリッタがタグ情報を流してくれるとするならば、ヘルプにどのように格納して渡すのか記しているはず。
一般的にはアプリケーションがそのMP3をパースしてタグ情報を引っ張り出して表示するんじゃないかな。
それともどっかに「タグ情報流すよ」みたいな記述があったの?
0798796
2007/11/02(金) 01:28:50いや無いですが、そういう要望があったので、可能なのかと思って質問しました。
何かのビデオで入力ピンのAM_MEDIA_TYPEのVIDEOINFOHEADERの後ろに
ヘッダが格納されていることがあったので、同じようにどこかにあるかと思っていました。
となるとデコーダからタグ情報を得るのは難しそうですね…
0799796
2007/11/05(月) 19:06:27スプリッタがこのインターフェイスを実装していました。
ということで解決しました。ありがとうございました。
0800デフォルトの名無しさん
2007/11/05(月) 19:44:070801デフォルトの名無しさん
2007/11/14(水) 19:09:38DVキャプチャしつつ同時に
プロキシファイルを作成しようと考えているのですが、
どんな方法が考えられるでしょうか。
MSDVからの出力をInfTeeでふたつに分けて
片方はDVAVIに落とし
もう片方はエンコード処理をしてプロキシファイルに落とす、というのは素人の考えでしょうか。
出来ればプロキシの方は5分単位で分割して複数ファイル作りたいです。
DirectX,Window SDKs共に最新のものをインストールしてあります。
ご教授宜しくお願いします。
0802デフォルトの名無しさん
2007/11/14(水) 20:03:22それでもいいですけど、Inplace フィルタを作って、そ奴が間に入って素通ししつつ
プロキシファイルも作るって方が簡単だと思いますよ。
性能面で余裕があるなら、標準入力から DV ストリームを受け取って
プロキシファイルを作るexeを CreateProcess してパイプで流すとか
そんな構造にするとデバグも楽です。
0803デフォルトの名無しさん
2007/11/14(水) 20:56:58ありがとうございます。
Inplaceフィルタと聞いてパッと浮かんでこないですが
イメージ的にFileWriterフィルタの機能を持たせつつOutPutで
入力されたストリームを流すということでしょうか
フィルタを作るというのが想像できなくて
素人が1から作れるものでしょうか。
作る上で802さんが参考になられたサイトとかありますでしょうか。
0804デフォルトの名無しさん
2007/11/15(木) 15:18:17そんな感じです。
NullNull フィルタサンプルを改造してゆくのが一番簡単・・・
と思ったんですが、現行の SDK には含まれていないのかな。
だとすると tee で分けて Dump フィルタの改造版で書いてゆくのが
いいかも知れませんね。
マルチスレッドのプログラミングに慣れていれば(あるいは慣れる気があるなら)、
普通のフィルタを素人が1から作るのはそう難しくはありません。
(ソースフィルタやスプリッタ、パーサは別。これらは結構難しい)
参考になるサイトはありません。
0805デフォルトの名無しさん
2007/11/15(木) 20:49:37ありがとうございます。
NullNullフィルタサンプルは見つかりませんでしたが
Dumpフィルタを改造してみます。
もうひとつ問題にあたってしまって
エンコードするほうの処理ですが
Splitter→(V)DVDecoder→ASFWriter(V)
→(A)→→→→→→ASFWritter(A)
とGraphEdit上で接続、ビデオのほうは繋がりましたが
オーディオの方が「中間に必要な…」というメッセージが出てしまい
繋ぐことが出来ません。
実はDVキャプチャといいましても
HD(TV局などで使う機器、出力解像度は1920*1080)で
音声の周波数が48kHzのようです。
一般的なDVのほうは上記のフィルタ構成で接続確認は出来ました。
こちらは32kHzらしくてAsfWriterが32kHz以上対応していないんじゃないかと思い
調査していましたが情報は手に入らず・・・。
何か知っていればご教授下さい。
0806デフォルトの名無しさん
2007/11/16(金) 12:51:26ちょっとわからない事がありましたのでどなたか教えていただけないでしょうか。
プロパティページの OnReceiveMessage で、マウス関係のメッセージを拾ってくれません。
INT_PTR CHogeProperties::OnReceiveMessage(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_MOUSEMOVE:
Point_x = LOWORD(lParam);
Point_y = HIWORD(lParam);
//ここにフィルターへマウス座標を通知するコードを書く
return (LRESULT) 1;
}
return CBasePropertyPage::OnReceiveMessage(hwnd,uMsg,wParam,lParam);
}
これじゃダメなんでしょうか。
WM_LBUTTONDOWN とか WM_LBUTTONUP なんかも拾ってくれないのですが・・。
こちらが提供すべき情報で、これ以外に何か必要なものがありましたら指摘していただけませんか。
0807デフォルトの名無しさん
2007/11/19(月) 21:07:55差分タイムを指定して、mpeg2動画のスクリーンショットを取得しようとしています。
�@指定:100 100秒ごとに画像取得
�A指定:1 1秒ごとに画像取得
しかし、プログラム動作がうまくいったと思っても、上記のような指定をした際に
�@での100秒時の画像と �Aでの100秒時の画像 が食い違う現象がおきてしまいます。
(違うといっても誤差1秒程度のもののようですが・・)
上記の関数を使って mpeg2から確実に指定位置の画像を取得する方法を知りたいのですが・・。
0808デフォルトの名無しさん
2007/11/19(月) 23:24:30よく状況がわかんないけど�Aが間に合ってないの?
0809デフォルトの名無しさん
2007/11/20(火) 03:00:49■ このスレッドは過去ログ倉庫に格納されています