OS image contents

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 mm-charconv utility, which lets applications display multimedia data in different languages
  • the libcurl.so library, which enables playback over HTTP and HTTP Live Streaming (HLS)
  • the io-fs-media utility, which provides a POSIX filesystem interface to media devices
###########################################################################
## 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

###########################################################################
## mm-charconv
###########################################################################
/usr/lib/libmmcharconv.so.1=libmmcharconv.so.1
[type=link] /usr/lib/libmmcharconv.so=/usr/lib/libmmcharconv.so.1
/etc/mm/mm-charconv.conf=../../etc/mm/mm-charconv.conf

###########################################################################
## 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

###########################################################################
## Device Support
###########################################################################
/usr/sbin/io-fs-media=io-fs-media

Multimedia framework support

Next, we add the shared objects that support the services used by the multimedia framework (MMF), which is used by mm-renderer for playback but not accessed directly by client applications. These shared objects implement codecs, file containers, streamers, media data writers, individual media features (e.g., subtitles, smooth audio trick play), and specific audio formats.

###########################################################################
## MMF
###########################################################################
# Encode Codec
/lib/dll/mmedia/oc_fdkaac_encoder.so=mmedia/oc_fdkaac_encoder.so
/lib/dll/mmedia/rda_amrnb_encoder.so=mmedia/rda_amrnb_encoder.so
/lib/dll/mmedia/rda_amrwb_encoder.so=mmedia/rda_amrwb_encoder.so
/lib/dll/mmedia/opus_encoder.so=mmedia/opus_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/dash_reader.so=mmedia/dash_reader.so
/lib/dll/mmedia/fildes_streamer.so=mmedia/fildes_streamer.so
/lib/dll/mmedia/hls_reader.so=mmedia/hls_reader.so
/lib/dll/mmedia/http_streamer.so=mmedia/http_streamer.so
/lib/dll/mmedia/rtpts_streamer.so=mmedia/rtpts_streamer.so
/lib/dll/mmedia/rtsp_streamer.so=mmedia/rtsp_streamer.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
/lib/dll/mmedia/frame_writer.so=mmedia/frame_writer.so

# Playback Codec
/lib/dll/mmedia/oc_fdkaac_decoder.so=mmedia/oc_fdkaac_decoder.so
/lib/dll/mmedia/alac_decoder.so=mmedia/alac_decoder.so
/usr/lib/libalac.so.1=libalac.so.1
[type=link] /usr/lib/libalac.so=libalac.so.1
/lib/dll/mmedia/rda_amrnb_decoder.so=mmedia/rda_amrnb_decoder.so
/lib/dll/mmedia/rda_amrwb_decoder.so=mmedia/rda_amrwb_decoder.so
/lib/dll/mmedia/opus_decoder.so=mmedia/opus_decoder.so
/lib/dll/mmedia/ffmpeg_ape_decoder.so=mmedia/ffmpeg_ape_decoder.so
/usr/lib/libavcodec_ape.so.1=libavcodec_ape.so.1
[type=link] /usr/lib/libavcodec_ape.so=/usr/lib/libavcodec_ape.so.1
/usr/lib/libavutil.so.1=libavutil.so.1
[type=link] /usr/lib/libavutil.so=/usr/lib/libavutil.so.1
/usr/lib/libswresample.so.1=libswresample.so.1
[type=link] /usr/lib/libswresample.so=/usr/lib/libswresample.so.1
/lib/dll/mmedia/flac_decoder.so=mmedia/flac_decoder.so
/lib/dll/mmedia/xing_mpega_decoder.so=mmedia/xing_mpega_decoder.so
/lib/dll/mmedia/vorbis_decoder.so=mmedia/vorbis_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/amr_parser.so=mmedia/amr_parser.so
/lib/dll/mmedia/ape_parser.so=mmedia/ape_parser.so
/lib/dll/mmedia/avi_parser.so=mmedia/avi_parser.so
/lib/dll/mmedia/flac_parser.so=mmedia/flac_parser.so
/lib/dll/mmedia/flv_parser.so=mmedia/flv_parser.so
/lib/dll/mmedia/mkv_parser.so=mmedia/mkv_parser.so
/lib/dll/mmedia/mp2ps_parser.so=mmedia/mp2ps_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/ogg_parser.so=mmedia/ogg_parser.so
/lib/dll/mmedia/wav_parser.so=mmedia/wav_parser.so

# Playback Feature
/lib/dll/mmedia/shell_filter.so=mmedia/shell_filter.so
/lib/dll/mmedia/vocoder.so=mmedia/vocoder.so
/lib/dll/mmedia/ms_wma_decoder.so=mmedia/ms_wma_decoder.so
/lib/dll/mmedia/asf_parser.so=mmedia/asf_parser.so

# Subtitle
/lib/dll/mmedia/vobsub_decoder.so=mmedia/vobsub_decoder.so
/lib/dll/mmedia/stream_reader_lite.so=mmedia/stream_reader_lite.so
/lib/dll/mmedia/ccrender.so=mmedia/ccrender.so
/lib/dll/mmedia/cccontrol.so=mmedia/cccontrol.so
/lib/dll/mmedia/srt_decoder.so=mmedia/srt_decoder.so
/lib/dll/mmedia/smptett_decoder.so=mmedia/smptett_decoder.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

