DirectShowと戦うスレ Part 4at TECH
DirectShowと戦うスレ Part 4 - 暇つぶし2ch200:デフォルトの名無しさん
09/01/09 22:37:33
URLリンク(msdn.microsoft.com)
つか、全部書いてあるだろ。ドキュメントくらい読め。

201:184
09/01/09 23:53:34
しかし なにもおこらない
Runして初めて表示される・・

202:デフォルトの名無しさん
09/01/10 00:58:38
oops!レンダラ自作してるのか。悪かった。
Pauseでポスターフレーム出す処理はレンダラが実装する必要があるんだわ。

void OnReceiveFirstSample(IMediaSample *pMediaSample) {
DoRenderSample(pMediaSample);
}

これ追加するとよかばってん

203:デフォルトの名無しさん
09/01/10 08:09:02
おー、OnReceiveFirstSampleってそうやって使うんか。
184じゃないけどthx

204:169
09/01/12 19:29:05
とりあえずGraphEditを使ってみた結果
URLリンク(sageuploader.if.land.to)
このようにすることでライブストリーミングが保存できました
あとはこれをプログラムで書くだけなのですがピンのつなぎ方がよくわかりません

再生の場合は
URLリンク(www.geekpage.jp)
にあるように
pMediaControl->RenderFile(URL);
pMediaControl->Run();
という風にすればよいというのはわかるのですがこの場合はどうすればよいのでしょう?

SetOutputFileNameとRenderStreamを使えばよいのかな?と考えてはいるのですが
サンプルがビデオキャプチャからの取得方法ばかりで
こういった場合にどのような記述をすればよいのかわかりません


205:デフォルトの名無しさん
09/01/12 22:51:43
これ使って作ったツールはWindows2000でも動くかな?

206:デフォルトの名無しさん
09/01/13 01:18:52
>>204
RenderFilleやっちゃいかん。
ソースフィルタ(URL)をフィルタグラフに登録したあと、
出力ピンを列挙してAVI Muxに1つずつ接続すればおk

たぶん。
あ、あとファイル出力も手動で指定してフィルタ繋いでね。

207:169
09/01/13 06:56:07
>>206
ありがとうございます
以下のようなプログラムを作ってみたのですが

URLリンク(uploaders.ddo.jp)

コンパイルすれば通るものの実行してもファイルが作成されません
これはピンのつなぎ方などが間違っているのでしょうか?

208:デフォルトの名無しさん
09/01/13 12:50:40
なんでエラー値をチェックしないの?

209:デフォルトの名無しさん
09/01/13 16:10:02
>>206さんのアドバイスが理解されていない・・・・


210:デフォルトの名無しさん
09/01/13 17:18:19
>>208
チェックしてみましたがどこもエラーは返ってきませんでした

>>209
すいません・・・
>>206
URLリンク(msdn.microsoft.com)
の辺を参考にしてやってみたんですがどの辺がおかしかったでしょうか?

ソースフィルタ(URL)をフィルタグラフに登録、というのは
pGraph->AddSourceFilter(URL, L"Source Filter", &pSrc);
出力ピンを列挙してAVI Muxに1つずつ接続
というところはRenderStreamを2回行ってみたのですが
根本的に間違っていたりしたらすみません・・・


211:169
09/01/13 18:38:16
あー見返すとなんか滅茶苦茶ですね
一から書き直してきます

212:デフォルトの名無しさん
09/01/13 19:57:05
URLリンク(okwave.jp)

213:デフォルトの名無しさん
09/01/13 20:29:46
サンプルをビルドして動いたからと言って
安易に一歩踏み込むとすぐに樹海に迷い込むのがDirectShow。


214:169
09/01/13 22:44:13
以下のように作り直してみたのですが、

URLリンク(uploaders.ddo.jp)

AddFilterからどうしてもNULLポインタが返ってきたり
GetPinがコンパイルをとおらずPin同士の接続ができなかったりしますが
とりあえずそれらの部分を除外して実行した結果
URLリンク(localhost:7144)のようなファイルは保存に成功できました。
しかしライブストリーミングの場合は解像度と再生時間はきちんとできた動画が作成されたのですが
再生しようとしても再生されない動画ファイルでした

やはりAddFilterやPinの接続がきちんとできていないことが原因なのでしょうか?

GraphEditでは簡単にできても実際に作るのは難しいものなのですね
単に私が駄目なだけかもしれませんが

215:デフォルトの名無しさん
09/01/13 22:55:51
確かに、GraphEditの様子をそのままコードにしてくれるツールがあったら欲しいな。

216:デフォルトの名無しさん
09/01/13 23:37:12
>>214
MSDNの通りにプログラムが書けてない。
IGraphBuilderはCoCreateInstanceしない。
ICaptureGraphBuilder2からGetFiltergraphで取得する。

217:デフォルトの名無しさん
09/01/14 01:01:13
>>216
なるほど

hr=CoCreateInstance(CLSID_CaptureGraphBuilder2, NULL,
CLSCTX_INPROC_SERVER,IID_ICaptureGraphBuilder2, (void **)&pBuilder);
hr=pBuilder->GetFiltergraph(&pGraph);

こういうことですね
しかしこうやってもGetPinがコンパイルを通らないのは変わらず
そこをコメントアウトして実行すると
hr=pGraph->AddFilter(pAVIMux,L"AVI Mux");の部分で
例外が出て終了する様になりました
これもコメントアウトしたばあいは前回と変わらず解像度と再生時間のみ正しい
再生されない動画ファイルが作成されるだけでした・・・

218:デフォルトの名無しさん
09/01/14 01:21:22
なんだそのGetPinってのはどこからでてきた?自作メソッドなのか?

219:デフォルトの名無しさん
09/01/14 01:38:19
>>218
これ使ってピン同士を接続するのかなと思ってコピペしてきたら
ただの自作メソッドでした
早とちりしてすみません
削っても動かないことに変わりはないのですが・・・

220:デフォルトの名無しさん
09/01/14 01:42:46
>>219
もう少し頑張って勉強してからまたおいで。
エスパーじゃないから、そんなんでコンパイル通らないとか言われても困るわ。

221:デフォルトの名無しさん
09/01/15 15:41:50
VideoWindow->put_OwnerでVFW_E_NOT_CONNECTEDが返ってくるのですが・・・

if( FAILED(CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&GraphBuilder )) ) return false;
if( FAILED(GraphBuilder->QueryInterface( IID_IMediaControl, (void **)&MediaControl )) ) return false;
if( FAILED(GraphBuilder->RenderFile( buff, NULL )) ) return false;
if( FAILED(GraphBuilder->QueryInterface( IID_IVideoWindow, (void **)&VideoWindow )) ) return false;
if( VideoWindow->put_Owner( (OAHWND)PlayWnd ) == S_OK ){ ←ここでS_OKにならない
  VideoWindow->put_WindowStyle( WS_CHILD|WS_CLIPSIBLINGS );
  if( FormWnd && MediaEventEx->SetNotifyWindow( (OAHWND)FormWnd, WM_GRAPHNOTIFY, 0 ) != S_OK ) return false;
}
PlayWnd をNULLにしてもS_OKにはなりませんでした。
何が原因でしょうか?

222:221
09/01/15 19:18:33
対象コンピュータをx64にしてたらエラーがでてx86にすると正常に通りました><

ちなみに上記のコードの後に読み込みと同時に1フレーム目を表示されようと
MediaSeeking->SetPosition  ←上のコードには書いてないですが今はQueryInterfaceしてます
MediaControl->StopWhenReady();
VideoWindow->Visible( OATRUE );
を入れたのですが、何故か1回目の読み込み時には表示されず
2回目以降に表示されるのですが、何が原因ですか?

223:デフォルトの名無しさん
09/01/15 22:57:20
C++で作ったフィルタをC#で使いたいんですが
作ったフィルタをregsvr32で登録しないで使う方法ってありますか?
登録するのは(ユーザーにとって)面倒だし
クラスの型がIBaseFilterにしか出来ないので
アプリケーション側からデータを渡したり出来ません。

224:デフォルトの名無しさん
09/01/15 23:06:15
その程度の事もわからないお前には無理だ。
C#のCOMのラッピングのメカニズムも理解できていないんだろ?

225:デフォルトの名無しさん
09/01/15 23:08:01
Wevdestサンプルで、RenderFileで作成したグラフを最後のDefault DirectSound Deviceだけ切り離して付け替える時
RemoveFilterに失敗します。処理は正常なのですが、RemoveFilterはなぜ失敗なんでしょうか?
この行をいれないとRunで失敗するので入れてるんですが、失敗してるのに意味があるんでしょうか?

CComPtr<IBaseFilter> DS_DefaultDirectSoundDevice;

hr = DS_graph->FindFilterByName(L"Default DirectSound Device", &DS_DefaultDirectSoundDevice);
hr = DS_DefaultDirectSoundDevice->FindPin(L"Audio Input pin (rendered)", &pin_DefaultDirectSoundDevice);
hr = pin_DefaultDirectSoundDevice->ConnectedTo(&pin_DefaultDSDeviceTo);
hr = pin_DefaultDSDeviceTo->Disconnect();
hr = DS_graph->RemoveFilter(DS_DefaultDirectSoundDevice);
hr = DS_graph->ConnectDirect(pin_DefaultDSDeviceTo, pin_WaveDest_In, NULL);

226:デフォルトの名無しさん
09/01/15 23:39:31
もはや時代はMediaFoundation

227:デフォルトの名無しさん
09/01/15 23:52:39
>>225
エラーコードは何ぞ?

試してないから外してるかもしれないけど、
pin_DefaultDSDeviceToをReleaseしてないから、ってなオチはない?

228:デフォルトの名無しさん
09/01/16 00:01:29
hr = pin_DefaultDSDeviceTo->Disconnect();
hr = pin_DefaultDirectSoundDevice->Disconnect();

229:デフォルトの名無しさん
09/01/16 00:43:07
エラーなくなりました。
フィルターを削除する時繋いであったピンを解除。
繋ぎ換えるのにも解除後接続ですね。覚えました
意外と融通きかないんですね・・・
ありがとうございました。

230:デフォルトの名無しさん
09/01/16 03:43:18
wmvが登場したとき wmvのコンテナに対応したソースフィルタを
書けと言われたときはくらくらと眩暈がした。

231:デフォルトの名無しさん
09/01/16 12:36:29
ふうん

232:デフォルトの名無しさん
09/01/16 13:31:35
1フレーム毎にイベントを取りたいのですが
イベント通知コードは何になるんですか?

233:221
09/01/16 15:57:23
>>222で最初のフレームが表示sれないって話なんですが
どうやら一瞬表示してるみたいで
VideoWindow->Visible( OATRUE );の下にSleep( 1000 );と入れると
1秒間最は初のフレームを表示して、1秒後に消えてしまいます。
そして2回目に>>221を走らせた時はずっと最初のフレームを表示した状態になります
何が原因でしょうか・・・

234:221
09/01/16 16:11:44
わかりました。
どうやらStatic Textに描画されてるのがまずかったみたいです。
Picture Controlにしたら消えなくなりますた。。。
なにこれ・・・

235:デフォルトの名無しさん
09/01/16 17:00:57
Windowsの描画の基本的な所を理解していないのが問題

236:デフォルトの名無しさん
09/01/16 17:10:21
>>235が基本を教えてくれるそうです。
では、どうぞw

237:デフォルトの名無しさん
09/01/17 01:24:29
他人が理解できる説明の仕方を意識しよう。あと、日本語を学べ。

238:デフォルトの名無しさん
09/01/19 09:02:44
ではまず国語辞典を勉強したらよろしいでしょうか?わかりません><

239:デフォルトの名無しさん
09/01/19 16:28:00
単語を覚えるだけでは言語を会得できないな。
日本語でも英語でもプログラミング言語でも。

240:デフォルトの名無しさん
09/01/19 17:49:44
GetConnectedMediaTypeでVFW_E_NOT_CONNECTEDが返って来るのですが原因は何でしょうか?
その前にやってるSetMediaTypeはちゃんとS_OKが返ってきてます。

241:デフォルトの名無しさん
09/01/19 18:22:51
VFW_E_NOT_CONNECTED だから
繋げろ!

242:デフォルトの名無しさん
09/01/19 18:30:15
>>241
言い忘れてましたが、VFW_E_NOT_CONNECTEDが出るのはGetConnectedMediaTypeだけで
他は普通にOKなので動画の再生はできています。


243:デフォルトの名無しさん
09/01/19 18:51:39
再生にサンプルグラバは関与してますか?
そうでなければ別にサンプルグラバが繋がってなくても再生に支障はありませんよ。

