This document records all changes made to the Starboard interface, up to the current version, but not including the experimental version. This file will be updated each time a new Starboard version is released. Each section in this file describes the changes made to the Starboard interface since the version previous to it.
NOTE: Starboard versions 3 and below are no longer supported.
A description of all changes currently in the experimental Starboard version can be found in the comments of the “Experimental Feature Defines” section of configuration.h.
In particular, the following methods are introduced:
SbMediaGetAudioBufferBudget
SbMediaGetBufferAlignment
SbMediaGetBufferAllocationUnit
SbMediaGetBufferGarbageCollectionDurationThreshold
SbMediaGetBufferPadding
SbMediaGetBufferStorageType
SbMediaGetInitialBufferCapacity
SbMediaGetMaxBufferCapacity
SbMediaGetProgressiveBufferBudget
SbMediaGetVideoBufferBudget
SbMediaIsBufferPoolAllocateOnDemand
SbMediaIsBufferUsingMemoryPool
Require compiling ‘player_filter_tests’ test target sources on all platforms, including audio_decoder_tests.cc
and video_decoder_test.cc
. For this Starboard API version and beyond, SB_HAS(PLAYER_FILTER_TESTS)
is true.
SbMediaTime, which is 90khz based, was used to represent timestamps and duration related to SbPlayer. As most of the platforms represent video related times in milliseconds or microseconds, this causes a lot of otherwise unnecessary conversion. Now all timestamps and duration related to SbPlayer are represented by SbTime directly.
Added two new functions SbPlayerGetMaximumNumberOfSamplesPerWrite()
and SbPlayerWriteSample2()
. The former allows implementation to specify the maximum numbers of samples that can be written using the latter at once. As it takes multiple thread context switches to call SbPlayerWriteSample2()
once, it can optimize performance on low end platforms by reducing the frequence of calling SbPlayerWriteSample2()
.
SbPlayerCreate()
now accepts an additional parameter, player_error_func
, that can be called when an error occurs to propagate the error to the application.
SbAccessibilityGetCaptionSettings()
and SbAccessibilitySetCaptionsEnabled()
along with a number of supporting structure definitions have been added to accessibility.h
. Platforms will need to define SB_HAS_CAPTIONS to 1 in order to enable the interface.
SbPlayer can be created with only a video track, without any accompanying audio track. The SbPlayer implementation must now be able to play back a sole video track.
SbPlayer can be created with only an audio track, without any accompanying video track. The SbPlayer implementation must now be able to play back a sole audio track.
Formerly, there were no tests ensuring that calling SbPlayerCreate()
multiple times (without calling SbPlayerDestroy()
in between) would not crash, and likewise no tests ensuring that calling SbAudioSinkCreate()
multiple times (without calling SbAudioSinkDestroy()
in between) would not crash. SbPlayerCreate()
may return kSbPlayerInvalid
if additional players are not supported. SbAudioSinkCreate()
may return kSbAudionSinkInvalid
if additional audio sinks are not supported.
Specifically, SbPlayerCreate()
, SbPlayerCreateWithUrl()
and SbDrmCreateSystem()
must result in invalid return values (e.g. kSbPlayerInvalid
or kSbDrmSystemInvalid
appropriately).
Specifically, the following changes have been made:
SbDrmSessionUpdateRequestFunc
and SbDrmSessionUpdatedFunc
with extra status and optional error message.SbDrmSessionUpdateRequestFunc
to support individualization, license renewal, and license release.Test code looking for its static input files should instead use the test
subdirectory in kSbSystemPathContentDirectory
.
This property was only ever used in platforms using in_app_dial
. The only usage of this system property was replaced with a self-contained mechanism.
SB_HAS_QUIRK_SUPPORT_INT16_AUDIO_SAMPLES
has to be defined to continue support int16 audio samples after this version.
This allows the SbPlayer implementation to notify the app that its playback capability has changed during a video playback. For example, the system may support vp9 decoding with an external GPU. When the external GPU is detached, this error code can signal the app to retry the playback, possibly with h264.
Platforms doesn't need to resume after suspend can return false in SbSystemSupportsResume()
to free up the resource used by resume after suspend. Please see the comment in system.h
for more details.
kSbKeyMicrophone
keycodekSbDecodeTargetFormat3Plane10BitYUVI420
Added kSbDecodeTargetFormat3Plane10BitYUVI420
to the SbDecodeTargetFormat
enum in order to support 10-bit YUV textures.
SbAudioSinkConsumeFramesFunc()
SbAudioSinkConsumeFramesFunc()
can now optionally accept an absolute timestamp parameter that indicates when the frames are consumed. Platforms that have the frames_consumed
updated asynchronously can have more accurate audio time reporting with this extra parameter. Please see the comment in audio_sink.h
for more details.
SbAtomic8
type and memory access functionsSbMemoryProtect()
SbMemoryProtect()
allows memory access permissions to be changed after they have been mapped with SbMemoryMap
.
timestamp
field to SbInputData
This allows platforms to provide more precise information on exactly when an input event was generated. Note that if SbSystemHasCapability(kSbSystemCapabilitySetsInputTimestamp)
returns false, the timestamp
field of SbInputData
should be ignored by applications.
kSbMemoryMapProtectReserved
flag.kSbMemoryMapProtectReserved
, which is identical to SbMemoryMapFlags(0)
, is introduced. When SbMemoryMap()
is called with kSbMemoryMapProtectReserved
, only virtual address space should be reserved for the mapped memory, and not actual physical memory.
An extra version agnostic ffmpeg dynamic dispatch layer is added in order to support multiple different versions of ffmpeg as may appear on user systems.
While common Cobalt code still targets EGL/GLES2, we now use Angle on linux-x64x11 builds to translate those calls to GLX/GL calls. Thus, from the perspective of the system, linux-x64x11 builds now appear to use GLX/GL. This change was made because GLX/GL was generally found to have better desktop support than EGL/GLES2. The logic for this is added in the Starboard enable_glx_via_angle.gypi file.
base.gypi
into cobalt_configuration.gypi
and base_configuration.gypi
Up until now, both Cobalt-specific build configuration options as well as application-independent Starboard build configuration options were mixed together within base.gypi. They have now been split apart, and the application independent options have been moved into Starboard under base_configuration.gypi. The Cobalt-specific options have been left in Cobalt, though renamed to cobalt_configuration.gypi
.
tizen
to contrib/tizen
.Please see contrib/README.md for description of expectations for contents in this directory.
SbMicrophoneInfo
.This should indicate the friendly name of the microphone type.
Instead of the single generic kSbSocketErrorFailed to indicate socket errors, the enum kSbSocketErrorConnectionReset has been introduced corresponding to various dropped TCP connection errors. This is particularly useful in identifying socket errors that can be retried.
Identical to OCAP's VK_INSTANT_REPLAY
SbPlayerCreateWithUrl()
, SbPlayerSetDrmSystem()
, SbPlayerOutputModeSupportedWithUrl()
For platform media players that rely on using a URL (like an m3u playlist URL) for playback, add SbPlayerCreateWithUrl()
which takes in a URL, no video or audio configs, and no DRM system. Allow the DRM system to be set on a running SbPlayer exactly once for SbPlayers created with a URL. Also, since URL players will not expose codec information, use a custom SbPlayerOutputModeSupportedWithUrl()
to query player output mode support.
kSbEventTypeWindowSizeChanged
An event indicating that an SbWindow
's size has changed. The event data is SbEventWindowSizeChangedData
, containing a SbWindow
and SbWindowSize
.
SbWindowShowOnScreenKeyboard()
, SbWindowHideOnScreenKeyboard()
, SbWindowFocusOnScreenKeyboard()
, SbWindowBlurOnScreenKeyboard()
, SbWindowIsOnScreenKeyboardShown()
, SbWindowSetOnScreenKeyboardKeepFocus()
These methods show, hide, focus, and blur a native on screen keyboard, determine if the on screen keyboard is shown, and set whether focus is kept to the on screen keyboard. The on screen keyboard also handles kSbInputEventTypeInput
, which use a new field input_text
of SbInputData
.
SbDecodeTargetInfoPlane
can specify color plane informationPreviously: Planes of type kSbDecodeTargetFormat2PlaneYUVNV12
were assumed to have the luma mapped to the alpha channel (GL_ALPHA
) and the chroma mapped to blue and alpha (GL_LUMINANCE_ALPHA
). However, some graphics systems require that luma is on GL_RED_EXT
and the chroma is on GL_RG_EXT
.
SbStorageRecord
sThis extends the SbStorage
interface with the ability to open named SbStorageRecord
s. Calling SbStorageOpenRecord
and SbStorageDeleteRecord
with a NULL
name
parameter provides access to the old “default” record.
This extends the SbInput
interface with some enum values and data members to allow mouse, wheel, and more generic pointer input.
SbMediaAudioHeader::audio_specific_config
will be a pointer instead of an array.
Removes SbTimeZoneGetDstName()
-- The Daylight Savings Time version of the time zone.
Changes SbTimeZoneGetName()
to be more flexible in what it is allowed to return.
SbDecodeTargetNumberOfPlanesForFormat
Adds the convenience inline function, SbDecodeTargetNumberOfPlanesForFormat() to starboard/decode_target.h
.
Adds the kSbEventTypePreload
event, and modifies the application state machine to utilize it.
Removes SbSystemPlatformErrorType
values specific to user status.
SbDecodeTarget
support for the UYVY (i.e. YUV 422) formatAdd support for UYVY decode targets (e.g. YUV 422) via the kSbDecodeTargetFormat1PlaneUYVY
enum.
This adds SbKey codes for:
kSbEventTypeLowMemory
Adds a new event type -- kSbEventTypeLowMemory
-- to allow a platform to signal that the application may soon be terminated due to low memory availability.
SbPlayerWriteSample()
const
is added to sample_buffers
and sample_buffer_sizes
parameters.
Add key_statuses_changed_callback
parameter to SbDrmCreateSystem()
to support MediaKeySession::keyStatuses and MediaKeySession::onkeystatuseschange.
Change the meaning of negative values for thumbstick position from bottom right to upper left.
Introduce starboard/speech_recognizer.h
. This newly-introduced starboard/speech_recognizer.h
adds the on-device speech recognizer feature.
Adds kSbSystemPropertyUserAgentAuxField
to the SbSystemPropertyId
enum to allow platform-specific User-Agent suffix.
starboard/input.h
The following unused enum values are removed from starboard/input.h
:
kSbInputDeviceTypeMicrophone
kSbInputDeviceTypeSpeechCommand
kSbInputEventTypeAudio
kSbInputEventTypeCommand
kSbInputEventTypeGrab
kSbInputEventTypeUngrab
Feature introducing support for decode-to-texture player output mode, and runtime player output mode selection and detection. In starboard/configuration.h
,
SB_IS_PLAYER_PUNCHED_OUT
, SB_IS_PLAYER_PRODUCING_TEXTURE
, and SB_IS_PLAYER_COMPOSITED
now no longer need to be defined (and should not be defined) by platforms. Instead, these capabilities are detected at runtime via SbPlayerOutputModeSupported()
.In starboard/player.h
,
SbPlayerOutputMode
is introduced.SbPlayerOutputModeSupported()
is introduced to let applications query for player output mode support.SbPlayerCreate()
now takes an additional parameter that specifies the desired output mode.SbPlayerSetBounds()
must now be defined on all platforms, even if they don't support punch out (in which case they can implement a stub).SbPlayerGetCompositionHandle()
is removed.SbPlayerGetTextureId()
is replaced by the new SbPlayerGetCurrentFrame()
, which returns a SbDecodeTarget
.In starboard/decode_target.h
,
SbDecodeTargetGetPlane()
and SbDecodeTargetGetFormat()
, SbDecodeTargetIsOpaque()
) are now replaced with SbDecodeTargetGetInfo()
.SbDecodeTargetInfo
structure is introduced and is the return value type of SbDecodeTargetGetInfo()
.SbDecdodeTargetCreate()
is now responsible for creating all its internal planes, and so its planes
parameter is replaced by width
and height
parameters.SbDecdodeTargetCreate()
has its EGL types (EGLDisplay
, EGLContext
) replaced by void*
types, so that decode_target.h
can avoid #including EGL/GLES2 headers.SbDecodeTargetDestroy()
is renamed to SbDecodeTargetRelease()
.In starboard/player.h
, starboard/image.h
and starboard/decode_target.h
,
SbDecodeTargetProvider
with SbDecodeTargetGraphicsContextProvider
.SbDecodeTarget
creation and destruction code on the application‘s renderer’s thread with the application‘s renderer’s EGLContext
current, Starboard implementations can now run arbitrary code on the application‘s renderer’s thread with its EGLContext
current.SbDecodeTargetCreate()
, SbDecodeTarget
creation is now an implementation detail to be dealt with in other Starboard API functions that create SbDecodeTargets
, like SbImageDecode()
or SbPlayerCreate()
.Support for setting the playback rate on an SbPlayer. This allows for control of the playback speed of video at runtime.
Change input.h
's SbInputVector
structure to contain float members instead of ints.
Deleted the vestigal struct SbUserApplicationTokenResults
from user.h
.
Enables the SbPlayer implementation to provide instructions to its user on how to store audio/video data. Encoded audio/video data is cached once being demuxed and may occupy a significant amount of memory. Enabling this feature allows the SbPlayer implementation to have better control on where encoded audio/video data is stored.
SbMediaCanPlayMimeAndKeySystem()
Use a unified implementation of SbMediaCanPlayMimeAndKeySystem()
based on SbMediaIsSupported()
, SbMediaIsAudioSupported()
, and SbMediaIsVideoSupported()
.
ticket
parameter to SbDrmGenerateSessionUpdateRequest()
Introduce ticket
parameter to SbDrmGenerateSessionUpdateRequest()
and SbDrmSessionUpdateRequestFunc
to allow distinguishing between callbacks from multiple concurrent calls.
SbSocketGetInterfaceAddress()
SbSocketGetInterfaceAddress()
is introduced to let applications find out which source IP address and the associated netmask will be used to connect to the destination. This is very important for multi-homed devices, and for certain conditions in IPv6.
starboard/cryptography.h
In newly-introduced starboard/cryptography.h
,
SbPlayerSetBounds()
Allow SbPlayerSetBounds
to use an extra parameter to indicate the z-index of the video so multiple overlapping videos can be rendered.
configuration.h
Media source buffer settings in Starboard.
starboard/accessibility.h
In particular, the functions SbAccessibilityGetDisplaySettings()
and SbAccessibilityGetTextToSpeechSettings()
have now been introduced.
Additionally, a new Starboard event, kSbEventTypeAccessiblitySettingsChanged
, has been defined in starboard/event.h
.
In starboard/media.h
, SbMediaColorMetadata
is now defined and it contains HDR metadata. The field SbMediaColorMetadata color_metadata
is now added to SbMediaVideoSampleInfo
.
kSbSystemDeviceTypeAndroidTV
to starboard/system.h
A new device type, kSbSystemDeviceTypeAndroidTV
, is added to starboard/system.h.
SbSpeechSynthesisSetLanguage()
SbSpeechSynthesisSetLanguage() has been deprecated.
Added SbSystemRequestPause()
, SbSystemRequestUnpause()
, SbSystemRequestSuspend()
.
SbSystemRequestSuspend()
in particular can be hooked into a platform's “hide” or “minimize” window functionality.
Added kSbSystemPathFontDirectory
and kSbSystemPathFontConfigurationDirectory
which can be optionally specified for platforms that want to provide system fonts to Starboard applications. The font and font configuration formats supported are application-specific.
SB_NORETURN
to starboard/configuration.h
.Added attribute macro SB_NORETURN
to allow functions to be marked as noreturn.
SbSystemBreakIntoDebugger
SB_NORETURN
.Add SB_NORETURN
to declaration of SbSystemBreakIntoDebugger
, to allow it to be used in a manner similar to abort
.