QNX® Aviage Multimedia Suite 1.2.0 Release Notes

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

Note: For information on installing this package, see the Installation Note.


Caution:
  • A client application compiled against QNX Aviage Multimedia Suite (MME) 1.0.n must be recompiled in order to work with QNX Aviage Multimedia Suite (MME) 1.2.0.
  • You must update all system components to QNX Aviage Multimedia Suite 1.2.0. Your environment must not contain both 1.0.n and 1.2.0 multimedia components.

Contents

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.


Note: The QNX Aviage Multimedia Suite:
  • is compatible with generic filesystems, such as FAT32, ISO9660, and others provided with the QNX Neutrino operating system or with a QNX board support package. Media-specific filesystems, such as for Apple iPod devices and Microsoft PlaysForSure devices, are provided in the relevant QNX Aviage Multimedia Suite packages.
  • uses QDB, QNX's embeddable SQL database server that is based on the SQLite project (http://www.sqlite.org) and supports most SQL-92 syntax. For more information about what SQL-92 syntax SQLite doesn't support, see SQL Features That SQLite Does Not Implement on the SQLite web site.

Notices

Please review the release notices before proceeding:

License Guide and Third Party License Terms List

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.

Upgrades and changes to your environment

This release includes changes and upgrades that require changes to your enviroment:


API changes

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.


MME requires Neutrino 6.4.0

The Aviage MME 1.2 release requires a Neutrino 6.4.0 (or more recent) system.

Action:

Upgrade your system to Neutrino 6.4.0 (or more recent).


Changed data structures and enumerated types

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.

Action:

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.


New client library

The Aviage MME 1.2 release implements a new client library, which renders it incompatible with older Aviage MME releases.

Action:

Recompile and relink all client applications to use this release.


Changes to locations of binaries

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.

Action:

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.


Metadata plugins replace metadata synchronizers

Most MDSs (metadata synchronizers) have been replaced by MDPs (metadata plugins).

Action:

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.


SQLite upgrade

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:

Action:

Recompile any applications that link against the SQLite library directly.


io-media configuration file update

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.


Documentation

This release includes the following documentation:


What's available?

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.

Installers

This section lists, by host OS, the installers included with this release (with 2009MMDDhhmm representing the build numbers).

QNX Neutrino

Linux

Microsoft Windows

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.


Note: 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.

Dependencies

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

Note:
  • For clarity, the package names in the table above omit the “QNX Aviage Multimedia” prefix and the release number.
  • For third-party authorizations, please contact QNX for further details.
  • Contact QNX if you want to use the Interface for iPod or Interface for PlaysForSure packages independently of the Core package.

 

What's new in this release

This release introduces many new features and improvements, and deprecates some features available in older releases:

New features

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/.

Internet streamed media

The MME now supports playback of internet streamed media, including:

RTP streamed video

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:


Note: To maintain optimal sycnhronization performance, add a keepdll configuration element to your io-media configuration file as follows:
keepdll {
  name = rtp_reader
  optional = yes
}

New codec support

This release introduces support for the following codecs on x86 platforms:

Audio

Video

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.


Software DVD-video playback

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.

Required drivers and binaries

The software DVD player requires the following QNX drivers:

The following binaries are specific to DVD playback:

Playing DVDs

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:

  1. Insert a DVD.
  2. Create a track session.
  3. Set the track session.
  4. Start playback.
  5. Send DVD navigation and control commands, as required.

Note: 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.

DVD commands

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.


Note: 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.

Configuring the MME for software DVD playback

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:


Note: 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.

Encrypted DVDs

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.

dvdkeymgr

Generate DVD CSS decryption binary file

Syntax:

dvdkeymgr path

Runs on:

x86

Options:

None

Description:

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.

Input 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

Audio input playback

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:


Note: Audio input playback requires audio_streamer.so, a streamer for reading audio from a sound card.

Configuring the MME to recognize audio input “mediastores”

To have the MME recognize audio input “mediastores”, you must:

Configuring the slots table

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);

Configuring the MCD

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.


Note: An audio input “mediastore” is not synchronizable; an explicit attempt to synchronize it will result in a MME_EVENT_SYNCABORTED error.

Playing media from an audio input “mediastore”

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.


Note: You may learn what is available by:
  • doing an ls of the path to the location of the audio input
  • looking at the output of mix_ctl

Once you know the path of your audio input, simply create a file-based track session and play the media

  1. create a file-based track session, using the snd “mediastore”'s device file ID.
  2. Set the track session for playback.
  3. Call mme_trksession_set_files() to set the input to the track session.
  4. Play the track session.

Additional media and playlist file type support

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

MPEG-4 video ES support

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:


Changes to synchronization behavior

This release implements some changes to synchronizations:

CDDA synchronizations no longer combine passes

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.

Directed synchronizations remove missing folders from MME database

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.


New synchronization configuration elements

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.

Default behavior

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).

Behavior with <ChangedFilesHaveConstantId> enabled

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.


Note: 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 behavior

Playlist synchronization differs from media file synchronization:


Metadata plugins replace metadata synchronizers

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>

Note: The Gracenote client mdp-gracenote_client.so replaces mds-gracenote_client.so.

New synchronization event MME_SYNC_ERROR_FOLDER_DEPTH_LIMIT

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.

Event data

Synchronization information in mme_sync_error_t, including

Event data

Media status information, and the reason for delivery of the event, in mm_media_status_event_t.

Database tables updated

No database tables are updated.


iPod driver cross transport authentication (CTA) support

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:

Cross transport authentication

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