少々面倒でもROTを登録して外部からフィルタグラフを覗けるようにしておくと
デバッグが便利ですよ。

244:243
09/01/19 18:52:57
× ROTを登録
○ ROTに登録

245:デフォルトの名無しさん
09/01/19 19:03:42
>>243-244
やりたい事はと言うと、再生して指定フレームの画像をbmpとして保存したかったのです。
その為にサンプルグラバでAddFilter後にビデオヘッダを取得したりと・・・
とりあえずGraphEditでみてみようとおもいます・・・

ちなみに、同じソースを別PCで動かすとGetConnectedMediaTypeでエラーはでませんし
正常にbmpファイルに落とすことができています。



246:デフォルトの名無しさん
09/01/20 00:24:24
>指定フレーム
フレームで指定ってできるんだっけ?
○番目のフレームとか。

247:デフォルトの名無しさん
09/01/20 00:41:20
つSetPositions

とはいえ、TIME_MEDIA_TIMEしか使えないストリームだと
ちょっと難しいけど。

248:デフォルトの名無しさん
09/01/21 22:49:54
SetPositionsって時間指定じゃん

249:デフォルトの名無しさん
09/01/21 23:40:38
TIME_FORMAT_FRAMEを指定してから使うよろし。
>>247でも書いてるけど、すべてのストリームでTIME_FORMAT_FRAMEが使えるとは限らない。

本格的にやるならDESを使うんですかね。
自分はやったことないので分からないですが。

250:デフォルトの名無しさん
09/01/22 15:56:17
コーデックの関係でSampleGrabberでの画像抽出ができずBasicVideoを使っているのですが
BasicVideoのGetCurrentImageで画像を取ると3秒もかかってしまうのですが
これをもっと早く取る方法ってありますか?

251:デフォルトの名無しさん
09/01/22 16:27:45
ムリポ

「コーデックの関係でSampleGrabberでの画像抽出ができず」辺りを
もう少し詳しく話した方が、いい話が聞けるかもよ?

252:デフォルトの名無しさん
09/01/22 16:56:00
>>251
そうですね。失礼しました。
カノープス社のコードックであれしてるaviファイルから静止画を取りたいのですが
これが何故かSampleGrabber->GetConnectedMediaTypeでエラーになるんです。
ちなみにほかのaviファイルでは正常に静止画が取得できています。
それで試しにBasicVideoで静止画と取ってみたら取れたのですがこれが遅くて・・・

253:デフォルトの名無しさん
09/01/22 17:57:02
小出しはやめてね

254:デフォルトの名無しさん
09/01/22 18:04:39
カノープスのコーデックといってもHQとかMJPGとかいろいろある

255:デフォルトの名無しさん
09/01/22 18:11:38
HQです。
今色々試してたんですが、SetMediaTypeするときの
サブタイプをMEDIASUBTYPE_RGB32にすると
GetConnectedMediaTypeでエラーが出ずに通ったのですが・・・
これすると、映像がさかさまになってる・・・

256:デフォルトの名無しさん
09/01/22 21:17:22
>>255 さかさまってビットマップか?

257:デフォルトの名無しさん
09/01/22 21:44:12
---------------------------------------------------------------------------
可能な限り速くコマ送りするのってどうするんですか?
IVideoFrameStepを使うと1倍速以上にはならないし、逆方向には進めません。
独自レンダラでレンダリングした画像を
加工して1コマずつ連番BMP出力したいだけなんですが。
(将来的にはDirectShowを使った出力も実装したいが、取りあえずBMPで)

>>255
memcpyを使って画像を自力で反転するしかないのでは。
(画像の横幅*4byteのサイズでコピーを繰り返す)
4byteなのはMEDIASUBTYPE_RGB32で32bitの画像と指定したからです。
もしRGB24なら3byteです。

258:デフォルトの名無しさん
09/01/23 00:52:55
>>255
BITMAPINFOHEADERか何かで上下反転してるかどうかの判定は
可能じゃなかったかな?

>>257
SampleGrabberを使ってた時の経験だけど、SetSyncSource(NULL)では
うまくいかなくて、SetRateで適当に100倍くらいを設定して全力取得したり
したことはあります。ただ、コーデックによってはうまくいかないかも。

259:デフォルトの名無しさん
09/01/23 09:47:42
MIDIをWAVEに変換する方法はあるんでしょうか?
再生される以上どこかで電圧値に置き換わってると思うんですが、サウンドボードで変換されてるんですか?
MIDIデフォルトOUTを置き換えても不可能でしょうか?WAVE関連のものに置き換えできませんでした

260:デフォルトの名無しさん
09/01/23 10:15:08
>>256
いえRGB32にすると映像の方がさかさまになるんですよ。
RGB24にすると映像は正常なのですがGetConnectedMediaTypeでエラーになりまふ
>>258
あ、そうなんですか?
ちょっとヘルプみてみます。

261:デフォルトの名無しさん
09/01/23 10:32:57
>>260
取得できたAM_MEDIA_TYPEからBITMAPINFOHEADERを引っ張り出して
biHeightの正負を見てみそって。

一応ココ(↓)見とき。
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)

フォーマットによって成功したりしなかったりはColor Space Converterが
途中に入るかどうかによるのかもしれん。

262:デフォルトの名無しさん
09/01/23 10:38:29
>>261
ありがとうございます。
しかしbiHeightが負で判別できた場合はどうやって映像を正常に表示できるんでしょうかこれ。


263:デフォルトの名無しさん
09/01/23 10:56:49
ん?
レンダリング結果も上下反転してるの?
BMPに保存したときだけじゃなくて?

264:デフォルトの名無しさん
09/01/23 11:02:18
BMPファイルのヘッダの高さもそのままマイナスにすれば普通は問題ない
まれに対応していないソフトもある

265:デフォルトの名無しさん
09/01/23 11:32:50
>>263-264
静止画は正常で動画の方が逆になるんですよね・・・
でもRGB24にすると動画は正常になるけど
GetConnectedMediaTypeでエラーになって・・・

266:デフォルトの名無しさん
09/01/23 12:47:44
それがDirectShowの仕様です

267:デフォルトの名無しさん
09/01/23 18:26:01
全フレームの画像を取得したいのですが
SetPositionsでフレームを移動して取ると時間がかかるので
もっと効率的な方法はどうしたらいいですか?

268:デフォルトの名無しさん
09/01/23 20:41:02
>>259
WavDestとFileWriterでよかばってん
>>267
ストリーム流しながらのサンプルグラバでよかばってん

269:デフォルトの名無しさん
09/01/23 20:52:30
ばってん何?

270:257
09/01/23 22:24:25
>>258
SetRateは(貴方が書いているように)コーデックによっては使えないので・・
SetSyncSource(NULL)しても再生は別スレッドで行われているのに
どうやって
レンダリング→BMP出力→レンダリング→BMP出力→...
のように同期させられるんでしょうか。

271:デフォルトの名無しさん
09/01/23 22:27:17
基本的な事だけどpushとpullモデル理解しているか?

272:デフォルトの名無しさん
09/01/23 22:37:32
>>257
サンプルグラバとNullRenderer使えよ

273:257
09/01/23 23:17:54
>>271
push??pull?
URLリンク(unkar.jp)
色々調べてみたら、これがヒットしました。
・・・ソースフィルタを作って加工したデータをこのフィルタに送るんでしょうか

274:デフォルトの名無しさん
09/01/23 23:20:49
MSのドキュメントも読んでいないなんて死んだほうがいい

275:デフォルトの名無しさん
09/01/24 11:38:54
>>268
ダメです、MIDIParsaとWevDestがつながりません。
pMediaType->SetType(&MEDIATYPE_Midi);
の変更もしてみたんですがダメです。グラフエディタでつながらないと出ます
お願いします

276:デフォルトの名無しさん
09/01/24 13:47:34
>>275
情報少なすぎてわかるわけがないよ。エスパーじゃないし。
わかるように書いてよ。

277:デフォルトの名無しさん
09/01/24 15:04:31
MIDIのトランスフォームフィルタを自作するか見つけてくる必要がある。

278:デフォルトの名無しさん
09/01/25 17:51:50
まったく作れそうな気がしません
音源はどこから引っ張ってくればいいんですか?

279:267
09/01/26 11:45:44
>>268
再生しながらはどのようにゲットすればいいですか?
イベントですか?
でもイベントでは1フレームずつ入ってこなかったしなあ


280:デフォルトの名無しさん
09/01/26 18:15:47
コールバックですよコールバック
このスレでも何度か話題に出てるんで探してみれ

281:デフォルトの名無しさん
09/01/29 21:59:01
COutputQueueを使ってコマ送りって可能?

282:デフォルトの名無しさん
09/01/30 13:26:27
サンプルグラバのGetCurrentBufferで静止画を取得する時に
動画サイズのまんまではなくて縮小して取得したい時はどうしたらいいですか?

283:デフォルトの名無しさん
09/01/31 15:50:00
自分で縮小でも拡大でも好きにすればいいんじゃない?

284:デフォルトの名無しさん
09/02/02 03:20:48
複数の音楽ファイル(mp3とWMA)の一部ずつ(サビの部分)を繋いで、一つのWAVにしたいのですが、
どう作ればいいのか判りません。
最初の曲は、サビまでシークしてしてから、WAVEファイルにはできているようです。
ですが、2曲目を処理しようとすると、グラフを停止しないと、接続できないという現状です。
例えば、2つの曲をフェードインアウトで繋げる処理はどう書けばいいのでしょうか?
なにかヒントやサンプルなど教えてもらえるとありがたいです。

285:デフォルトの名無しさん
09/02/02 04:29:59
高校の物理をちゃんと勉強していれば簡単な事なんだけどね

286:デフォルトの名無しさん
09/02/02 10:56:55
DESじゃないのん?

287:デフォルトの名無しさん
09/02/03 01:16:38
>>286
DESってDirectshow編集サービスのことですよね。
ちょっと調べてみます。 ありがとうございました。

288:デフォルトの名無しさん
09/02/05 14:32:39
質問です。
MP4ファイルの頭に5Kほどのデータを付加したファイルを再生する
フィルターをASyncサンプルに手を加えて作りました。
GraphEditではファイルを選択して、VideoRendererとPIN接続すると、
MP4Splitterとffdshow codecが間に入り再生できます。
このファイルをGraphEditにD&Dするとはじかれます。

これをIGraphBuiderでグラフを作って再生したいのですが、
どうしても自作フィルターとMP4SplitterとのConnectで
CANNOT_CONNECTが帰ってきてしまいます。
自作フィルタにファイルパスを与えてグラフに追加するという、
GraphEditでの動作をどのようにプログラムしていいのかわかりません。
方法をご存知の方、ご教授ください。
ベースとするフィルタを間違えているのでしょうか?




289:デフォルトの名無しさん
09/02/05 15:14:59
デバッグすりゃ原因がわかるだろ

290:デフォルトの名無しさん
09/02/05 15:17:29
>>289
知らないならレスしないで下さい。ウザいだけです。。

291:デフォルトの名無しさん
09/02/05 16:01:11
俺もデバッグすりゃ原因が分かると思う。

292:デフォルトの名無しさん
09/02/05 16:50:34
IGraphBuilder::RenderFile() を使っちゃってる、に1票

・・・じゃないよね。
自作フィルタはちゃんと自前でCoCreateInstanceしてる?

293:デフォルトの名無しさん
09/02/05 16:51:15
あ、メリット値を適切に設定してるなら別ね。

294:デフォルトの名無しさん
09/02/05 17:14:08
GraphBuilderに自作SourceFilterとVideoRendarerだけ追加したら
後はRendaerFileでいいんじゃないの?
そうすりゃMP4Splitterとffdshow codecが勝手に間に入るだろ

295:デフォルトの名無しさん
09/02/05 23:36:50
LONGLONG tmp = (LONGLONG)(frame * Renderer->getATPF());
pMediaSeeking->SetPositions(&tmp,AM_SEEKING_AbsolutePositioning,
NULL,AM_SEEKING_NoPositioning);

AverageTimePerFrameを使ってシークするのって駄目なんですか?
たまに思った位置にシークできないファイルがあります。

296:デフォルトの名無しさん
09/02/07 01:54:57
ISampleGrabberについての質問です。
DirectShowでmp3を再生中にISampleGrabberのGetCurrentBufferを行うと、
再生中の場所の波形データが取得できると思うのですが、
毎回GetCurrentBufferを行っても、1秒間に約3回ほどしか取得するデータに変化がありません。
リアルタイムに現在再生中の場所の波形データを取得するにはどうしたらよいのでしょうか。

