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

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

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

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

Evgeniy1990

Aleksoid1978,
Сравнил с SVN переключение форматов вывода аудио в вашем тестовом билде.

В SVN переключение форматов всегда стабильное.
В тестовом билде - нестабильное. Т.е. то переключает, то не переключает. Это проблема. Причем обратно вообще не переключает.

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

К сожалению, в тестовом билде есть проблема (баг) с переключением форматов вывода аудио.

Добавлено: 2020-02-13 12:49:40

Aleksoid1978,
Цитировать24 бита наверное не поддерживает, проверь в SVN и сравни.
Проверил SVN-билд. 24 бит поддерживает.

Filter : Audio Switcher - CLSID : {18C16B08-6497-420E-AD14-22D21C2CEAB7}

- Connected to:

CLSID: {601D2A2B-9CDE-40BD-8650-0485E3522727}
Filter: MPC Audio Renderer
Pin: In

- Connection media type:

Audio: PCM 48000Hz 2.0 chn 2304 kbit/s

AM_MEDIA_TYPE:
majortype: MEDIATYPE_Audio {73647561-0000-0010-8000-00AA00389B71}
subtype: MEDIASUBTYPE_PCM {00000001-0000-0010-8000-00AA00389B71}
formattype: FORMAT_WaveFormatEx {05589F81-C356-11CE-BF01-00AA0055595A}
bFixedSizeSamples: 1
bTemporalCompression: 0
lSampleSize: 8
cbFormat: 40

WAVEFORMATEX:
wFormatTag: 0xfffe
nChannels: 2
nSamplesPerSec: 48000
nAvgBytesPerSec: 288000
nBlockAlign: 6
[b]wBitsPerSample: 24[/b]
cbSize: 22 (extra bytes)


Добавлено: 2020-02-13 13:10:16

Aleksoid1978,

Сделал для вас видеозапись, чтобы вы точно понимали в чем странность и проблема. Но на всякий случай скажу вам еще раз отличия в работе переключения форматов вывода аудио в SVN и вашем тестовом билде.

1. В тестовом билде, при GX, смена форматов не работает вообще, или отсутствует звук. Работает только если GX выключен.

В SVN при GX все работает нормально.

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

В SVN переключение всегда стабильное.

3. В тестовом билде обратно может не переключиться формат вывода аудио, или же просто тупо пропадет сам звук.

В SVN проблем нет.
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Ну ясно, значит идея утопическая, в аудио-переключателе такое нормально не разрулить.
И вовсе не утопическая, у вас вполне получилось устранить основную проблему. Единственное осталось - это исправить (подкорректировать) смену выходных форматов аудио.

И еще, я думаю, может быть стоит сравнить наш аудиопереключатель и тот что в MPC-HC.
Просто в MPC-HC данной проблемы с GX нет на х86 билдах.
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

В MPC-HC совершенно нет никакого функционала, который есть у нас - я про аудио-обработку. Сравнивать совершенно некорректно.
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В MPC-HC совершенно нет никакого функционала, который есть у нас - я про аудио-обработку. Сравнивать совершенно некорректно.
Значит проблема в нашем функционале обработки аудио.

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

Добавлено: 2020-02-13 14:57:24

Можно попробовать откатить изменения c r2676 по r2682 и проверить. Так как ясно, что какое-то из них работает некорректно.
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

Откатываться уже ессно ничего не будет. А так - раньше вся обработка была в декодере, сейчас в переключателе. И если декодер просто выдавал список доступных форматов - и далее уже фильтры "выбирали" то с чем могут работать(по всей цепочке до аудио-рендерера), то переключатель этого сделать не может. Поэтому он если выводит во 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

V0lt

Цитата: Aleksoid1978Проверяем тестовый билд. https://yadi.sk/d/iPmS-zad4WarUA
Я в нем сделал fall-back на 16bit, если на текущем формате не удается.
fall-back?
Повторюсь...
1. Проблемы как таковой нет, она есть только у некоторых юзеров, которым лень выключить одну галку в настройках.
2. Существует стандартное решение в виде дополнительного медиатипа, которое до сих пор не реализовано по причине, что проблемы как таковой нет.

Evgeniy1990

