QUOTE (Slice @ May 12 2011, 12:18 AM)

1. Да, конфиг виджетов должен выставляться по подаче питания, но в некоторых случаях он выставляется не совсем корректно.
Ну это прямым текстом в спецификации HDA прописано. Если сам кодек криво свой "конфиг по умолчанию" сообщает, то это кривой кодек. Однако более вероятна ситуация, как есть у меня в вышеупомянутом ноуте, когда производитель с какого-то рожна впаял 7.1+2 ЦАП + 2 АЦП кодек в ноут, у которого из возможных подключений только и есть, что SP-DIFF вход от CD, выход на встроенные колонки, аналоговый вход со встроенного микрофона и две 1/8" дырки под внешние наушники и микрофон. Нафига в такой ноут было паять кодек с десятиканальным ЦАП и одноканальным SP-DIFF выходами плюс двухканальным стерео АЦП и одним SP-DIFF входами - непонятно ни разу. Видать, много лишних кодеков такого типа на складе валялось. Или просто эти реалтековские кодеки столь дешевые, что смысла экономить на оных нет. Таки, впаивание такого кодека предполагает, что его собственное мнение о конфигурации по умолчанию действительности соответствовать не может никак - возможности кодека сильно превышают имеющиеся в наличии подключения. В соответствии со спецификацией HDA основная системная микропрограмма (BIOS или EFI, в моём случае BIOS) обязана сразу после post-poweron init/reset контроллера HDA сделать энумерацию имеющихся в наличии кодеков и прописать в них соответствующие действительности значения для "конфигурации по умолчанию". Оно и понятно, биос пишется под конкретные модели мамок и ноутов, и он то должен быть отлично уведомлен о том, какие подключения куда сделаны и какие дырки есть реально в наличии.
Надо понимать, BIOS "такой мелочью" озабачивается не всегда, либо делает это не всегда вполне верно и корректно. Иначе мы бы не встречали в регистрах "конфига по умолчанию" нарушающие спецификацию бредовые значения.
QUOTE (Slice @ May 12 2011, 12:18 AM)

Однако, деятельность драйвера немного серьезнее, чем просто пропись названий в контрольной панели. Драйвер организует ДМА потоки, и соединяет ноды вербами...
Я, как бы, догадываюсь :-). Всё таки всю спецификацю полностью вкурил, включая железячную часть с расписанными диаграмами прохождения сигналов. Да и это просто более крутой вариант того, что в своё время у карт класса SB Pro было, под которые я ещё во времена DOS писал свои собственные драйвера в самописных программах (тогда, как бы, другого варианта работы со звуковушками и не было де-факто :-D).
QUOTE (Slice @ May 12 2011, 12:18 AM)

По желанию можно переключить миксер на первый вход и второй выход, а можно и на третий выход. Это нельзя делать совсем произвольно, на третьем выходе, к примеру, может не оказаться физического соединения...
Ну, переключить то соединение 701-м вербом тебе никто не запретит на то, где физического соединения нет. Просто результат будет предсказуемым - отсутствие звука и потенциальное наличие наведённых со стороны окружающей электроники шумов.
QUOTE (Slice @ May 12 2011, 12:18 AM)

Для того, чтобы соединения были правильными, драйвер должен получить информацию о всех возможных внутренних соединениях, и выбрать оптимальные цепочки. Выбором оптимальных цепочек заведует внутренний алгоритм, который менялся от версии к версии. Именно в этом отличия 262 от 272 и других.
Ну это тоже напрямую из спецификации следует. Драйвер должен строить граф межсоединений виджетов и дальше решать задачу нахождения оптимального пути между двумя точками.
QUOTE (Slice @ May 12 2011, 12:18 AM)

Во-первых, соединения для разных типов (аналоговый вход, аналоговый выход, цифровой выход) подбираются по разным алгоритмам.
Не совсем понятно, нафига принципиально разные алгоритмы, ибо из того, что я пока видел в даташитах на Realtek и Sigmaltek - у них графы для аналоговой части тракта и графы для цифровой - не пересекаются. Ну и для цифровой части графы де-факто вырождены в прямое соединение между HDA-link-interface digital connector нодой и SP-DIFF In/Out Pin нодой. Т.е. для цифрового выхода по идее алгоритм выбора цепочки соединений должен выродиться в тупое Pin enable, каким бы он "крутым и сложным" не был.
QUOTE (Slice @ May 12 2011, 12:18 AM)

Во-вторых, последние две цифры: номер группы и номер члена в группе, используются а алгоритме для создания объединенных цепочек.
Это не более чем соглашение, которое вы приняли для VoodooHDA. Для железа ничего принципиально не меняется от изменения значений в этих полях регистра "config defaults".
QUOTE (Slice @ May 12 2011, 12:18 AM)