# OGG support libraries
/usr/lib/libogg.so.1=libogg.so.1
[type=link] /usr/lib/libogg.so=/usr/lib/libogg.so.1

# RDA codec support library
/lib/librdaaudio.so.2=librdaaudio.so.2
[type=link] /lib/librdaaudio.so=/lib/librdaaudio.so.2

# Vorbis support libraries
/usr/lib/libvorbis.so.1=libvorbis.so.1
[type=link] /usr/lib/libvorbis.so=/usr/lib/libvorbis.so.1

# Flac support libraries
/usr/lib/libFLAC.so.11=libFLAC.so.11
[type=link] /usr/lib/libFLAC.so=/usr/lib/libFLAC.so.11

# 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

###########################################################################
## Third Party Playback subtitle support.
###########################################################################
/usr/lib/libcairo.so.11506=libcairo.so.11506
[type=link] /usr/lib/libcairo.so=/usr/lib/libcairo.so.11506
/usr/lib/libcairo-script-interpreter.so.11506=libcairo-script-interpreter.so.11506
[type=link] /usr/lib/libcairo-script-interpreter.so=/usr/lib/libcairo-script-interpreter.so.11506
/usr/lib/libpango-1.0.so.4000=libpango-1.0.so.4000
[type=link] /usr/lib/libpango-1.0.so=/usr/lib/libpango-1.0.so.4000
/usr/lib/libpangocairo-1.0.so.4000=libpangocairo-1.0.so.4000
[type=link] /usr/lib/libpangocairo-1.0.so=/usr/lib/libpangocairo-1.0.so.4000
/usr/lib/libpangoft2-1.0.so.4000=libpangoft2-1.0.so.4000
[type=link] /usr/lib/libpangoft2-1.0.so=/usr/lib/libpangoft2-1.0.so.4000
/usr/lib/libgio-2.0.so.5104=libgio-2.0.so.5104
[type=link] /usr/lib/libgio-2.0.so=/usr/lib/libgio-2.0.so.5104
/usr/lib/libglib-2.0.so.5104=libglib-2.0.so.5104
[type=link] /usr/lib/libglib-2.0.so=/usr/lib/libglib-2.0.so.5104
/usr/lib/libgmodule-2.0.so.5104=libgmodule-2.0.so.5104
[type=link] /usr/lib/libgmodule-2.0.so=/usr/lib/libgmodule-2.0.so.5104
/usr/lib/libgobject-2.0.so.5104=libgobject-2.0.so.5104
[type=link] /usr/lib/libgobject-2.0.so=/usr/lib/libgobject-2.0.so.5104
/usr/lib/libgthread-2.0.so.5104=libgthread-2.0.so.5104
[type=link] /usr/lib/libgthread-2.0.so=/usr/lib/libgthread-2.0.so.5104
/usr/lib/libharfbuzz.so.10501=libharfbuzz.so.10501
[type=link] /usr/lib/libharfbuzz.so=/usr/lib/libharfbuzz.so.10501
/usr/lib/libthai.so.3=libthai.so.3
[type=link] /usr/lib/libthai.so=/usr/lib/libthai.so.3
/usr/lib/libffi.so.6=libffi.so.6
[type=link] /usr/lib/libffi.so=/usr/lib/libffi.so.6
/usr/lib/libdatrie.so.4=libdatrie.so.4
[type=link] /usr/lib/libdatrie.so=/usr/lib/libdatrie.so.4
/usr/lib/libpixman-1.so.34=libpixman-1.so.34
[type=link] /usr/lib/libpixman-1.so=/usr/lib/libpixman-1.so.34
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-playlist-engine.so=mmr-playlist-engine.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

Multimedia synchronization support

Multimedia synchronization requires an executable and the libraries and drivers it uses to access and read metadata from devices. The exact files added are:
  • the metadata provider library (libmd.so), its default configuration file, and all plugins it uses to extract specific fields from specific file and device types
  • the MTP driver for io-fs-media (iofs-pfs.so)
  • the multimedia playlist library (libmmplaylist.so), its default configuration file, and all plugins it uses to manage different playlist formats
  • the files needed for the multimedia synchronizer service, which are:
    • the mm-sync executable
    • the service's default configuration file
    • the client-side test utility (mmsyncclient), and the library it uses to talk to the service
    • the SQL files that define the schema for databases that store media metadata, and the database views, initial data, and commands to execute when a client connects
    • libraries that monitor database changes made by mm-sync, manage International Press Telecommunications Council (IPTC) metadata, and extract EXIF data from JPEG images
