Skip to content

Добавление нового кодека

vandroiy2013 edited this page Jul 5, 2017 · 7 revisions

Как добавить новый кодек в AppleALC

Это довольно просто и не требует навыков программирования. Вкратце вам надо будет всего-лишь отредактировать несколько plist'ов, скопировать необходимые файлы и скомпилировать kext с помощью Xcode.

Структура файлов

Вся доступная для редактирования информация находится в папке Resources, а каждый поддерживаемый кодек должен лежать в отдельной подпапке с понятным наименованием.

  • Vendors.plist — в этом файле содержится информация о всех необходимых производителях оборудования и их ID. Скорее всего, вам его редактировать не прийдется.
  • Kexts.plist — в этом файле содержится вся информация о кекстах, которые могут понадобиться для патча в формате массива словарей кекстов:
  • Id — CFBundleIdentifier из info.plist кекста;
  • Path — массив возможных местонахождений кекста.
  • CodecLookup.plist — этот файл помогает AppleALC определить ваш кодек, проводя поиск по указанному пути в IORegistry.
  • Tree — массив, содержащий путь в IORegistry, начинающийся с IOService:/PCI/AppleACPIPlatformExpert; Последний элемент должен содержать свойства IOHDACodecVendorID и IOHDACodecRevisionID;
  • controllerNum — индекс элемента, который содержит свойства контроллера (например, layout-id). Считается от 0;
  • Detect — производить ли поиск кодеков в последнем элементе пути (установлен в YES для аналоговых контроллеров вроде Realtek).
  • Controllers.plist — этот файл отвечает за глобальные модификации звуковых контроллеров, включающие аудио HDMI, но не ограничивающиеся им. Каждая запись включает следующие свойства:
    • Vendor — строковое имя Vendor из файла Vendors.plist;
    • Device — Идентификатор устройства (см. device-id);
    • Name — название контроллера (произвольно);
    • Platform — совпадающее значение AAPL,ig-platform-id если требуется (опционально);
    • Revisions — поддерживаемые ревизии контроллера (опциональный ключ);
    • Patches — все необходимые бинарные патчи:
      • Count — количество необходимых замен;
      • Find — что искать;
      • Replace — на что заменить;
      • Name — имя кекста, указанное в файле Kexts.plist;
      • MinKernel — минимально допустимая версия ядра (опционально);
      • MaxKernel — максимально допустимая версия ядра (опционально).

Структура папки с кодеком

Каждая папка с кодеком должна содержать Info.plist, описывающий необходимые изменения, которые AppleALC должен провести. Остальные файлы в папке кодека — это layout/platform файлы, указанные в Info.plist.

Содержимое Info.plist:

  • Vendor — строковое имя Vendor из файла Vendors.plist;
  • CodecID — младшие 2 байта из IOHDACodecVendorID;
  • CodecName — удобное для чтения название кодека;
  • Revisions — поддерживаемые ревизии кодеков (опциональный ключ);
  • Author — ник/имя автора, cделавщего данную модификацию;
  • Files — все необходимые файлы для инжекции:
    • Platforms — файлы platforms.xml.zlib для вашего кодека (опционально)
      • Id — номер layout совпадающий с layout-id;
      • Path — путь к файлу platforms.xml.zlib;
      • MinKernel — минимально допустимая версия ядра (опционально, смотрите uname -r в терминале)
      • MaxKernel — максимально допустимая версия ядра (опционально)
    • Layouts — файлы layouts1.xml.zlib, layouts2.xml.zlib и т.д.(опционально)
      • Id — номер layout совпадающий с layout-id;
      • Path — путь к файлу (например, layouts1.xml.zlib);
      • MinKernel — минимально допустимая версия ядра (опционально);
      • MaxKernel — максимально допустимая версия ядра (опционально).
  • Patches — все необходимые бинарные патчи:
  • Count — количество необходимых замен;
  • Find — что искать;
  • Replace — на что заменить;
  • Name — имя кекста, указанное в файле Kexts.plist;
  • MinKernel — минимально допустимая версия ядра (опционально);
  • MaxKernel — максимально допустимая версия ядра (опционально).

Пошаговая инструкция (необходим Xcode):

  1. Проверить, есть ли производитель вашего кодека в файле Vendors.plist, добавить при отсутствии.
  2. Проверить, есть ли кекст, который вы хотите патчить в Kexts.plist, добавить при отсутствии.
  3. Проверить путь IOHDACodecVendorID/IOHDACodecRevisionID/layout-id для вашего кодека в IORegistry, добавьте их в CodecLookup.plist при отсутствии.
  4. Создать папку с названием добавляемого кодека в папке Resources и скопировать туда необходимые layouts1.xml.zlib, layouts2.xml.zlib… и Platforms.xml.zlib.
  5. Создать Info.plist и заполнить его необходимыми параметрами согласно предыдущей секции.
  6. Скомпилировать кекст с внесенными изменениями.