Этот вопрос о использовании Window Media API для вывода видео 4K WMV (хотя теоретически WMV не поддерживает вывод в 4К)Настройка IWMWriter в wirte 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 МБ.
Спасибо за предложение Roman. Но большой адрес уже включен. Такая же программа-пример также работает правильно в 32-битной системе Win7. – rhbc73
Ваш код «как есть» вызывает нарушение доступа в вызове «BeginWriting» в моей системе как в 32, так и в 64-разрядных версиях. Однако перед установкой/LARGEADDRESSAWARE 32-разрядная версия действительно перешла в состояние нехватки памяти. Поэтому я все еще думаю, что это проблема для 32 бит и высокого разрешения. Кодер Win 7 может быть менее жадным в требованиях к памяти и работать сразу. –
Спасибо, Роман. Эта проблема несколько решена. Как я уже сказал, у меня есть «память», когда вызывается BeginWriting. Это потому, что я не правильно печатал медиафайл. memset (p, size, value) записывалась в memset (p, значение, размер) при настройке свойств ввода. – rhbc73