Date of this edition: June 02, 2009
Target OS: This software is compatible with target systems running QNX® Neutrino® 6.4.0 or 6.4.1.
Host OS: You must have already installed the QNX® Software Development Platform 6.4.0 or 6.4.1 as a self-hosted QNX Neutrino system, or on one of the following hosts:
Version of QNX SDP | Microsoft Windows | Linux |
---|---|---|
6.4.0 | Windows Vista, Vista 64-bit, XP SP2 or SP3, or 2000 SP4 | Linux Red Hat Enterprise Workstation 4 or 5, Red Hat Enterprise Server 5.1 64-bit, Red Hat Fedora Core 6 or 7, Ubuntu 6.0.6 LTS or 7, or SUSE 10 |
6.4.1 | Windows Vista, Vista 64-bit, XP SP2 or SP3, or 2000 SP4 | Linux Red Hat Enterprise Workstation 4.0 or 5.0, Red Hat Enterprise Server 5.1 64-bit, Red Hat Fedora 10, Ubuntu 8.04 LTS or 8.10, or SUSE 11 |
![]() |
For information on installing this package, see the Installation Note. |
![]() |
|
Throughout this document, you may see reference numbers associated with particular issues, changes, etc. When corresponding with our Technical Support staff about a given issue, please quote the relevant reference number. You might also find the reference numbers useful for tracking issues as they become fixed.
![]() |
The QNX Aviage Multimedia Suite:
|
Please review the release notices before proceeding:
Please refer to the License Guide and the Third Party License Terms List in PDF format, or posted on the QNX web site (www.qnx.com/download/). The installed HTML versions of the License Guide and the Third Party License Terms List each contain an incorrect image.
This release includes changes and upgrades that require changes to your enviroment:
This release introduces changes to the MME API and configuration that require you to recompile and verify your MME configuration. These changes include:
For a complete list of removed and deprecated API items, see “Deprecated and removed features” below.
The Aviage MME 1.2 release requires a Neutrino 6.4.0 (or more recent) system.
Upgrade your system to Neutrino 6.4.0 (or more recent).
In the Aviage MME 1.2 release, enumerated types and data structures are changed from the MME 1.1 release, making binaries for this release incompatible with binaries for previous releases.
Update all system components to the most recent QNX Aviage Multimedia Suite 1.2.0. Your environment must not contain components from this release and from earlier releases.
The Aviage MME 1.2 release implements a new client library, which renders it incompatible with older Aviage MME releases.
Recompile and relink all client applications to use this release.
With this release, some binary files are installed in a different location from where they were installed with Aviage MME 1.1.0. Binaries that in previous releases were installed under target/qnx6/bin/, target/qnx6/sbin/ or target/qnx6/lib/ are now installed under target/qnx6/usr/bin/, target/qnx6/usr/sbin/ or target/qnx6/usr/lib/, as appropriate.
Affected components include:
The items under target/qnx6/lib/dll/ have not been moved.
Before installing this release, manually remove the old binaries from the old locations. If you do not remove the old binaries, you will not load the updated binaries when you execute.
Most MDSs (metadata synchronizers) have been replaced by MDPs (metadata plugins).
If you are upgrading from a previous release, change the <MDS> element in your configuration file to <MDP>.
See “Metadata plugins replace metadata synchronizers” below.
In release MME 1.2 SQLite has been upgraded to SQLite 3.6.12, and the MME and QDB now use SQLite 3.6.12:
Recompile any applications that link against the SQLite library directly.
The introduction of new values for the io-media resource filter attribute requires you to update your io-media configuration file. See “New io-media configuration” below.
This release includes the following documentation:
Follow the instructions in the “Quickstart Guide” to get started with the MME.
This release makes available installation packages for the standard QNX Aviage Multimedia Core 1.2.0, and for components that support devices, media formats and functionality that require special licenses. These packages can be run on QNX Neutrino, Linux or Microsoft Windows platforms, and will install the QNX Aviage Multimedia Suite for the ARM, PPC, SHLE or x86 target platforms running QNX Neutrino 6.4.0 or later. See “Host OS” and “Target OS” above for more detailed information about supported host and target platforms.
This section lists, by host OS, the installers included with this release (with 2009MMDDhhmm representing the build numbers).
For installation instructions, see the Installation Note. For instructions on how to install and start using the MME, see the “Quickstart Guide” in Introduction to the MME.
![]() |
The QNX Aviage Multimedia Suite supports iPod devices with the latest firmware at time of the Aviage Suite release. For detailed information about support for other types of devices, such as PFS devices, please contact QNX. |
The table below lists the dependencies between MME packages:
Package | Dependencies |
---|---|
Core | None |
Software Codec for AAC | Core |
Software Codec for MP3 | Core |
Software Codec for WMA9 | Core |
Interface for iPod | Core Software Codec for AAC, if AAC codec support is required. |
Interface for PlaysForSure | Core Software Codec for WMA9, if WMA9 codec support is required. Interface for WMDRM10-ND, if DRM support is required. |
Interface for WMDRM10-ND | Core Interface for PlaysForSure |
Interface for Zune | Core Interface for PlaysForSure |
Software DVD Player | Core |
Codec Engine for OMAP3530 Platform | Core |
![]() |
|
This release introduces many new features and improvements, and deprecates some features available in older releases:
The table below lists the new features and updates implemented in this release. Some features are described in full in these notes; all features are described in the MME documentation included with this release. For more information, please refer to this documentation.
Feature | See |
---|---|
RTP streamed video support | “Internet streamed media” below, and “Working with internet streamed media” in the MME Developer's Guide chapter External Devices, CD Changers and Streamed Media. |
Support for playing MP3 media streamed over the internet | “Working with internet streamed media” in the MME Developer's Guide chapter External Devices, CD Changers and Streamed Media. |
New support for audio and video codes. | “New codec support” below. |
Soft DVD playback | “Software DVD-video playback” below, and “DVD-video player” in the MME Developer's Guide chapter Playing and Managing Video and DVDs, and dvdkeymgr and srv-dvdplayer in the MME Utilities Reference. |
New DVD drive control utility | dvddrivectl in the MME Utilities Reference. |
Support for playback of audio input from a system | “Audio input playback” below, and “Audio input playback” in the MME Developer's Guide chapter External Devices, CD Changers and Streamed Media. |
Support for Zune devices | “Retrieving artwork from Zune devices” in the MME Developer's Guide, and iofs-pfs.so in the MME Utilities Reference. |
New playlist exploration API | The MME Developer's Guide chapter Playlists, and the entries for the various mme_playlist_*() functions in the MME API Library Reference. |
Support for additional media and playlist file types | “Additional media and playlist file type support” below. |
New support for MPEG-4 video | “MPEG-4 video ES support”. |
New utility for copying file sets | fileset in the MME Utilities Reference. |
Changes to synchronization behavior and options | “Changes to synchronization behavior” below, the MME Developer's Guide chapter Synchronizing Media, and “Automatic and on-demand synchronizations” in the MME Configuration Guide chapter Configuring Media Synchronizations. |
Improved synchronization management | “New synchronization configuration elements” below. |
Improved metadata synchronization | See “Metadata plugins replace metadata synchronizers” below. |
Improved synchronization activity reporting | “New synchronization event MME_SYNC_ERROR_FOLDER_DEPTH_LIMIT” below. |
Metadata extraction API for artwork | The MME Developer's Guide chapter Metadata and Artwork, and the MME API Library Reference. |
Image metadata pre-processing | The MME Developer's Guide chapter Metadata and Artwork. |
Metadata rating support | “Metadata ratings” in the MME Developer's Guide chapter Metadata and Artwork. |
New image processing capabilities. | “Image pre-processing patch” below; and “Enabling an image processing module” and “The <Transcode> element and its sub-elements” in the MME Configuration Guide chapter Configuring Metadata Support. |
Patch to enable JPEG pre-processing quality selection | “Image pre-processing patch” below. |
Variable length events | The MME API Library Reference chapter MME Events. |
New API for getting and setting external device configuration options | “Getting and setting external device options” in the MME Developer's Guide chapter External Devices, CD Changers and Streamed Media. |
iPod driver cross transport authentication (CTA) support | “iPod driver cross transport authentication (CTA) support” below, and the MME Developer's Guide chapter Working with iPods. |
iPod video support | “Support for iPod video” below. |
Improved managment of concurrent playback requests to iPod devices | “iPod concurrency management” below. |
“New option to set iPod USB charging level” below. | |
Option for setting iPod preferences | “Preferences” in the MME Utilities Reference chapter iofs-ipod.so. |
Album artwork support for iPods | “Retrieving artwork from iPods” in the MME Developer's Guide chapter Working with iPods. |
iPod capabilities reporting | “Checking for optimal connections” in the MME Developer's Guide chapter Working with iPods. |
New logging level functions and command-line option | The mme_*_logging() functions in the MME API Library Reference, and mme in the MME Utilities Reference. |
New mediacopier function for specifying strings for unknown metadata | mme_mediacopier_add_with_metadata() in the MME API Library Reference. |
Improvements to copying and ripping behavior | “New method for specifying default ripping destination mediastore”, “Improved metadata handling for copying and ripping” and “New mmf_graphbuilder resource” below. |
Improved copy queue error management | “<DeleteOnError> configuration element” below. |
Improved method for counting consecutive play errors | “Configuring track session failure settings” in the MME Configuration Guide chapter Configuring Playback. |
Improvements to the Explorer API | “Improved Explorer API performance” below. |
New function inserts a value into the entries for a mediastore in the library table (or adjunct tables). | The entry for mme_lib_column_set() in the MME API Library Reference. |
New event informs clients with asynchronous connections of change to preferred default language for media. | “New event delivered by mme_media_set_def_lang()” below. |
Improved character conversion control for playlists | “MME_EXPLORE_UNCONVERTED_CHAR_ENCODING flag” below. |
Improved playlist synchronization control | “Limiting playlist synchronizations” in the MME Configuration Guide. |
io-media now uses DLLs | “io-media DLLs” below, and the MME Utilities Reference chapter io-media-generic. |
New io-media QuickMetadataScan resource, and other configuration and behavior features | The MME Utilities Reference chapter io-media-generic. |
io-media default configuration files are now shipped with the release | “Default io-media configuration files” below. |
New io-media configuration element | “New keepdlls configuration element” below. |
Improved metadata handling by io-media | “New io-media configuration” below. |
MM_IPP_VIDEO_DECODER_NUM_THREADS mmf resource | “MM_IPP_VIDEO_DECODER_NUM_THREADS resource” below, and “Configuring io-media for video” in the MME Configuration Guide chapter Configuring Other Components. |
Default language now persists across startups | “Default language persistence” below. |
Mediastore state change improvements | “Dedicated thread to handle mediastore state changes” below. |
New configuration element and function for setting the MME database time base | “Database configuration elements” in the MME Configuration Guide chapter Configuring Database Behavior, and mme_timebase_set() in the MME API Library Reference. |
New iofs-pfs.so option for handling .alb objects. | iofs-pfs.so in the MME Utilities Reference. Note that the default behavior for handling .alb objects has changed; treat these objects as files. |
Command-line application for testing multimedia target setup | testapp-cmdline in the MME Utilities Reference. |
New QDB shared cache feature | “QDB shared cache” below. |
New qdb thread management options | “New qdb -o thread* options” below. |
Solution for QDB/MME lockup problem. | “QDB/MME lockup problem and solution” and “New QDB thread options” below. |
Improvements to the mmecli utility | “Improvements to mmecli” below. |
MME Support for Texas Instruments ADE with dsplink 1.6.1 | The MME Technotes chapter MME Support for Texas Instruments ADE. |
New Codec Engine for QNX Codec Engine for OMAP3530 (Beagle) platforms | The QNX Codec Engine for OMAP3530 technote. |
New MediaFS documentation. | The MediaFS Developer's Guide in the Aviage Multimedia Suite documentation. |
Multimedia project launched on Foundry27 | The project pages on Foundry 27, at http://community.qnx.com/sf/projects/multimedia/. |
The MME now supports playback of internet streamed media, including:
The MME can output RTP streamed media from a camera. Support is presently limited to output of the media stream; features such as pan and tilt control are not supported.
A video decoder, such as the one provided in the QNX Aviage Multimedia Intel Performance Primitive Codecs, is required to decode the video from an IP Camera.
To access the RTP stream, pass the RTSP (Real Time Stream Protocol) access URL of the camera to io-media.
For example, an Axis 207 network camera on a network could be accessed with the following URL: rtsp://10.42.108.95:554/mpeg4/1/media.amp, where:
![]() |
To maintain optimal sycnhronization performance, add a keepdll configuration element to your io-media configuration file as follows:
keepdll { name = rtp_reader optional = yes } |
This release introduces support for the following codecs on x86 platforms:
This new video codec support uses the new video decoder ipp_video_decoder.so. For more information, see the MME Configuration Guide appendix Binary File Dependencies.
This release introduces a software DVD player. This DVD player runs on Intel x86 platforms; audio and video decoding are enhanced by Intel chips that support the Intel IPP library.
The software DVD player requires the following QNX drivers:
The following binaries are specific to DVD playback:
You can use the standard MME API to play DVDs with the software DVD player. All you need to do is start srv-dvdplayer in addition to your other MME components:
# srv-dvdplayer -c /etc/system/config/files.dat &
The -c option sets the path to the keys required for playing encrypted DVDs. See “Encrypted DVDs” below.
After you have started srv-dvdplayer, you can follow the usual steps for creating a track session and playing the media:
![]() |
When creating the track session, you can identify a DVD in the mediastores table by its storage type, which is set to MME_STORAGETYPE_DVDVIDEO. |
Use the following functions to manage DVD playback and trick play, set video properties and get information:
Use the other standard MME functions to control other behavior and settings, such as volume level.
![]() |
Most commands for DVD playback and navigation are sent using the MME's mme_button() function, which behaves like the buttons on a DVD remote control. For more information about this and the other functions used for DVDs, see the MME API Library Reference. |
DVDs use the configuration settings for CDs. For more information, see the MME Configuration Guide.
For specific information about configuring the MME for video support, see “Configuring the MME for video support” in the MME Developer's Guide chapter Playing and Managing Video and DVDs.
When configuring output for the software DVD player, you must specify the layer and sublayer modifiers in the output URL string. For example, the modifiers in the string gf:8086,2772,0?layer=1&sublayer=2 ... are interpreted as follows:
![]() |
The ARGB layer used for subtitles does not support scaling. To keep the video and subtitle layers correclty aligned on screen, both are centered and not scaled. |
To play encrypted DVDs you must obtain commercial CSS decryption keys from the DVD Copy Control Association.
To provide your encrypted keys to the DVD player, use the dvdkeymgr utility.
Generate DVD CSS decryption binary file
dvdkeymgr path
x86
None
The utility dvdkeymgr takes the keys in the input file, keys.txt, located at path, and creates a CSS decryption binary file called files.dat. For example, the command line instruction below generates a files.dat file from the keys in the file /usr/keys.txt:
dvdkeymgr /usr/keys.txt
To enable srv-dvdplayer to play encrypted DVDs, after you have generated the files.dat file, you must place it in the same folder as srv-dvdplayer, or use srv-dvdplayer's -c option to point to the file.
The input file, keys.txt must have each key index and key pair on a single line:
key index, key ...
The key index is an integer, and the key is a string of 10 hexadecimal digits. For example:
1, 0123456789 65000, abcdef0123
The MME now supports playback of audio inputs on a system by treating audio inputs as type of mediastore.
This feature uses a new mediastore type and a new slot type:
![]() |
Audio input playback requires audio_streamer.so, a streamer for reading audio from a sound card. |
To have the MME recognize audio input “mediastores”, you must:
To use audio input “mediastores”, you must add an entry to the slots table that sets:
For example:
INSERT INTO slots(path, zoneid, name, slottype) VALUES('/dev/snd', 1, 'snd', 11);
You must also configure the MCD to tell the MME about the appearance of audio input “mediastores” by adding a section like the following to the MCD configuration:
[/dev/snd] Callout = PATH_MEDIA_SCAN Argument = 5000 Priority = 11,10 Start Rule = INSERTED Stop Rule = EJECTED
Since /dev/snd is normally permanent, the argument and priority values may be changed. The section name must be the path to the audio input devices.
![]() |
An audio input “mediastore” is not synchronizable; an explicit attempt to synchronize it will result in a MME_EVENT_SYNCABORTED error. |
Media from an audio input “mediastore” is played in a file-based track session. Once playback has begun, however, it will continue until explicitly stopped because it will never reach an end of file.
To play media from an audio input “mediastore” you must know the exact path to the mixer output you want to play. Generally tis path is something like pcmC0D0c#Mic In.
![]() |
You may learn what is available by:
|
Once you know the path of your audio input, simply create a file-based track session and play the media
This release introduces support for the following media file types that were not supported in the previous MME release:
Format | Extension |
---|---|
QuickTime video file | .mov |
Ogg Vorbis audio file | .ogg |
This release introduces support for the following playlist file types that were not supported in the previous MME release:
Format | Extension |
---|---|
Advanced Stream Redirector | .asx |
iTunes XML | .xml |
RMP Playlist | .rmp |
Windows Media Audio Metafile | .wax |
Windows Media Video Metafile | .wvx |
With this release, the ipp_video_decoder filter has been updated to support the decoding of the MPEG-4 video ES format. Thus, this filter now supports the decoding of the following video formats:
This release implements some changes to synchronizations:
In previous releases, CDDA mediastore synchronization passes 1 and 2 were combined in a single pass.
Starting with this release, CDDA synchronizations no longer combine these two passes. The MME now performs the files synchronization pass and the metadata synchronization pass separately for CDDA mediastores, just as it does for other mediastore types.
This change allows configurable fallback through multiple CDDA metadata synchronizers, such as Gracenotes, Musicbrainz, CDTEXT, and none.
In earlier releases, if a directed synchronization was pointed to a folder that no longer existed, but was in the MME's database, the synchronization would fail.
With this release, a directed synchronization does not fail when it is unable to find a folder that is in its database. Instead, it deletes the folder and its contents from the MME database.
This change means that the client application can remove a folder from a mediastore, then use directed synchronization to remove this folder from the MME database.
This release introduces a new MME synchronization control element:
Element | Attributes | Default | Description |
---|---|---|---|
<ChangedFilesHaveConstantId> | enabled | off | Determine how MME synchronization handles files whose size or date has changed. |
<StopOnDbLimit> | enabled | false | Stop synchronization when a database limit has been reached. Default is to not stop a synchronization when a database limit has been reached. |
The <ChangedFilesHaveConstantId> element determines how, during a file and folder discovery synchronization pass, the MME handles a media or playlist file whose size or date has changed since the previous file and folder discovery pass.
The default MME behavior is to consider a file or folder whose size or date has changed as new, and to synchronize it accordingly, assigning it a new file ID (fid).
If the <ChangedFilesHaveConstantId> enabled attribute is set to true, the MME's file and folder discovery synchronization pass does not consider files and folders whose dates or sizes have changed to be new files or folders, and:
Thus, if you configure the MME to maintain the file ID of a file or folder whose sizes or date has changed, to determine if file metadata is accurate, you must check its accurate field. If the field is 0, then the file requires a metadata synchronization pass.
![]() |
If media files have not been successfully synchronized during the metadata pass, or playlist files have not been synchronized during the playlist synchronization pass, the accurate field for these files will be 0, regardless of the <ChangedFilesHaveConstantId> configuration. |
Playlist synchronization differs from media file synchronization:
As part of the MME's improved metadata handling, in this release (with one exception) metadata plugins replace the metadata synchronizers of previous releases. This change means that you must change the <MDS> element in mme.conf into an <MDP> element. For example:
<MDP> ... <dvdifo skipdurationzero="true"> <dvdaudio> <devicefid create="true"/> <chapterfids create="true"/> </dvdaudio> ... <cdtext rating="80"/> ... </MDP>
![]() |
The Gracenote client mdp-gracenote_client.so replaces mds-gracenote_client.so. |
The MME delivers the event MME_SYNC_ERROR_FOLDER_DEPTH_LIMIT when it has skipped sychronizing a folder to avoid synchronizing beyond the permitted depth, set by the <MaxRecursionDepth> configuration element. The MME delivers this event the first time it skips a folder because it has reached the maximum configured recursion depth.
Synchronization information in mme_sync_error_t, including
Media status information, and the reason for delivery of the event, in mm_media_status_event_t.
No database tables are updated.
This release introduces cross transport authentication (CTA) support for iPod drivers. The iofs-ipod.so acp option loads iofs-interface-ipod.so and checks if it supports an authentication chip interface. This option accepts one of the following values:
A cross transport authentication chip can be built into the cable connection iPods to your system. This authentication method is available for USB transport connections only; it authenticates iPods over the serial pins and tell the iPods to grant authenticated privileges to the USB transport.
As well as offering the same advantages as an authentication chip built in to your system, a cross transport authentication chip in a cable:
Please contact Apple for more information about licenses and specifications for a cross transport authentication chip.
To instruct the iPod driver to use this authentication method, start <iofs-ipod.so with the the acp option set to cta:
# io-fs-media -dipod,transport=usb,acp=cta
![]() |
The following iPod devices support cross transport authentication, provided they have the latest firmware:
|
This MME release introduces support for video on iPod devices, using analog video and audio output.
To play video on iPods, you need:
Starting with this release, the MME has improved its handling of concurrent playback requests to iPod devices.
The MME supports concurrent playback and synchronization or exploration on an iPod device. That is, you can explore or synchronize the device's folders and files during playback. You can not, however, start more than one playback session at a time; attempting to initiate a second playback session will fail and return the event MME_PLAY_ERROR_MEDIABUSY.
This release implements two new options for iofs-usb-ipod.so, the USB transport mechanism for connecting to iPods. These new options specify how much extra current an iPod may draw to recharge. They are:
The values for the normal_mA and suspend_mA options specify in milliamperes the maximum current an iPod device may draw to recharge in, respectively, normal mode and suspended mode.
The extra current an iPod may draw in any state is set at a default of 500 milliamperes (normal_mA or suspend_mA set to 0). To allow an iPod to draw 1A of extra current when in, for example, suspended state, set suspend_mA=500 (500 default + 500 configured = 1000). To prevent an iPod from drawing any current, set the option to -500 (500 default -500 configure= 0).
Please refer to the iPod specifications for more details about charging iPod devices.
A new patch is available that enables you to select the quality of JPEG images when performing image pre-processing. The patch is available in the archive patch-640-1383-img-quality.tar, under the Foundry27 Multimedia project's “Downloads” tab.
For more information, see “Image pre-processing” in the MME Configuration Guide chapter Configuring Metadata Support.
This release implements a new method for specifying the default destination mediastore for copying and ripping operations.
In previous releases, the default destination mediastore was determined by the <Copying>/<Destination>/<MSID> configuration element, which identified the default mediastore by its mediastore ID. Because it is not possible to guarantee that a mediastore ID (msid) will always be associated with a specific mediastore, the default destination mediastore is now identified by its mountpath. This mountpath:
The MME evaluates the values for the destination mediastore when it adds items to the copy queue. It checks the value of mme_mediacopier_info_t.dstmsid, and if this value is set to 0 (use the configured default), it writes the copied or ripped files to whatever mediastore is at the configured destination path. Thus, for example, if you set the value of <MediastoreMountpath> to /fs/usb0, the MME will write copied and ripped files to whatever mediastore is at this path.
![]() |
Note that, as part of this change:
|
This release implements improvements to how MME copying and ripping operations determine what metadata to include in destination files. Now, calls to mme_mediacopier_add_with_metadata() determine what metadata to write to a destination file as follows:
![]() |
This change:
|
Media copying and ripping uses the flags argument to determine media copying and ripping behavior. Possible values are combinations of:
Flag | Value | Description |
---|---|---|
MME_MEDIACOPIER_USE_DEFAULT_FILENAME | 0x0002 | Use the default destination filename set in the MME configuration file. |
MME_MEDIACOPIER_USE_METADATA | 0x0004 | Use the specified metadata; do not use defaults. |
MME_MEDIACOPIER_USE_DEFAULT_FOLDERNAME | 0x0008 | Use the default destination folder name set in the MME configuration file. |
A new <DeleteOnError> configuration element for controlling copying and ripping operations when they encounter errors. It replaces the <DeleteOnNonRecoverableError> configuration element.
Element | Attributes | Default | Description |
---|---|---|---|
<DeleteOnError> | type | "none" | Delete the current entry from the copyqueue table, based on the value of the type attribute. See “Copy queue entry deletion control settings” below for more detailed information. |
To maintain the same behavior as having the removed <DeleteOnNonRecoverableError> element enabled, set type to "nonrecoverable".
![]() |
Attempting to use the removed <DeleteOnNonRecoverableError> configuration element will cause a fatal error. |
The following flags determine when the MME automatically deletes entries from the copyqueue table, and their equivalent setting for the <DeleteOnError> type attribute:
Constant | Value | type | Description |
---|---|---|---|
CONFIG_DELETE_ON_TYPE_NONE | 0 | "none" | Do not automatically delete copyqueue table entries |
CONFIG_DELETE_ON_TYPE_ANY | 1 | "any" | Delete the copyqueue table entry on any error. |
CONFIG_DELETE_ON_TYPE_NR | 2 | "nonrecoverable" | Delete the copyqueue table entry on a nonrecoverable error. |
CONFIG_DEF_COPYING_DELETE_ON_TYPE | – | "none" | Do not automatically delete copyqueue table entries |
The mediacopier considers a nonrecovereable error to be an attempt to copy or rip a file that meets one or more of the following criteria:
If the nonrecoverable option is set (<DeleteOnError type="nonrecoverable"/> files that meet any of the above criteria are automatically removed from the copy queue.
The nonrecoverable setting does not cause the mediacopier to remove from the copy queue files that generate read errors . To remove files (scratched or bad media) that cause read errors, and files that are DRM or copy protected, corrupt, use unsupported codecs, set the type attribute to "any".
This release implements improvements to the Explorer API performance. Specifically, the API now attempts to use a device control command to determine the number of items in a folder, rather than counting the items in the folder.
This improvement is implemented for iPods as well as for other types of devices.
Starting with this release, the function mme_media_set_default() delivers the event MME_EVENT_DEFAULT_LANGUAGE so that asynchronous clients are notified that the default preferred language has been successfully set, or that the attempt to change the default language has failed.
The MME function mme_media_set_def_lang() delivers the event MME_EVENT_DEFAULT_LANGUAGE to indicate that the default preferred language for a media item has been set.
The success or failure of the default preferred language update, and the preferred language, in mme_event_default_language_t.
![]() |
The string in mme_event_default_language_t.language always indicates the current default preferred language. That is, if mme_media_set_def_lang() is unable to change the default language to the requested language, this string will indicate the preferred language before the function call was made (because it is still the set preferred language). |
No database tables are updated.
Default language event information
#include <mme/types.h> typedef struct s_mme_default_language_event { int error; const char language[1]; } mme_event_default_language_t;
The structure mme_event_default_language_t carries information delivered with a MME_EVENT_DEFAULT_LANGUAGE event, including the result of the last attempt to set the default language, and a NULL termianted string indicating the current default language. It includes at least the members described in the table below.
Member | Type | Description |
---|---|---|
error | int | The result of the last request; this member is set to EOK on success. |
language | const char | A NULL terminated string that indicates the current default language. |
Normally, the MME attempts to convert playlist file entries to UTF-8.
The new constant MME_EXPLORE_UNCONVERTED_CHAR_ENCODING (0x0004000) is an inbound flag instructing the MME to not perform any character conversion on entries before returning them. Setting this flag is useful for seeing what comes out of playlists when their entries don't appear to convert to real files.
![]() |
If the MME_EXPLORE_RESOLVE_PLAYLIST_ITEM (0x00010000) flag is set, this setting overrides the MME_EXPLORE_UNCONVERTED_CHAR_ENCODING flag. |
Starting with this release io-media-generic no longer links statically to filters. It therefore now requires more DLLs to be present that it did when it linked statically to filters. The following filters and streamers are now required by the io-media default configuration:
The default io-media configuration loads some filters and streamers permanently into memory; other filters are loaded and unloaded dynamically when necessary. Some filters are loaded permanently because they are needed by the majority of graphs; if any of these required filters are missing, there is a high probability that io-media will not be able to play any media. These filters are, therefore, specified as required by the default configuration; if any of these filters is missing, io-media will exit at startup.
Some other filters are loaded permanently because they might be used for potentially high-bandwidth operations that could be significantly slowed down by having to load and unload filters. These filters typically support a particular operation or media type; if they're missing, io-media will not be able to play some media but will have no problems playing other media. Some of these filters are shipped in a separate, optional package, and may not be present on some targets. These filters are flagged as optional in the default configuration; if they are missing, io-media logs a warning to the system log, but does not treat the situation as a fatal error.
You can change the minimum DLL set that io-media maintains in memory in order to make optimal use for your environment of the system resources you have available. Generally, the more DLLs in memory, the better the performance but the greater the memory required.
The io-media configuration file includes multiple keepdll elements under the mmf module's module-options element. Each keepdll element determines if the named filter or streamer is in the set or is optional.
The default setting is required: if it the DLL is missing, log an error and exit. Thus, in the example below:
module-options { ... keepdll { name = "tmpfile_streamer" optional = yes } keepdll { name = "stream_reader" } ... }
Starting with this release, to facilitate updating io-media default configuration files are included as a reference in the release package under etc/.
These files have the format io-media-variant.cfg. For example, io-media-generic.cfg is the configuration file for io-media-generic.
This release introduces a new io-media configuration element: keepdlls (note the final “s”).
You can use this element to specify DLLs to keep by an interface name, rather than by the DLL name. This approach allows you to use, for example, one element to load all streamers, while another element loads all parsers. For example:
keepdlls { # Keep all the DLLs that have the specified interface interface = "AOStreamer" } keepdlls { interface = "MediaMetadataParser" }
With the new keepdlls element implemented, the default io-media configuration no longer needs to have a keepdll entry for the optional streamers and parsers. Note, however, that the configuration maintains keepdll entries for non-optional (mandatory) DLLs, to ensure that io-media fails if any of these DLLs are missing.
This release of io-media introduces a new mmf_graphbuilder resource that can be used to prevent seeking and trick play activities during ripping with playback operations.
The new resource, MM_TMPFILE_STREAMER_SEEKABLE, can be:
or
For example:
resource { name = "MM_TMPFILE_STREAMER_SEEKABLE" type = long value = 0 optional = yes }
For more information about applying mmf_graphbuilder resources, see “Applying a resource to a filter” in the MME Utilities Reference chapter io-media-generic.
This release introduces new values for the io-media resource filter attribute. The implementation of these new values allows the resource element configured for a trackplayer to be used, not only when creating a streamer for playback (as in previous releases), but also now when creating a streamer to use solely for a metadata scan.
The new values are:
The default io-media configuration uses these new values to set the StreamerStickyError resource for both playback and metadata extraction. To change this configuration, simply change the io-media configuration file. For example, to set the StreamerStickyError resource for playback only, update the file as follows:
module = "mmf_graphbuilder" resource { filter = "streamer/playback" name = "StreamerStickyError" type = long value = 1 optional = yes }
The mmf MM_IPP_VIDEO_DECODER_NUM_THREADS resource is used to configure the number of threads available for video decoding. It was formerly called MM_IPP_H264_DECODER_NUM_THREADS .
Note also that this resource does not use a filter attribute. For example:
resource { name = "MM_IPP_VIDEO_DECODER_NUM_THREADS" type = long value = 2 optional = yes }
The MME now maintains the language set by the user across system shutdowns and restarts. It uses the language set in the active row of the languages table as the default language.
With earlier MME releases, even if the user called mme_setlocale() to set the language in the languages table, the MME would start up with the default language set by the <Locale> element in the MME configuration file.
With this release, the MME only refers to the <Locale> element if it does not find an active language set in its database.
The MME now uses a separate thread to handle mediastore state changes reported by the MCD. This use of a separate thread ensures that the MME handles all device state changes correctly, even for unresponsive devices.
This new feature implies some minor changes to the MME behavior, as follows:
This releases introduces QDB shared caching. This feature both improves performance times and reduces the total amount of memory cache required for multiple connections. The introduction of shared caching implements the following changes to the QDB default behavior:
![]() |
QDB will exit immediately if it is started with shared cache disabled and exclusive mode enabled. For example:
# qdb -c /db/qdb.cfg -v -A -Otempstore=/fs/tmpfs -Rset |
The shared cache feature introduces the following new QDB startup options:
Using the shared cache feature also reduces the total amount of memory required for multiple database connections, because multiple connections can share the same memory cache.
For example, without shared caching, if 1 MB of memory is required for each database connection, 40 connections require 40 MB of memory. However, with shared cache enabled, these 40 connections can share the same memory cache, allowing you to reduce the memory cache to 25 MB (or another size determined by your environment and performance requirements). Further, with shared cache, there is no duplication in memory, so in the 25 MB of memory you may have almost the entire database, virtually eliminating the need for disk I/O.
In order to ensure that the MME and QDB do not enter into a deadlock due to an inadequate number of available threads for the QDB:
See also “QDB/MME lockup problem and solution” below.
Testing of the MME has revealed that increasing the MME's maximum number of synchronization threads (<MaxThreads> in the MME configuration file) without also increasing the maximum number of threads available to the QDB can result in the QDB and MME locking up.
If multiple MME synchronization threads that need to lock the database exhaust the number of available threads, the QDB can find itself without the thread it requires to unlock the database, thus causing a deadlock with the MME waiting for the QDB to unlock the database while the QDB is waiting for the MME to release the thread it needs in order to unlock the database.
Deadlocks like the one described above have been observed in scenarios where the MME has attempted to synchronize multiple and large mediastores at the same time; for example, a USB stick with eight partitions.
Always ensure that the QDB has a threadpool with more threads than will be required by the MME synchronization threads plus any other processes that may lock the MME database. In other words, be sure that henceforth your projects start the QDB with the -o thread option set to 20 or greater, as required by your project.
This release implements the following improvements to mmecli:
The table below lists the features and capabilities that have be deprecated or removed from this release.
Feature | Status | Reference |
---|---|---|
ipp_h264_decoder.so | Removed: use ipp_video_decoder.so. See “New codec support” above. | 67517 |
mme_play_get_transition() and mme_play_get_transition() | Removed: these functions were never implemented, and have been removed from the header file mme.h. | 45637 |
mme_freephoto() and mme_getphoto() | Removed: see “New metadata extraction API” under “New features”above. | 58371 |
mme_sync_set_debug() | Removed: use mme_set_logging() with the module set to sync. | 45637 |
mme_get_event() | Changed to accommodate variable length events. | 65237 |
library_extra table | Removed. See “library_extra table” below. | 60667 |
iPod “compat” mode | Removed. | 63373 |
qdb_getdbsize() | Soon to be deprecated and replaced by another function. Note that the qdb_getdbsize() function's free_pages parameter is now always returned as 0. | – |
qdb_transaction() | This previously deprecated function has been removed from the QDB client library. | 48615 |
qdb -o thread option | Deprecated. | 65069 |
<MSID> configuration element | Replaced by <MediastoreMountpath>. See “New method for specifying default ripping destination mediastore” above. | 66585 |
<DeleteOnNonRecoverableError> configuration element | Removed; see <DeleteOnNonRecoverableError> below, and “<DeleteOnError> configuration element” above. | 65510 |
MDSs (metadata synchronizers) | Replaced: most MDSs (metadata synchronizers) have been replaced by MDPs (metadata plugins); see “Metadata plugins replace metadata synchronizers” above. | 60874 |
mme-shuffle | Removed; no longer required. | 67687 |
MME performance has been improved by the integration of the library_extra table columns into the library table. These columns are:
If the removal of the library_extra will cause problems with your projects, as a temporary measure until you have removed all references to the library_extra from your applications, you can uncomment the following “CREATE VIEW” line in mme_library.sql to create an SQL view that mimics the library_extra table:
-- CREATE VIEW library_extra AS select fid, last_played, fullplay_count, duration, copied_fid, playable, permanent FROM library;
![]() |
In order to benefit from the performance improvements gained by the integration of the library_extra table's columns into the library table, you should remove references to the removed table from your applications as soon as possible. |
The table below lists the removed element and its settings, and the new element and its equivalent settings.
Removed element | New element |
---|---|
<<DeleteOnNonRecoverableError enabled="false"/> | <DeleteOnError type="none"/> |
<DeleteOnNonRecoverableError enabled="true"/> | <DeleteOnError type="nonrecoverable"/> |
The standard QNX Aviage Multimedia Suite binaries are delivered in the mmedia-core-1.2.0-2009MMDDhhmm-* installers. They include the binaries, DLLs, and SQL configuration files required to run the QNX Aviage Multimedia Core 1.2.0 and support binaries. Binaries for features requiring special licenses are listed under “Binaries requiring special licenses” below.
These files are installed under target/qnx6/, under the subdirectories for the supported target platform:
These SQL support files are installed under target/qnx6/sql/:
These configuration files are installed under target/qnx6/etc/:
The following files are included under target/qnx6/usr/include/:
In addition to the files listed above, target/qnx6/usr/include/ includes the libxml directory with third-party header files for libxml2.
Sample applications with their source code and required headers and libraries are delivered in the QNX Aviage Multimedia Core 1.2.0 patch patch-630SP2-0315-mmedia-mm-dd-hhmm.tar.
The sample source code is installed under target/qnx6/examples/*. These applications illustrate various features and functionality provided by the MME. You can view command-line options for these applications by typing “use” then the application name. For example: use mmecli will list the command-line options for mmecli.
The sample applications are:
If you have QNX SDP PE, you can compile the sample applications using the IDE or the command-line tools; if you have SE, you have to use the command-line tools.
Binaries for features requiring special licenses are delivered in individual installers.
The installers qnxaviage-mmedia-aac-1.2.0-2009MMDDhhmm-* contain the binaries for AAC codec support:
The installers qnxaviage-mmedia-mp3-1.2.0-2009MMDDhhmm-* contain the binaries for MP3 codec support. They include the following files:
The installers qnxaviage-mmedia-wma9-1.2.0-2009MMDDhhmm-* contain the binaries for WMA codec support. They include the following files:
The installers qnxaviage-mmedia-ipod-1.2.0-2009MMDDhhmm-* contain binaries for iPod support, and as sample application. They include the following files:
![]() |
This package is designed for use with the QNX Aviage Multimedia Core package. If you intend to use this package independently of the Multimedia Core, please contact your QNX sales support team. |
The installers qnxaviage-mmedia-pfs-1.2.0-2009MMDDhhmm-* contain binaries for PFS device support. They include the following file:
![]() |
This package is designed for use with the QNX Aviage Multimedia Core package. If you intend to use this package independently of the Multimedia Core, please contact your QNX sales support team. |
The installers qnxaviage-mmedia-wmdrm10-nd-1.2.0-2009MMDDhhmm-* contain binaries for DRM support. They include the following files:
The installers qnxaviage-mmedia-zune-1.2.0-2009MMDDhhmm-* contain binaries for Zune support. They include the following files:
The installers qnxaviage-mmedia-dvdplayback-1.2.0-2009MMDDhhmm-* contain binaries for the DVD player. They are for x86 targets, and include the following files:
The installers qnxaviage-mmedia-codecengine-1.2.0-2009MMDDhhmm-* contain binaries for the QNX Codec Engine. They include the following files:
They also include the following MME components, located under lib/mmedia/filters/decoders/:
Binaries for packages requiring distribution licenses acquired directly from a third party are delivered separately.
The package with the binaries for video codec support and video codec support for the software DVD player is patch-641-1453-ipp-decoder.tar. It is available from the QNX web site (www.qnx.com). This package is for x86 targets, and contains:
![]() |
|
At time of release, the issues listed below were identified and under investigation. Check the QNX web site (www.qnx.com) for the latest information.
For example, if you have QNX SDP 6.4.0 on your system, then perform the following operations:
The following behavior will result if you attempt to install multiple MME packages:
Workaround: install from the command-line, specifying the installation location for all packages installed after the MME Core 1.2.0. For example, on a Linux system:
# qnxaviage-mmedia-ipod-1.2.0-build#-linux.bin -P beanProduct.installLocation="/opt/qnx641"
Or, on a Windows system, for example:
C:\path> qnxaviage-mmedia-ipod-1.2.0-build#-win32.bin -P beanProduct.installLocation="C:\QNX641"
Where /opt/qnx641 and C:\QNX641 are the location of the baseline installation under which you are installing the QNX Aviage Multimedia components.
![]() |
|
This deadlock manifests itself as the appearance that audio and video have “frozen”. Stopping the playback will get deadlocked as well. If you kill io-audio, io-media will recover; you can then restart io-audio, and execution will resume.
Workaround: when using the QDB on a QNX 6 filesystem, run your system with lazy page faulting disabled by setting the procnto memory manager options to -mL.
Workaround: use fs-cd.so to mount /dev/cd0.
Workaround: avoid using the QDB .control file. Instead, use the client library API functions, such as qdb_backup() to do a database backup.
Workaround: use mme_device_get_config() to determine the iPod or iPhone model, and refrain from artwork retrieval on models that exhibit the problem. The model ID and number are in the XML content retrieved by mme_device_get_config(); for example:
<iPod> <version> <model_id value="00150000" valuetype="hex"/> <model_number value="MA627C" valuetype="text"/> <firmware value="020201" valuetype="hex"/> ...
For more information, see “Getting and setting device configuration values” in the MME Developer's Guide chapter External Devices, CD Changers and Streamed Media. For more information about mapping Apple model IDs and numbers to specific devices, see the Apple iPod documentation, and the Apple iPod and iPhone specifications.
Workaround: use a high speed port for connections to iPod nano 2G devices; do not use a full speed port.
Workaround: the client application should enforce a brief pause when requesting track changes on these devices.
Workaround: always configure the MME so that the maximum memory permitted for synchronization operations is less than the maximum RAM size configured for tmpfs.
examples/io-fs/drvr/media/ipod/acp/sim/dll/ppc-be-spe examples/io-fs/drvr/media/ipod/acp/sim/a/ppc-be-spe examples/io-fs/drvr/media/ipod/acp/i2c/dll/ppc-be-spe examples/io-fs/drvr/media/ipod/acp/i2c/a/ppc-be-spe examples/io-fs/drvr/media/avrcpexample/dll/ppc-be-spe examples/io-fs/drvr/media/avrcpexample/a/ppc-be-spe
Workaround: place in any of the relevant directories a Makefile.dnm file for ppc-be-spe, or use an EXCLUDE_VARIANTLIST=spe to ignore the ppc-be-spe items when compiling.
During testing of playback from iPod devices, connection of a second device that takes a long time to access or scan files has occasionally produced audible gaps in the playback, or reports of buffer underuns. The cause of this behavior may be the test environment configuration, but this hypothesis has not been confirmed.
If you have any questions, comments, or problems with a QNX product, please contact Technical Support. For more information, see the How to Get Help chapter of the Welcome to QNX Momentics guide or visit our website, www.qnx.com.