MPC-BE forum

MPC-BE => Баг Репорт / The bug report => Архив / Archive => Тема начата: Evgeniy1990 от 15 ноября 2015, 17:49:20

Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Evgeniy1990 от 15 ноября 2015, 17:49:20
В последних SVN-билдах был обнаружен баг, когда при открытии широкоформатных видео файлов в программном режиме, проявлялся так называемый "Белый квадрат", в верхнем левом углу окна проигрывателя.

Согласно многочисленным тестам, удалось выяснить, при каких условиях проявляется данный баг:

1. При открытии широкоформатных видео файлов с субтитрами, например MKV + встроенные субтитры
2. При наличии опции "Автомасштаб = 100%"
3. При использовании видео-рендерера"VMR-7 WL, без режима VMR Mixer + VSFilter
4. При наличии выходного формата NV12 в софте
5. При наличии широкоформатных видео файлов в программном режиме без субтитров

Удалось установить, что причиной проявления данного бага стало изменение под номером r592.
После данного изменения, при наличии вывода изображения через выходной формат NV12 в софте, стал проявляться так называемый белый квадрат.

Главным условием проявления данного бага является вывод изображения через выходной формат NV12 в софте.

После проверок различных вариантов с выходными форматами, было обнаружено, что баг пропадает только если отключить выходной формат NV12, при этом оставить все остальные форматы.
Отсюда следует, что наличие присутствия и проявления "Белого квадрата" зависит только от одного единственного выходного формата NV12.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: V0lt от 17 ноября 2015, 06:35:27
Я в тикете #68 (https://sourceforge.net/p/mpcbe/tickets/68/) примерно написал как поставить брейкпоинт и запустить в отладочном режиме. Просьба проверять на текущей версии.
[merge_posts_bbcode]Добавлено: 2015-11-16 18:41:31[/merge_posts_bbcode]

Доработай MPCVideoDec.cpp следующим образом

добавь log.h
#include "stdafx.h"
#include
#include
#include "../../../DSUtil/ff_log.h"
#include "../../../DSUtil/log.h"
и вызов LOG2FILE.
       if (m_FormatConverter.GetOutPixFormat() == PixFmt_RGB32) { // RGB output
            dxvaExtFormat.value = 0;
            LOG2FILE(L"dxvaExtFormat set 0\\n");
        } else {
            dxvaExtFormat = GetDXVA2ExtendedFormat(m_pAVCtx, m_pFrame);
            LOG2FILE(L"dxvaExtFormat set for YUV\\n");
        }
Собери и запусти на XP.

[merge_posts_bbcode]Добавлено: 2015-11-17 06:35:28[/merge_posts_bbcode]

Или вот готовый файл (https://yadi.sk/d/rBmpY0hpkWGGG). Собирай, запускай и ищи лог на рабочем столе.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Aleksoid1978 от 17 ноября 2015, 07:37:44
Фиг знает - по идее(и по логике) не должен этот код
if (m_FormatConverter.GetOutPixFormat() == PixFmt_RGB32)отрабатывать если вывод NV12, да и к тому же каким образом отсутствие dxvaExtFormat должно мешать прорисовке ...

Короче народ - забейте да и все. Пора забывать про WinXP и ее поддержку. Работает - ну и ладно, поломалось - ну ничего не поделать. Вон ребята из MPC-HC - ради перехода на VS2015 вычистили VMR7r вывод(не стали как я париться с копированием нужного кода для DX7).
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Evgeniy1990 от 17 ноября 2015, 07:47:37
Цитата: V0ltЯ в тикете #68 примерно написал как поставить брейкпоинт и запустить в отладочном режиме. Просьба проверять на текущей версии.
[merge_posts_bbcode]Добавлено: 2015-11-16 18:41:31[/merge_posts_bbcode]

Доработай MPCVideoDec.cpp следующим образом

добавь log.h
#include "stdafx.h"
#include
#include
#include "../../../DSUtil/ff_log.h"
#include "../../../DSUtil/log.h"
и вызов LOG2FILE.
       if (m_FormatConverter.GetOutPixFormat() == PixFmt_RGB32) { // RGB output
            dxvaExtFormat.value = 0;
            LOG2FILE(L"dxvaExtFormat set 0\\n");
        } else {
            dxvaExtFormat = GetDXVA2ExtendedFormat(m_pAVCtx, m_pFrame);
            LOG2FILE(L"dxvaExtFormat set for YUV\\n");
        }
Собери и запусти на XP.

[merge_posts_bbcode]Добавлено: 2015-11-17 06:35:28[/merge_posts_bbcode]

Или вот готовый файл. Собирай, запускай и ищи лог на рабочем столе.

V0lt, я добавил ваши строки в проектный файл MPCVideoDec.cpp
#include "../../../DSUtil/log.h
LOG2FILE(L"dxvaExtFormat set 0\\n");
LOG2FILE(L"dxvaExtFormat set for YUV\\n");
1. Собрал ведущий (HEAD)-билд r942 и запустил его на XP.
2. Воспроизвел баг, закрыл плеер.
3. После закрытия плеера, на рабочем столе был создан лог-файл "mpc-be.log"

Прилагаю для вас данный лог-файл: https://yadi.sk/i/ei1hSab0kWHZi
[merge_posts_bbcode]Добавлено: 2015-11-17 07:47:37[/merge_posts_bbcode]

Цитата: Aleksoid1978Фиг знает - по идее(и по логике) не должен этот код
if (m_FormatConverter.GetOutPixFormat() == PixFmt_RGB32)отрабатывать если вывод NV12, да и к тому же каким образом отсутствие dxvaExtFormat должно мешать прорисовке ...

Короче народ - забейте да и все. Пора забывать про WinXP и ее поддержку. Работает - ну и ладно, поломалось - ну ничего не поделать. Вон ребята из MPC-HC - ради перехода на VS2015 вычистили VMR7r вывод(не стали как я париться с копированием нужного кода для DX7).
Вот поэтому и надо разобраться с данным кодом. К тому же я выложил лог, так что рано сдаваться.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Aleksoid1978 от 17 ноября 2015, 08:14:18
Ну и как я говорил, проверка на RGB32 не срабатывает(судя по логу).
Значит - это не зависит от этого изменения :)

