OS image contents

Updated: April 19, 2023

The rest of the buildfile lists the OS image contents; that is, all executables, shared libraries, and data files included in the OS image.

Note: For an overview of the syntax and semantics of this part of the buildfile, read the topic called The rest of the buildfile in Building Embedded Systems.
This part of our buildfile begins with the [data=c] attribute setting, which is placed on its own line so it applies to all subsequent files. This setting ensures that the data segment of an executable is copied when it's invoked:
# Executables
[data=c]
In the remainder of this topic, we mention the different types of OS image content and provide the lines that add the necessary files.

Support for common multimedia operations

We first list the executables and shared objects that enable common multimedia use cases, and allow multimedia applications to provide touch interfaces and to access media device filesystems. This entails adding the following content:
  • the essential services of pps and calibration of mtouch, which manages touch functionality
  • all libraries and binaries needed to support the Android Auto application
  • the libcurl.so library, which enables playback over HTTP
###########################################################################
## PPS & other
###########################################################################
pps
/lib/libmtouch-calib.so.1=libmtouch-calib.so.1

###########################################################################
## AndroidAuto support
###########################################################################
/usr/lib/libprotobuf-lite.so.1=libprotobuf-lite.so.1
[type=link] /usr/lib/libprotobuf-lite.so=/usr/lib/libprotobuf-lite.so.1
/usr/lib/libaoa.so.1=libaoa.so.1
[type=link] /usr/lib/libaoa.so=/usr/lib/libaoa.so.1
/usr/lib/libautoreceiver_qnx.so.1=libautoreceiver_qnx.so.1
[type=link] /usr/lib/libautoreceiver_qnx.so=/usr/lib/libautoreceiver_qnx.so.1
/usr/bin/androidauto=androidauto

###########################################################################
## curl support
###########################################################################
/usr/lib/libcurl_support.so.1=libcurl_support.so.1
[type=link] /usr/lib/libcurl_support.so=/usr/lib/libcurl_support.so.1

# uncomment to include libcurl
/usr/lib/libcurl.so.2=libcurl.so.2
[type=link] /usr/lib/libcurl.so=/usr/lib/libcurl.so.2

Multimedia framework support

Next, we add the shared objects that support the services used by the multimedia framework (MMF). This framework is used by the OpenMAX AL media engine and the mm-renderer service for playback, but it's not accessed directly by client applications. The shared objects implement codecs, file containers, streamers, media data writers, individual media features, and audio formats.

###########################################################################
## MMF
###########################################################################
# Encode Codec
/lib/dll/mmedia/oc_fdkaac_encoder.so=mmedia/oc_fdkaac_encoder.so
/lib/dll/mmedia/wave_encoder.so=mmedia/wave_encoder.so

# Encode Container
/lib/dll/mmedia/ts_writer.so=mmedia/ts_writer.so
/lib/dll/mmedia/mp4_writer.so=mmedia/mp4_writer.so
/lib/dll/mmedia/rawfile_writer.so=mmedia/rawfile_writer.so
/lib/dll/mmedia/wavfile_writer.so=mmedia/wavfile_writer.so

# Input Support
/lib/dll/mmedia/audio_streamer.so=mmedia/audio_streamer.so
/lib/dll/mmedia/fildes_streamer.so=mmedia/fildes_streamer.so
/lib/dll/mmedia/rtp_reader.so=mmedia/rtp_reader.so
/lib/dll/mmedia/rtsp_reader.so=mmedia/rtsp_reader.so
/lib/librimrtsp.so.1=librimrtsp.so.1
[type=link] /lib/librimrtsp.so=/lib/librimrtsp.so.1

# Output Support
/lib/dll/mmedia/audio_writer.so=mmedia/audio_writer.so
/lib/dll/mmedia/audio_eventer.so=mmedia/audio_eventer.so
/lib/dll/mmedia/rtp_writer.so=mmedia/rtp_writer.so
/lib/librimrtp.so.1=librimrtp.so.1
[type=link] /lib/librimrtp.so=/lib/librimrtp.so.1
/lib/dll/mmedia/screen_writer.so=mmedia/screen_writer.so

# Playback Codec
/lib/dll/mmedia/oc_fdkaac_decoder.so=mmedia/oc_fdkaac_decoder.so
/lib/dll/mmedia/xing_mpega_decoder.so=mmedia/xing_mpega_decoder.so
/lib/dll/mmedia/wav_decoder.so=mmedia/wav_decoder.so

