Audio Switcher поломан [Исправлено]

Автор Evgeniy1990, 10 марта 2018, 07:10:23

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

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

Evgeniy1990

Описание проблемы:

Вот это да! Стал я проверять различные MPEG1/2-видео файлы и обнаружил неприятную поломку, связанную с тем, что к графу фильтров не может подключиться встроенный "Audio Switcher" и как следствие - не подключается встроенный "MPC Audio Decoder". Вместо него работают или внешний аудио декодер, например "LAV Audio Decoder", или системные, такие как "MPEG Audio Decoder", или "Microsoft DTV-DVD Audio Decoder".

Рассмотрим 4 различных примера. Все они лежат здесь.
В каждом примере поломка выглядит по своему, но суть общая.

Пример №1:

В данном примере напрочь отсутствует встроенный "Audio Switcher" и подключаются только системный (MPEG Audio Decoder), или внешний (LAV Audio Decoder) аудио декодеры.

Пример №2:

В данном примере напрочь отсутствует встроенный "Audio Switcher", но при этом все же каким-то чудом подключился наш встроенный "MPC Audio Decoder".

Пример №3:

Данный пример полностью аналогичен первому примеру - напрочь отсутствует встроенный "Audio Switcher" и подключаются только системный  (MPEG Audio Decoder), или внешний (LAV Audio Decoder) аудио декодеры.

Пример №4:

В данном примере напрочь отсутствует встроенный "Audio Switcher" и подключаются только системные (MPEG Audio Decoder / Microsoft DTV-DVD Audio Decoder) аудио декодеры.

Первоначальный диапазон поиска поломки: [1.5.0.1823 - 1.5.1.2737]
[merge_posts_bbcode]Добавлено: 2018-03-10 05:58:10[/merge_posts_bbcode]

Продолжаю поиски...

Текущий диапазон:  [1.5.1.2237 - 1.5.1.2737]

[1.5.1.2481 - 1.5.1.2737]
[1.5.1.2580 - 1.5.1.2737]
[1.5.1.2660 - 1.5.1.2737]
[1.5.1.2660 - 1.5.1.2710]
[1.5.1.2660 - 1.5.1.2691]
[1.5.1.2675 - 1.5.1.2691]
[1.5.1.2675 - 1.5.1.2685]
[1.5.1.2675 - 1.5.1.2682]


Окончательный диапазон поиска поломки: [1.5.1.2675 - 1.5.1.2682]

[r2682] by v0lt

AudioSwitcher: незначительная корректировка.
    2017-07-01 13:01:33     Tree
[r2681] by v0lt

AudioSwitcher: исправлено "Усиление" ("Gain") после r2680.
    2017-07-01 11:36:00     Tree
[r2680] by v0lt

AudioSwitcher: преобразование формата поставлено после всех других преобразований.
    2017-07-01 11:14:08     Tree
[r2679] by v0lt

Реализована работа опции "Формат вывода" ("Output sample format").
    2017-07-01 09:06:53     Tree
[r2678] by v0lt

AudioSwitcher: реализовано преобразование формата сэмпла. Чистка и рефакторинг кода.
    2017-07-01 09:05:44     Tree
[r2677] by v0lt

В панели настроек "Audio" добавлены контролы для опции "Формат вывода" ("Output sample format").
    2017-07-01 08:38:47     Tree
[r2676] by v0lt

MpaDecFilter: для встроенного в плеер декодера убрано преобразование формате сэмпла (будет реализовано в переключателе). Для внешнего MpaDecFilter.ax преобразование оставлено.

В общем, повлияли изменения в SVN c r2676 по r2682.
[merge_posts_bbcode]Добавлено: 2018-03-10 06:34:06[/merge_posts_bbcode]

О да, это нонсенс какой-то... (о_О)

[merge_posts_bbcode]Добавлено: 2018-03-10 06:41:51[/merge_posts_bbcode]

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

Происходит следующее - открывается некий видео файл, в этот момент строится граф фильтров, построение доходит до аудио переключателя и на этом все.  Он просто тупо стоит (висит). Чего стоит и ждет - непонятно вообще... (о_О)

[merge_posts_bbcode]Добавлено: 2018-03-10 06:43:11[/merge_posts_bbcode]

Буду разбираться!
[merge_posts_bbcode]Добавлено: 2018-03-10 06:49:43[/merge_posts_bbcode]