297:デフォルトの名無しさん
09/02/07 15:37:21
URLリンク(oshiete1.goo.ne.jp)
URLリンク(okwave.jp)


298:デフォルトの名無しさん
09/02/08 10:12:29
>>297
ありがとうございます。
解決しました。

299:デフォルトの名無しさん
09/02/08 11:17:10
質問したなら、どう解決したのか書いて欲しい。
それにしてもマルチポストなんて今時珍しいね。
回答が付いているところにも驚いた。

300:デフォルトの名無しさん
09/02/08 13:21:49
初歩的な質問ですが
キャプチャーボードにチューナ・S端子・コンポジットがあるのですが
その切り替えはDirectShowでできるのでしょうか?
カメラで入力した映像を解析ソフトを作ってみたのですがWebカメラでは物足りなくて
手元にあったボードを使ってみたのですが初期でチューナーになってしまうので
お願いします

301:デフォルトの名無しさん
09/02/08 16:32:30
映像解析ソフトを作るとはハイレベルだ

302:デフォルトの名無しさん
09/02/08 17:28:15
>>300
つ Crossbar

303:300
09/02/08 17:55:56
できるんですね。ありがとうございます

304:デフォルトの名無しさん
09/02/09 09:54:17
2つの動画を同時再生したいんですが、2回同じ表示手続きをしないとダメですか?

305:デフォルトの名無しさん
09/02/09 10:42:16
グラフ2つ作れば良いだけの話では?

306:デフォルトの名無しさん
09/02/09 11:58:32
>>305
あ、すみません。
そこの所をもうちょっと教えてください。
どこか参考になるサイトとかもあったらお願いしまふ

307:デフォルトの名無しさん
09/02/09 12:54:37
>>306
1つのソースでレンダラ2つ出したいならスプリッタを使う。
別々のソースを表示したいならグラフビルダ2つ用意する。

308:デフォルトの名無しさん
09/02/09 13:45:22
>>307
別の動画を再生したいからグラフを2つ作るんですね。
それで再生とかする場合はMediaControlも2つですよね?


309:デフォルトの名無しさん
09/02/09 15:24:10
質問です。

IMediaDet::get_StreamLength() および get_FrameRate() で得られた値を使って
非圧縮AVIファイルの総フレーム数を取得するコードを書いていますが、
あるVista環境にて総フレーム数を間違うことがあります。
(822フレームと算出してもらいたいところ、830となったりします。)

何か特殊なフィルタがインストールされているのではないかと思うのですが、
客先環境のため、簡単にチェックできません。
とりあえず不具合回避策は準備したので緊急度は低いのですが、
このようなことが起こるケースについて何かご存知の方がいらっしゃいましたら、
ご教示ください。

310:デフォルトの名無しさん
09/02/09 16:11:46
>>308 いえす


311:デフォルトの名無しさん
09/02/09 16:16:20
>>310
ですよね。
と、言う事はやはり再生等に必要なアレは2つずつ用意しないといけないんですね。
ちなみに、同じコールバック関数を呼ぶようにした場合ってどっちの動画か見分ける術ってありますか?

312:デフォルトの名無しさん
09/02/09 16:24:04
>>311
アレじゃわかんない。
コールバックって何よ。ISampleGrabberCB::SampleCBだったら
パラメータのIMediaSample で区別ができるかもしれない。
が、流す動画による。

313:デフォルトの名無しさん
09/02/09 16:27:03
>>312
BufferCBを使ってるんです><
ちなみにアレとは
MediaControl、MediaEventEx、SampleGrabber、VideoWindowです。。。

314:デフォルトの名無しさん
09/02/19 17:11:04
クズ共ちょっと教えてください。
XP64ビットOSでVC2009で32ビット用でコンパイルすると正常に動画再生ができるが
64ビット用でコンパイルすると音だけでて映像が表示されないんです。
お前達のようなゴミにはわからないかもしれませんが宜しくお願いします。


315:デフォルトの名無しさん
09/02/19 17:16:53
VC2009

316:デフォルトの名無しさん
09/02/19 17:26:03
コーデック

317:デフォルトの名無しさん
09/02/19 17:33:45
思ったとおり役に立たないクズしかいないですね

318:デフォルトの名無しさん
09/02/19 17:35:46
>>316

319:デフォルトの名無しさん
09/02/19 23:58:51
ここはエスパー板じゃないんで、314の期待するような能力者は居ません。

もうちょっとヒントが多ければ優秀な推理マニアが現れるかもね。

320:デフォルトの名無しさん
09/02/20 00:53:51
だからさ、64bitプロセスには64bit版コーデックが要るんだよ。

321:デフォルトの名無しさん
09/02/20 02:26:18
知ってるがおまえの程度がAA略


322:デフォルトの名無しさん
09/02/20 08:21:22
64ビットアプリにゃ64ビットDLL(この場合コーデック)が必要という常識も知らず
クズ呼ばわりってどんだけおめでたいんだ・・・。
コピペ厨房の俺でさえ知ってるわ。


323:デフォルトの名無しさん
09/02/20 09:56:16
>>322
その程度の知識しかないから役立たずのクズって言ってるの
だから知らないならレスするなって

324:デフォルトの名無しさん
09/02/20 10:14:37
64bit Windowsが普及しない原因を知ってれば、
容易に気が付くだろ。知識なんかほとんどいらね。
バカじゃねーの?

325:デフォルトの名無しさん
09/02/20 10:36:15
知らないからって必死になるなって

326:デフォルトの名無しさん
09/02/20 11:09:56
>>314
が必死になってるのか。

327:デフォルトの名無しさん
09/02/24 11:30:20
VideoWindow->put_OwnerにHBitmapを与えて再生した時に
ウィンドウフレーム無しの動画が画面上に表示されるのですが
これHBitmapだからそのまま変換して画像としてファイルに保存できますか?

328:デフォルトの名無しさん
09/02/24 12:05:30
ISampleGrabbberCBコールバックのBufferCBで受け取るDIBデータを
指定したサイズで受け取るにはどうしたらいいですか?

329:328
09/02/24 15:01:36
現状では動画のオリジナルサイズになっているのですが
これをVideoWindowで再生させてるウィンドウサイズと同じ大きさにしたいです

330:デフォルトの名無しさん
09/02/24 16:02:56
リサイズ機能なんてねーよw
普通はレンダーが勝手に表示サイズ合わせるだろ

331:328
09/02/24 16:08:50
そうですか。やっぱり無いですか・・・

332:デフォルトの名無しさん
09/02/24 22:55:54
すみません。最近ARIBの仕様書がWebで閲覧できることをしったので、
地デジチューナーからSI情報を取得して、中身をさわってみたいと
思いました。
DirectShowでそんなかんじのことができるのでしょうか?
(SIのパースまで、という意味ではなく、データセクションが
抜ければ十分うれしいです)

参考になるURLなどございましたらご教授の程お願いできますでしょうか?
よろしくお願いいたします。

333:デフォルトの名無しさん
09/02/24 23:33:05
>328
質問の内容を十分理解せず、脊髄反射的回答しちゃうけど、
動画のリサイズはDESでできた気がするデス。

334:328
09/02/25 10:01:30
>>333
あ、すみません。
DESってどんなのでしょうか?
何か参考になるサイトとかあったら教えてください><

335:デフォルトの名無しさん
09/02/26 00:27:55
Directshow Editing Servicesの略DES。
この辺を参考にすると良いDES。
URLリンク(msdn.microsoft.com)
URLリンク(msdn.microsoft.com)

ほとんど329しか読まずに応えてしまったけど、
・ソースそのものが変化してしまう
・再生中にサイズを変えるとかは不可能
なんで要注意。

336:デフォルトの名無しさん
09/02/26 01:13:01
質問失礼します。
4chの音声を同期を取りながら再生する方法を一週間ほど考えているのですが、やり方が全くわかりません。
2つのオーディオチャンネルを結合して、ステレオにするフィルタはCodeZineで見つけたので作ってみました。
ただ、これだと(当然ですが)LとRから再生されてしまうので・・・。
単純にLとL、RとRを加算して一つのステレオとして出したいのですが、どうすれば良いのでしょうか?
お知恵を貸して下さい、よろしくお願いします。

337:デフォルトの名無しさん
09/02/26 02:20:38
意味がわからん

338:デフォルトの名無しさん
09/02/26 08:40:43
Codezineのサンプルソースをベースに、そういうフィルタをつくればいいじゃん。

339:デフォルトの名無しさん
09/02/26 10:39:12
ミキシングしたいとか?

340:デフォルトの名無しさん
09/02/26 15:19:59
最終的に何がしたいのだろうね?
自分でMTRつくりたいのか?w

341:デフォルトの名無しさん
09/02/26 15:27:11
>>340
お前みたいなクズはレスするな。

342:デフォルトの名無しさん
09/03/18 03:08:51
あげ
ミキシングしたいのかな?質問が意味不明

343:デフォルトの名無しさん
09/03/18 14:10:56
有識者の皆様に質問です。

デバッグビルド時にフィルタグラフをROTに登録しています。
URLリンク(msdn.microsoft.com)

以前は普通に GraphEdit から "Connect to Remote Graph" で接続できていたのですが、
今日久しぶりに当該コードをメンテナンスしようとしたら接続できなくなっていました。

[症状]
 - "Connect to Remote Graph" でリストには表示される。
 - 選択してOKをクリックしても、何もグラフ上に表示されず。
 - 再度 "Connect to Remote Graph" でリストを表示すると、見えなくなっている。
 - デバッグ実行でも、コマンドラインからの実行でも症状変わらず。

この問題について、何か心当たりのある方はいらっしゃいますか?

344:デフォルトの名無しさん
09/03/18 15:17:56
>>343
Vista で実行して困っているのなら
URLリンク(msdn.microsoft.com)

345:343
09/03/18 16:45:18
>>344
ありがとうございます。
環境書いてませんでした。OSはXP(32bit)です。
念のためこの環境でも proppage.dll を登録してみましたが、やはり変わりませんでした。

なお、ひとつ間違いがありました。
pROT->Register() の第1引数になぜか 0 を指定してました。
ROTFLAGS_REGISTRATIONKEEPSALIVE に変更することで、何度 "Connect to Remote Graph" を
選択してもリストに "pid 0xXXX(ddd) IFilterGraph = XXXXXXXX" が出てくるようにはなりました。
ただ、やはり選択→OKしてもフィルタ構成は表示されません。うーむ・・・。

ちなみに、Windows SDK 6.0A/6.1 に含まれる GraphEdt ではリストにすら
表示されませんでした。
指定すべきモニカの文字列フォーマットが変わってたりするのでしょうか・・・。

346:343
09/03/18 17:07:55
解決しました。
きっかけはこちら。
URLリンク(questionbox.jp.msn.com)

quartz.dll を登録したら治りました。
ええー、quartz.dll ってデフォルトで登録されてませんでしたっけ?って感じですが・・・。

なお、この状態なら Windows SDK 6.0A/6.1 に含まれる GraphEdt でも接続できました。
でもタイミングによってなぜか Runtime Error が出ます。


どうもお騒がせしました。

347:デフォルトの名無しさん
09/03/18 17:11:09
>>345
regsvr32 "C:\WINDOWS\system32\quartz.dll"

348:デフォルトの名無しさん
09/03/18 17:11:39
orz

349:デフォルトの名無しさん
09/03/19 02:31:25
347
明日はいいことあるさ

350:デフォルトの名無しさん
09/03/23 11:02:01
RenderFileの戻りが遅いのですがこれを早くする方法を教えてください

351:デフォルトの名無しさん
09/03/23 11:53:31
なぜ遅いか考えたことある?



352:デフォルトの名無しさん
09/03/23 12:24:34
俺のRenderFileは早いよ

353:デフォルトの名無しさん
09/03/23 13:13:05
早くする方法があったら教えてください

354:デフォルトの名無しさん
09/03/23 13:17:47
お前、馬鹿だろ



355:デフォルトの名無しさん
09/03/23 15:05:10
「RenderFileの戻りが遅い」と判断する根拠がよく分からないよ。
サンプルプログラムやWMPに比べて異常に遅いと体感できる、
もしくは実測してこうだった、などの比較はできてますか?


とりあえずエスパーで二つほど。

 ・インストールされているコーデック(パック)を片っ端からアンインストールする
 ・予め使うことが予定されているフィルタをフィルタグラフに登録しておく

あとはもう少し詳しい状況を教えてもらえれば、他にも何か言えることがあるかも。

