Besides providing access to media devices, the multimedia subsystem reads and interprets metadata, converts audio/video streams, and manages playlists. The subsystem also provides the business logic for managing album art, directing track playback, detecting media sources, and presenting media to the user for selection.

The multimedia engine is decoupled from the rendering engine, allowing for interaction with iPods, USB sticks, and other media content from various HMI-rendering components. The multimedia design is shown in the figure below:

The mm-detect component keeps track of the devices that are attached to the system. When a new device is attached, mm-detect triggers the mm-sync component to synchronize media metadata from the new device to the corresponding QDB database.

The dev-publishers components detect device insertions and, in response, write PPS objects to the /pps/qnx/mount directory. For example, when the user inserts a CD whose device name is cd1, the cdpub publisher creates the PPS object /pps/qnx/mount/cd1. The publisher deletes that PPS object when the user ejects the CD.

The Media Content Detector (MCD) component mounts attached devices to the local filesystem so their contents can be read by multimedia services and other programs.

The HMI receives synchronization status updates that mm-detect publishes through PPS so that clients can display up-to-date media information to the user.

The mm-detect component invokes the artwork-client to extract the images associated with any new audio tracks found on the mediastore into a designated artwork cache directory. The artwork extraction gets done after the rest of the media information has been synchronized and is independent of the mm-sync operation.

The responsibilities of mm-control include providing playback/import control and track-level error handling, managing multizone capabilities, and handling transitions from one device to another.

The mm-renderer component allows multimedia applications to request and control the playback of audio and video media from files and devices. The component provides mechanisms for:

Multimedia synchronization binaries

The multimedia synchronization service populates databases with up-to-date metadata that describes the media tracks on devices. The synchronization service ensures that a device's database is synchronized with the device's media contents before any tracks can be played.

Multimedia synchronization relies on the following binaries:

The enum-devices manager enumerates the devices present on the computer. For details, see the QNX Neutrino Utilities Reference.
The enum-usb program is a bus-enumerator program spawned by enum-devices to handle USB-specific aspects of device enumeration. For details, see the QNX Neutrino Utilities Reference.
This USB publisher utility creates and updates PPS objects with device information in response to the insertion and removal of USB devices.
The mcd utility (media content detector or MCD) monitors device insertions and removals, and then assigns specific mountpoints to attached devices. For details, see the QNX Neutrino Utilities Reference.
The QNX Database Server (QDB) utility manages the embedded databases that store multimedia information. QDB supports dynamic loading and unloading of databases so media applications can reduce the amount of data held in memory at any time.
The mm-sync service synchronizes the information about media files on mass storage devices with the contents of QDB databases, which can then be used by the media player.
The mm-detect service calls mm-sync to synchronize the media files on inserted mass storage devices and notifies the media player about device insertions and removals and about media synchronization status updates.

Multimedia playback binaries

The multimedia playback service allows applications to request and control the playback of audio and video tracks from devices attached to the in-car system. Through the playback service, applications can specify individual tracks and track sequences (playlists) to play, issue playback control commands, and retrieve the current playback status and notifications of playback status changes.

Multimedia playback is managed by the following binaries:

As the core component between the HMI media player and the low-level mm-renderer playback engine, the mm-control service holds the state of the media player, manages track sessions, and plays music and video.
The mm-trkmgr utility manages tracksessions for the media player.
The mm-renderer service manages the flow of media content from one input to one or many outputs. The media flow can be directed to an audio or video output device for playback or to a file for recording.