-
Notifications
You must be signed in to change notification settings - Fork 1k
Добавление нового кодека
vit9696 edited this page Mar 8, 2016
·
7 revisions
Это довольно просто и не требует навыков программирования. Вкратце вам надо будет всего-лишь отредактировать несколько 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 — максимально допустимая версия ядра (опционально).
- Platforms — файлы platforms.xml.zlib для вашего кодека (опционально)
- Patches — все необходимые бинарные патчи:
- Count — количество необходимых замен;
- Find — что искать;
- Replace — на что заменить;
- Name — имя кекста, указанное в файле Kexts.plist;
- MinKernel — минимально допустимая версия ядра (опционально);
- MaxKernel — максимально допустимая версия ядра (опционально).
- Проверить, есть ли производитель вашего кодека в файле Vendors.plist, добавить при отсутствии.
- Проверить, есть ли кекст, который вы хотите патчить в Kexts.plist, добавить при отсутствии.
- Проверить путь IOHDACodecVendorID/IOHDACodecRevisionID/layout-id для вашего кодека в IORegistry, добавьте их в CodecLookup.kext при отсутствии.
- Создать папку с названием добавляемого кодека в папке Resources и скопировать туда необходимые layouts1.xml.zlib, layouts2.xml.zlib… и Platforms.xml.zlib.
- Создать Info.plist и заполнить его необходимыми параметрами согласно предыдущей секции.
- Скомпилировать кекст с внесенными изменениями.