Т.е. два разъема могут быть присоединены к разным входам одного миксера, переключением которых занимается драйвер по внешнему сигналу. Драйвер распознает втыкание штекера, и подключает нужный вход миксера. Мы с ОсеннимДождем потратили немало сил на отшлифовку этого алгоритма, но публика не ценит, публика сообщает , что драйвер работает или нет.
Ну да, обработка прерывания при возникновении т.н. Intrinsic Unsolicted Response, которая должна запускать механизм Pin Sense, ждать результата означенное в спеках количество времени, и дальше либо на основе каких-либо эвристик переключать соединения графа, либо спрашивать юзера о том, что он хочет с нововсунутым устройством сделать (как это делается у драйверов Realtek и SoundMAX под виндой). Для VoodooHDA вы, судя по всему, выбрали путь использования только лишь эвристик и автоматических переключений, с возможной "включённостью" лишь одного Pin из тех, которые вы объединили в группу на основании данных из config default регистров. Такой подход требует заполнения регистров config defaults значениями, специально заточенными под эвристики VoodooHDA, для чего, собственно, nodes patch механизм у вас и предполагается использовать.
Очевидно, что ни одна эвристика никогда не сможет работать корректно во всех ситуациях, да и предпочтения у всех пользователей могут быть разные. Например, возьмём случай со внешним и внутренним микрофоном в ноуте. В предлагаемой вами схеме их надо объединить в одну группу (ассоциацию), где у внутреннего микрофона номер последовательности будет 0, а у внешнего - 0xfh. При этом возникновение события pin sense для внешнего микрофона, указывающего на его появление, VoodooHDA будет воспринимать как сигнал к отрубанию внутреннего микрофона и врубанию вместо него внешнего. А вдруг мне оно не надо? Вдруг мне надо, чтобы у меня через один АЦП в комп шел сигнал со внешнего микрофона, а через другой - со внутреннего, если такое физически позволяет кодек (а, например, кодеки серии alc88x это позволяют). И я потом уже эти сигналы на уровне софта я хочу обрабатывать своим хитрым алгоритмом для убирания внешнего шума и выделения голоса, тем самым делая возможным использовать такую схему для разборчивой записи голоса в очень шумных условиях? Принятая у VoodooHDA схема работы эвристики мне эту задачу реализовать не позволит, хотя аппаратное обеспечение на это вполне способно.
Ну а что до публики, то чего ещё ожидать, если для того, чтобы разобраться в проблеме и понять, как работает VoodooHDA с кодеками/контроллерами и почему именно надо делать node patch в info.plist - надо в деталях быть знакомым со спецификацией HDA и иметь представление о внутренних графах соединений типичных HDA кодеков? Это больше 300 страниц сложного технического текста надо вкуривать, чего почти никто делать не станет. Когда мне оно было надо только из любопытства - я на это забил и отложил до лучших времён. Сейчас, когда пришлось по иным причинам спеки HDA вкурить, всё стало более-менее понятно, включая возможности и ограничения используемого подхода. Но я прекрасно понимаю публику, для которой без соответствующих знаний все эти манипуляции с info.plist выглядят как занятия чёрной магией и попахивают шаманством.
QUOTE (Slice @ May 12 2011, 12:18 AM)

1. Сделал многоканальный звук. Правда использовать это могут немногие.
2. Ввел математическую обработку звука, и потому для драйвера 272 нужна совершенно другая ПрефПанель. Версия 11.
Многоканальный - это аггрегация нескольких Stereo sinks силами OC? Которая Aggregate Device? Мат. обработка, это, надо понимать, шумодав и изменение базы стерео для наушников и близко расположенных колонок лэптопов?
QUOTE (Slice @ May 12 2011, 12:18 AM)

...ALC883 и 888 обладают одной неприятной кривостью. Там есть миксер, который смешивает входы и выходы. Нода 11, будь она проклята. Можно сделать караоке, а можно просто запретить эту ноду, что я всем и советую.
Да никакая это не кривость, а вполне разумная штука, подробно задокументированная в даташитах на кодек. Проблема не в кодеке, а в том, что VoodooHDA не умеет корректно обрабатывать такой граф. У ноды 0xBh есть возможность сделать мьют на каждом из входов. Ну и аттеньюатор там после мьюта тоже установлен. Для устранения эффекта возникновения положительной обратной связи микрофон-колонки достаточно просто мьютить на ноде 0xBh входы, относящиеся к микрофонам. Ещё, возможно (я настолько глубоко в спеки alc883 не вкуривался), надо мьютить входы, привязанные к пинам, которые в настоящий момент используются как выходы. Там, судя по спекам, у Pin установлены I/O селекторы, которые должны отрубать input линию при использовании pin для output, но, во-первых, явно этот факт отрубания в спеках не указан, а, во-вторых, селектор может рубить не до конца и немного "подтравливать", добавляя паразитные шумы.
В идеале VoodooHDA должен был бы при инициализации кодека у ноды 0xBh мьютить и выставлять в положение максимальной аттеньюации все входы, и давать через спец-утилиту управлять мьютом и усилком каждого из подключений этой ноды. Тогда можно было бы, например, на уровне аналогового loopback слушать в колонках или динамиках музон, подаваемый с Analog CD-IN, но при этом не нарываться на эффект положительной обратной связи микрофон-колонки (то, что в англ. ветке обзывают larsen effect).
Собственно, проблема проистекает из того, что и для управления входами и громкостью вы тоже используете некоторые эвристики и создаёте "виртуальные устройства-микшеры", чтобы привести "к общему знаменателю" возможности кодеков от разных производителей. Я так понимаю, что схема, похожая на alc88x с нодой 0xBh, используется далеко не во всех кодеках от остальных производителей, отсюда и возникает видимая "кривость" в работе VooodooHDA с кодеками от Realtek, проявляемая как эффект возникновения положительной обратной связи в аналоговом аудиотракте.
QUOTE (Slice @ May 12 2011, 12:18 AM)

Еще хочу заметить, что с VoodooHDA у меня работают все входы/выходы, а с ЭпплХДА чем-то приходится жертвовать. Чаще всего жертвуют передними разъемами (общеизвестно, с ЭпплХДА не работает внешний передний микрофон)
Честно говоря, с AppleHDA я вообще не игрался - не нравится мне тема патчинга ванильных бинарников, которую приходится повторять после каждого апдейта. Если оную можно избежать, используя альтернативные подходы вроде VoodooHDA - всегда предпочитаю идти именно таким путём.