356:デフォルトの名無しさん
09/03/23 15:23:29
RenderFile関数から抜けてくるまで2秒くらいかかります。
早くする方法があったら教えてください

357:デフォルトの名無しさん
09/03/23 15:25:57
速くするためには、まず何の理由で遅いのかを調べようぜ

358:デフォルトの名無しさん
09/03/23 17:56:43
RenderFileの戻りが遅い理由って舞い糞ソフトに聞けばいいんですかね?
関数の内部事情なんて僕には検討もつきませんが。
っていうか、知らない人はレスしないで下さい。ウザイだけですよっと。

359:デフォルトの名無しさん
09/03/23 18:11:52
うちじゃ2秒もかからないからな。
お前のとこだけで遅いのに理由がわかるわけないだろう。

360:デフォルトの名無しさん
09/03/23 18:16:06
ごめん2秒じゃなかった1秒ちょいだった
ちなみにファイルサイズは4GBくらい
まあ、どうせお前らの持ってるエロ動画なんて100MB前後だろ?

361:デフォルトの名無しさん
09/03/23 18:35:09
お前の持ってるちんこ同士がけこーんしてるような動画は1ビットも要りません

362:デフォルトの名無しさん
09/03/23 18:51:50
どうせDVDでも引っこ抜いて4GBなんだろ、



363:デフォルトの名無しさん
09/03/23 19:02:34
しかたないなあ。
たまたまシンプルな再生プログラム書いてたのでテストしてみたよ。
6GB超のAVIファイルを RenderFile() に突っ込んで要した時間は 169[ms] でした。

はい、次の情報どうぞ。

364:デフォルトの名無しさん
09/03/23 19:05:04
すんませんでしたとしか言いようがありませんよ

んー、とりあえずお前らのソースみてやるからスレに貼ってください。

365:デフォルトの名無しさん
09/03/23 19:15:01
HRESULT SimplePlay(LPCWSTR lpwstrFile)
{
CComPtr<IGraphBuilder> m_pGraph;
CComQIPtr<IMediaControl, &IID_IMediaControl> m_pControl;
CComQIPtr<IMediaEvent, &IID_IMediaEvent> m_pEvent;

HRESULT hr = CoInitialize(NULL);
if (FAILED(hr)) return hr;
hr = m_pGraph.CoCreateInstance(CLSID_FilterGraph);
if (FAILED(hr)) return hr;
hr = m_pGraph.QueryInterface(&m_pControl);
if (FAILED(hr)) return hr;
hr = m_pGraph.QueryInterface(&m_pEvent);
if (FAILED(hr)) return hr;

366:デフォルトの名無しさん
09/03/23 19:16:22
DWORD tTmp = timeGetTime();
hr = m_pGraph->RenderFile(lpwstrFile, NULL);
tTmp = timeGetTime() - tTmp;
if (FAILED(hr)) return hr;

hr = m_pControl->Run();
if (FAILED(hr)) return hr;

for (;;) {
long code = 0;
hr = m_pEvent->WaitForCompletion(0, &code);
if ((FAILED(hr) && hr != E_ABORT) || code == EC_COMPLETE) {
break;
}
}

367:デフォルトの名無しさん
09/03/23 19:17:27
CoUninitialize();
return S_OK;
}

>>365-367 まとめてみてください。
RenderFile()を抜けた後の tTmp の値を教えてね。
エラー処理に関するコメントは No thank you です。

368:デフォルトの名無しさん
09/03/23 19:24:45
>>365-367
ありがとうございます。
やってることはお前いや貴様と一緒ですね
やっぱその他の環境の問題なんですかねこれ。
あ、ちなみにOSはXP64ですよですよ。
もうちょい調べてみます。わざわざありがとうございました、

369:デフォルトの名無しさん
09/03/23 22:34:07
EnumPins グラフ 構築
で検索

370:デフォルトの名無しさん
09/03/24 10:53:26
つーか情報の小出しに付き合ってられんわ

371:デフォルトの名無しさん
09/03/24 11:38:52
>>370みたいな奴って知らないのにレスするタイプだよね

372:デフォルトの名無しさん
09/03/24 11:47:37
>>371みたいな奴って煽りのしかレスできないタイプだよね



373:デフォルトの名無しさん
09/03/24 11:50:58
最初の情報は遅いってだけ
次に2秒かかると出て
次に4GBと出て
自分のソースは出さずに人に要求して
それからOSがXP64と出た

で、>>355のレスには何も反応していない。
これで原因分かるのに間抜けだよな。

374:デフォルトの名無しさん
09/03/24 12:26:25
単細胞って幸せだと思った

375:デフォルトの名無しさん
09/03/24 14:44:08
最初の書き込みでゴミって判るのに、反応する奴がいるのが不思議

376:デフォルトの名無しさん
09/03/24 14:59:53
過疎るくらいなら枯れ木も山の賑わいくらいに思ってた方がいいかな、と思って。
不快だったらゴメンね。

377:デフォルトの名無しさん
09/03/24 15:05:55
ごめんねほんと

378:デフォルトの名無しさん
09/03/26 15:17:44
動画を1フレームずつSetPositionsで動かして
コールバックで画像を取るのを作っているんですが
最初の1,2フレームでコールバックが来ないときがあるのですが
何が原因ですか?

379:デフォルトの名無しさん
09/03/27 08:11:59
ヒント:CODEC

380:デフォルトの名無しさん
09/03/28 13:59:38
SonicStageについてくるフィルタを使って、Atrac3(oma)の再生がやりたいんですが
デバッガで実行するとRenderFileの所で、「現在の場所のソースコードを表示できません」と出て止まってしまいます。
デバッガ無しで普通に実行すると問題なく再生できるんですが、原因分かる方いますか?
mp3やaviなどその他のファイルはデバッガでも問題ないです。

環境はVCEE2008、XP32SP3、DXSDK(April 2007)です。

もしかしたらソニーがリバエン対策でアンチデバッグしかけてるのかな?とか妄想したりしてます…

381:デフォルトの名無しさん
09/03/28 14:16:28
よくわからんけど、そのフィルタがデバッグビルドされてて、ブレークするけどソースがないからそうなるとか?

382:デフォルトの名無しさん
09/03/28 14:58:48
>>381
デバッグビルドですか、それは考えて無かったです
しかし、ブレークした後続行をするとAVが発生してしまうのです

383:デフォルトの名無しさん
09/03/28 23:53:54
単純にソースの置いてあるパスの問題じゃねーの?
デバッカで動かす時、ソースファイル(再生したいファイル)どこに置いてる?
そんな基本的ミスする奴がDirectShowいじるわけねーか。

384:デフォルトの名無しさん
09/03/29 00:12:25
>>383
>mp3やaviなどその他のファイルはデバッガでも問題ないです。
なのでパスの問題ではないです
寧ろ存在しないパス渡してもエラー吐かないみたいですが
できればSS入れている方で試された方いましたら情報頂けるとありがたいです

385:デフォルトの名無しさん
09/03/29 00:40:47
ヒント;プロジェクトのプロパティ

386:デフォルトの名無しさん
09/03/29 00:45:43
「現在の場所のソースコードを表示できません」は問題そのものじゃないでしょ。
デバッグビルド時に有効になるASSERTか何かで引っかかってるんでは?

根本的な問題が何かはよく分からんですが・・・。

387:デフォルトの名無しさん
09/04/01 14:50:10
DirectShowで動画のオープン、クローズを繰り返すと
オープンとクローズ(GraphBuilderの破棄)にだんだん時間がかかるようになってしまいます。
2回目はだいたい200ms(前のをreleaseしてopenするまでの時間)なのですが、
これを20回もすると1秒はかかるようになってしまいます。
更に繰り返すとどんどん増えていくのですが、どうしたら増えずに一定で保てますか?

388:デフォルトの名無しさん
09/04/01 18:03:39
>>387
>>365-367で示したコードで m_pGraph.CoCreateInstance() から CoUninitialize() の手前までを
forループでグルグル回してみたけど、特にGraphBuilderの破棄に時間がかかるような現象は
起きませんでした。(m_pGraph, m_pControl, m_pEventはループ終端で自力Releaseすること)

 ・>>365-367のコードで使用されているファイルを再生するとどうなりますか?
 ・>>365-367のコードとそちらのコードの違いがあれば簡単に教えてください。
 ・もし手持ちに複数のPC環境がある場合、どこで実行しても同じ結果ですか?

389:デフォルトの名無しさん
09/04/01 18:07:43
こちらにDxVA1.0をバリバリ利用してるぜ、という猛者はいらっしゃいますか?

DxVA2.0だと大体メドは立ってるんですが、DxVA1.0で自由に表示位置や
タイミングをコントロールする(自前のテクスチャにデコード結果を書き出す)
方法がいま一つ分かりません。
VMR9のメソッドをこうすれ、等アドバイスをいただけないでしょうか。

390:デフォルトの名無しさん
09/04/01 18:08:04
>>388
試験ありがとうございます。。。
C++Builder2007を使っていたのですが、
どうやらデバッグモードでコンパイルしてるexeだと>>387の現象になるみたいでした。
リリースモードでコンパイルしたexeでは現象は出ませんでした。
ほんとすんませんでした。

391:388
09/04/01 18:33:43
>>390
えー、自分とこもDebugビルドでテストしてますがね。
C++Builder2007でどうなるかまでは試せませんが・・・。

392:デフォルトの名無しさん
09/04/03 15:51:54
コールバック(BufferCB)で画像を取得してるのですが
2フレーム目のSampleTimeが0になる時があります。
どういう場合に0になりますか?

393:デフォルトの名無しさん
09/04/03 18:48:56
環境もフィルタグラフの状態も書かずに答えられる人は神だけ

394:デフォルトの名無しさん
09/04/04 10:17:53
環境とフィルタグラフを書いただけで答えられる人は神だけ

395:デフォルトの名無しさん
09/04/04 16:06:23
全部書かかれてて答えられる人はただの人。

というわけでただの人向けに書いてください。

396:デフォルトの名無しさん
09/04/04 16:33:49
わからない奴に限ってうだうだうるせー事言うよね。

397:デフォルトの名無しさん
09/04/04 17:02:29
>>392
サンプルタイムはパーサがつけることが多いから、グラフ構成は
記しておいた方が良いね。
1フレーム目は0じゃないの?

398:デフォルトの名無しさん
09/04/05 12:50:56
遺憾の意はイカン

399:デフォルトの名無しさん
09/04/05 14:45:33
IGraphBuilder::RenderFile()にファイル名を指定すればファイルを読み込ませることは
できるんですが、バッファ上に置かれたファイルを読み込ませるにはどうしたらいいですか?

400:デフォルトの名無しさん
09/04/05 15:14:10
IGraphBuilder::Render()で

401:デフォルトの名無しさん
09/04/05 16:50:46
IGraphBuilder::Render()についてMSDNで調べて見ましたがバッファのデータを渡す方法が分かりませんでした

以下MSDNから引用
RenderFile メソッドは、ファイル名からデフォルトの再生グラフを作成する。
内部的には、このメソッドは AddSourceFilter を使って適切なソース フィルタを探し、
Render を使ってグラフの残りを作成する。
引用ここまで

要するにAddSourceFilterでソースフィルタ構築してソースフィルタの出力ピンを
Renderに渡して中間フィルタや出力フィルタを構築って事だと思うんですが、
AddSourceFilterに指定できるのもファイル名のみでバッファのポインタを渡せる場所がありませんでした

402:デフォルトの名無しさん
09/04/07 14:11:59
ソースフィルタ作ればいいじゃん

403:デフォルトの名無しさん
09/04/07 15:24:48
知らないならレスしないで下さい。ウザいだけです。

404:デフォルトの名無しさん
09/04/07 17:00:09
まだ春休みか?それとも頭の中はずっと春休みなのか?>>403



405:デフォルトの名無しさん
09/04/07 17:16:34
>>403 またお前か

406:デフォルトの名無しさん
09/04/07 17:55:26
またお前らか

407:デフォルトの名無しさん
09/04/07 17:56:15
またおれか

408:デフォルトの名無しさん
09/04/07 18:11:00
またお前らだ

409:デフォルトの名無しさん
09/04/08 00:18:18
>>403
ゆとり、って奴ですか?

410:デフォルトの名無しさん
09/04/08 16:51:10
は?

411:デフォルトの名無しさん
09/04/08 17:58:55
株式会社 ゆとり

412:デフォルトの名無しさん
09/04/08 18:05:15
は?

413:デフォルトの名無しさん
09/04/09 16:22:04
なあブタ共ちょっと教えてくれや
RenderFileで動画読み込んでからGraphBuilderとかを破棄せずにまた
RenderFileで読み込んでもいいのか?ああん?

