-
Notifications
You must be signed in to change notification settings - Fork 1k
Adding codec support
This task is fairly simple and requires no programming skills. In short you are meant to edit a few plists, copy the necessary files, and rebuild the kernel extension using Xcode.
All the data to be possibly edited exists in Resources folder, and each supported codec is meant to lie in its subfolder with an arbitrary suitable name.
- Vendors.plist file is meant to contain all the necessary hardware manufacturers and their ids as an associative array. You will unlikely need to edit this.
- Kexts.plist file is meant to contain all the necessary kext information possibly used for patching. It also is an associative array with kext dictionaries containing:
- Id — CFBundleIdentifier from the kext's Info.plist;
- Paths — Possible kext locations in an array.
- CodecLookup.plist file is meant to let AppleALC detect your codecs by providing the IORegistry lookup paths. All the paths are prefixed, therefore PCI will match PCI0, for example.
- Tree — array containing the IORegistry path starting from IOService:/PCI/AppleACPIPlatformExpert, its last key is meant to contain IOHDACodecVendorID and IOHDACodecRevisionID properties;
- controllerNum — Tree path index containing controller properties (e. g.
layout-id
) starting from 0. - Detect — defines whether to look for codecs in the latest entry (set to YES for analog controllers like Realtek).
-
Controllers.plist file is meant to apply global modifications to audio controllers including but not limiting to HDMI audio. Each entry includes the following properties:
- Vendor — Vendor name string from Vendors.plist;
- Device — Device identifier (see
device-id
); - Name — Controller name (any form);
- Platform — Matching
AAPL,ig-platform-id
value if is to be present (optional); - Revisions — Supported controller revisions in an array (optional, omit for no revision check);
- Patches — all the binary patches possibly needed for applying in an array (optional):
- Count — number of required replacements;
- Find — what to look for;
- Replace — what to replace with;
- Name — kext name from Kexts.plist;
- MinKernel — minimal suitable major kernel version (optional);
- MaxKernel — maximum suitable major kernel version (optional).
Each codec must contain an Info.plist file describing the necessary changes AppleALC is to make. The other files in the folder may include layout/platform data mentioned in Info.plist. Info.plist should include:
- Vendor — Vendor name string from Vendors.plist;
- CodecID — Codec identifier (lower 2 bytes of IOHDACodecVendorID);
- CodecName — Human readable codec name for logging;
- Revisions — Supported codec revisions (IOHDACodecRevisionID values) in an array (optional, omit for no revision check);
- Author — Human readable modification author (optional);
- Files — All the files possibly needed for injection:
- Platforms — platform variants (optional):
- Id — matching layout-id number;
- Path — file path in the codec directory;
- MinKernel — minimal suitable major kernel version (optional, see
uname -r
shell command); - MaxKernel — maximum suitable major kernel version (optional).
- Layouts — layout variants (optional):
- Id — matching layout-id number;
- Path — file path in the codec directory;
- MinKernel — minimal suitable major kernel version (optional);
- MaxKernel — maximum suitable major kernel version (optional).
- Platforms — platform variants (optional):
- Patches — all the binary patches possibly needed for applying in an array (optional):
- Count — number of required replacements;
- Find — what to look for;
- Replace — what to replace with;
- Name — kext name from Kexts.plist;
- MinKernel — minimal suitable major kernel version (optional);
- MaxKernel — maximum suitable major kernel version (optional).
- Check if your codec vendor is present in Vendors.plist and add it if necessary.
- Check if the kexts you plan to patch are present in Kexts.plist and add them if necessary.
- Check the paths of IOHDACodecVendorID/IOHDACodecRevisionID/layout-id for your codec in the IORegistry and add them to CodecLookup.plist if necessary.
- Create a codec folder in Resources and copy the necessary layouts and platforms inside.
- Create an Info.plist file filled with the necessary information structured accordingly to the previous section
- Rebuild the kext
Layouts from 1 to 10 reserved for Mirone/Toleda basic patches
Desktop codecs:
- Layout 1, 2, 3 Toleda resources
- Layout 5, 7 Mirone resources
Laptop codecs:
- Layout 1, 2, 3, 4, 5, 6, 7, 8 Mirone resources
Custom user layouts (both desktop and laptop)
- Layout from 11 to 99
Please don't add Toleda/Mirone resources as Custom User resources under layouts 11-99 to avoid unnesessary duplication and to reduce kext size.
Example:
Let's take a look on ALC282 layout3.xml.zlib and layout4.xml.zlib - Mirone resources for laptops layout86.xm.zlib - Custom user resource platforms86.xml.zlib - Custom platform relevant to layout86.xm.zlib platformsM3.xml.zlib and platformsM4.xml.zlib - Mirone platform relevant to Mirone's layout3 and layout 4'
In codec info.plist and PinConfig info.plist please make comment line on every item you add for platform and layouts with description (Human readable codec name, author(Mirone, Toleda or Custom). If custom - determine the model of laptop or motherboard and yourname.