The Cobalt team is thrilled to announce the Cobalt 21 LTS Stable release! This is a feature complete and stable release of Cobalt https://cobalt.googlesource.com/cobalt/+/refs/heads/21.lts.stable
Cobalt 21 LTS includes Starboard API version 12 for porters and its release version will support all features that are required for 2021 YouTube Certification. The code is available at Cobalt open source "21.lts.stable” branch. (Read branching/versioning documents for more information)
There are newly implemented features, improvements, and simplified code. We have outlined the changelist below with a brief description of Cobalt 21 LTS Stable and Starboard 12 changes. More detailed information can be found in the respective CHANGELOG.md files (Cobalt, Starboard).
NOTE: Red colored changes below indicate differences since 21 LTS RC.
Cobalt Changes (see cobalt/CHANGELOG.md for more information)
New Features / Support | Cobalt Evergreen (Automated Cobalt Updates) support now available allowing Cobalt to be updated without reintegration work Cobalt Devtools is updated to be based on Chrome m80 release, including ability to show asynchronous stack traces The default packaged font format is changed to WOFF2 from TTF, based on native WOFF2 support included in FreeType2 2.10.2 release which reduces size footprint Cobalt now supports right-to-left text layout for improved language support Cobalt now supports Lottie vector animations, based on Skia/Skottie native implementation Cobalt now supports a subset of Web Crypto API (SHA digests, AES-CTR stream cipher, and HMAC) Cobalt now supports CSS21 Collapsing Margins (W3 spec) Experimental Cobalt Docker based build support to simplify development environment creation and management Cobalt now supports system .ots format fonts in Android Cobalt now supports Crashpad in Linux, Raspberry Pi. Cobalt now supports h5vcc.settings.set("QUIC") to switch on/off QUIC. Cobalt media console is now available.
| Updates / Improvements | Performance Skia rendering library has been updated, based on Chrome m79 release Angle OpenGL ES rendering library has been updated, based on Chrome m80 release Network thread priority is raised from BACKGROUND to NORMAL ccache build acceleration has now been enabled by default
Security Media Other Fix potential undefined behavior during destruction of v8c_global_environment (Samsung) Remove unnecessary trace manager code (MediaTek) V8 defaults to using JIT on all platforms initialDeepLink unreliability has been fixed
| Deprecations | SpiderMonkey or MozJS is no longer supported, V8 is used instead. For platforms without JIT support, V8 can be configured in JIT-less mode Cobalt Web Extensions are no longer supported, use Platform Services instead Cobalt now supports ARMv7 and newer, MIPS is no longer supported Cobalt now requires compiler with at least C++14 support Minimum supported Starboard version is 10 Blitter API has been deprecated V8 Runtime snapshot is deprecated and not supported anymore
| Documentation | Evergreen (Automated Cobalt Updates) Starboard ABI Platform Services API Media Console Reference documentation markdown has been updated in the repository, and on https://cobalt.dev/, to reflect current interfaces, features, and deprecations. Refreshed top-level Cobalt README
|
Starboard Changes (starboard/CHANGELOG.md for more information)
New Features / Support | Platform-based UI navigation Added SbFileAtomicReplace API for ability to atomically replace the content of a file Added new kSbSystemPathStorageDirectory system property Added the PCLMULQDQ instruction feature for x86 architectures Refined SbPlayerCreate() so it accepts extra information regarding the audio and video stream |content_type| is added to SbMediaIsVideoSupported() and SbMediaIsAudioSupported() Introduced new function SbPlayerGetPreferredOutputMode() so the SbPlayer implementation can make better choices on the appropriate output mode. For example, it may choose to use decode to texture for video thumbnails, based on the |max_video_capabilities| parameter Introduced SbDrmEncryptionScheme and SbDrmEncryptionPattern to support encryption scheme (like “cbcs”) and encryption pattern Introduced SbDrmGetMetrics() to allow the SbDrm implementation to pass back metrics to the YouTube backend Introduce Starboard Application Binary Interface (SABI) Found in starboard/sabi SABI files are used to describe the configuration for targets such that two targets, built with the same SABI file and varying toolchains, have compatible Starboard APIs and ABIs.
With this define, we have: Moved architecture specific defines and configurations from configuration_public.h and *.gyp[i] files into SABI files. Included the appropriate SABI file in each platform configuration. Included the //starboard/sabi/sabi.gypi file in each platform configuration which consumes SABI file fields and defines a set of constants that are accessible when building. Provided a set of tests that ensure the toolchain being used produces an executable or shared library that conforms to the included SABI file.
Starboard configuration variables migrated from macros to extern const This means Cobalt must remove all references to these macros that would not translate well to constants, i.e. in compile time references or initializing arrays. Therefore, we needed to change the functionality of the function SbDirectoryGetNext in "starboard/directory.h". Because we do not want to use variable length arrays, we pass in a c-string and length to the function to achieve the same result as before when passing in a SbDirectoryEntry.
A platform will define the extern constants declared in "starboard/configuration_constants.h". The definitions are done in "starboard/<PLATFORM_PATH>/configuration_constants.cc".
The exact mapping between macros and extern variables can be found in "starboard/shared/starboard/configuration_constants_compatibility_defines.h" though the naming scheme is very nearly the same: the old SB_FOO macro will always become the constant kSbFoo.
Introduced kSbEventTypeAccessiblityTextToSpeechSettingsChanged event which should be sent when system TTS settings changed Introduced SbWindowGetScreenDiagonalInInches to provide screen diagonal inch size.SbWindowGetScreenDiagonalInInches
| New Requirements | OpenGL and Skia renderers now required on all platforms Compilation with IPv6 Captions API must be implemented Microphone API must be implemented Memory mapping API must be implemented On screen keyboard API must not be implemented (stubbed out) Screen Diagonal API must be implemented Speech recognizer API must be implemented Speech synthesis API must be implemented Time thread now API must be implemented
| Updates and Improvements | SbMutexAcquireTry now has undefined behavior when it is invoked on a mutex that has already been locked by the calling thread SbMutexDestroy now has undefined behavior when invoked on a locked mutex Improved player creation and output mode query capabilities Introduced the new type SbPlayerCreationParam that holds the common parameters used to create an SbPlayer() and to query for the output mode support Replaced SbPlayerOutputModeSupported by SbPlayerGetPreferredOutputMode so the SbPlayer implementation can explicitly indicate its preference on output mode, when all output modes are supported
Introduce error handling into reference SbAudioSinkPrivate Thread types now portable with stable ABI SbDrmSystem now supports cbcs encryption scheme (ISO/IEC 23001 part 7) Added link register to SbThreadContext GYP configuration variables cobalt extensions instead All GYP configuration variables to be members of the struct declared in "cobalt/extension/configuration.h". All members are function pointers that can be set for each platform, otherwise defaults will be used. These can be referenced through functions declared in "cobalt/configuration/configuration.h", which will use the extension API if available, but will otherwise fall back onto default values.
Make parsing MIME type float field independent from locale settings (Samsung)
| Deprecations | | New Tests | |
Contact Points
Please contact our support channels if you have any kind of problems, questions, or feedback. Public Issue Tracker: For Cobalt bug reports or feature requests. Mailing List: For feature discussions, schedules, and roadmaps. Technical Account Manager: For partner specific issues and technical support.
Thank you, On behalf of the Cobalt team |