# Playback Container
/lib/dll/mmedia/aac_parser.so=mmedia/aac_parser.so
/lib/dll/mmedia/avi_parser.so=mmedia/avi_parser.so
/lib/dll/mmedia/mkv_parser.so=mmedia/mkv_parser.so
/lib/dll/mmedia/mp2ts_parser.so=mmedia/mp2ts_parser.so
/lib/dll/mmedia/mp4_reader.so=mmedia/mp4_reader.so
/lib/dll/mmedia/mpega_parser.so=mmedia/mpega_parser.so
/lib/dll/mmedia/wav_parser.so=mmedia/wav_parser.so

# FDK AAC support libraries
/usr/lib/libopencore_fdk_aac.so.1=libopencore_fdk_aac.so.1
[type=link] /usr/lib/libopencore_fdk_aac.so=/usr/lib/libopencore_fdk_aac.so.1

# MMF Core
/lib/dll/mmedia/queue_filter.so=mmedia/queue_filter.so
/lib/dll/mmedia/external_clock.so=mmedia/external_clock.so
/lib/dll/mmedia/stream_reader.so=mmedia/stream_reader.so
/lib/dll/mmedia/pcm_converter.so=mmedia/pcm_converter.so
/usr/lib/liblogging.so.1=liblogging.so.1
[type=link] /usr/lib/liblogging.so=/usr/lib/liblogging.so.1
/usr/lib/libmmedia.so.1=libmmedia.so.1
[type=link] /usr/lib/libmmedia.so=/usr/lib/libmmedia.so.1
/usr/lib/libmmfilter.so.1=libmmfilter.so.1
[type=link] /usr/lib/libmmfilter.so=/usr/lib/libmmfilter.so.1
/usr/lib/libmmresarb.so.1=libmmresarb.so.1
[type=link] /usr/lib/libmmresarb.so=libmmresarb.so.1

For several shared objects, we include the latest version of the library file, which has a filename ending with .so.n, where n is the version number, and then create a link to that library file using a link name without the version number. Consider the following excerpt taken from the section above:
/lib/librimrtsp.so.1=librimrtsp.so.1
[type=link] /lib/librimrtsp.so=/lib/librimrtsp.so.1

This adds the librimrtsp.so.1 file to the image, at the target path of /lib/librimrtsp.so.1, and creates a link that refers to the numbered library version and has the same name but ending simply in .so.

Media playback support

We now list the executables and shared libraries that implement the services that play and deliver media content. The following files are added to the OS image:
  • the interface library and encoder, decoder, and playback utilities for the OpenMAX AL media engine
  • executables for the multimedia streaming server (mm-stream) and its client utility (mm-stream-client), and the libraries implementing all mm-stream plugins
  • the libjsoncpp.so library file, which allows the C++ code base of mm-stream to parse JSON configuration files
  • all executables and libraries needed to run and use mm-renderer, which are:
    • all plugins that read inputs and play and/or record media to outputs
    • the mm-renderer executable
    • the client, core, and MMF libraries
    • the default configuration file (/etc/mm/mm-renderer.conf)
    • client-side test utilities based on mm-renderer
  • the resarb executable and supporting library file, which are used by MMF to arbitrate access to the encoder/decoder instances and to decode/encode memory
###########################################################################
## OpenMAX AL
###########################################################################
/usr/lib/libOpenMAXAL.so.1=libOpenMAXAL.so.1
[type=link] /usr/lib/libOpenMAXAL.so=/usr/lib/libOpenMAXAL.so.1

###########################################################################
## OpenMAX AL command-line utilities
###########################################################################
/usr/bin/audio-decode=audio-decode
/usr/bin/audio-encode=audio-encode
/usr/bin/video-decode=video-decode
/usr/bin/video-encode=video-encode
/usr/bin/omxalplay=omxalplay
/usr/bin/omxal-showmetadata=omxal-showmetadata

###########################################################################
## mm-stream support.
###########################################################################
/usr/lib/libmmstream.so.1=libmmstream.so.1
[type=link] /usr/lib/libmmstream.so=/usr/lib/libmmstream.so.1
/usr/lib/mm-stream-input-audio.so=mm-stream-input-audio.so
/usr/lib/mm-stream-input-camera.so=mm-stream-input-camera.so
/usr/lib/mm-stream-input-file.so=mm-stream-input-file.so
/usr/lib/mm-stream-input-screen.so=mm-stream-input-screen.so
/usr/lib/mm-stream-output-rtp.so=mm-stream-output-rtp.so
/usr/lib/mm-stream-processor-openmaxal.so=mm-stream-processor-openmaxal.so
/usr/lib/mm-stream-server-rtp.so=mm-stream-server-rtp.so
/usr/lib/mm-stream-server-rtsp.so=mm-stream-server-rtsp.so
/usr/lib/mm-stream-server-rtsp.so=mm-stream-server-rtsp.so
/usr/bin/mm-stream=mm-stream
/usr/bin/mm-stream-client=mm-stream-client

