Skip to content

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

vit9696 edited this page Mar 8, 2016 · 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;
  • layoutNum - индекс элемента, который содержит layout-id. Считается от 0.

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

Каждая папка с кодеком должна содержать 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 для вашего кодека (опционально)
      • Path — путь к файлу platforms.xml.zlib;
      • MinKernel — минимально допустимая версия ядра (опционально, смотрите uname -r в терминале)
      • MaxKernel — максимально допустимая версия ядра (опционально)
    • Layouts — файлы layouts1.xml.zlib, layouts2.xml.zlib и т.д.(опционально)
      • Id — номер layouts совпадающий с 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.kext при отсутствии.
  4. Создать папку с названием добавляемого кодека в папке Resources и скопировать туда необходимые layouts1.xml.zlib, layouts2.xml.zlib… и Platforms.xml.zlib.
  5. Создать Info.plist и заполнить его необходимыми параметрами согласно предыдущей секции.
  6. Скомпилировать кекст с внесенными изменениями.