2016-08-11 9 views
2

(IWMWriter-> BeginWriting後は上と呼ばれる4K映像に

(理論的にはWMVが4Kへの出力をサポートしていませんが)を出力する4K WMVビデオをウィンドウメディアAPIを使用してについてです。この質問を)wirteするIWMWriterを設定します32ビットと64ビットの両方のWin10(両方のシステムでBeginWriting()がS_OKを返します)では、プログラムは約450MBのメモリを消費します。

その後、IWMWriter-> WriteSample()を使用してサンプルバッファを割り当て、シンクに書き込むためにIWMWriter-> AllocateSample()を使い始めます。

64ビットWin10で、変換が優雅が、いくつかのフレームが書き込まれた後Win10、WriteSample()は、「メモリ不足」エラーで失敗する32ビットで終了することができます。

私が2つのシステムで見ることのできる唯一の違いは、BeginWriting()を呼び出す前に、BeginWriting()が呼び出された後に110W + 450が使用されるためです。 32ビットWin10では、BeginWriting()の前に150 MBが使用されます。そのあと150 + 450が使用されます。失敗した変換のワーキングセット

ピークは、この場合にはWriteSample()がメモリ不足に返し、なぜ誰もが知っている、唯一の761メガバイトです。このための回避策はありますか?

==更新:========================================== ===

ソースビデオは、ビデオとオーディオの両方が含まれていなかった場合にプログラムがビデオとオーディオの両方を書き込み、ビデオの書き込みに失敗しました。

ファイルからオーディオトラックを取り出してビデオのみを含む場合、変換は正常に終了します。ピークワーキングセットは716MBです。

答えて

0

これは、ビデオエンコーダのメモリ要件についてです:この解像度でアプリケーションが32ビットアプリケーションのアドレス空間の標準2ギガバイトに適合していません。メモリの状態をバイパスするには、/LARGEADDRESSAWAREとリンクしてください。

+0

提案していただきありがとうございます。しかし、大規模なアドレス認識はすでに有効になっています。同じサンプルプログラムも32ビットWin7システムで正しく動作します。 – rhbc73

+0

あなたのコードは「現状のまま」私のシステム上で32ビット版と64ビット版の両方の 'BeginWriting'呼び出しでアクセス違反を引き起こします。しかし、/ LARGEADDRESSAWAREを設定する前に、32ビット版は確かにメモリ不足状態になりました。だから私はまだそれが32ビットと高解像度の問題だと思っています。 Win 7エンコーダは、メモリ要件が少なく、すぐに動作します。 –

+0

ローマに感謝します。この問題は幾分解決される。私が言ったように、私はBeginWritingが呼び出されたときに「メモリ不足」を持っています。メディアタイプを正しく設定していなかったからです。入力プロパティの設定時にmemset(p、size、value)がmemset(p、value、size)に書き込まれました。 – rhbc73

関連する問題