414:デフォルトの名無しさん
09/04/09 16:54:58
ブヒヒ

415:デフォルトの名無しさん
09/04/09 17:29:35
ブタがっ!このブタがああゅ!

416:デフォルトの名無しさん
09/04/10 00:07:53
>>413
大丈夫、OK、全然、ほんとだってwww

417:デフォルトの名無しさん
09/04/10 10:19:39
>>413
いいよ、CPU負荷とか気にしないなら
あ、動画支援機能は1本限定、これ豆知識な

             飛べない豚より

418:デフォルトの名無しさん
09/04/10 10:25:30
>>416-417
おお、きちんとできたぜ!
これいちいちcreateやreleaseしなくていいから早くて最高だぜ!
お前達ブタって知識はないけどたまには役に立つんだんだなwww

419:デフォルトの名無しさん
09/04/10 13:45:09
動画のオープン、クローズを繰り返すと毎回391回目でRenderFileがエラーになるのですが何が原因なのでしょうか?
タスクマネージャのメモリ使用量を見てるとちゃんと開放されてないみたいで、どんどん使用量が増えているので
そこら辺が問題だとおもうのですが、以下のソースでどこがダメですか?

Open( )
{
  // ↑省略
  CoCreateInstance( CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, (void **)&GraphBuilder );
  GraphBuilder->QueryInterface( IID_IMediaControl, (void **)&MediaControl );
  GraphBuilder->QueryInterface( IID_IVideoWindow, (void **)&VideoWindow );
  CoCreateInstance( CLSID_SampleGrabber, NULL, CLSCTX_INPROC_SERVER, IID_IBaseFilter, (void **)&BaseFilter );
  BaseFilter->QueryInterface( IID_ISampleGrabber, (void **)&SampleGrabber );
  GraphBuilder->QueryInterface( IID_IMediaSeeking, (void **)&MediaSeeking );
  GraphBuilder->AddFilter( BaseFilter, L"Grabber" );
  GraphBuilder->RenderFile( filename, NULL );
  SampleGrabber->SetCallback( (ISampleGrabberCB *)mySGcall, 1 );
  // ↓省略
}
Close( )
{
  MediaSeeking->Release( );
  SampleGrabber->Release( );
  BaseFilter->Release( );
  VideoWindow->Release( );
  MediaControl->Release( );
  GraphBuilder->Release( );
}


420:デフォルトの名無しさん
09/04/10 18:30:00
インタフェースの解放はよさそう。
RenderFileコール時のエラーコード値はいくつ?

421:デフォルトの名無しさん
09/04/10 23:26:17
映像と音声の両方をサンプルグラバで取得したいんですがうまくいきません。
どうしてでしょうか?どちらか片方だけならうまくいきます。
ソースフィルタ→サンプルグラバ(Video)→レンダラ(video)
         \→サンプルグラバ(Audio)→レンダラ(Audio)のように接続しようとしています

// GraphにSampleGrabber Filterを追加
pGraphBuilder->AddFilter(pSampleGrabberFilterV,
L"Sample Grabber(Video)");

pGraphBuilder->AddFilter(pSampleGrabberFilterA,
L"Sample Grabber(Audio)");

// ソースフィルタを追加
IBaseFilter *pSrc;
if (FAILED(hr = pGraphBuilder->AddSourceFilter(fileName, L"Source", &pSrc)))
{
printf("AddSourceFilterに失敗:%d\n", hr);
return false;
}
ConnectFilters(pGraphBuilder, pSrc, pSampleGrabberFilterV);
if (FAILED(hr = ConnectFilters(pGraphBuilder, pSrc, pSampleGrabberFilterA)))
{
printf("ConnectFiltersに失敗:%d\n", hr);
return false;
}

//NullRendererフィルタを生成、挿入
CoCreateInstance(CLSID_NullRenderer,NULL,CLSCTX_INPROC,IID_IBaseFilter,(LPVOID *)&pNullRendererV);
CoCreateInstance(CLSID_NullRenderer,NULL,CLSCTX_INPROC,IID_IBaseFilter,(LPVOID *)&pNullRendererA);

ConnectFilters(pGraphBuilder, pSampleGrabberFilterV, pNullRendererV);
ConnectFilters(pGraphBuilder, pSampleGrabberFilterA, pNullRendererA);

422:デフォルトの名無しさん
09/04/21 15:02:53
遅レスですが。
どこでエラーが起きてるんでしょうか?
エラーコードは?

423:デフォルトの名無しさん
09/04/22 13:06:44
教えて下さい。
ほとんど全くのDirectShow初心者です。
ビデオ編集ソフトを作りたいと思っています。
そこで、複数のビデオを合成するトランジションフィルターみたいなものを
作りたいのですが、Sample Grabberみたいなものを使って、それぞれ1フレームずつ
持ってきて、例えばα合成してやるみたいな方法が一般的なのでしょうか?
それとも、2つを入力を持つトランジションフィルタを作って、グラフでつないで
レンダリングして終わり?
速度的に前者は厳しいように思いますが、フィルターの形で実装しないで済む分、
作りやすいのかなと思ったり。
どういう実現方法が一般的でしょうか?

424:デフォルトの名無しさん
09/04/22 13:18:56
>>423
あれこれ一からココで教えるのもナンなので、このスレでも何度か名前が挙がっている
とりあえずDES(DirectShow編集サービス)についてお勉強するとよろしいかと。
URLリンク(msdn.microsoft.com)

"DirectShow DES"でググるだけでもアルファブレンディングのサンプルを
公開しているサイトに行き当たりますが、まずはDirectShowを使って
多少なりともプログラムが書けるようになってからの方が理解しやすいでしょう。

425:デフォルトの名無しさん
09/04/22 13:30:26
>>424
すばやいご回答、有難うございます!!
勉強します!!

426:デフォルトの名無しさん
09/04/22 14:31:50
たびたびすみません。
DESのサンプルを見ようと思い、色々探したんですが、
DirectShowって、今はDirectX→Platform SDK(Windows SDK)に移動してますよね?
DESのサンプルは、DirectX 9.0 Extrasのものでいいのでしょうか?


427:デフォルトの名無しさん
09/04/22 14:54:48
>>426
基本的にはExtrasでも問題ないと思うけど、VisualStudio 2005以降でのコンパイルでひっかかった気がする。
手作業で修正すればいいと思うけど。

たしかWindows SDKにも収録されてたと思うんだけどなあ、なかった?
この辺とか(↓)

Windows SDK 6.1(英語版)
URLリンク(www.microsoft.com)

Windows SDK 6.0.6000(日本語版)
URLリンク(www.microsoft.com)


Windows 7対応で 7.0.7000.0.4011 ってのがでてるねえ・・・。

428:デフォルトの名無しさん
09/04/22 15:07:08
どもども。
VS2008ではコンパイル通らなかったです。
Windows SDKの中を探したのですが、見つからず...orz
もうちょっと探してみます。
有難うございます!!

429:デフォルトの名無しさん
09/04/23 23:55:43
C#からDirectShowを使って動画を表示するソフトを作成しているのですが、
再生中の動画上に文字をオーバーレイする方法がわからず苦慮しています。
再生自体は下記のページと同じようなやり方で行っているのですが、
お知恵を貸してください。よろしくお願いします。
URLリンク(www.independence-sys.com)

430:デフォルトの名無しさん
09/04/24 00:09:01
DirectShow.Netに丁度良いサンプル込みであるよ

431:デフォルトの名無しさん
09/04/24 01:33:37
>>430
サンプルのDxTextが使えそうです。
どうもありがとうございました!

432:デフォルトの名無しさん
09/04/26 04:21:26
わけもわからずサンプルをつぎはぎしながらC#で動画プレーヤーを作ってます。

現在、ActiveMovie Windowという子ウインドウで動画が再生できるとこまで来ました。
そのウインドウがアクティブの状態でキーボードから再生や停止やらの操作をしたいと
思うのですが、キーダウンのイベントをどう設定すればいいのかわかりません。

IVideoWindowのput_MessageDrainでForm1.Handleを指定してはみたのですが
キーボード入力を転送してくれるものの、子ウインドウを移動させようとしても
親ウインドウが代わりに動いたりするので困ってしまいます。

ActiveMovie Windowに対するキーダウンイベントのやり方、
もしくはMessageDrainでキー入力だけ転送するようなやり方を
どなたかご教授ください。

433:デフォルトの名無しさん
09/04/26 06:27:36
引き続き質問なのですが、一部のWMVファイルが自作プレーヤーで再生できません。

再生できないファイルの音声コーデックは
Windows Media Audio 9.1 Professional 192 kbps, 48 kHz, 2 channel 24 bit 1-pass CBR
となっています。自作プレイヤー以外では問題なく再生できています。

ちなみに、下記の記述をすっとばすと音声なしの状態でファイルの再生が可能です。

IBaseFilter audioFilter = (IBaseFilter)new DSoundRender();
hr = m_FilterGraph.AddFilter(audioFilter, "DirectSound Renderer");
IPin pinOut = DsFindPin.ByDirection(sourceFilter, PinDirection.Output, 0);
hr = m_FilterGraph.RenderEx(pinOut, AMRenderExFlags.RenderToExistingRenderers, IntPtr.Zero);
Marshal.ThrowExceptionForHR(hr);

自作プレーヤーは、DirectShow.NetのサンプルのDxPlayを元に作ってます。
DxPlayというサンプルは画面キャプチャができるけど音声がならなかったのでその辺のソースを
上記の記述のように貼り付て偶然、音がなるようになりましたが理屈は微塵もわかりません。

434:432
09/04/26 07:02:42
>>433の質問変えたほうがいいかもと思い直しました。

DirectShow.Net の Samples\Players\DxPlay で音声を
ちゃんと再生するにはどう記述すればよいのでしょうか?

自分はjavascriptくらいしかまともに触ったことがなく
C++のソースを参考にC#に直すことができません。
IntPtrって何?hrって変数は何してるの?という調子で
C#初心者の自分にはDirectShow.Netはさっぱりです。

それと、>>432の件ですがSetWindowForegroundで常に
最前面に表示させることで中途半端に自己解決しました。

435:デフォルトの名無しさん
09/04/26 22:44:00
PlayWndを元に作った方がいいんじゃないか。

>>434
DirectShowのドキュメントと相互運用マーシャリングのドキュメントを一通り読んだほうがいいよ。

436:432
09/04/27 08:15:49
PlayWndのほうが実用的なカタチにととのっており
ずっと構造も簡単でそうしたかったのですが
PlayWndで静止画保存ができませんでした。

DirectShow.Net以外に静止画保存の手段があれば
というか、せめてNETでまともにDirectXが扱えてれば
ド素人が苦労しなくて済むのに…

437:デフォルトの名無しさん
09/04/27 11:19:49
とりあえずC#ちゃんと書けるようになってから愚痴れよ・・・

438:デフォルトの名無しさん
09/05/15 11:02:29
再生してるAVIの特定の1フレームから
短形を切り出してアルファ付きのtgaファイルとして保存したいのですが
どうやったら良いのでしょうか?


439:デフォルトの名無しさん
09/05/15 11:10:14
ggrks

440:デフォルトの名無しさん
09/05/15 11:40:18
短形ってナニよ?思わずググってしまった。


とりあえずDirectShowにビットマップ保存をする単純なサービスはない。
もしまだググってないならとりあえずココでも見てみよう。
URLリンク(www.geekpage.jp)

TARGAに落とすとなるとさらに面倒だよ。
VMR9のレンダーレスモードにしてD3DXのサービス関数でTARGAに落とすとか?
32ビットBMPで保存してオフラインでBMP→TARGA処理する方が楽そうだな。


あ、.NETでヤルってのも楽そうね。(Image型を使う)

441:デフォルトの名無しさん
09/05/15 14:08:47
>>439
ありがとうございます
参考にしながら頑張ってみる

442:デフォルトの名無しさん
09/05/28 11:58:51
動画再生時に音声だけを遅らせて再生することはできますか?

443:デフォルトの名無しさん
09/05/29 14:20:37
nullnullフィルタを元にカスタムフィルタを作りたいと思っています。
IGraphBuilder::AddFilter で キャプチャデバイスと nullnull フィルタを
追加しておいてから、ICaptureGraphBuilder2::RenderStream すると
問題なく終了するのですが、nullnullフィルタを RenderStream の後に
追加して、IGraphBuilder の Disconnect と Connect で挿入すると
デバッグモード終了時に、nullnull.axに3オブジェクトがアクティブで
残っていると出ます。参照カウント管理が不正なためだと思うのですが
Disconnect と Connect でフィルタを挿入しているサンプルがどこかに
ありましたら教えてもらえませんでしょうか?


