EVR-CP, Failed to RegisterClass

Автор V0lt, 11 ноября 2020, 16:16:00

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

V0lt

Начало обсуждения тут. Флуд удален.

Суть проблемы:
В некоторых ситуациях появляется сообщение "Failed to RegisterClass". После чего могут возникать другие нежелательные эффекты.
Пример сообщения:



Способ 1. (исправлен в 1.6.2.6975 alpha / git 2022.04.01 - 0037ed418)
Необходимо отрыть видео с низкой частотой кадров. После того как появится первый кадр, открыть файл заново. Появится окно с ошибкой.

Примеры сэмплов.
0.2fps_1frame.avi - играет нормально, если не обращать на длительность.
0.2fps_2frames.avi - очень легко вызвать ошибку "Failed to RegisterClass", если перезапустить воспроизведение в течении первых 5 секунд.
0.2fps_3frames.avi - тоже самое, что и предыдущий.
0.2fps_10frames.avi - если сделать несколько раз поиск, то ошибки может и не быть. Может и без поиска перезапускаться без ошибки.

Тут очень непонятная ситуация. В процессе "успешного" удаления графа DirectShow рендерер EVR-CP не удаляется, деструкторы классов не вызываются. Он как будто выпадает из графа. В результате происходит утечка памяти.
Проблема также наблюдается с Sync Renderer.


Способ 2.
В настройках EVR-CP выбрать режим вывода Flip/FlipEx. Запустить воспроизведение, перейти ближе к концу файла и открыть окно свойств видеорендерера. Перед переходом к следующему файлу (в плейлисте или папке) появится окно с ошибкой. После чего плеер не сможет использовать EVR-CP, а поверх других видео будет висеть последний кадр первого файла. Помогает только перезапуск плеера.

По непонятной причине происходит блокировка окна рендерера. Из-за чего DestroyWindow и UnregisterClassW в деструкторе CDX9AllocatorPresenter завершаются с ошибкой.
В режиме вывода Copy проблема не наблюдается.

MPCfan

#1
Цитата: V0lt от 13 ноября 2020, 10:24:36
Чернота побеждена в r5680. Прошу проверить.

Ошибку "Failed to RegisterClass" можно конечно заглушить, но не хотелось бы, т.к. она косвенно сообщает о том, что прошлый EVR-CP не выгружен из памяти.

Проблемы с графом поизучаем, если сможем стабильно воспроизвести.
Такая же ошибка появляется и без mpc image source c Flipex при переходе на следующий файл, если открыто окно свойств EVR-CP > https://yadi.sk/i/HwFXIX-UrsSIuQ

V0lt

#2
MPCfan
Подтверждаю. EVR-CP, FlipEx, окрытое окно свойств и на следующем видео можно получить такое. :-)

Остаток кадра со статистикой будет висеть пока плеер не перезапустишь. :D

V0lt

#3
Отладочный лог для окна свойств и режима FlipEx:
mpc-be64.exe(tid 14cc)    29575 : CDX9AllocatorPresenter::~CDX9AllocatorPresenter()
mpc-be64.exe(tid 14cc)    29591 : DestroyWindow failed (E_ACCESSDENIED)!
mpc-be64.exe(tid 14cc)    29591 : Unregistering 'MPCVRWindow' class failed.


В режиме Copy все хорошо.

V0lt

#4
Баг описанный в способе 1 исправлен в 1.6.2.6975 alpha (git 2022.04.01 - 0037ed418). :D

V0lt

Дополнение в 1.6.3.32 beta (git 2022.06.27 - 492328125).
Используем сброс позиции, только если известна длительность. В противном случае у нас может зависнуть LAV Splitter при просмотре Live трансляций.