client utilities for common high-level tasks such as audio playback,
recording and conversion; tone playback; video playback and record-
ing; MIDI playback; and automatic speech recognition.
The Image Conversion Library (ICL) provides a lightweight library,
based on active objects, which supports the decoding and encoding
of image files. A number of standard decoders and encoders are
supplied by Symbian OS and licensees typically provide additional
decoders and encoders as required by their platform.
The Onboard Camera API (ECam) allows an application to access and
control any camera hardware which is attached to the device. The API
provides functions to query the status of the camera, adjust camera
settings, and capture images and video.
For further information about multimedia on Symbian OS, please consult
[Rome and Wilcox 2008].
The integration of the Java ME multimedia framework with the underlying
Symbian OS multimedia subsystem is better discussed by multimedia
functionality areas. The integration of a JSR's functionality with the
underlying subsystem is always influenced by the native subsystem archi-
tecture. In the case of JSR-135, the generic and compact APIs use locators
to distinguish between devices and functionalities, and run-time casting
of controls to perform the actual multimedia operation. On Symbian OS,
the design of the native multimedia subsystem separates devices and
functionalities into different components of the multimedia subsystem
(e.g., CCamera is found in ECam and utility classes are found in MMF).
As a first step, the integration between the two ends requires inspecting
the given locator and instantiating the relevant multimedia component
objects and MMF utility classes. Each of the JSR-135 Player methods or
Control methods should be mapped to an equivalent native use case,
which might require triggering operations in a collection of the multimedia
subsystem's primitives. In some use cases, the Java ME subsystem is
required to perform some preparatory tasks before delegating the control
to the native multimedia subsystem.
As it turns out, there is still a certain degree of correlation between the
two ends. This is mainly because of the utility classes in the MMF, which
provide very high-level support for the common multimedia use cases
and classes with utility methods that trigger the execution of a whole
use case with a single method call; for example, you open an audio clip
using CMdaAudioPlayerUtility::OpenFileL() . (The opposite of
such correlation can be seen in the integration of JSR-180 SIP, discussed
in Section 11.5.6, which increases the integration complexity because it
requires additional adaptation layers to integrate the Java API onto the