この質問は、Window Media API を使用して 4K WMV ビデオを出力することに関するものです (ただし、理論的には WMV は 4K への出力をサポートしていません)。
IWMWriter->BeginWriting() が 32 ビットと 64 ビットの両方の Win10 で呼び出された後 (両方のシステムで BeginWriting() は S_OK を返します)、プログラムは約 450MB のメモリを消費します。
その後、IWMWriter->AllocateSample() を使用してサンプル バッファーを割り当て、IWMWriter->WriteSample() を使用してシンクに書き込みます。
64 ビットの Win10 では、変換は正常に終了しますが、32 ビットの Win10 では、いくつかのフレームが書き込まれた後、WriteSample() が「メモリ不足」エラーで失敗します。
2 つのシステムで確認できる唯一の違いは、BeginWriting() を呼び出す前に 64Win10 が 110 MB のメモリを使用するため、BeginWriting() が呼び出された後は 110+450 が使用されることです。32 ビットの Win10 では、BeginWriting() の前に 150 MB が使用されるため、その後は 150+450 が使用されます。
失敗した変換のピーク ワーキング セットはわずか 761MB です。この場合、WriteSample() がメモリ不足を返す理由は誰にもわかります。これに対する回避策はありますか?
== 更新: ============================================
ソースビデオにはビデオとオーディオの両方が含まれています。失敗した場合、プログラムはビデオとオーディオの両方を書き込み、ビデオの書き込みに失敗しました。
ビデオのみが含まれるようにファイルからオーディオ トラックを取り出すと、変換は正常に終了します。ピーク ワーキング セットは 716MB です。