Этот вопрос касается использования 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 150 МБ используется до BeginWriting (), поэтому после этого используется 150 + 450.
Пиковый рабочий набор неудачного преобразования составляет всего 761 МБ, любой знает, почему в этом случае WriteSample () возвращается из памяти. Есть ли обходной путь для этого?
== Обновление: ===================================================
Исходное видео содержит видео и аудио, в случае сбоя программа записывает видео и аудио и не может записать видео.
Если я извлекаю звуковую дорожку из файла, чтобы она содержала только видео, преобразование может закончиться изящно. Максимальный рабочий набор составляет 716 МБ.
Речь идет о требованиях к памяти видеокодера: в этом разрешении приложение не соответствует стандартному 2 ГБ адресного пространства 32-разрядного приложения. Вы можете связаться с / LARGEADDRESSAWARE обойти из памяти условия.
Других решений пока нет …