444:デフォルトの名無しさん
09/05/29 15:13:53
>短形
矩形じゃねーの?
だとしてもどうして短形になったのか…

445:デフォルトの名無しさん
09/05/29 15:19:28
>>444
質問と関係ないレスならしないでほしい。ウザ杉

446:443
09/05/29 18:26:57
自己レスです
IPin::QueryPinInfo で取得した PIN_INFO の pFilter を Release していませんでした
お騒がせしました


447:デフォルトの名無しさん
09/05/29 18:31:09
2週間も前のレスに今さらレスするとかもうね。しかもどうでもいい内容だし

>>443
サンプル中をDisconnectやConnectで検索はしてみたの?
・・・と思ったら解決していた

448:デフォルトの名無しさん
09/05/30 21:58:15
現在、SDKは最新の(多分)Microsoft Windows SDK v6.1、Microsoft DirectX SDK(March 2009)、VisualStudio2005 pro という環境で、DirectShowを試しています、
ISampleGrabber インターフェイスっていうのがありますが、MSDNを読みますと
URLリンク(msdn.microsoft.com)
ヘッダー : Qedit.h をインクルードすること。このヘッダー ファイルは、バージョン 7 以降の Microsoft® Direct3D® ヘッダーとは互換性がない。
ライブラリ : strmiids.lib を使うこと。
との記述があります。
最新のSDKでは、ISampleGrabberインターフェースは無くなってしまったのでしょうか、または互換性のある、関数が定義されていうのでしょうか?詳しい人教えてください。

449:デフォルトの名無しさん
09/05/31 03:25:58
あんま詳しくない俺が答えてもいいかい?

qedit.hでググるとわかるが、そのまま#includeしてもエラーがでて使えないってだけ。
詳しくは自分で調べてくれ

450:デフォルトの名無しさん
09/05/31 06:17:59
>>449Thx、その件の対応は下記urlを参考に行い、エラーは出ていないが
URLリンク(social.msdn.microsoft.com)
こうしとけば、OKってこと?



451:デフォルトの名無しさん
09/05/31 07:21:39
どのレスを参考にしたかわからないけど、どの方法でも大丈夫そうだからOKだと思う

というか、なぜわざわざ英語を。英語得意じゃないんだから困った
MSDNか。公式フォーラムだからか。