Хотя, стоп, аудио декодер является выстоящим фильтром, он вообще-то должен раньше появляться встроенного аудио переключателя.

Тогда получается так: встроенный аудио декодер не может подключиться и за ним не подключается и аудио переключатель.

Вопрос, что у нас с аудио декодером и аудио переключателем? Я вижу, что где-то конфликт, только вот в чем?

[merge_posts_bbcode]Добавлено: 2018-03-10 07:02:11[/merge_posts_bbcode]

Вот честно, до чего же неудобно сделали. В чем неудобство? Сейчас поясню...

После этих изменений, во встроенном аудио декодере всегда отображается 32-bit Float на выходе.

100% косяк - при переключении "Output sample format", запись должна быть иная, т.е. вместо 32-bit Float должно быть так: 32-bit float -> 32 bit integer им так далее, аналогично и для всех остальных. А у нас "32-bit float" во встроенном аудио декодере вообще всегда.
[merge_posts_bbcode]Добавлено: 2018-03-10 07:07:47[/merge_posts_bbcode]

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

[merge_posts_bbcode]Добавлено: 2018-03-10 07:10:23[/merge_posts_bbcode]

Просто удивительно, статус не меняется, но форматы вывода аудио нормально на лету переключаются.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Все верно, теперь встроенный аудио-декодер всегда выдает "в максимальном качестве". А уже аудио-переключатель делает(по необходимости) различные обработки и выдает в таком из форматов, которые указаны в настройках.

По поводу описанных багов - у меня всегда присутствует и переключатель и декодер. Не зависимо от того, какой аудио-рендерер выбран.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978По поводу описанных багов - у меня всегда присутствует и переключатель и декодер. Не зависимо от того, какой аудио-рендерер выбран.

Это у вас так, а у меня не всегда, вот поэтому я обязательно разберусь что не так.

Но эти изменения в SVN с r2676 по r2682 пока остаются сомнительными.
До них у меня, как и у вас, всегда присутствовал и аудио декодер и аудио переключатель.
[merge_posts_bbcode]Добавлено: 2018-03-10 07:28:10[/merge_posts_bbcode]

Цитата: Aleksoid1978Все верно, теперь встроенный аудио-декодер всегда выдает "в максимальном качестве". А уже аудио-переключатель делает(по необходимости) различные обработки и выдает в таком из форматов, которые указаны в настройках.

Вот это и есть - главное неудобство!

Любой пользователь, особенно непродвинутый, решит, что у него всегда строго работает только один единственный Float, хотя это не так.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

V0lt

Поправлю. Декодер всегда выдает в оптимальном качетсве.

Важно не что решит глупый пользователь, а реализация оптимального звукового тракта по качеству и производительности.
[merge_posts_bbcode]Добавлено: 2018-03-10 07:42:02[/merge_posts_bbcode]

Проверил все файлы на системном DS и нашем аудиорендерере. Во всех случаях Audio Switcher присутствует.

Evgeniy1990

Aleksoid1978 / V0lt

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

Дело в том, что раньше, до SVN r2676, выходные форматы аудио были на стороне самого встроенного аудио декодера. А уже после SVN r2676, все они были перенесены на сторону аудио переключателя.

Но, при этом, после переноса, появилось одно отличие, которого не было ранее - это количество включенных (активных) выходных форматов аудио по умолчанию.

Так вот, в SVN r2675, по умолчанию был включен только "int16", что собственно было правильно.
А после переноса изменений в SVN r2682, по умолчанию уже стали включены абсолютно все выходные форматы аудио: "int16", "int24", "int32", "Float".

И по умолчанию (изначально), при открытии файлов, запускается именно формат "Float". Все бы ничего, но как всегда, найдется некое "нечто", которое не даст ему нормально работать. И это касается некоторых звуковых карт, особенно дискретных, как самых дорогих, так и более бюджетных.

И вот, пожалуйста, звуковая карта "ASUS Xonar DG", на которой и проявляются данные баги - отсутствие встроенного "Audio Switcher" и вместе с ним встроенного "MPC Audio Decoder".

Причина - это "GX", работающий на звуковой карте "ASUS Xonar DG" по умолчанию.

А теперь - внимание!

Если используется х86-версия "MPC-BE" на 64-битной системе и в самой системе, где он запущен, стоит данная звуковая карта с настройками драйвера по умолчанию, то при открытии любых видео файлов, всегда будет отсутствовать как встроенный "Audio Switcher", так и встроенный "MPC Audio Decoder".

