Closed Alalf closed 11 years ago
いろいろありましてそろそろ更新します 0.2.0完成のモチベは多分新生のアレが盛り上げてくれるハズ・・・・・・
現状8を取るかXPを取るかという二者択一を迫られてる感じ まさかここまでXP切捨てでこられるとは思わなかった あまりのことにgccへの移植を考えるレベル・・・・・・どうしたものやら
Visual Studio 2012のUpdate1が出たのでいろいろ調査中。 ついにx64=amd64になったのかPlatformShortnameが変わってた。amd64を全部x64に書き直さないと駄目かなーこれ。
いまさらだけどVirtualBoxといういいものを知ったので、XPでの動作確認ができそうだ
ffmpeg側のリファクタリングに合わせて調整中。AVPixelFormatができて、VCでもpixdesc.hの書き換えが必要なくなったようだ。これはありがたい。
やっぱりやらかしてくれたのはC#/.NETだった・・・ Drag Hereボタンが動かなくなってる。画面のDCに書き込みができなくなった・・・?あとマウス座標からウィンドウを取得できない。これはまずい…
問題の切り分け完了。Any CPU向けビルドにすると一部Win32APIが使えなくなる。んで32bit優先付けると使えるようになる。.NETは4.0CPでも4.5でも動いた。 要するにAny CPU使わなきゃいいかんじ。ちなみに4.5は正式にXP非対応宣言済み。さて、どうしたものやら・・・
結論から言うと某B社と某新生がWindows XPをサポートし続ける限り、SCFFもWindows XPを切り捨てるという選択肢はありえない。よって、Visual Studio 2012に移行はするけれどもコンパイラはv110_xp、.NETは4.0CP/x86で固定しよう…
ふときになってGoogle C++ Style Guide見に行ったらかなり更新されてた!(英語版本家のみ) C++11のautoとnullptr/nullptr_tはがんがん使っていくようにしないとなー。range_based_forもスクリプト言語でおなじみなので使いやすそう。
enumの前方宣言が便利すぎて鼻血が出そう・・・
GetDesktopWindow()を排除したほうがいいかもしれない。Windows 8ではメトロアプリよりも階層が上のHWNDなのでコレを取り込もうとするとAeroOn取り込みと同じぐらい動作が遅くなる。Windows 7では:
になってるが、おそらくXP/8では違うはず・・・要調査
VirtualBox上のXPで試したところ(VBox独自の可能性もあり)
どうやら上はActive Desktopを付けてたときだけか?おそらくWindows 8ではかなり異なるはず。要調査。
ついでに各種DirectXフック系キャプチャプログラムの調査。いちおうWindows 8に対応してるっぽいが、デスクトップ取り込みに対応しているかどうかはわからない。 SCFFは最初からSCFHの置き換えを狙って作り始めたものだからフックは使わないと決めているが、Windows 8でまともなパフォーマンスでデスクトップキャプチャができないとなると代替案を導入せざるを得ないかもしれない・・・。でも知識も大量のdllにひとつひとつフックプログラムを書く気力もない・・・。困ったもんです。
そして収穫が。なんとDirect 3Dはテクスチャの画像形式としてYUV形式をサポートしていることが判明!ただし全部16bit。 どうりでYUV2のWMVがGPU支援付きで再生されるわけだ。しかしネットの動画の大半は12bit YUV・・・。 なんかちぐはぐだなあ・・・。
Windows 8で高速なキャプチャをしたい場合はGDI(DC)を使わずにDXGI Duplicationを使えばいいのかも… http://code.msdn.microsoft.com/windowsdesktop/Desktop-Duplication-Sample-da4c696a/view/Discussions#content
自分用メモ
ぼーっと眺めていたら面白いものを発見。 http://msdn.microsoft.com/en-us/library/hh448029(v=vs.85).aspx このDXGIManagerからDesktopDuplicationできないかな・・・。
MFMEDIASOURCE_IS_LIVEのサンプルが2013年になっても一つもないというのはいったいどういうことなの
D3D10/10.1/11のキャプチャ機能を考え中。コレが実現できればDXGI Desktop Duplication対応も可能なはず。
OpenProcess()を直接呼んだらAntiVirusソフトに誤検出されるらしい。Injectionなかなか奥が深い…。
OBSの基本的な流れとしては:
InjectorでLoadLibraryされたDLLのスレッドの生存期間をOBSのHWNDで判断しているので、そのまま使おうとするとOBSと併用できなくなる可能性がある。 となると書き換えが必要だが、OBSのソースはGPLなのでややこしいことになる。
やはり参考にしながら書くのが正解か
InjectHelper.exeが独立したexeである必要はないが、GraphicsCaptureHook.dllは独立したdllではなければならない。 つまり
ここにきてSCFF DSFからProfile機能を取っ払って共有メモリの中身を書くだけのフィルタにしたくなってきた
知れば知るほどグレーゾーンに突入している感じ。これ「実行中のプログラムを書き換えてはならない」とかゲームの規約に入ってたらどうなるんだろう。
スクリーンキャプチャ機能はOSの標準機能ですとお茶を濁せるのはキャプチャプログラムの利点か
Desktop Duplicationはアリだが、Injectorを利用したDirectXキャプチャはナシの方向で だが、結局IDXGIResourceに対する処理(CalcSubresource/CopySubresourceRegion)は一緒なので知識は無駄にはならなそう
別のIssueに移動
いやな予感がするのでIssueに