452:デフォルトの名無しさん
09/05/31 10:03:08
>>451Thx
そうそう、公式フォーラムだったんで、俺も英語あまり良く分からないけど、参考にしました。
そして、やってみました
To compile qedit.h you must install the DirectX 9 SDK, to obtain the dxtrans.h header.
マニフェストをリソースにコンパイルしています...
Microsoft (R) Windows (R) Resource Compiler Version 6.0.5724.0
Copyright (C) Microsoft Corporation. All rights reserved.
との結果です、要約すると、コンパイラが、DirectX 9 SDKをインストールして、dxtrans.h もインクルーズしているような意味合いですね。
qedit.hの498行でコメントアウトして外したdxtrans.hをインクルーズするなんて、複雑な仕組みですよね??
COMの事をあまりよく知らないので、昨日からDirectShowのライブラリィを作っています、こんな調子で今日中にできるかな(^^;

453:デフォルトの名無しさん
09/06/02 20:18:07
GraphEditを使って、USBカメラのデータを、ASF形式で出力しWMPで見たいのですが、手順を教えてくださいませ。

454:デフォルトの名無しさん
09/06/12 17:08:38
VB.NETでDirectShowで動画を再生しながら
他の処理も行っていると動画が遅くなります。
しかし他の処理の中でDebug.Writelineで
イミディトウィンドウに文字を出し続けていると
動画が遅くならない謎の現象になっています。
これだとリリース出来ません。なにか知っている人が
いたら教えてもらえないでしょうか?

455:デフォルトの名無しさん
09/06/12 17:17:41
再生を別スレッドに別けるとか

456:454
09/06/15 12:33:45
455さんお返事ありがとうございます
別スレッドの中でWhileでDoEventsを呼び続けると
なんとかなりそうでした。まだわかりませんが。
全体の処理時間は少し遅くなりました。

457:デフォルトの名無しさん
09/06/24 13:54:47
DirectShow編集サービス(DES)で、ファイルへレンダリング出来なくて困ってます。
流れ的には以下の様な感じで、Runの後にWaitForCompletion()内で例外発生。。

・IRenderEngineをCoCreateInstance()で作る。
・pRenderEngine->SetTimelineObject()でTimelineをセットする。
・pRenderEngine->ConnectFrontEnd()呼び出し
・ICaptureGraphBuilder2をCoCreateInstance()で作る。
・pRenderEngine->GetFilterGraph( &pGraph );
・pBuilder2->SetFiltergraph(pGraph);
・pBuilder2->SetOutputFileName(&MEDIASUBTYPE_Avi..)で出力先指定
・TimelineのGroupのOuputPinを、Builder2でRenderStream()
・IMediaEvent、IMediaControl取得
・Run()
・IMediaEventのWaitForCompletionで、例外発生...orz

ウィンドウへのレンダリングは成功しています。

最終的にはスマートレンダリングしたいのですが、ISmartRenderEngineの
使い方がほとんど資料が無くて困っています。

458:デフォルトの名無しさん
09/06/25 16:05:52
1フレーム毎の音声データを取得する方法をおしえてください

459:デフォルトの名無しさん
09/06/26 00:04:24
>457
うろ覚えで役に立つか分からんけど…
・直接RenderStreamへ接続したら駄目だったはず。(MUXが必要。)
・Timelineを生成するまでの各段階でのエラー判定で色々悩まされた記憶がある。

460:デフォルトの名無しさん
09/06/26 15:39:02
>>459
ありがとうございます。
DESは資料が少なくて困りますよねー。
またよろしくです。

461:デフォルトの名無しさん
09/07/08 11:02:38
ファイルの変換をしたい。
ICaptureGraphBuilder2::SetOutputFileName()って、MUXを返すけど、
任意のMUXを指定したい場合は、どうするのかな?
AddFilterでMUXとSinkを設定するの?

462:デフォルトの名無しさん
09/07/09 00:58:42
DirectShowでフィルタを作っているんですが、
フィルタを生成時にモーダレスダイアログを表示するサンプルありませんか?
アプリではないため親ウィンドウが存在せず、
hWndも取れないしインスタンスハンドラも取れないもんでやり方ちょっと難しいっす。

463:デフォルトの名無しさん
09/07/09 01:12:59
>>462
コンストラクタかCreateInstanceかQueryInterfaceかでモードレスダイアログを
作るなりポップアップするなりすればいいんでないの?

もしかしてプロパティページの実装の仕方を聞いてる?

464:デフォルトの名無しさん
09/07/09 01:16:47
普通にそのスレッドでメッセージループ作って回せば?
窓の作り方知っていれば特に難しい事でないけど。

465:デフォルトの名無しさん
09/07/09 01:31:07
プロパティページではないです。ちなみにプロパティページは楽に作れます。

こんすとらくたでモーダレスダイアログ作りたい。

ですが、いまいちわからず…
デスクトップからハンドラ引っ張ってメッセージループ処理に飛ばそうとして失敗しました。
そこで参考サイトをみて見比べようと思った次第です

466:デフォルトの名無しさん
09/07/09 10:12:12
メッセージループ処理はどう書いてますか?
ウインドウは作れてるけどウインドウを
うまく動かせないとかなら、
メッセージループ処理に問題があるかもしれない。

もう少し問題点を詳しく書いてみたら?

467:デフォルトの名無しさん
09/07/09 12:18:57
DirectShow編集サービスでTimelineをMPEG2でレンダリング出力したいのですが、うまく出来ません。
ICaptureGraphBuilder2::RenderStream()に、MPEG2のエンコーダーを指定してます。
Muxは、最初はSetOutputFileName()で返ってきたのを使っていましたが、エラーとなったため、
MPEG2のMuxerとMPEGのFileWriterを作り、2つのピンを繋いで、そのMuxを渡していますが、
やっぱりRenderStream()でE_FAILが返ってきます。
Encoder、Muxer、FileWriterは、GraphEditで繋いで動くのは確認しています。


468:467続き
09/07/09 12:20:03
IRenderEngine* pRenderEngine; 事前に作ってあります
ICaptureGraphBuilder2* pBuilder2; 事前に作ってあります

pRenderEngine->SetTimelineObject( pTimeline );
pRenderEngine->ConnectFrontEnd();

IGraphBuilder* pGraph;
pRenderEngine->GetFilterGraph( &pGraph );
m_pBuilder2->SetFiltergraph(pGraph);

// File Writer作成
CComPtr<IBaseFilter> DS_FileWriter;
CComPtr<IFileSinkFilter> DS_FileSink;
DS_FileWriter.CoCreateInstance(CLSID_MpegFileWriter);
DS_FileWriter.QueryInterface<IFileSinkFilter>(&DS_FileSink);
DS_FileSink->SetFileName(L"c:VideoTest.mpg", NULL);
pGraph->AddFilter( DS_FileWriter, L"MPEG File Writer");

// Mux作成
CComPtr<IBaseFilter> DS_Mux;
DS_Mux.CoCreateInstance(CLSID_MPEG2_Muxer);
pGraph->AddFilter( DS_Mux, L"MPEG2 Muxer");

// ピン接続
CComPtr<IPin> p, pin;
DS_Mux->FindPin(L"Output", &p);    // Muxerの出力ピン
DS_FileWriter->FindPin(L"Input", &pin);// Writerの入力ピン
pGraph->Connect(p, pin);        // ピン接続

(続く)

469:467続き
09/07/09 12:21:43
// グループ内をループし、出力ピンを取得する。
long NumGroups;
pTimeline->GetGroupCount(&NumGroups);
for (int i = 0; i < NumGroups; i++)
{
    IAMTimelineGroup* pGroup = NULL;
    pTimeline->GetGroup((IAMTimelineObj**)&pGroup, i);
    IPin *pPin;
    if (pRenderEngine->GetGroupOutputPin(i, &pPin) == S_OK)
    {
        CComPtr<IBaseFilter> DS_Compressor;
        if(i == 0){
          // Videoグループ用のコンプレッサフィルタを作成する。
          DS_Compressor.CoCreateInstance(CLSID_MPEG2_Compressor);
        }
        // ピンを接続する。
        hr = m_pBuilder2->RenderStream(NULL, NULL, pPin, DS_Compressor, DS_Mux); ←これがE_FAIL
        SAFE_RELEASE(pPin);
    }
}

470:デフォルトの名無しさん
09/07/09 13:08:26
DESは使ったことないので見当違いかもしれませんが、
DS_Compressorをフィルタグラフに登録(AddFilter)してないのは問題ないんですか?

471:デフォルトの名無しさん
09/07/09 14:23:02
>>470
それです、それでした!!
とりあえずエラーなしでMPEG2ファイル書き出せました!!
自分でAddFilterしなくちゃダメなんですねー。
有難うございますーm(__)m

472:デフォルトの名無しさん
09/07/10 01:23:12
質問です
DirectShowでGeekなページを参考に動画再生をするプログラムを作りました
URLリンク(www.geekpage.jp)
参考URLでは『put_Rateの引数を2.0などに変更すると倍速再生になります。
put_Rateの引数に負の値(マイナスの値)を渡すと巻き戻し再生になります』
とありますが、

put_Rateの引数を負の値にしても大部分のフィルタは逆再生をサポートしていないため実行されません。

そこでIMediaSeekingかIMediaPositionを用いて巻き戻しをするプログラムを作りたいのですが、
どうすればよいのやら困っています。
何か良い考えはないでしょうか?
是非知恵をおかしください!

473:デフォルトの名無しさん
09/07/10 02:03:09
DirectShowのスレでも質問したのですが、スレの勢いを考えてこちらにも質問させていただきます。

DirectShowでGeekなページを参考に動画再生をするプログラムを作りました
URLリンク(www.geekpage.jp)
参考URLでは『put_Rateの引数を2.0などに変更すると倍速再生になります。
put_Rateの引数に負の値(マイナスの値)を渡すと巻き戻し再生になります』
とありますが、

pMediaPosition->put_Rate(0.5);
のput_Rateの引数を負の値にしても大部分のフィルタは逆再生をサポートしていないため実行されません。

そこでIMediaSeekingかIMediaPositionを用いて、または用いなくてもいいのでdirectshowで
動画の巻き戻しをするプログラムを作りたいのですが、どうすればよいのやら困っています。
何か良い考えはないでしょうか?
是非知恵をおかしください!

474:デフォルトの名無しさん
09/07/10 02:04:06
誤爆しました。すみません

475:デフォルトの名無しさん
09/07/10 04:43:47
どんな動画をどんな風に逆再生するのかわからんけど
自前で逆再生をサポートしたフィルタを作成するか、
適当に逆方向にシークさせていくかぐらいしかないんじゃない?

てかマルチポスト・・・

476:デフォルトの名無しさん
09/07/10 10:41:06
Pause状態にしておいて、10秒、9秒、8秒…てな感じにシークしていけばいいんじゃない?
逆方向再生をサポートしてない限りスムーズには出来ない。

477:デフォルトの名無しさん
09/07/10 11:19:00
なぜ「大部分のフィルタは逆再生をサポートしていない」のかよく考えてください。
キーワードは「MPEG」「フレーム間予測」・・・

これらを理解した上で、あなたならどのように逆方向再生を実現しますか?
たぶんMPEG系ではTIME_FORMAT_FRAMEが使えないので、
1枚ずつシークとか難しいと思います。

478:デフォルトの名無しさん
09/07/10 14:11:33
MPEGならSBE以外でもビデオアナライザフィルタは使えるのかな。
使えてもかなりガックリな結果しか得られないけど。

479:デフォルトの名無しさん
09/07/10 19:57:34
>>466
未だフィルタでモーダレスダイアログを表示するプログラムが出来ない
ので教えてください。

詰まっている箇所はインスタンスハンドルの取得だと思います。

コンソールアプリにて以下のソースでダイアログが表示することを確認。
main()
{
printf("ddd");

g_hDlg = CreateDialog( NULL, (LPCTSTR)IDD_DIALOG1, NULL,(DLGPROC)DlgProc);
ShowWindow( g_hDlg, SW_SHOW );

}

これをそのままDirectShowサンプルのNULLフィルタに移植
CNullNull::CNullNull(TCHAR *tszName, LPUNKNOWN punk, HRESULT *phr)
: CTransformFilter(tszName, punk, CLSID_Algorithm)
{
g_hDlg = CreateDialog( NULL, (LPCTSTR)IDD_DIALOG1, NULL,(DLGPROC)DlgProc);
ShowWindow( g_hDlg, SW_SHOW );
}
すると「g_hDlg」は0になりメッセージループ処理には飛びません

480:デフォルトの名無しさん
09/07/11 00:32:58
そんだけわかってなんで、リファレンスを読まないの?
NULLって何?アフォ?
そしてスレ違い

481:デフォルトの名無しさん
09/07/11 01:19:00
>>480
反応ありがとうございます。
コーディングする前からDirectShowフィルタでの
インスタンスハンドルの取得方法を悩んでいました。

CreateDialogの3つめの引数NULLの
hWndはデスクトップを親にするために0でいいと思う。

1つめの引数はインスタンスハンドルを書けばいいのですが
何を書いたらよいかわかりません。

普通WinAPIではWinMainの引数として与えられていたり
GetWindowLong、GetModuleHandleなどで取得できます。
しかしFilterでは出来ないのです。

よかったら取得方法を教えてください。

482:デフォルトの名無しさん
09/07/11 01:23:23
IDD_DIALOG1 のあるモジュールのハンドルに決まってるだろ。

483:デフォルトの名無しさん
09/07/11 09:27:25
>>482
IDD_DIALOG1 のあるモジュールのハンドル

これがわかりません。
IDD_DIALOG1はフィルタ自身が持っています。

メッセージボックスやオープンCVの窓は表示出来る。なんでダイアログが上手くいかないんだろう

484:デフォルトの名無しさん
09/07/11 10:43:05
たしかdllmainの引数に入ってるからそれをどっかに保存すればいい

正直フィルタにダイアログを生成させる仕様から考え直したほうがいいと思うけど

485:デフォルトの名無しさん
09/07/11 14:30:36
>>484
ありがとう。確認してみます。
仕様についてはデバッグ用であり、グラフエディット上でパケットモニタしたいと考えてました。
フィルタで枠実装しておけばアプリケーションで問題あっても容易にデバッグできるから…

486:デフォルトの名無しさん
09/07/13 12:06:25
質問です。

ハードディスク上ではなく、メモリ上に(ごく小さい)AVIファイルを読み込んでから
再生させたいと思っているのですが、ソースフィルタには何を使えば良いでしょうか?
もしくは、IGraphBuilder::RenderFile()で直接メモリを指定する方法などは
ありますでしょうか?

487:デフォルトの名無しさん
09/07/13 12:42:37
URLリンク(msdn.microsoft.com)
これの互換フィルタ作ればいい

488:486
09/07/13 13:18:35
>>487
それを見てMemFileってサンプルがあったのを思い出しました。
多分それを使えばOKです。
どうもありがとうございました!

489:デフォルトの名無しさん
09/07/17 15:56:39
自分のウィンドウ内に再生表示したいのだが、
IGraphBuilder::put_Owner()が、E_NOINTERFACEを返して来て、
別のウィンドウが開いてしまう、何故だろう?

hr = CoCreateInstance(CLSID_FilterGraph, NULL, CLSCTX_INPROC, IID_IGraphBuilder, reinterpret_cast<void **>(&pGraphBuilder));
hr = pGraphBuilder->QueryInterface(IID_IVideoWindow, (LPVOID *)&pVideoWindow);
hr = pVideoWindow->put_Owner((OAHWND)hWnd); <- E_NOINTERFACE

hWndは、自分(Dialog)のハンドル。

490:デフォルトの名無しさん
09/07/17 16:15:59
BDAチューナからの生(MPEG2-TS)データを取得するアプリを作成したく、graphedtで
試行錯誤してます。(DirectShow初挑戦)

まず、グラバを作成する代わりに"Infinit Pin Tee"+"Dump"(SDKのサンプル)を用いて
DVB-S Network Provider
 ↓
DVB-S Tuner
 ↓
DVB-S Capture
 ↓
Infinit Pin Tee → Dump → ファイル
 ↓
MPEG2 Demultiplexer
 ↓
BDAMPEG2 Transport Information Filter
の構成で、生TSデータを(ファイルに)取得するところまではできました。
が、ここで問題発生。記録したデータを見ると、所々でデータが欠落しています。
一度Runした後に"MPEG2 Demultiplexer"/"BDAMPEG2 Transport Information Filter"
を削除してRunすれば、欠落の無いデータが録れることから、これらの処理が重く
Captureからの出力がブロックされデータが失われているのではないかと予想して
います。

アドバイスいただきたいのは、
(1) 欠落原因の確認のため、CaptureとTeeの間にバッファリング(FIFO)してくれる
ようなフィルタを入れたいが、既存の物で何か良い物は無いか?
(2) 以上全体を通して、間違いやもっと良い方法は無いか?
の2点です。

よろしくお願いいたします。

491:デフォルトの名無しさん
09/07/17 16:22:50
>>489
普通はレンダラから、IVMRWindowlessControl や IVMRWindowlessControl9 で設定する。

492:デフォルトの名無しさん
09/07/17 23:55:12
>>490
そもそもTeeを通さず直接Dumpして欠落無いか確認した?

493:490
09/07/18 00:18:46
>>492
Demultiplexer/Transport Information Filterが無いとチューニングが行えない(「Microsoft統合
チューニングモデル」参照)ため、Dumpを接続するには必ずTeeが必要になります。
いったんチューニングが行われた後、Demultiplexer/Transport Information Filterを削除する
とデータ欠落が無くなるのは前記のとおり確認しています。(これが「Teeを通さず直接Dump」
と実質的に同じ状態と思われます。)

494:デフォルトの名無しさん
09/07/18 00:59:10
あとはGraphEditじゃ無理だろうがDemux通したあとのPID指定したのをDumpするとか。

495:デフォルトの名無しさん
09/07/19 01:11:24
スレ違いかもしれないのですが

デコードされた、PCM(5.1ch)を、PCM(2ch)*3に分割すうような
動作をするフィルターを探しています。

用途は、ステレオ*10の出力はあるけど、5.1ch出力は出来ない
オーディオカードから5.1chを吐かせたいのです

何かよいフィルタ(スプリッタ?)はごぞんじないでしょうか?

496:デフォルトの名無しさん
09/07/19 01:38:29
スレ違で、しかもやろうとしている事の意味がわからない。そんなへんてこストリームを再生してもまともな音響にならないと思うが・・・。
仮にpinを3つに分岐させたとして、どうやってレンダラに繋ぐんだ?
ステレオ*10ってのがまず謎だ。

497:デフォルトの名無しさん
09/07/19 01:50:08
ffdshowフィルタを使ったプログラムをくみたいのですが、
フィルタの作り方わかる方、教えてください。

まずこれ↓をやりたいのですが・・・
input.avi -> スプリッタ -> ffdshowデコーダ -> ffdshowエンコダ ->mux ->out.avi


498:デフォルトの名無しさん
09/07/19 02:03:45
>>497
フィルタの作り方、っていうのが何か勘違いされているような・・・
とりあえずGraphEdtで自分のやりたいことができてますか?

499:497
09/07/19 02:09:44
>>498
GraphEditではできています。
それをプログラム上で再現したいのですが、CLSIDなど
どう設定してよいかがわかりません。

500:デフォルトの名無しさん
09/07/19 02:15:38
>>496
レンダラを
ステレオ1,ステレオ2,ステレオ3
に割り振るだけだと思うのですが

URLリンク(www.m-audio.jp)
URLリンク(www.synthax.jp)
URLリンク(www.musetex.co.jp)


こういう、ステレオ出力が10系統とか15系統ついている奴です
あと、後段でディレイをかけるので問題はないです




501:デフォルトの名無しさん
09/07/19 13:27:21
>>497
既存のフィルタを組み合わせるだけならフィルタを作る必要は無い

なんにせよ大体のことは>>2あたりを見るだけで事足りる
それでもわからないことがあったらまた聞きにきな

502:497
09/07/19 14:08:05
>>501 ありがとうございます。

一応、ここ↓を参考にして、
URLリンク(geocities.yahoo.co.jp)

このようにコーディングしてみたのですが、
CoCreateInstance(CLSID_FFDSHOW, NULL,CLSCTX_INPROC_SERVER, IID_IffDecoder, (void**)&iff);
ヘッダはどうしたらよいのか・・・・
そもそもこのコードがあっているのでしょうか?

503:デフォルトの名無しさん
09/07/19 15:11:26
>>502
そのページには
>この辺は、海外のffdshowのソース?みたいなところを漁ったら出てきます。(ライセンス的にどうなのかはわかりません)
って書いてあるからどうやらヘッダはffdshowのソースからとってきてるみたい
使うならちゃんとライセンス確認してから使うこと
ただffdshowっていろんなバージョンがあったと思うけど互換性は大丈夫なのかな

504:497
09/07/19 15:36:47
>>503 なるほど、ありがとうございます。
もう少し調べてみます。

普通、ffdshowのフィルタはプログラム上からはあまり使わない感じなんですかね?


505:デフォルトの名無しさん
09/07/19 17:52:17
>>504
というよりもエンコーダ/デコーダを特定のものに固定することが少ないんじゃないかな
ffdshow固有の機能を使いたいというなら別だけどね

そうでなくて単にAVIを変換したいというだけならこことか見てみるといいかも
AVI ファイルの再圧縮
URLリンク(msdn.microsoft.com)

506:497
09/07/19 22:19:55
>>505 ありがとうございます。
考えていたのはaviファイルをリサイズ、音量操作などをしてから再圧縮保存したいと考えていたので
多機能のffdshowをプログラム上で使えれば楽かなっと思っていました。


507:デフォルトの名無しさん
09/07/19 22:37:00
編集フィルタ標準であるやん

508:497
09/07/19 23:37:59
>>507 本当ですか? 調べなおしてみます・・・


509:デフォルトの名無しさん
09/07/21 12:46:44
>>491
Thanks!

510:デフォルトの名無しさん
09/07/27 00:30:28
キャプチャデバイスからの映像を再生するアプリを作っているのですが、
開発が進むにつれて、ブルースクリーンになってOS毎落ちるようになりました。

フィルタ群を一度切り離して、キャプチャデバイスやVMRを切り替えて再度接続する、
という動作をさせるようにしてから落ちるようになりました。(何度か繰り返していると起こる)

原因としては何が考えられそうでしょうか??
はっきりは分からなくても、怪しく感じるところでも良いので、ご助言お願いします。

ピンのアロケータのデータがうまく解放されていないのでしょうか?
また、それを確認もしくは解消する術はあるのでしょうか?

[ 落ちるときの詳細 ]
1. グラフを停止
  ( pMediaControl->Stop() )
2. AVIデコンプレッサや色空間フィルタ、VMRのピンを切断
3. キャプチャデバイスと繋がっているスマートティーフィルタを削除
  ( pGraphBuilder->RemoveFilter( xxx ) )
4. キャプチャデバイスをグラフから削除
  ( pGraphBuilder->RemoveFilter( xxx ) )
5 キャプチャデバイスをグラフに追加
  ( pGraphBuilder->AddFilter( xxx ) )
6. フィルタグラフを再構築
  ( pGraphBuilder->RenderStrem( xxx ) )
7. ビデオ転送矩形を設定
8. グラフを再生
  ( pMediaControl->Run() )

511:デフォルトの名無しさん
09/07/27 01:55:00
再生側でOS落ちるのはレアだから、ソースフィルタ側のドライバの問題でない?
テンプレート使っていないなら、参照カウンタあたりが怪しいけど。
破棄されているのに、更にReleaseしてアドレスがたまたま有効なために不正にコードが実行されてしまったケースを想定。
チェックが甘い実装だとこのケースで落ちそうな気がする。

512:510
09/07/27 02:14:56
>>511
ありがとうございます。

>ソースフィルタ側のドライバの問題でない?
その可能性もあると思います。
使っているキャプチャボードがIntensityProとSAA7103-TVPCIなのですが、
IntensityProのほうはドライバがあまり安定していないという報告をよく聞きますし。

>破棄されているのに、更にReleaseして
一応、以下のようなSAFE_RELEASEマクロでそういったことが起こらないよう心がけています
SAFE_RELEASE( x ) { if( x ) { ( x )->Release(); ( x ) = NULL; } }
しかし、Releaseし忘れの恐れは残りますが・・・(慎重にチェックはしているものの(汗))

もう一つ、少し心配なのが、>>510の3番のスマートティーフィルタのフィルタグラフからの削除です。
このスマートティーはインテリジェント接続により生成されるもので、
基本的にはDirectShow側で生成、解放等の管理をしてくれていると思うのですが、
それに対してアプリ側でRemoveFilterするのは問題ないのだろうか?と・・・

しかし、>>511さんのご意見通り、ドライバの問題が有力な気がします。
もう一枚キャプボがあるので、怪しいIntensityProを外して他の2枚で切替を行うテストをして、
問題がないかを試してみようと思います。
ドライバのせいにできれば、アプリ作成者側としては気が楽になりますので期待してます(笑)

どうもありがとうございました。

513:デフォルトの名無しさん
09/07/27 03:52:51
CComPtrとかで参照を自動化してやると間違いが起きないぜって話

514:510
09/07/28 00:37:34
よく調べてみると、参照カウントが予想外の挙動をしていました。

例えば、

pCaptureGraphBuilder->FindInterface( &PIN_CATEGORY_CAPTURE, 0, pCapDev, IID_IAMStreamConfig, ( void** )&pConfig )

として、pConfigの参照カウントを調べてみると、1ではなく、いきなり2や6になったりするんです。

キャプチャデバイスフィルタ(上のpCapDev)も、
pMoniker->BindToObject()では1上がるだけですが、その直後のpGraphBuilder->AddFilterで
3とかになったりしました。

ここらへんが悪さをしていたようで、どうしたものかと思いましたが、
>>513さんが教えてくださったCComPtrに変えたところ、うまくいきました!

CComPtrを使うと、
URLリンク(www.hamusuta.net)
に書いてあるように、使いまわし利用ができず、プログラムが止まります。
これで問題箇所が分かる上、xxx.Release()とすればちゃんと
解放(おそらく参照カウントを必要なだけ複数下げてくれている)してくれます。
この対処をした後はブルースクリーンクラシュは起こらなくなり、安定して動いています。

とてもよい解決策を教えてくださって、ありがとうございました!

515:デフォルトの名無しさん
09/07/28 00:58:01
ReleaseよりNULL入れるほうが安全。
CComPtr以外にBoostでもテンプレートがあったきがす。
最初から入っているCComPtr使うほうが楽だけどね。

516:デフォルトの名無しさん
09/07/28 01:10:54
直接関係ないけど、CComPtrで使いまわす場合はDetachするとよか

517:デフォルトの名無しさん
09/07/28 02:23:30
>>514
いやCComPtr::Releaseは参照カウント一つしか減らさないぞ…。ヘッダファイルにソース書いてあるから読んでみるといい。
まぁ元のプログラムで参照カウントの増減おかしかったのが正しくなったんだろう。
なんにせよCComPtrを使っておくのは正しい対処だ。

>>515
CComPtrにNULL代入するのとCComPtr::Releaseは全く同じことしかやらないような。

518:デフォルトの名無しさん
09/07/28 03:19:00
>>517
NULLの代入とReleaseが同じなのはその通りだけど、
hoge.Release();は、間違えてhoge->Release();としてもコンパイルが通ってしまうから
避けるべきだと>>515は考えているのだと思う。

519:デフォルトの名無しさん
09/07/28 08:29:06
いつからかわからないけど、
CComPtrで ->AddRef と ->Release はコンパイル通らないようになってるよ。
確かVC6の頃は通ってたな。

520:510
09/07/29 01:35:32
ダメです!再びブルースクリーン炸裂です・・・
CComPtrを使う前よりは耐性(?)は増したか・・・と思うと、
再起動直後、数回のデバッグ起動でガチャン・・・
CComPtrを以ってしても敵わないとは・・・恐るべしDirectShow・・・!

>>516
具体的にはどうするのでしょうか??
Detachだと、CComPtrが対象生ポインタの所有権を棄却するだけで、
解放は施されないようですが・・・

>>517
たしかにそうでした(汗)
となると、例の参照カウント異常上昇分を抑え切れてない可能性もありますね・・・

>>519
その通りで、->Releaseのほうはコンパイラに怒られました。

一度、怪しいCOMポインタについては、CComPtrを使わず、ソフト終了寸前に、
参照カウントが0になるまでRelease()を繰り返すといった方法を試してみようと思います。

521:デフォルトの名無しさん
09/07/29 02:11:03
>>参照カウントが0になるまでRelease()を繰り返すといった方法を試してみようと思います。
これはやってはいけない。そもそもAddRedやReleaseの返す値は使用してはいけないルールです。
参照値なんて自分で作ったもの以外は基本的にわからんよ。

再利用すると挙動不審になるデバイスなんでね。破棄して再生成してしまえ。
実行時間が同じくらいなら安定した方法で手抜き実装。

522:デフォルトの名無しさん
09/07/29 07:27:54
BMDSDKだとキャプチャフィルタは削除せずにグラフ変更やっているみたいだから
それに沿ったら?

523:デフォルトの名無しさん
09/08/02 19:39:32
avi(音声あり)とwavファイルを多重化してaviに保存したいのですが、
directshowの既存のフィルタでプログラムできますか?
aviの音声そのままでwavの音声も重ねたいのですが・・・

524:デフォルトの名無しさん
09/08/02 21:26:39
GraphEditで作れるか試せばいいだろ

525:510
09/08/03 07:37:49
>>521
ありがとうございます!
確かに怖いですねw
>実行時間が同じくらいなら安定した方法で手抜き実装。
DirectShowって、フィルタ開発とかを除けば、基本的に時間を気にしないといけないところは
少ないですし、おっしゃる通り、遠回りでも、じじぐさくても、安定するように組むのがセオリーのようですね。

>>522
ありがとうございます!
その方法でやってみました。
はじめは、それでもOS毎落ちる事態は発生していましたが、どうもセットで生成されるスマートティー
を削除するのがよくないようで、これも残すようにし、再接続の際はスマートティー(在れば)から
接続してグラフを構築するようにしたところ・・・ついにブルースクリーンが出ないようになりました!!
何度も再接続を繰り返し、それまでであればほとんど落ちていたような回数でもぜんぜん落ちる
気配がありません。

みなさん、良いご助言を下さり、ありがとうござました!!

526:デフォルトの名無しさん
09/08/07 16:14:48
自分はCanonのHV10っていうDVカメラしか持ってないんですが
IVideoWindow::SetWindowPosition で、ソース画像の1/2以下の
Windowエリアに割り当てると描画しなくなります(SetWindowPosition はS_OKを返します)
その後 SetWindowPosition で再設定しても描画されず、グラフを再作成するしかないようです。
他のDVカメラでも画像の1/2以下に割り当てると同じようなことが起きますか?

Windowリサイズ時に(ソース画像の1/2+1)ピクセル以上に割り当てるようにしていますが
この1/2で他のDVカメラに通用するのかが知りたいです。

527:デフォルトの名無しさん
09/08/07 21:26:16
サンプルグラバについて、
SetOneShot( true )
でワンショットモードにしてから再生しているのですが、
いつまでたってもグラフが停止しません。
(キャプチャデバイスからのライブソースです)

ワンショットモードでは、サンプルを1枚受け取ると、グラフを停止するとmsdnにも書いています。

WaitForCompletion( INFINITE, &evCode );
を挿入し、この関数から返ってくるのを待っても、一向に返ってこず、再生が続いたままになります。

とりあえず、Sleep( 100 )として対応していますが、
このようなことをせず、ちゃんとサンプルの受信が完了したのを確認してから
サンプルを取得できるようにするにはどうすればよいでしょうか??

528:デフォルトの名無しさん
09/08/08 03:19:27
Intensityをお持ちの方にお聞きしたいのですが、
入力設定を「HD 1080 PsF 24」にして、グラフ構築ができるでしょうか?
GraphEditを使ったのですが、自分の場合、どのフィルタも繋がらりません・・・
「接続に必要な中間フィルタの組み合わせが見つかりませんでした。」
のエラーメッセージが出てしまいます。

構築ができる方や、実際にPS3などからの24p出力を取り込められている方が
おられましたら、フィルタグラフの構成を教えてください。

よろしくお願いします。

529:デフォルトの名無しさん
09/08/10 00:56:04
プログラムを終了する際は、すべてのフィルタをグラフから削除(RemoveFilter)すべきでしょうか?
また、そのときは、インテリジェント接続で自動的に生成されたフィルタについても、
アプリ側で検索して削除すべきでしょうか?

削除しなくても問題は(一見)起こっていませんが、行儀よく終わる方法を知りたいと思いました。

530:デフォルトの名無しさん
09/08/10 01:10:00
>>528
メディアサブタイプがHDYCのはずだから、Blackmagic Designe DecoderDMO挟んでみるとか

>>529
自分で追加したフィルタと、グラフを解放するだけで問題ない、はず。

531:デフォルトの名無しさん
09/08/10 11:31:03
>>529
後片付けのためにRemoveFilterを使う必要はない

532:529
09/08/10 12:26:12
>>530
>>531
ありがとうございます!
安心しました。

533:528
09/08/11 07:26:53
>>530
ありがとうございます。
しかし、24fps設定ではBlackmagic Design Decoder (DMO)すら繋がりませんでした(汗)

534:デフォルトの名無しさん
09/08/14 23:40:51
有識者の皆様にご教授願いたいことがあります。

カメラとマイクそれぞれのキャプチャピンから別々にデータを拾って保管しておき、
あとでそれらをプッシュソースフィルタからAVIMUXフィルターで合体させ、AVIファイルを作ろうと思っています。

キャプチャピンから拾うデータはIMediaSampleのデータ(GetPointer)と開始時間と終了時間(GetTime(Start,Stop))です。

問題は、20秒くらいのAVIデータを作成すると、2秒くらい画像が縮んでいることです。
取得時に実時間を画像に描画していますので、それを見ていると、18秒くらいで20秒目の画像まで来てしまいます。
音声は割りと正確に入っていまして、画像が停止した状態から+2秒できっちり20秒ぶん出来ています。

かなりの時間を割いて調べましたが、良い資料にめぐり合いません。
ちなみに、カメラから取ったデータを仮に(AvgTimePerFrame=)10fpsとすると、GetTimeで取得したStartとStopの間は0.1秒ぶん(1000000)ですが、
データとデータの間が必ずしも連続ではありません。1つ目のデータのstopが100000として、次のデータのstartが102000とかだったりします。(本当は100000が理想ですよね)
ですので、10フレーム分のデータの最初のstartから最後のstopまでが1秒以上になっているようです。(カメラがコマ落ちしているようです。)

(長くなりましたので分割いたしました。次のレスに続きます。)


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