MPC-BE forum

MPC-BE => Баг Репорт / The bug report => Тема начата: V0lt от 11 ноября 2020, 16:16:00

Название: EVR-CP, Failed to RegisterClass
Отправлено: V0lt от 11 ноября 2020, 16:16:00
Начало обсуждения тут (https://mpc-be.org/forum/index.php?topic=588). Флуд удален.

Суть проблемы:
В некоторых ситуациях появляется сообщение "Failed to RegisterClass". После чего могут возникать другие нежелательные эффекты.
Пример сообщения:
(https://jpegshare.net/thumbs/f6/4e/f64eeb2b3c1687612105bae10ddb7a42.jpg) (https://jpegshare.net/f6/4e/f64eeb2b3c1687612105bae10ddb7a42.png.html)


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

Примеры сэмплов (https://cloud.mail.ru/public/5rvg/5yiKjzck7).
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 проблема не наблюдается.
Название: EVR-CP, Failed to RegisterClass
Отправлено: MPCfan от 27 ноября 2020, 13:41:58
Цитата: 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
Название: EVR-CP, Failed to RegisterClass
Отправлено: V0lt от 27 ноября 2020, 14:35:32
MPCfan
Подтверждаю. EVR-CP, FlipEx, окрытое окно свойств и на следующем видео можно получить такое. :-)
(https://jpegshare.net/thumbs/69/43/69436ec76cc6c157d5a51dc90d9d40a4.jpg) (https://jpegshare.net/69/43/69436ec76cc6c157d5a51dc90d9d40a4.jpg.html)
Остаток кадра со статистикой будет висеть пока плеер не перезапустишь. :D
Название: EVR-CP, Failed to RegisterClass
Отправлено: V0lt от 27 ноября 2020, 18:05:45
Отладочный лог для окна свойств и режима 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 все хорошо.
Название: От: EVR-CP, Failed to RegisterClass
Отправлено: V0lt от 01 апреля 2022, 13:37:50
Баг описанный в способе 1 исправлен в 1.6.2.6975 alpha (git 2022.04.01 - 0037ed418 (https://github.com/Aleksoid1978/MPC-BE/commit/0037ed41889b08fbf909b04f03b41be39b2d3904)). :D
Название: От: EVR-CP, Failed to RegisterClass
Отправлено: V0lt от 27 июня 2022, 21:38:39
Дополнение в 1.6.3.32 beta (git 2022.06.27 - 492328125 (https://github.com/Aleksoid1978/MPC-BE/commit/492328125270fa2086690ef1074b02efb612f339)).
Используем сброс позиции, только если известна длительность. В противном случае у нас может зависнуть LAV Splitter при просмотре Live трансляций.