###########################################################################
## libjsoncpp 
###########################################################################
/usr/lib/libjsoncpp.so.1.8.4=libjsoncpp.so.1.8.4
[type=link] /usr/lib/libjsoncpp.so.19=/usr/lib/libjsoncpp.so.1.8.4
[type=link] /usr/lib/libjsoncpp.so=/usr/lib/libjsoncpp.so.1.8.4

###########################################################################
## mm-renderer
###########################################################################
/lib/dll/mmr-mmf-routing.so=mmr-mmf-routing.so
/lib/dll/mmr-mmfrip-routing.so=mmr-mmfrip-routing.so
/lib/dll/mmr-track-engine.so=mmr-track-engine.so

/usr/lib/libmmrndclient.so.1=libmmrndclient.so.1
[type=link] /usr/lib/libmmrndclient.so=/usr/lib/libmmrndclient.so.1
/usr/lib/libmmrndcore.so.1=libmmrndcore.so.1
[type=link] /usr/lib/libmmrndcore.so=/usr/lib/libmmrndcore.so.1
/usr/lib/libmmro-mmf.so.1=libmmro-mmf.so.1
[type=link] /usr/lib/libmmro-mmf.so=/usr/lib/libmmro-mmf.so.1
/usr/sbin/mm-renderer=mm-renderer
/etc/mm/mm-renderer.conf=../../etc/mm/mm-renderer.conf

/usr/bin/mmrplay=mmrplay
/usr/bin/mmcli=mmcli
/lib/dll/mmrenderer_cli.so=mmrenderer_cli.so

###########################################################################
## resarb
###########################################################################
/bin/resarb=resarb
/usr/lib/libresarb.so.1=libresarb.so.1
[type=link] /usr/lib/libresarb.so=/usr/lib/libresarb.so.1

Video encoding on specific platforms

For some hardware platforms, this release supports video encoding but not decoding or playback. You can add the necessary video encoder and supporting libraries to your image.

Renesas R-Car V3H Videobox miniPLUS

Adding the section below enables H.264 video encoding on the Renesas R-Car V3H Videobox miniPLUS.

/lib/dll/mmedia/rcarv3_video_encoder.so=rcarv3_video_encoder.so

# NOTE: These are here to work around the fact that the customer gets these libraries 
# from Renesas, not QNX Software Center:
libRIVPENCLIB.so
libRIVPENCUDFDRV.so
libRIVPENCUDF.so

Video playback on specific platforms

There are video encoder and decoder libraries, and sometimes other supporting libraries, for enabling playback on various hardware platforms. You can add any of the sections below that apply to your target platforms to your own buildfile.

Intel x86 64-bit

/lib/dll/mmedia/yami_video_decoder.so=yami_video_decoder.so
/lib/dll/mmedia/yami_video_encoder.so=yami_video_encoder.so
/usr/lib/libyami.so.1=libyami.so.1
[type=link] /usr/lib/libyami.so=/usr/lib/libyami.so.1

NXP iMX8QM-MEK

/lib/dll/mmedia/imx8_video_decoder.so=imx8_video_decoder.so
/lib/dll/mmedia/omxil_video_encoder-imx8.so=omxil_video_encoder-imx8.so
/lib/dll/omxil/omxil_comp_imx8_dec.so=omxil_comp_imx8_dec.so
/lib/dll/omxil/omxil_comp_imx8_enc.so=omxil_comp_imx8_enc.so
 
# NOTE: This here to work around the fact that the customer gets this library
# from NXP, not QNX Software Center:
libvpu-cli-mx8.so.1
 
# NOTE: These are here to work around the fact that the customer gets this firmware
# from NXP, not QNX Software Center:
/lib/firmware/iMX8/vpu_fw_imx8_dec.bin
/lib/firmware/iMX8/vpu_fw_imx8_enc.bin
 
# NOTE: These are here to work around the fact that the customer gets these binaries
# from NXP, not QNX Software Center:
export VCU_DEC_FW_PATH=/lib/firmware/iMX8/vpu_fw_imx8_dec.bin
export VCU_ENC_FW_PATH=/lib/firmware/iMX8/vpu_fw_imx8_enc.bin
/usr/sbin/vpu-decoder-mx8=vpu-decoder-mx8
/usr/sbin/vpu-encoder-mx8=vpu-encoder-mx8
Note: Video encoding, decoding, and playback isn't supported on the VMware platform.