V0lt,
Цитировать1. Проблемы как таковой нет, она есть только у некоторых юзеров, которым лень выключить одну галку в настройках.
Лично мне - не лень выключить галочку. Но с другой стороны - это тоже не дело заставлять пользователей лезть в настройки и галочки отключать. Ладно еще, если пользователь опытный, он разберется что к чему, а все остальные рядовые пользователи этого сделать вот так с ходу точно не смогут. Они будут просто говорить, что плеер не видит аудио дорожки, а все из-за отсутствующего аудиопереключателя в графе фильтров.
Цитировать2. Существует стандартное решение в виде дополнительного медиатипа, которое до сих пор не реализовано по причине, что проблемы как таковой нет.
Ну раз проблема все же есть на некоторых звуковых картах, так почему бы не реализовать этот дополнительный медиатип?
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

Цитата: Evgeniy1990Ну раз проблема все же есть на некоторых звуковых картах, так почему бы не реализовать этот дополнительный медиатип?
Эта проблема в очень малом количестве звуковых карт. Надо уделить несколько дней на черновик решения, потом еще кучу времени на понимание работает решение у юзера или нет и на отладку. Без карты на руках это долго и нудно. А если учесть, что рабочее решение уже есть, а юзеры просто уперлись, то мотивация становиться близка к нулю.

Aleksoid1978

Ну так я и попытался «стандартно» добавить 16 бит как новый медиа-тип, оказалось что это совсем не просто сделать.

Добавлено: 2020-02-14 17:47:56

Другой вариант - не fallback на 16bit, а просто игнор Float(если не удалось на него подключиться) и использование формата из настроек.
https://yadi.sk/d/fyy6ONIsRe-v1g

Дело в том что сделать именно для неподдерживаемого формата fallback на float, а поддерживаемые оставить как есть ... ну блин практически не возможно.

Для удобства проверки не надо иметь такое железо - на встроенном MPC Audio Renderer я просто запретил обработку 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

Aleksoid1978,
ЦитироватьДругой вариант - не fallback на 16bit, а просто игнор Float(если не удалось на него подключиться) и использование формата из настроек.
https://yadi.sk/d/fyy6ONIsRe-v1g
Проверил второй тестовый билд.

Основная проблема исправлена.
При наличии GX, формат Float не работает.
Переключение форматов вывода аудио полностью работает нормально в обе стороны.

В целом, ваш второй вариант (тестовый билд) работает полностью нормально.

А теперь неприятное:
Цитироватьна встроенном MPC Audio Renderer я просто запретил обработку Float.
Зачем? Проблема была только на DirectSound, при наличии GX. На MPC Audio Renderer данной проблемы нет и не было с самого начала, даже после всех переделок встроенного аудио декодера и аудиопереключателя.

Float нормально работает на MPC Audio Renderer, при наличии активного GX.
Так что просьба вернуть обратно для MPC Audio Renderer работу Float-формата при наличии GX.

Добавлено: 2020-02-14 12:27:41

Aleksoid1978,
Если будете вносить ваши изменения, то я еще раз напомню, что они должны быть применены только для x86-билдов, потому что на x64-билдах Float полностью поддерживается и работает нормально при наличии активного GX как на DirectSound, так и на MPC Audio Renderer (WASAPI).
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

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

Aleksoid1978

Так - "окончательный" вариант https://yadi.sk/d/Ij65L6NYW-tQ8g
Сделал не тупо игнора 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

V0lt

Зачем все это? Два медиатипа чем не устраивают?
Чувствую будет много кода и сомнительных хаков, которые потом при любой правке будут создавать проблемы.

К медиатипу Float, Int24 и Int32 добавить еще один Int16. Если рендерер не смог подключиться к первому, то подключиться ко второму Int16. Если не смог ничего, то драйвер звуковушки отстой, настраиваем вручную.

Aleksoid1978

Не все так просто. Вернее совсем не просто - это вам не аудио-декодер, который отдал список типов и юзает к которому подключились.

Тут еще сложнее - из-за того что мы галки можем во время воспроизведения менять, из-за этого меняется выходной медиа-тип. И вот тут уже не важно какой был тип до этого, смогли ли подключиться к float или 32int и т.д.

А так я сделал опрос поддерживаемых типов и эта проверка будет участвовать уже при формировании выходного типа.
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