Настройте IWMWriter для записи видео 4K
Этот вопрос касается использования 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 МБ.
1 ответ
Речь идет о требованиях к памяти видеокодера: в этом разрешении приложение не соответствует стандартному 2 ГБ адресного пространства 32-разрядного приложения. Вы можете связать с /LARGEADDRESSAWARE, чтобы обойти нехватку памяти.