Проблема сброса устройства в режиме без рендеринга VMR9 - PullRequest
1 голос
/ 07 мая 2010

Я борюсь с этой проблемой в течение недели .. Я надеюсь, что могу заявить проблема достаточно ясна:

Итак, я настраиваю свой собственный распределитель / докладчик и в InitializeDevice () я создать текстуры для VMR9

Затем VMR9 вызывает мою функцию PresentImage () каждый раз, когда у нее кадр.

Я отображаю рендер этой текстуры на четырехугольнике и представляю ее (). Если 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: (ОШИБКА): ширина текстуры больше, чем у устройства поддерживает. Сбой CreateTexture.

Я проследил проблему до некоторой точки, где я вижу, что в какой-то функции глубоко в VMR9 вычисляет следующую степень 2 ширины до создание некоторых текстур (кроме тех, которые я успешно создаю в мой А / П). И во время отслеживания я понял это:

Ширина моего видео - 640. Следующая степень 2 из 640 - 1024. И я вижу что это значение как-то становится 10240. Хотя я даже не устанавливаю ширина выделения до 1024. Я просто передаю 640, поскольку моя видеокарта не требуются размеры текстуры pow2.

Вот где я застрял ..

Есть ли кто-нибудь, кто знает что-то о сбросе / обновлении устройство с VMR9 ?? Пожалуйста, помогите.

Заранее спасибо.

Фатих

1 Ответ

0 голосов
/ 23 июля 2010

Поскольку у вас есть собственный распределитель / докладчик, я предполагаю, что вы используете IVMRSurfaceAllocatorNotify9 :: AllocateSurfaceHelper (); и этот метод может потенциально распределить несколько поверхностей, вы уверены, что все они освобождаются до перезагрузки устройства?

...