###########################################################################
## Metadata Extraction API
###########################################################################
/lib/dll/mm-cli-md.so=mm-cli-md.so
/lib/dll/mm-mdp-cdda.so=mm-mdp-cdda.so
/lib/dll/mm-mdp-extart.so=mm-mdp-extart.so
/lib/dll/mm-mdp-mediafs.so=mm-mdp-mediafs.so
/lib/dll/mm-mdp-mmf.so=mm-mdp-mmf.so
/lib/dll/mm-mdp-exif.so=mm-mdp-exif.so
/lib/dll/mm-mdp-img.so=mm-mdp-img.so
/usr/lib/libmd.so.1=libmd.so.1
[type=link] /usr/lib/libmd.so=/usr/lib/libmd.so.1
/etc/mm/mm-md.conf=../../etc/mm/mm-md.conf

###########################################################################
## MTP
###########################################################################
/lib/dll/iofs-pfs.so=iofs-pfs.so

###########################################################################
## libplaylist playlist parsing lib
###########################################################################
/lib/dll/mm-cli-mmplaylist.so=mm-cli-mmplaylist.so
/lib/dll/mm-plp-asx.so=mm-plp-asx.so
/lib/dll/mm-plp-b4s.so=mm-plp-b4s.so
/lib/dll/mm-plp-filelist.so=mm-plp-filelist.so
/lib/dll/mm-plp-itunes.so=mm-plp-itunes.so
/lib/dll/mm-plp-m3u.so=mm-plp-m3u.so
/lib/dll/mm-plp-mediafsdir.so=mm-plp-mediafsdir.so
/lib/dll/mm-plp-pls.so=mm-plp-pls.so
/lib/dll/mm-plp-qdb.so=mm-plp-qdb.so
/lib/dll/mm-plp-rmp.so=mm-plp-rmp.so
/lib/dll/mm-plp-wpl.so=mm-plp-wpl.so
/lib/dll/mm-plp-xspf.so=mm-plp-xspf.so
/usr/lib/libmmplaylist.so.1=libmmplaylist.so.1
[type=link] /usr/lib/libmmplaylist.so=/usr/lib/libmmplaylist.so.1
/etc/mm/mm-playlist.conf=../../etc/mm/mm-playlist.conf

###########################################################################
## mm-sync
###########################################################################
/lib/dll/libqdb_notify.so.1=libqdb_notify.so.1
[type=link] /lib/dll/libqdb_notify.so=/lib/dll/libqdb_notify.so.1
/usr/bin/mmsyncclient=mmsyncclient
/usr/lib/libdbnotify.so.1=libdbnotify.so.1
[type=link] /usr/lib/libdbnotify.so=/usr/lib/libdbnotify.so.1
/usr/lib/libiptcdata.so.1=libiptcdata.so.1
[type=link] /usr/lib/libiptcdata.so=/usr/lib/libiptcdata.so.1
/usr/lib/libmmsyncclient.so.1=libmmsyncclient.so.1
[type=link] /usr/lib/libmmsyncclient.so=/usr/lib/libmmsyncclient.so.1
/usr/lib/libexif.so.1=libexif.so.1
[type=link] /usr/lib/libexif.so=/usr/lib/libexif.so.1

/usr/sbin/mm-sync=mm-sync
/etc/mm/mm-sync.conf=../../etc/mm/mm-sync.conf
/etc/mm/sql/mmsync.sql=../../etc/mm/sql/mmsync.sql
/etc/mm/sql/mmsync_connect.sql=../../etc/mm/sql/mmsync_connect.sql
/etc/mm/sql/mmsync_data.sql=../../etc/mm/sql/mmsync_data.sql
/etc/mm/sql/mmsync_views.sql=../../etc/mm/sql/mmsync_views.sql

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 the section below that applies to your target platform to your own buildfile (or add all sections and comment them all out except the relevant one).

Intel Apollo Lake

/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

Texas Instruments Jacinto 6

/lib/dll/mmedia/ivahd_video_decoder-jacinto6.so=ivahd_video_decoder-jacinto6.so
/lib/dll/mmedia/ivahd_dce_video_encoder.so=ivahd_dce_video_encoder.so

# NOTE: These are here to work around the fact that the customer gets this lib
# from TI, not Software Center:
libdce.so.1
libsharedmemallocator.so.1

Qualcomm 820

/lib/dll/mmedia/omxil_video_decoder-msm8996.so=omxil_video_decoder-msm8996.so
/lib/dll/mmedia/omxil_video_encoder-msm8996.so=omxil_video_encoder-msm8996.so

# NOTE: These are here to work around the fact that the customer gets this lib 
# from Qualcomm, not Software Center:
libOmxCore.so
libplanedef.so

Renesas R-Car H3 Starter

/lib/dll/mmedia/omxil_video_decoder-rcarh3.so=omxil_video_decoder-rcarh3.so
/lib/dll/mmedia/omxil_video_encoder-rcarh3.so=omxil_video_encoder-rcarh3.so

# NOTE: These are here to work around the fact that the customer gets this lib 
# from Renesas, not Software Center:
libomxr_core.so.1
libomxr_utility.so.1
libomxr_uvcs_udf.so.1
libomxr_mc_vdcmn.so.1
libomxr_mc_vcmn.so.1
libomxr_mc_vecmn.so.1
libvspm.so.1
libmmngr.so.1
libomxr_cnvpfdp.so.1
libomxr_cnvosdep.so.1
libomxr_videoconverter.so.1