Этот вопрос касается использования Window Media API для вывода видео 4K WMV (хотя теоретически WMV не поддерживает вывод в 4K)
После вызова IWMWriter->BeginWriting() как на 32-битной, так и на 64-битной Win10 (на обеих системах BeginWriting() возвращает S_OK), программа занимает около 450 МБ памяти.
После этого я начинаю использовать IWMWriter->AllocateSample() для выделения буфера сэмпла и записи его в сток с помощью IWMWriter->WriteSample().
В 64-битной Win10 преобразование может завершиться изящно, но в 32-битной Win10 WriteSample() завершается с ошибкой «недостаточно памяти» после записи нескольких кадров.
Единственная разница, которую я вижу в двух системах, заключается в следующем: перед вызовом BeginWriting() 64Win10 занимает 110 МБ памяти, поэтому после вызова BeginWriting() используется 110+450. В 32-битной Win10 перед BeginWriting() используется 150 МБ, поэтому после этого используется 150+450.
Пиковый рабочий набор неудачного преобразования составляет всего 761 МБ, кто-нибудь знает, почему в этом случае WriteSample() возвращает нехватку памяти. Есть ли обходной путь для этого?
== Обновление: ============================================
Исходное видео содержит и видео, и аудио, в случае сбоя программа записывает и видео, и аудио, но записать видео не удалось.
Если я уберу звуковую дорожку из файла, чтобы она содержала только видео, преобразование может завершиться изящно. Пиковый рабочий набор составляет 716 МБ.