David Ghandehari | 6017030 | 2017-03-10 21:18:13 -0800 | [diff] [blame] | 1 | # Starboard Version Changelog |
| 2 | |
| 3 | This document records all changes made to the Starboard interface, up to the |
| 4 | current version, but not including the experimental version. This file will |
| 5 | be updated each time a new Starboard version is released. Each section in |
| 6 | this file describes the changes made to the Starboard interface since the |
| 7 | version previous to it. |
| 8 | |
Yavor Goulishev | 9c08e84 | 2020-04-29 14:03:33 -0700 | [diff] [blame] | 9 | **NOTE: Starboard versions 9 and below are no longer supported.** |
David Ghandehari | 0439324 | 2017-09-06 19:34:41 -0700 | [diff] [blame] | 10 | |
Andrew Top | 993f480 | 2018-06-22 19:08:23 -0700 | [diff] [blame] | 11 | ## Experimental Version |
| 12 | |
| 13 | A description of all changes currently in the experimental Starboard version |
| 14 | can be found in the comments of the "Experimental Feature Defines" section of |
| 15 | [configuration.h](configuration.h). |
| 16 | |
Kaido Kert | f585e26 | 2020-06-08 11:42:28 -0700 | [diff] [blame] | 17 | ## Version 12 |
| 18 | ### Add support for platform-based UI navigation. |
| 19 | |
| 20 | The system can be disabled by implementing the function |
| 21 | `SbUiNavGetInterface()` to return `false`. Platform-based UI navigation |
| 22 | allows the platform to receive feedback on where UI elements are located and |
| 23 | also lets the platform control what is selected and what the scroll |
| 24 | parameters are. |
| 25 | |
| 26 | NOTE: This API is not used in the production web app yet, so please use the |
| 27 | stub implementation for `SbUiNavGetInterface()` for now. |
| 28 | |
| 29 | ### Require the OpenGL and Skia renderers on all platforms. |
| 30 | |
| 31 | The system must implement `SbGetGlesInterface()` in `starboard/gles.h` |
| 32 | or use the provided stub implementation. |
| 33 | |
| 34 | This change also effectively deprecates the gyp variable |
| 35 | "enable_map_to_mesh" in favor of CobaltGraphicsExtensionApi function |
| 36 | `IsMapToMeshEnabled()` and the command line switch --disable_map_to_mesh. |
| 37 | Now, Cobalt will assume the platform supports map_to_mesh, so platforms that |
| 38 | do not will have to have return |false| from `IsMapToMeshEnabled()` or use |
| 39 | the provided command line switch. |
| 40 | |
| 41 | ### Require the captions API. |
| 42 | |
| 43 | The system must implement the captions functions in |
| 44 | `starboard/accessibility.h` or use the provided stub implementations. |
| 45 | System caption can be disabled by implementing the function |
| 46 | `SbAccessibilityGetCaptionSettings(SbAccessibilityCaptionSettings* |
| 47 | caption_settings)` to return false as the stub implementation does. |
| 48 | This change also deprecates the SB_HAS_CAPTIONS flag. |
| 49 | |
| 50 | ### Require compilation with IPv6. |
| 51 | |
| 52 | Cobalt must be able to determine at runtime if the system supports IPv6. |
| 53 | IPv6 can be disabled by defining SB_HAS_IPV6 to 0. |
| 54 | |
| 55 | ### Require the microphone API. |
| 56 | |
| 57 | The system must implement the microphone functions in |
| 58 | `starboard/microphone.h` or use the provided stub functions. |
| 59 | The microphone can be disabled by having `SbMicrophoneCreate()` return |
| 60 | |kSbMicrophoneInvalid|. |
| 61 | This change also deprecates the SB_HAS_MICROPHONE flag. |
| 62 | |
| 63 | ### Require the memory mapping API. |
| 64 | |
| 65 | The system must implement the memory mapping functions in |
| 66 | `starboard/memory.h` and `starboard/shared/dlmalloc.h` or use the provided |
| 67 | stub implementations. |
| 68 | This change also deprecates the SB_HAS_MMAP flag. |
| 69 | |
| 70 | ### Require the on screen keyboard API. |
| 71 | |
| 72 | The system must implement the on screen keyboard functions in |
| 73 | `starboard/window.h` or use the provided stub implementations. |
| 74 | The on screen keyboard can be disabled by implementing the function |
| 75 | `SbWindowOnScreenKeyboardIsSupported()` to return false |
| 76 | as the stub implementation does. |
| 77 | |
| 78 | ### Require speech recognizer API. |
| 79 | |
| 80 | The system must implement the functions in `starboard/speech_recognizer.h` |
| 81 | or use the provided stub implementations. |
| 82 | The speech recognizer can be disabled by implementing the function |
| 83 | `SbSpeechRecognizerIsSupported()` to return `false` as the stub |
| 84 | implementation does. |
| 85 | |
| 86 | ### Require the speech synthesis API. |
| 87 | |
| 88 | The system must implement the speech synthesis function in |
| 89 | `starboard/speech_synthesis.h` or use the provided stub implementations. |
| 90 | Speech synthesis can be disabled by implementing the function |
| 91 | `SbSpeechSynthesisIsSupported()` to return false as the stub |
| 92 | implementation does. |
| 93 | |
| 94 | ### Require the time thread now API. |
| 95 | |
| 96 | The system must implement the time thread now functions in |
| 97 | `starboard/time.h` or use the provided stub implementations. |
| 98 | Time thread now can be disabled by implementing the function |
| 99 | `SbTimeIsTimeThreadNowSupported()` to return false as the stub |
| 100 | implementation does. |
| 101 | |
| 102 | ### Add SbFileAtomicReplace API. |
| 103 | |
| 104 | Introduce the Starboard function SbFileAtomicReplace() to provide the ability |
| 105 | to atomically replace the content of a file. |
| 106 | |
| 107 | ### Introduces new system property kSbSystemPathStorageDirectory. |
| 108 | |
| 109 | Path to directory for permanent storage. Both read and write |
| 110 | access are required. |
| 111 | |
| 112 | ### Introduce Starboard Application Binary Interface (SABI) files. |
| 113 | |
| 114 | SABI files are used to describe the configuration for targets such that two |
| 115 | targets, built with the same SABI file and varying toolchains, have |
| 116 | compatible Starboard APIs and ABIs. |
| 117 | |
| 118 | With this define, we have: |
| 119 | 1) Moved architecture specific defines and configurations from |
| 120 | configuration_public.h and *.gyp[i] files into SABI files. |
| 121 | 2) Included the appropriate SABI file in each platform configuration. |
| 122 | 3) Included the //starboard/sabi/sabi.gypi file in each platform |
| 123 | configuration which consumes SABI file fields and defines a set of |
| 124 | constants that are accessible when building. |
| 125 | 4) Provided a set of tests that ensure the toolchain being used produces |
| 126 | an executable or shared library that conforms to the included SABI file. |
| 127 | |
| 128 | For further information on what is provided by SABI files, or how these |
| 129 | values are consumed, take a look at //starboard/sabi. |
| 130 | |
| 131 | ### Updates the API guarantees of SbMutexAcquireTry. |
| 132 | |
| 133 | SbMutexAcquireTry now has undefined behavior when it is invoked on a mutex |
| 134 | that has already been locked by the calling thread. In addition, since |
| 135 | SbMutexAcquireTry was used in SbMutexDestroy, SbMutexDestroy now has |
| 136 | undefined behavior when invoked on a locked mutex. |
| 137 | |
| 138 | ### Migrate the Starboard configuration variables from macros to extern consts. |
| 139 | |
| 140 | The migration allows Cobalt to make platform level decisions at runtime |
| 141 | instead of compile time which lets us create a more comprehensive Cobalt |
| 142 | binary. |
| 143 | |
| 144 | This means Cobalt must remove all references to these macros that would not |
| 145 | translate well to constants, i.e. in compile time references or initializing |
| 146 | arrays. Therefore, we needed to change the functionality of the function |
| 147 | `SbDirectoryGetNext` in "starboard/directory.h". Because we do not want to |
| 148 | use variable length arrays, we pass in a c-string and length to the function |
| 149 | to achieve the same result as before when passing in a `SbDirectoryEntry`. |
| 150 | |
| 151 | A platform will define the extern constants declared in |
| 152 | "starboard/configuration_constants.h". The definitions are done in |
| 153 | "starboard/<PLATFORM_PATH>/configuration_constants.cc". |
| 154 | |
| 155 | The exact mapping between macros and extern variables can be found in |
| 156 | "starboard/shared/starboard/configuration_constants_compatibility_defines.h" |
| 157 | though the naming scheme is very nearly the same: the old SB_FOO macro will |
| 158 | always become the constant kSbFoo. |
| 159 | |
| 160 | ### Improve player creation and output mode query. |
| 161 | |
| 162 | 1. Introduce the new type SbPlayerCreationParam that holds the common |
| 163 | parameters used to create an SbPlayer() and to query for the output mode |
| 164 | support. |
| 165 | |
| 166 | 2. Replace SbPlayerOutputModeSupported() by SbPlayerGetPreferredOutputMode() |
| 167 | so the SbPlayer implementation can explicitly indicate its preference on |
| 168 | output mode, when all output modes are supported. |
| 169 | For example, Cobalt used to always query for |kSbPlayerOutputModePunchOut| |
| 170 | first, without providing details about the video going to be played, and |
| 171 | not query for output modes if punch out is supported. The new interface |
| 172 | allows the implementation to fine tune its output mode. For example, it |
| 173 | may decide to use |kSbPlayerOutputModeDecodeToTexture| for low resolution |
| 174 | videos. |
| 175 | |
| 176 | ### Introduce error handling into reference SbAudioSinkPrivate. |
| 177 | |
| 178 | The implementation is in: |
| 179 | "starboard/shared/starboard/audio_sink/audio_sink_internal.*". |
| 180 | |
| 181 | ### Change the thread types to be portable with stable ABI. |
| 182 | |
| 183 | The following types were updated: |
| 184 | SbThread, SbMutex, SbOnce and SbConditionVariable. |
| 185 | |
| 186 | ### Introduce support of cbcs encryption scheme into SbDrmSystem. |
| 187 | |
| 188 | The definition follows ISO/IEC 23001 part 7. |
| 189 | |
| 190 | ### Add link register to SbThreadContext. |
| 191 | |
| 192 | ### Make GYP configuration variables cobalt extensions instead. |
| 193 | |
| 194 | This change moves all of the GYP configuration variables to be members of |
| 195 | the struct declared in "cobalt/extension/configuration.h". All members are |
| 196 | function pointers that can be set for each platform, otherwise defaults |
| 197 | will be used. These can be referenced through functions declared in |
| 198 | "cobalt/configuration/configuration.h", which will use the extension API if |
| 199 | available, but will otherwise fall back onto default values. |
| 200 | |
| 201 | ### Add the PCLMULQDQ instruction feature. |
| 202 | |
| 203 | The PCLMULQDQ was added to the Starboard CPU features interface |
| 204 | for x86 architectures. |
| 205 | |
| 206 | ### |content_type| is added to SbMediaIsVideoSupported() and |
| 207 | SbMediaIsAudioSupported(). |
| 208 | |
| 209 | ### Enables a test that checks that Opus is supported. |
| 210 | |
Kaido Kert | 8754903 | 2020-06-22 17:33:33 -0700 | [diff] [blame] | 211 | ### Add `kSbSystemPropertySystemIntegratorName` |
| 212 | |
| 213 | This change also deprecates `kSbSystemPropertyOriginalDesignManufacturerName`. |
| 214 | The `kSbSystemPropertySystemIntegratorName` value will represent the corporate |
| 215 | entity responsible for submitting the device to YouTube certification and for |
| 216 | the device maintenance/updates. |
| 217 | |
Kaido Kert | f585e26 | 2020-06-08 11:42:28 -0700 | [diff] [blame] | 218 | ### Deprecated the Blitter API. |
| 219 | |
| 220 | Blitter API is no longer supported on any platform. Use the OpenGL ES |
| 221 | interface instead. |
| 222 | |
| 223 | ### Deprecated the Crypto API. |
| 224 | |
| 225 | Crypto API is no longer supported on any platform. BoringSSL CPU |
| 226 | optimizations are used instead. |
| 227 | |
| 228 | ### Deprecate the SB_HAS_VIRTUAL_REGIONS flag as all platforms define it to 0. |
| 229 | |
| 230 | ### Deprecate the usage of SB_MUST_FREQUENTLY_FLIP_DISPLAY_BUFFER. |
| 231 | |
| 232 | ### Deprecated unused enums |kSbPlayerDecoderStateBufferFull| and |
| 233 | |kSbPlayerDecoderStateDestroyed|. |
| 234 | |
Kaido Kert | 03affbc | 2020-06-29 16:29:13 -0700 | [diff] [blame] | 235 | ### Deprecated the usage of |SbMediaIsOutputProtected()| and |
| 236 | |SbMediaSetOutputProtection()|. |
| 237 | |
| 238 | ### Deprecated the |SB_HAS_QUIRK_SEEK_TO_KEYFRAME| macro. |
| 239 | |
| 240 | ### Deprecated the |SB_HAS_ASYNC_AUDIO_FRAMES_REPORTING| macro. |
Kaido Kert | f585e26 | 2020-06-08 11:42:28 -0700 | [diff] [blame] | 241 | |
| 242 | ### Deprecated 'cobalt_minimum_frame_time_in_milliseconds'. |
| 243 | |
| 244 | The variable 'cobalt_minimum_frame_time_in_milliseconds' is deprecated |
| 245 | in favor of the usage of |
| 246 | 'CobaltExtensionGraphicsApi::GetMinimumFrameIntervalInMilliseconds' API. |
| 247 | The declaration of 'GetMinimumFrameIntervalInMilliseconds' can be found |
| 248 | in cobalt/renderer/backend/graphics_context.h |
| 249 | |
| 250 | ### Deprecate support for GLES3 features. |
| 251 | |
| 252 | ### Deprecate Web Extension support. |
| 253 | |
| 254 | The Platform Services API should be used |
| 255 | instead. See cobalt/doc/platform_services.md. |
| 256 | |
Kaido Kert | a3dd835 | 2020-06-09 07:58:18 -0700 | [diff] [blame] | 257 | ### Add event for text-to-speech settings changes. |
| 258 | |
| 259 | If the platform supports text-to-speech settings, it must use the new |
| 260 | kSbEventTypeAccessiblityTextToSpeechSettingsChanged event to inform the app |
| 261 | when those settings change. For older starboard versions, use |
| 262 | kSbEventTypeAccessiblitySettingsChanged instead. |
| 263 | |
Chad Duffin | ac9ac06 | 2019-07-23 10:06:45 -0700 | [diff] [blame] | 264 | ## Version 11 |
| 265 | |
| 266 | ### Add arguments to `SbMediaIsVideoSupported`. |
| 267 | |
| 268 | Add arguments for profile, level, bit depth, color primaries, |
| 269 | transfer characteristics, and matrix coefficients. See comments of |
| 270 | `SbMediaIsVideoSupported` for more details. Also, the function |
| 271 | `SbMediaIsTransferCharacteristicsSupported()` is no longer necessary and is |
| 272 | removed. |
| 273 | |
| 274 | ### Add support for AC3 audio. |
| 275 | |
| 276 | ### Replace `kSbMediaVideoCodecVp10` with `kSbMediaVideoCodecAv1`. |
| 277 | |
| 278 | ### Add a new enum `kSbPlayerErrorMax` in `starboard/player.h`. |
| 279 | |
| 280 | ### Add new parameter `max_video_capabilities` to `SbPlayerCreate()`. |
| 281 | |
| 282 | This gives the application the option to specify to the `SbPlayer` object |
| 283 | what the maximum video specifications will be, as a hint to the platform |
| 284 | on how to allocate resources for the `SbPlayer`. For example, if the player |
| 285 | will never exceed a 240p playback resolution, then a software decoder may |
| 286 | be initialized. Please see comment in `SbPlayerCreate()` for more details. |
| 287 | |
| 288 | ### Refactor `SbPlayerSampleInfo` to reuse `SbPlayerSampleInfo` in filter based player. |
| 289 | |
| 290 | Additionally, add audio and codec info for every sample. |
| 291 | |
| 292 | ### Introduce audio write duration |
| 293 | |
| 294 | Add a function `SbMediaSetAudioWriteDuration()` to `starboard/media.h` |
| 295 | which communicates to the platform how much audio will be sent to the |
| 296 | platform at a time. |
| 297 | |
| 298 | ### Introduce Cobalt Extensions using the SbSystemGetExtension interface. |
| 299 | |
| 300 | Cobalt extensions implement app & platform specific functionality. |
| 301 | |
| 302 | ### Deprecate unused function `SbSystemClearPlatformError()`. |
| 303 | |
| 304 | ### Deprecate `kSbEventTypeNetworkDisconnect` and `kSbEventTypeNetworkConnect`. |
| 305 | |
| 306 | ### Add support for using C++11 standard unordered maps and sets. |
| 307 | |
| 308 | By setting `SB_HAS_STD_UNORDERED_HASH` to 1, a platform can be configured |
| 309 | to use C++11 standard hash table implementations, specifically, using: |
| 310 | |
| 311 | - `std::unordered_map<>` for `base::hash_map<>` |
| 312 | - `std::unordered_multimap<>` for `base::hash_multimap<>` |
| 313 | - `std::unordered_set<>` for `base::hash_set<>` |
| 314 | - `std::unordered_multiset<>` for `base::hash_multiset<>` |
| 315 | |
| 316 | When `SB_HAS_STD_UNORDERED_HASH` is used, it is no longer necessary to |
| 317 | specify `SB_HAS_LONG_LONG_HASH`, `SB_HAS_STRING_HASH`, `SB_HAS_HASH_USING`, |
| 318 | `SB_HAS_HASH_VALUE`, `SB_HAS_HASH_WARNING`, `SB_HASH_MAP_INCLUDE`, |
| 319 | `SB_HASH_NAMESPACE`, or `SB_HASH_SET_INCLUDE`. |
| 320 | |
| 321 | ### Adds support for specifying screen diagonal length. |
| 322 | |
| 323 | When a platform knows its physical screen diagonal length, it can now provide |
| 324 | that data to the application via `SbWindowGetDiagonalSizeInInches()`. |
| 325 | |
| 326 | |
| 327 | ### Add support for device authentication system properties. |
| 328 | |
| 329 | The system properties `kSbSystemPropertyCertificationScope` and |
| 330 | `kSbSystemPropertyBase64EncodedCertificationSecret` have been added to enable |
| 331 | client apps to perform device authentication. The values will be queried by |
Andrew Top | f058e8f | 2019-08-19 15:14:57 -0700 | [diff] [blame] | 332 | calls to `SbSystemGetProperty()` in `starboard/system.h`. An alternative to |
| 333 | providing the `kSbSystemPropertyBase64EncodedCertificationSecret` property is |
| 334 | to implement the SbSystemSignWithCertificationSecretKey() function, enabling |
| 335 | the key to remain private and secure. |
Chad Duffin | ac9ac06 | 2019-07-23 10:06:45 -0700 | [diff] [blame] | 336 | |
| 337 | ### Add support for `SbThreadSampler` and `SbThreadContext`. |
| 338 | |
| 339 | This is helpful for enabling the implementation of sampling-based profilers. |
| 340 | A full implementation is only required if the new function |
| 341 | `SbThreadSamplerIsSupported()` returns `true`. A valid implementation will need |
| 342 | to implement the new `starboard/thread.h` functions, |
| 343 | `SbThreadContextGetPointer()`, `SbThreadSamplerIsSupported()`, |
| 344 | `SbThreadSamplerCreate()`, `SbThreadSamplerDestroy()`, |
| 345 | `SbThreadSamplerFreeze()`, `SbThreadSamplerThaw()`. |
| 346 | |
| 347 | ### Introduce functions for supplying suggestions to the on screen keyboard. |
| 348 | |
| 349 | A new API in `starboard/window.h` is introduced which declares the functions |
| 350 | `SbWindowUpdateOnScreenKeyboardSuggestions()` and |
| 351 | `SbWindowOnScreenKeyboardSuggestionsSupported()`. This is only relevant if |
| 352 | `SB_HAS(ON_SCREEN_KEYBOARD)`. |
| 353 | |
| 354 | ### Introduce new file error code `kSbFileErrorIO`. |
| 355 | |
| 356 | The new code, added to `starboard/file.h`, should match "EIO" on Posix |
| 357 | platforms. |
| 358 | |
| 359 | ### Move the definition of `FormatString()` from `starboard/string.h` to `starboard/format_string.h`. |
| 360 | |
| 361 | ### Make the decode target content region parameters floats instead of ints. |
| 362 | |
| 363 | The `SbDecodeTargetInfoContentRegion` struct is modified to accept `float`s |
| 364 | instead of `int`s. The primary motivation for this change is to make it so that |
| 365 | on platforms where it is difficult to obtain the width and height of a texture, |
| 366 | we can still correctly identify a precise fractional "normalized" content region |
| 367 | with the texture width and height set to 1. |
| 368 | |
| 369 | ### Add `kSbSystemPropertyOriginalDesignManufacturerName` enum value. |
| 370 | |
| 371 | This change also deprecates `kSbSystemPropertyNetworkOperatorName`. |
| 372 | The `kSbSystemPropertyOriginalDesignManufacturerName` value will represent |
| 373 | the corporate entity responsible for the manufacturing/assembly of the device |
| 374 | on behalf of the business entity owning the brand. |
| 375 | |
| 376 | ### Cross-platform helper Starboard definitions factored out of core interface. |
| 377 | |
| 378 | Cross-platform helper Starboard definitions refactored out of `/starboard/` |
| 379 | and into `/starboard/common/`. In order to more explicitly identify the core |
| 380 | Starboard API, multiple files, or parts of them, were moved into the static |
| 381 | library `/starboard/common/`. |
| 382 | |
| 383 | ### Log synchronization responsibility has been moved behind Starboard. |
| 384 | |
| 385 | The application is no longer responsible for synchronizing (e.g. via mutex) |
| 386 | calls to Starboard logging, this is now expected to be done by the Starboard |
| 387 | implementation. Logging functions, such as `SbLog` or `SbLogRaw`, must now have implementations that are thread-safe because they will be called from multiple |
| 388 | threads without external synchronization. |
| 389 | |
| 390 | Additionally, the minimum logging level is no longer set by the application, and |
| 391 | is instead set by grabbing the value as a command-line argument within |
| 392 | Starboard. |
| 393 | |
| 394 | ### Starboard now provides a EGL and GLES interface as a structure of pointers. |
| 395 | |
| 396 | To remove the direct inclusion of EGL and GLES system libraries throughout the |
| 397 | application, we need to move this dependency behind a Starboardized API. This |
| 398 | API can be found in `/starboard/egl.h` and `/starboard/gles.h`. |
| 399 | |
| 400 | ### Add interface for querying for CPU features, in `/starboard/cpu_features.h`. |
| 401 | |
| 402 | The new interface enables the platform to communicate to the application which |
| 403 | CPU features are available, which can enable the application to perform certain |
| 404 | CPU-specific optimizations (e.g. SIMD). |
| 405 | |
Andrew Top | f058e8f | 2019-08-19 15:14:57 -0700 | [diff] [blame] | 406 | ### Deprecated SB_HAS_AUDIO_SPECIFIC_CONFIG_AS_POINTER and |
| 407 | SB_HAS_DRM_KEY_STATUSES. |
| 408 | |
| 409 | These macros must always be set to 1 for Starboard version 6 or later. They will |
| 410 | be removed in a future version. Any implementation that supports Starboard |
| 411 | version 6 or later should be modified to no longer depend on these macros, with |
| 412 | the assumption that their values are always 1. |
| 413 | |
Chad Duffin | ac9ac06 | 2019-07-23 10:06:45 -0700 | [diff] [blame] | 414 | |
Andrew Top | 3f56eac | 2018-02-06 15:28:41 -0800 | [diff] [blame] | 415 | ## Version 10 |
| 416 | |
Andrew Top | 8414344 | 2018-07-12 10:44:23 -0700 | [diff] [blame] | 417 | ### Introduce functions to query at runtime for media buffer settings |
| 418 | |
| 419 | In particular, the following methods are introduced: |
| 420 | - `SbMediaGetAudioBufferBudget` |
| 421 | - `SbMediaGetBufferAlignment` |
| 422 | - `SbMediaGetBufferAllocationUnit` |
| 423 | - `SbMediaGetBufferGarbageCollectionDurationThreshold` |
| 424 | - `SbMediaGetBufferPadding` |
| 425 | - `SbMediaGetBufferStorageType` |
| 426 | - `SbMediaGetInitialBufferCapacity` |
| 427 | - `SbMediaGetMaxBufferCapacity` |
| 428 | - `SbMediaGetProgressiveBufferBudget` |
| 429 | - `SbMediaGetVideoBufferBudget` |
| 430 | - `SbMediaIsBufferPoolAllocateOnDemand` |
| 431 | - `SbMediaIsBufferUsingMemoryPool` |
| 432 | |
| 433 | ### Add support for player_filter_tests |
| 434 | |
| 435 | Require compiling 'player_filter_tests' test target sources on all |
| 436 | platforms, including `audio_decoder_tests.cc` and `video_decoder_test.cc`. For |
| 437 | this Starboard API version and beyond, `SB_HAS(PLAYER_FILTER_TESTS)` is true. |
| 438 | |
| 439 | ### Deprecate SbMediaTime for SbTime |
| 440 | |
| 441 | SbMediaTime, which is 90khz based, was used to represent timestamps and |
| 442 | duration related to SbPlayer. As most of the platforms represent video |
| 443 | related times in milliseconds or microseconds, this causes a lot of |
| 444 | otherwise unnecessary conversion. Now all timestamps and duration related |
| 445 | to SbPlayer are represented by SbTime directly. |
| 446 | |
| 447 | ### Refine sample writing of SbPlayer |
| 448 | |
| 449 | Added two new functions `SbPlayerGetMaximumNumberOfSamplesPerWrite()` and |
| 450 | `SbPlayerWriteSample2()`. The former allows implementation to specify the |
| 451 | maximum numbers of samples that can be written using the latter at once. |
| 452 | As it takes multiple thread context switches to call `SbPlayerWriteSample2()` |
| 453 | once, it can optimize performance on low end platforms by reducing the |
| 454 | frequence of calling `SbPlayerWriteSample2()`. |
| 455 | |
| 456 | ### Add support for player error messages |
| 457 | |
| 458 | `SbPlayerCreate()` now accepts an additional parameter, `player_error_func`, |
| 459 | that can be called when an error occurs to propagate the error to the |
| 460 | application. |
| 461 | |
| 462 | ### Add support for system-level closed caption settings |
| 463 | |
| 464 | `SbAccessibilityGetCaptionSettings()` and `SbAccessibilitySetCaptionsEnabled()` |
| 465 | along with a number of supporting structure definitions have been added |
| 466 | to `accessibility.h`. Platforms will need to define SB_HAS_CAPTIONS to 1 in |
| 467 | order to enable the interface. |
| 468 | |
| 469 | ### Add support for audioless video playback |
| 470 | |
| 471 | SbPlayer can be created with only a video track, without any accompanying |
| 472 | audio track. The SbPlayer implementation must now be able to play back |
| 473 | a sole video track. |
| 474 | |
| 475 | ### Add support for audio only video playback |
| 476 | |
| 477 | SbPlayer can be created with only an audio track, without any accompanying |
| 478 | video track. The SbPlayer implementation must now be able to play back |
| 479 | a sole audio track. |
| 480 | |
| 481 | ### Require support for creating multiple SbPlayer instances |
| 482 | |
| 483 | Formerly, there were no tests ensuring that calling `SbPlayerCreate()` multiple |
| 484 | times (without calling `SbPlayerDestroy()` in between) would not crash, and |
| 485 | likewise no tests ensuring that calling `SbAudioSinkCreate()` multiple times |
| 486 | (without calling `SbAudioSinkDestroy()` in between) would not crash. |
| 487 | `SbPlayerCreate()` may return `kSbPlayerInvalid` if additional players are not |
| 488 | supported. `SbAudioSinkCreate()` may return `kSbAudionSinkInvalid` if additional |
| 489 | audio sinks are not supported. |
| 490 | |
| 491 | ### Require stricter error handling on calls some SbPlayer* calls |
| 492 | |
| 493 | Specifically, `SbPlayerCreate()`, `SbPlayerCreateWithUrl()` and |
| 494 | `SbDrmCreateSystem()` must result in invalid return values (e.g. |
| 495 | `kSbPlayerInvalid` or `kSbDrmSystemInvalid` appropriately). |
| 496 | |
| 497 | ### Refine the DRM API |
| 498 | |
| 499 | Specifically, the following changes have been made: |
| 500 | 1. Add a callback to SbDrmCreateSystem that allows a DRM system to |
| 501 | signal that a DRM session has closed from the Starboard layer. |
| 502 | Previously, DRM sessions could only be closed from the application |
| 503 | layer. |
| 504 | 2. Allow calling `SbDrmSessionUpdateRequestFunc` and |
| 505 | `SbDrmSessionUpdatedFunc` with extra status and optional error message. |
| 506 | 3. Add request type parameter to `SbDrmSessionUpdateRequestFunc` to support |
| 507 | individualization, license renewal, and license release. |
| 508 | |
| 509 | ### Remove kSbSystemPathSourceDirectory |
| 510 | |
| 511 | Test code looking for its static input files should instead use the `test` |
| 512 | subdirectory in `kSbSystemPathContentDirectory`. |
| 513 | |
| 514 | ### Remove kSbSystemPropertyPlatformUuid |
| 515 | |
| 516 | This property was only ever used in platforms using `in_app_dial`. |
| 517 | The only usage of this system property was replaced with a |
| 518 | self-contained mechanism. |
| 519 | |
| 520 | ### Deprecate kSbMediaAudioSampleTypeInt16 |
| 521 | |
| 522 | `SB_HAS_QUIRK_SUPPORT_INT16_AUDIO_SAMPLES` has to be defined to continue |
| 523 | support int16 audio samples after this version. |
| 524 | |
Andrew Top | 8b6b16e | 2018-07-25 17:44:41 -0700 | [diff] [blame] | 525 | ### Add kSbPlayerErrorCapabilityChanged to SbPlayerError |
| 526 | |
| 527 | This allows the SbPlayer implementation to notify the app that its playback |
| 528 | capability has changed during a video playback. For example, the system may |
| 529 | support vp9 decoding with an external GPU. When the external GPU is detached, |
| 530 | this error code can signal the app to retry the playback, possibly with h264. |
| 531 | |
Andrew Top | 8414344 | 2018-07-12 10:44:23 -0700 | [diff] [blame] | 532 | ### Add support for SbSystemSupportsResume() |
| 533 | |
| 534 | Platforms doesn't need to resume after suspend can return false in |
| 535 | `SbSystemSupportsResume()` to free up the resource used by resume after |
| 536 | suspend. |
| 537 | Please see the comment in `system.h` for more details. |
| 538 | |
| 539 | ### Support the `kSbKeyMicrophone` keycode |
| 540 | |
| 541 | ### Add support for new decode target type, `kSbDecodeTargetFormat3Plane10BitYUVI420` |
| 542 | |
| 543 | Added `kSbDecodeTargetFormat3Plane10BitYUVI420` to the `SbDecodeTargetFormat` |
| 544 | enum in order to support 10-bit YUV textures. |
| 545 | |
| 546 | ### Optionally provide absolute timestamp to `SbAudioSinkConsumeFramesFunc()` |
| 547 | |
| 548 | `SbAudioSinkConsumeFramesFunc()` can now optionally accept an absolute |
| 549 | timestamp parameter that indicates when the frames are consumed. |
| 550 | Platforms that have the `frames_consumed` updated asynchronously can have |
| 551 | more accurate audio time reporting with this extra parameter. |
| 552 | Please see the comment in `audio_sink.h` for more details. |
| 553 | |
| 554 | ### Add support for the `SbAtomic8` type and memory access functions |
| 555 | |
| 556 | ### Introduce `SbMemoryProtect()` |
| 557 | |
| 558 | `SbMemoryProtect()` allows memory access permissions to be changed after they |
| 559 | have been mapped with `SbMemoryMap`. |
| 560 | |
| 561 | ### Add a `timestamp` field to `SbInputData` |
| 562 | |
| 563 | This allows platforms to provide more precise information on exactly when |
| 564 | an input event was generated. Note that if |
| 565 | `SbSystemHasCapability(kSbSystemCapabilitySetsInputTimestamp)` returns false, |
| 566 | the `timestamp` field of `SbInputData` should be ignored by applications. |
| 567 | |
| 568 | ### Introduces `kSbMemoryMapProtectReserved` flag. |
| 569 | |
| 570 | `kSbMemoryMapProtectReserved`, which is identical to `SbMemoryMapFlags(0)`, is |
| 571 | introduced. When `SbMemoryMap()` is called with `kSbMemoryMapProtectReserved`, |
| 572 | only virtual address space should be reserved for the mapped memory, and not |
| 573 | actual physical memory. |
| 574 | |
Mike Fleming | 3933d92 | 2018-04-02 10:53:08 -0700 | [diff] [blame] | 575 | ### Add support for multiple versions of ffmpeg |
| 576 | |
| 577 | An extra version agnostic ffmpeg dynamic dispatch layer is added in order to |
| 578 | support multiple different versions of ffmpeg as may appear on user systems. |
| 579 | |
| 580 | ### Make linux-x64x11 builds use GLX (via Angle) instead of EGL by default |
| 581 | |
| 582 | While common Cobalt code still targets EGL/GLES2, we now use Angle on |
| 583 | linux-x64x11 builds to translate those calls to GLX/GL calls. Thus, from |
| 584 | the perspective of the system, linux-x64x11 builds now appear to use |
| 585 | GLX/GL. This change was made because GLX/GL was generally found to have |
| 586 | better desktop support than EGL/GLES2. The logic for this is added in the |
| 587 | Starboard [enable_glx_via_angle.gypi](linux/x64x11/enable_glx_via_angle.gypi) |
| 588 | file. |
| 589 | |
| 590 | ### Split `base.gypi` into `cobalt_configuration.gypi` and `base_configuration.gypi` |
| 591 | |
| 592 | Up until now, both Cobalt-specific build configuration options as well as |
| 593 | application-independent Starboard build configuration options were mixed |
| 594 | together within base.gypi. They have now been split apart, and the application |
| 595 | independent options have been moved into Starboard under |
| 596 | [base_configuration.gypi](build/base_configuration.gypi). The Cobalt-specific |
| 597 | options have been left in Cobalt, though renamed to `cobalt_configuration.gypi`. |
| 598 | |
Andrew Top | 3f56eac | 2018-02-06 15:28:41 -0800 | [diff] [blame] | 599 | ### Moved `tizen` to `contrib/tizen`. |
| 600 | |
| 601 | Please see [contrib/README.md](contrib/README.md) for description of |
| 602 | expectations for contents in this directory. |