А попробуй вот что, вообще убрать заполнение dxvaExtFormat, строчку:
if (FAILED(hr = GetDeliveryBuffer(m_pAVCtx->width, m_pAVCtx->height, &pOut, GetFrameDuration(), &dxvaExtFormat)) || FAILED(hr = pOut->GetPointer(&pDataOut))) {
замени на:
if (FAILED(hr = GetDeliveryBuffer(m_pAVCtx->width, m_pAVCtx->height, &pOut, GetFrameDuration())) || FAILED(hr = pOut->GetPointer(&pDataOut))) {

Собери и проверь на WinXP.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Evgeniy1990 от 17 ноября 2015, 09:06:18
Цитата: Aleksoid1978Ну и как я говорил, проверка на RGB32 не срабатывает(судя по логу).
Значит - это не зависит от этого изменения :)

А попробуй вот что, вообще убрать заполнение dxvaExtFormat, строчку:
if (FAILED(hr = GetDeliveryBuffer(m_pAVCtx->width, m_pAVCtx->height, &pOut, GetFrameDuration(), &dxvaExtFormat)) || FAILED(hr = pOut->GetPointer(&pDataOut))) {
замени на:
if (FAILED(hr = GetDeliveryBuffer(m_pAVCtx->width, m_pAVCtx->height, &pOut, GetFrameDuration())) || FAILED(hr = pOut->GetPointer(&pDataOut))) {

Собери и проверь на WinXP.
Убрал "&dxvaExtFormat", отредактировал строку, собрал билд и проверил его на WinXP.
В результате, ваше изменение помогло, т.е. при наличии вывода через NV12 в софте, данного бага больше нет, он не проявляется.

Получается, что проблема в заполнении DXVAExtFormat, т.е. когда NV12 в программном режиме, этот формат активируется, хотя не должен, поскольку это софт-режим, следовательно никакого DXVA быть не должно и не может.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Aleksoid1978 от 17 ноября 2015, 09:52:13
Цитата: Evgeniy1990Получается, что проблема в заполнении DXVAExtFormat, т.е. когда NV12 в программном режиме, этот формат активируется, хотя не должен, поскольку это софт-режим, следовательно никакого DXVA быть не должно и не может.

Этот флаг не имеет никакого отношения к DXVA декодированию, он относиться к DXVA-процессору в EVR. Почему он выстреливает на WinXP + VSFilter - видимо не нравиться вызываемый reconnect(который вызывается из-за измененного DXVAExtFormat).

По идее можно на WinXP вырубить - но есть же еще madVR. Посмотрим что можно сделать.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Evgeniy1990 от 20 ноября 2015, 08:04:04
Цитата: Aleksoid1978
Цитата: Evgeniy1990Получается, что проблема в заполнении DXVAExtFormat, т.е. когда NV12 в программном режиме, этот формат активируется, хотя не должен, поскольку это софт-режим, следовательно никакого DXVA быть не должно и не может.

Этот флаг не имеет никакого отношения к DXVA декодированию, он относиться к DXVA-процессору в EVR. Почему он выстреливает на WinXP + VSFilter - видимо не нравиться вызываемый reconnect(который вызывается из-за измененного DXVAExtFormat).

По идее можно на WinXP вырубить - но есть же еще madVR. Посмотрим что можно сделать.
Выстреливает не только при наличии VSFilter. Данный баг проявляется даже если просто запустить, например, AVI-шку с настройками по умолчанию, т.е. через NV12 в софте.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: V0lt от 20 ноября 2015, 20:17:49
Цитата: Evgeniy1990Я предлагаю вам просто включить режим VMR Mixer по умолчанию для Windows XP, поскольку с ним данного бага вообще нет,
Ну у меня на 7-ке при выборе VMR-7w и нажатии кнопки "По умолчанию" включается галка как на "Режим VMR Mixer", так и на "YUV Mixing".
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Evgeniy1990 от 20 ноября 2015, 22:53:58
Цитата: V0lt
Цитата: Evgeniy1990Я предлагаю вам просто включить режим VMR Mixer по умолчанию для Windows XP, поскольку с ним данного бага вообще нет,
Ну у меня на 7-ке при выборе VMR-7w и нажатии кнопки "По умолчанию" включается галка как на "Режим VMR Mixer", так и на "YUV Mixing".
Галочка VMR Mixer по умолчанию активна (включена) только для Windows 7 и выше.
Для Windows XP она неактивна (выключена) по умолчанию.
[merge_posts_bbcode]Добавлено: 2015-11-20 22:31:16[/merge_posts_bbcode]

V0lt

Aleksoid1978 сказал, что посмотрит, что можно сделать, так что способ исправить данный баг все же есть. Это касается реконнекта, после измененного DXVAExtFormat. В любом случае, подождем его решения.

[merge_posts_bbcode]Добавлено: 2015-11-20 22:53:58[/merge_posts_bbcode]

Цитата: Aleksoid1978
Цитата: Evgeniy1990Получается, что проблема в заполнении DXVAExtFormat, т.е. когда NV12 в программном режиме, этот формат активируется, хотя не должен, поскольку это софт-режим, следовательно никакого DXVA быть не должно и не может.

Этот флаг не имеет никакого отношения к DXVA декодированию, он относиться к DXVA-процессору в EVR. Почему он выстреливает на WinXP + VSFilter - видимо не нравиться вызываемый reconnect(который вызывается из-за измененного DXVAExtFormat).

По идее можно на WinXP вырубить - но есть же еще madVR. Посмотрим что можно сделать.
Я считаю, что проще всего выключить заполнение DXVAExtFormat для Windows XP тем более, что данной системе он вообще не нужен. Но я не понял причем тут madVR? Или его отключение как-то повлияет на madVR на WinXP?
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: V0lt от 21 ноября 2015, 11:26:45
Evgeniy1990
Через параметр dwControlFlags структуры VIDEOINFOHEADER2 передаются структура DXVA_ExtendedFormat, в которой записаны различные параметры для последующих преобразований в видеорендерере. Эти параметры используют EVR и madVR.

Проблема не в наличии DXVA_ExtendedFormat. Если рендерер такое не понимает, он просто игнорирует этот параметр и работает дальше. Проблема в том, что DXVA_ExtendedFormat меняется во время воспроизведения, происходит реконнект, от которого VMR-7w становиться плохо.

Мне лично нравится решение включить "Режим VMR Mixer" по умолчанию, но хорошо бы сначала вспомнить почему он сейчас отключен.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Evgeniy1990 от 21 ноября 2015, 12:42:37
V0lt
Опция "Режим VMR Mixer" для WinXP была отключена по умолчанию, поскольку на видеокартах от ATI (AMD) во время воспроизведения наблюдалось "пиксельное" изображение. Также, на архитектуре Kepler был замечен очень сильный тиринг изображения.

Поэтому это тоже не лучший вариант, тем более, что это просто обход бага, а не его устранение, все-таки лучшим решением является отключение использования DXVAExtFormat для Windows XP.

А еще лучше сделать таким образом, чтобы он работал только если используется madVR.
VMR-рендереры, особенно на WinXP, не умеют с ним работать. Поэтому им становится плохо.
Вообще, WinXP в некоторых случаях просто не любит реконнект, а точнее не умеет с ним работать.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Aleksoid1978 от 21 ноября 2015, 12:49:39
Так - если DXVA_ExtendedFormat формат поддерживает ТОЛЬКО EVR/MadVR, ну так просто и надо оставить только для них.

А где есть инфа по этому поводу, по использованию DXVA_ExtendedFormat в видео-рендерерах ??
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: V0lt от 21 ноября 2015, 16:34:10
Цитата: Aleksoid1978А где есть инфа по этому поводу, по использованию DXVA_ExtendedFormat в видео-рендерерах ??
Вот тут например - Extended Color Information.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Aleksoid1978 от 23 ноября 2015, 03:04:32
Да видел. Правда там явно не указано что "только" EVR. Но если так - то уберем поддержку VMR7/9
[merge_posts_bbcode]Добавлено: 2015-11-23 10:04:32[/merge_posts_bbcode]

Проверяем 968 ревизию.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Evgeniy1990 от 23 ноября 2015, 04:49:59
Цитата: Aleksoid1978Проверяем 968 ревизию.
Собрал и проверил билд r968 на Windows XP. При открытии широкоформатных видео файлов, а также и SD-файлов, при использовании выходного формата NV12 в софте, больше не проявляется "Белый квадрат". При многоразовом открытии одного и того же файла, а также и различных видео файлов, при данных условиях, "Белый квадрат" аналогично больше не проявлялся. В общем, проблема устранена.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: V0lt от 23 ноября 2015, 06:45:44
Цитата: Aleksoid1978Да видел. Правда там явно не указано что "только" EVR. Но если так - то уберем поддержку VMR7/9
В r968 ты запретил не VMR7/9 а все, кроме EVR и madVR.

А вообще правильнее выдавать правильный параметр сразу, чтобы реконнектов в принципе не было.
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Aleksoid1978 от 23 ноября 2015, 07:47:14
Цитата: V0lt
Цитата: Aleksoid1978Да видел. Правда там явно не указано что "только" EVR. Но если так - то уберем поддержку VMR7/9
В r968 ты запретил не VMR7/9 а все, кроме EVR и madVR.

А вообще правильнее выдавать правильный параметр сразу, чтобы реконнектов в принципе не было.

Ну все верно - кроме EVR/madVR никто и не умеет с этим форматом работать. А по поводу задавать сразу - это физически невозможно. Выходной медиа-тип создается еще на стадии коннекта, в этот момент еще ничего не известно о том с какими данными приходиться работать.

P.S. Хотя - надо будет попробовать, есть одна мысль :)
[merge_posts_bbcode]Добавлено: 2015-11-23 14:47:14[/merge_posts_bbcode]

Так - вот здесь лежит тестовый билд + патч https://yadi.sk/d/elLkhIA9kexzK
Смысл в чем - пытаемся заполнить DXVA2_ExtendedFormat еще на моменте открытия. Такое возможно только если сам формат такое позволяет(заполнены данные extradata нужными значениями). Если данных нет - то reconnect будет после декодирования первого кадра.

Так же - мы не знаем к чему коннектимся, поэтому в случае madVR все равно может произойдет reconnect(там свои нюансы). Ну и так же reconnect будет если выбран вывод RGB32(т.к. для него мы уже убираем заполнение данной структуры).
Название: Проявление "Белого квадрата", при открытии файлов [Исправлено]
Отправлено: Evgeniy1990 от 01 декабря 2015, 18:21:06
Aleksoid1978

Был обнаружен еще один случай проявления "белого квадрата", на этот раз - при открытии анаморфных видео файлов.

Итак, условия его проявления:

1. Выключена опция "Автомасштаб = 100%"
2. В видео декодере стоит "Среднее" или состояние "Включено" (Checked - галочка)

При данных условиях, при открытии анаморфных видео файлов, проявляется этот "белый квадрат".

Если опция "Автомасштаб =100%" - включена, то "белый квадрат" не проявляется.

Насколько я понял, тут его проявление зависит от выбранного состояния в самом видео декодере.

Так как, при автомасштабе = 100%, можно заметить, что открытие таких видео файлов происходит образно в три этапа, не считая главного окна самого плеера, т.е. само масштабирование соотношения сторон, то можно сказать, что здесь есть нечто вроде реконнекта, особенно в "среднем состоянии".

Т.е. есть некое действие, не знаю только что это, реконнект, или что-то еще, которое вызывает проявление "белого квадрата".

Если выключить автомасштаб =100% и включить состояние "Включено", то также можно обнаружить проявление "белого квадрата".

Отсюда следует вывод: "белый квадрат" проявляется, когда соотношение сторон считывается из видео потока.