Note: The following iPod devices support cross transport authentication, provided they have the latest firmware:
  • all iPod touches
  • all iPhones
  • all iPod nano 4G

Support for iPod video

This MME release introduces support for video on iPod devices, using analog video and audio output.

To play video on iPods, you need:


iPod concurrency managment

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.


New option to set iPod USB charging level

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:

normal_mA=amps
Specify, in milliamperes, the amount of current over the default that an iPod device may draw when in normal state. Typical values are 0, 100 and 500. See Specifying current below.
suspend_mA=amps
Specify, in milliamperes, the amount of current over the default that an iPod device may draw when in suspended state. Typical values are -500 and 500. See Specifying current below.

Specifying current

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.


Image pre-processing patch

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.


New method for specifying default ripping destination mediastore

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: Note that, as part of this change:
  • The <MediastoreMountpath> configuration element replaces <MSID> configuration element.
  • If the <MSID> element is present in the MME configuration file, the MME logs an error and exits.
  • The default value for CONFIG_DEF_COPYING_DEST_MEDIA_STORE changes from 1 to "/media/drive".

Improved metadata handling for copying and ripping

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:


Note: This change:
  • introduces the new constant MME_MEDIACOPIER_USE_DEFAULT_FOLDERNAME
  • extends the use of MME_MEDIACOPIER_USE_DEFAULT_FILENAME to ripping as well as copying operations

Mediacopier flags

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.

<DeleteOnError> configuration element

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".


Caution: Attempting to use the removed <DeleteOnNonRecoverableError> configuration element will cause a fatal error.

Copy queue entry deletion control settings

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

Nonrecoverable errors

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".


Improved Explorer API performance

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.


New event delivered by mme_media_set_def_lang()

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.

MME_EVENT_DEFAULT_LANGUAGE

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.

Event data

The success or failure of the default preferred language update, and the preferred language, in mme_event_default_language_t.


Note: 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).

Database tables updated

No database tables are updated.

mme_event_default_language_t

Default language event information

Synopsis

#include <mme/types.h>

typedef struct s_mme_default_language_event {
    int        error;
    const char language[1];
} mme_event_default_language_t;

Description

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.

MME_EXPLORE_UNCONVERTED_CHAR_ENCODING flag

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.


Note: If the MME_EXPLORE_RESOLVE_PLAYLIST_ITEM (0x00010000) flag is set, this setting overrides the MME_EXPLORE_UNCONVERTED_CHAR_ENCODING flag.

io-media DLLs

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.

Configuring the set of required filters and streamers

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"
    }
    ...
}

Default io-media configuration shipped with the release

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.


New keepdlls configuration element

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.


New mmf_graphbuilder resource

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:

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.


New io-media configuration

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
}

MM_IPP_VIDEO_DECODER_NUM_THREADS resource

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
}

Default language persistence

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.


Dedicated thread to handle mediastore state changes

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:


QDB shared cache

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:


Note: 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

Shared cache options

The shared cache feature introduces the following new QDB startup options:

-A
Turn off exclusive mode: allow other applications to use the database files.
-D
Disable shared cache. You should only use this option if you need to debug shared cache.

Advantages of shared caching

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.


New qdb -o thread* options

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.


QDB/MME lockup problem and solution

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.

Solution

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.


Improvements to mmecli

This release implements the following improvements to mmecli:


Deprecated and removed features

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 featuresabove. 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

library_extra table

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;

Note: 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.

<DeleteOnNonRecoverableError>

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"/>

QNX Aviage Multimedia Core 1.2.0 binaries

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/:

Headers and libraries

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

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.

Sample source code

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 packages requiring special licenses

Binaries for features requiring special licenses are delivered in individual installers.

QNX Aviage Multimedia Software Codec for AAC 1.2.0

The installers qnxaviage-mmedia-aac-1.2.0-2009MMDDhhmm-* contain the binaries for AAC codec support:

QNX Aviage Multimedia Software Codec for MP3 1.2.0

The installers qnxaviage-mmedia-mp3-1.2.0-2009MMDDhhmm-* contain the binaries for MP3 codec support. They include the following files:

QNX Aviage Multimedia Software Codec for WMA9 1.2.0

The installers qnxaviage-mmedia-wma9-1.2.0-2009MMDDhhmm-* contain the binaries for WMA codec support. They include the following files:

QNX Aviage Multimedia Interface for iPod 1.2.0

The installers qnxaviage-mmedia-ipod-1.2.0-2009MMDDhhmm-* contain binaries for iPod support, and as sample application. They include the following files:


Note: 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.

QNX Aviage Multimedia Interface for PlaysForSure 1.2.0

The installers qnxaviage-mmedia-pfs-1.2.0-2009MMDDhhmm-* contain binaries for PFS device support. They include the following file:


Note: 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.

QNX Aviage Multimedia Interface for WMDRM10-ND 1.2.0

The installers qnxaviage-mmedia-wmdrm10-nd-1.2.0-2009MMDDhhmm-* contain binaries for DRM support. They include the following files:

QNX Aviage Multimedia Interface for Zune 1.2.0

The installers qnxaviage-mmedia-zune-1.2.0-2009MMDDhhmm-* contain binaries for Zune support. They include the following files:

QNX Aviage Multimedia Software DVD Player 1.2.0

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:

QNX Aviage Multimedia Codec Engine for OMAP3530 Platform 1.2.0

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 other packages

Binaries for packages requiring distribution licenses acquired directly from a third party are delivered separately.

QNX Aviage Multimedia Intel Performance Primitive Codecs

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:


Note:

Known issues

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.

Technical support

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.