Причина тому - работающая связка: "GX" + "Float".

Приходится выбирать одно из двух, или отключать в самом драйвере этот самый "GX", или в настройках встроенного "Audio Switcher" отключать выходной формат "Float". Иначе не будет ни встроенного аудио переключателя , ни встроенного аудио декодера.

А вот если используется х64-версия "MPC-BE" на 64-битной системе и в самой системе, где он запущен, стоит данная звуковая карта с настройками драйвера по умолчанию, то при открытии любых видео файлов, всегда будут присутствовать и встроенный "Audio Switcher" и встроенный "MPC Audio Decoder".

Вот такие дела...

Я не против, чтобы "Float" работал по умолчанию, но увы, далеко не на всех звуковых картах он будет корректно работать. Все зависит от самой звуковой карты и от разрядности операционных систем и разрядности плееров.

Aleksoid1978

У вас есть такая звуковая карта "ASUS Xonar DG", попробуйте на ней воспроизвести данные проблемы, при тех условиях, которые я написал выше.

Основные условия воспроизведения данных проблем:

1. Звуковая карта ASUS Xonar DG и ей подобные, более дорогие модели
2. Включенный "GX"
3. 64-битная операционная система
4. x86-версия MPC-BE
5. Включенный выходной формат "Float" в настройках встроенного "Audio Switcher".

Я конечно не знаю, можно ли реализовать проверку на наличие поддержки формата Float, при определенных условиях, например, если в драйвере включен "GX", то необходимо исключить запуск выходного формата "Float", если "GX" выключен, то запускать Float.

Было бы здорово, если бы вы смогли реализовать такую проверку, при вышеописанных условиях, т.е. только для x86-версии MPC-BE. На x64-версии MPC-BE проблем с работающей связкой "GX" + "Float" - нет.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

У меня на работе такая же карта, х86 версия и float вывод. Правда я использую встроенный аудио-рендерер. На неделе проверю на DirectSound выводе.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

V0lt

Блин. Лечится такое элементарно - отключением Float в настройках.
Это Я лично объяснял кому-то на forum.doom9.org, люди в курсе и больше вопросов не задают.

Делать все 4-варианта вывода по приоритетам как в видео-декодере можно, но оно даром никому не сдалось, т.к. проблема решается в один клик.

Evgeniy1990

Цитата: Aleksoid1978У меня на работе такая же карта, х86 версия и float вывод. Правда я использую встроенный аудио-рендерер. На неделе проверю на DirectSound выводе.
Со встроенным аудио-рендерером MPC Audio Renderer проблем нет.
Проблемы только на DirectSound.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Проверил на ASUS Xonar DG, билд х86, система Win 10 х64 - все отлично, и аудио-переключатель, и аудио-декодер присутствуют.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978Проверил на ASUS Xonar DG, билд х86, система Win 10 х64 - все отлично, и аудио-переключатель, и аудио-декодер присутствуют.
Как вы так проверяли? У вас "DirectSound" и "GX" были включены?
[merge_posts_bbcode]Добавлено: 2018-03-12 07:54:20[/merge_posts_bbcode]

Aleksoid1978
Посмотрите пожалуйста эту видеозапись. Именно так, как показано в данной видеозаписи, вам необходимо проверить.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

DX вроде бы включено. Правда я недавно поставил не родные драйвера. Но это можно проверить легче, возьму встроенный аудио-рендерер и отрублю поддержку float, посмотрим что получиться. Ессно для тестов.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Ради интереса, я также проверил поведение на 64-битной Windows 7.

На ней есть встроенный аудио переключатель, но встроенный MPC Audio Decoder не подключается к графу фильтров, если включен "GX". При "GX", формат "Float" не работает хеа x86-версии плеера.

Если заглянуть в статус LAV Audio Decoder, то становится понятно, что при "GX" способен работать только "16bit integer" формат.

Прилагаю еще одну видеозапись с Windows 7.
[merge_posts_bbcode]Добавлено: 2018-03-12 08:33:37[/merge_posts_bbcode]

Цитата: Aleksoid1978DX вроде бы включено. Правда я недавно поставил не родные драйвера. Но это можно проверить легче, возьму встроенный аудио-рендерер и отрублю поддержку float, посмотрим что получиться. Ессно для тестов.
Даже если вы и установили не родные драйвера UniXonar, то это ничего не меняет. На них проблема также присутствует.

