Я борюсь с этой проблемой уже неделю. Надеюсь, я смогу достаточно ясно изложить проблему:
Итак, я настраиваю свой собственный распределитель/презентатор и в InitializeDevice() создаю текстуры для VMR9.
Затем VMR9 вызывает мою функцию PresentImage() каждый раз, когда появляется новый кадр.
Я отображаю визуализацию этой текстуры на четырехугольнике и использую Present(). Если Present() возвращает D3DERR_DEVICELOST, то я отправляю PostMessage() в свой WndProc(), чтобы сигнализировать о сбросе устройства.
Затем мой WndProc() вызывает ResetDevice() для моего пользовательского объекта. ResetDevice() освобождает все ресурсы DEFAULT_POOL и вызывает Reset() на устройстве. Теперь давайте остановимся на мгновение
В этот момент Direct3d выдает мне сообщение об ошибке, сообщающее мне, что я все еще храню ссылки на некоторые поверхности DEFAULT_POOL... В чем я почти уверен, так это в том, что я освобождаю единственную выделенную текстуру. Насколько мне известно, эта проблема является загадкой... На форуме есть множество сообщений без ответа по этой проблеме, датируемых даже 2003 годом.
Поменяемся полосами. В этом сообщении на форуме
http://www.eggheadcafe.com/software/aspnet/29909616/i-did-some-more-e...
сказано, что вы должны остановить график, отключить все контакты VMR9, перезагрузить устройство, затем снова подключить и снова запустить график.
Когда я это делаю, я получаю еще одну жалобу Direct3d: Direct3D9: (ОШИБКА): Ошибка при попытке создать текстуру Direct3D9: (ОШИБКА): Ширина текстуры больше, чем поддерживает устройство. Не удалось создать текстуру.
Я проследил проблему до какого-то момента, где я вижу, что в какой-то функции глубоко в VMR9 вычисляется следующая степень двойки ширины перед созданием некоторых текстур (кроме тех, которые я успешно создаю в своем A/P). И во время трассировки я понял следующее:
У меня ширина видео 640. Следующая степень двойки от 640 это 1024. И я вижу, что это значение каким-то образом становится 10240. Хотя я даже ширину выделения не ставлю 1024. Я просто передаю 640 так как моя видеокарта не требуют размеров текстуры pow2.
Вот тут я застрял..
Кто-нибудь знает что-нибудь о сбросе/обновлении устройства с помощью VMR9?? Пожалуйста помоги.
Заранее спасибо.
Фатих