Разве что только на UniXonar есть встроенный аудиопереключатель, а на родных драйверах его вообще нет, если верить Windows 7, поскольку на ней у меня как раз стояли именно UniXonar.

Но факт остается фактом.
[merge_posts_bbcode]Добавлено: 2018-03-12 08:40:45[/merge_posts_bbcode]

Что на родных драйверах, что на не родных - UniXonar, в любом случае, при GX, отсутствует "MPC Audio Decoder".
Он не может подключиться к графу из-за того, что в нем включен выходной формат "Float", а он не работает с "GX" в x86-версии плеера.

Windows 10 - еще та система, каких только проблем со звуком на ней у меня не было. Я даже не удивлюсь, если даже поставлю эти не родные UniXonar, после чего, у меня также будет отсутствовать встроенный аудио переключатель вместе со встроенным аудио декодером.
[merge_posts_bbcode]Добавлено: 2018-03-12 09:17:21[/merge_posts_bbcode]

Проверил UniXonar на Windows 10 - да, все именно так, как я и говорил - также отсутсвует и встроенный аудио переключатель и встроенный аудио декодер.

Кстати, интересно то, что у меня на 64-битной Windows 7 и 64-битной Windows 10 стоит одна и та же версия не родных драйверов UniXonar, но при этом, есть одно отличие, на Windows 7 - есть встроенный аудио переключатель, но нет встроенного аудио декодера, а на Windows 10 - нет ни встроенного аудио переключателя, ни встроенного аудио декодера.

Ну, как я и говорил вам ранее, я даже не удивлюсь. Я и не удивился.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

У меня все есть. Но это не важно.
Важно другое - что аудио-переключатель отваливается(естественно) если не может подключиться по своему выходному типу. Надо будет переделать чтобы он выдавал не один тип, а список - согласно настройкам.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215

Evgeniy1990

Цитата: Aleksoid1978У меня все есть. Но это не важно.
Важно другое - что аудио-переключатель отваливается(естественно) если не может подключиться по своему выходному типу. Надо будет переделать чтобы он выдавал не один тип, а список - согласно настройкам.
Все верно, основная проблема - это как раз именно отвал аудио переключателя, как вы и сказали.

А со встроенным аудио декодером - ладно уж, буду использовать тогда одно из двух на x86-версии - или отключать "GX" в самом драйвере, или отключать формат "Float" в настройках встроенного аудио переключателя.
[merge_posts_bbcode]Добавлено: 2018-03-12 09:47:31[/merge_posts_bbcode]

Хотя, если возможно, то лучшим вариантом здесь будет некая проверка на наличие поддерживаемого формата, при определенном условии. Допустим, если "Float" не может подключиться, то тогда пусть работает предыдущий формат, просто "32-bit Integer (цельный)", а не "32-bit Float" (с плавающей точкой).

[merge_posts_bbcode]Добавлено: 2018-03-12 09:48:25[/merge_posts_bbcode]

Таким образом, встроенный "MPC Audio Decoder" всегда будет подключаться к графу фильтров.
Motherboards: ASUS P5Q/GIGABYTE EP35C-DS3R, CPU: Core 2 Duo E8300/E8400, Memory: DDR2/DDR3, Video: MSI GTX 465/ASUS EAH5770/GTX 650 Ti, Audio: ASUS Xonar DG 5.1/Creative SB 5.1. VX/X-Fi Xtreme Gamer.

Aleksoid1978

Не все так просто ))
[merge_posts_bbcode]Добавлено: 2018-03-12 17:55:21[/merge_posts_bbcode]

Как работают фильтры в DS - они просто создают выходные медиа-типы, а кто там к ним подключиться - это уже их не касается. Вот и получается что float никто не может зацепить. Надо просто добавить тип с 16bit int, как fallback.
Ну или, по хорошему, перечислить все указанные в настройках.
AMD Ryzen 5 3600 /GIGABYTE B450 Gaming X /AMD Radeon R9 16Gb@3200 /Kingston 500Gb M.2 /GTX 1650 /Samsung U28R550UQI /OLED Philips 55OLED707 /Yamaha RX-V471 + NS-555 + NS-C444 + NS-333 + YST-SW215