Improve evegreen configuration Change-Id: I73594ab879915175e732d90c8d3ba53f2e74e9f2 Signed-off-by: Eugene Mutavchi <Ievgen_Mutavchi@comcast.com>
diff --git a/src/third_party/starboard/rdk/arm/gyp_configuration.gypi b/src/third_party/starboard/rdk/arm/gyp_configuration.gypi index 789d0be..93878ac 100644 --- a/src/third_party/starboard/rdk/arm/gyp_configuration.gypi +++ b/src/third_party/starboard/rdk/arm/gyp_configuration.gypi
@@ -40,7 +40,6 @@ 'sysroot%': '/', 'gl_type': 'system_gles2', 'has_ocdm%': '0', - 'enable_evergreen_lite%': '0', # This is to create cobalt shared library 'final_executable_type': 'shared_library', @@ -146,13 +145,6 @@ '-fno-exceptions', ], 'conditions': [ - ['<(enable_evergreen_lite)==1', { - 'variables': { - 'sb_evergreen_compatible': 1, - 'sb_evergreen_compatible_lite': 1, - 'sb_evergreen_compatible_libunwind': 1, - }, - }], ['cobalt_fastbuild==0', { 'compiler_flags_debug': [ # '-g',
diff --git a/src/third_party/starboard/rdk/arm/gyp_configuration.py b/src/third_party/starboard/rdk/arm/gyp_configuration.py index f40f33a..c189893 100644 --- a/src/third_party/starboard/rdk/arm/gyp_configuration.py +++ b/src/third_party/starboard/rdk/arm/gyp_configuration.py
@@ -66,7 +66,9 @@ 'clang': 0, 'sysroot': self.sysroot, 'has_ocdm': self.has_ocdm, - 'enable_evergreen_lite': self.enable_evergreen_lite, + 'sb_evergreen_compatible': self.enable_evergreen_lite, + 'sb_evergreen_compatible_lite': self.enable_evergreen_lite, + 'sb_evergreen_compatible_libunwind': self.enable_evergreen_lite, }) variables.update({ 'cobalt_font_package': 'limited',
diff --git a/src/third_party/starboard/rdk/arm/starboard_platform.gyp b/src/third_party/starboard/rdk/arm/starboard_platform.gyp index 42d1755..1e0a250 100644 --- a/src/third_party/starboard/rdk/arm/starboard_platform.gyp +++ b/src/third_party/starboard/rdk/arm/starboard_platform.gyp
@@ -77,7 +77,7 @@ '<(DEPTH)/third_party/llvm-project/libunwind/libunwind.gyp:unwind_starboard', ],}, ], - ], + ], 'cflags': [ '-Wno-reorder', '-Wno-sign-compare',
diff --git a/src/third_party/starboard/rdk/brcm/arm/gyp_configuration.gypi b/src/third_party/starboard/rdk/brcm/arm/gyp_configuration.gypi index 006e6ee..6ef0a51 100644 --- a/src/third_party/starboard/rdk/brcm/arm/gyp_configuration.gypi +++ b/src/third_party/starboard/rdk/brcm/arm/gyp_configuration.gypi
@@ -40,7 +40,6 @@ 'sysroot%': '/', 'gl_type': 'system_gles2', 'has_ocdm%': '0', - 'enable_evergreen_lite%': '0', # This is to create cobalt shared library 'final_executable_type': 'shared_library',
diff --git a/src/third_party/starboard/rdk/brcm/arm/gyp_configuration.py b/src/third_party/starboard/rdk/brcm/arm/gyp_configuration.py index 8282124..0d99905 100644 --- a/src/third_party/starboard/rdk/brcm/arm/gyp_configuration.py +++ b/src/third_party/starboard/rdk/brcm/arm/gyp_configuration.py
@@ -48,7 +48,6 @@ self.has_ocdm = os.environ.get('COBALT_HAS_OCDM', '0') self.sabi_json_path = 'starboard/sabi/arm/%s/sabi-v13.json' % (os.environ.get('COBALT_ARM_CALLCONVENTION', 'hardfp')) - self.enable_evergreen_lite = os.environ.get('COBALT_EVERGREEN_LITE', '0') self.sysroot = os.path.realpath(os.environ.get('PKG_CONFIG_SYSROOT_DIR', '/')) self.AppendApplicationConfigurationPath(os.path.dirname(__file__)) self.AppendApplicationConfigurationPath(os.path.abspath(os.path.join(os.path.dirname(__file__), "..", "..", "shared"))) @@ -66,7 +65,6 @@ 'clang': 0, 'sysroot': self.sysroot, 'has_ocdm': self.has_ocdm, - 'enable_evergeen_lite': self.enable_evergreen_lite, }) variables.update({ 'cobalt_font_package': 'limited',
diff --git a/src/third_party/starboard/rdk/shared/main_rdk.cc b/src/third_party/starboard/rdk/shared/main_rdk.cc index f491e80..ae68188 100644 --- a/src/third_party/starboard/rdk/shared/main_rdk.cc +++ b/src/third_party/starboard/rdk/shared/main_rdk.cc
@@ -39,6 +39,10 @@ #include "third_party/starboard/rdk/shared/application_rdk.h" +#if SB_IS(EVERGREEN_COMPATIBLE) +#include "third_party/crashpad/wrapper/wrapper.h" +#endif + namespace third_party { namespace starboard { namespace rdk { @@ -80,6 +84,10 @@ starboard::shared::signal::InstallSuspendSignalHandlers(); third_party::starboard::rdk::shared::InstallStopSignalHandlers(); +#if SB_IS(EVERGREEN_COMPATIBLE) + third_party::crashpad::wrapper::InstallCrashpadHandler(); +#endif + int result = 0; { third_party::starboard::rdk::shared::Application application;
diff --git a/src/third_party/starboard/rdk/shared/player/player_internal.cc b/src/third_party/starboard/rdk/shared/player/player_internal.cc index 5f3bdca..37f43db 100644 --- a/src/third_party/starboard/rdk/shared/player/player_internal.cc +++ b/src/third_party/starboard/rdk/shared/player/player_internal.cc
@@ -111,6 +111,22 @@ return flag->value; } +bool enableNativeAudio() { + static bool enable_native_audio = false; + static volatile gsize init = 0; + + if (g_once_init_enter (&init)) { + GstElementFactory* factory = gst_element_factory_find("brcmaudiosink"); + if (factory) { + gst_object_unref(GST_OBJECT(factory)); + enable_native_audio = true; + } + g_once_init_leave (&init, 1); + } + + return enable_native_audio; +} + G_BEGIN_DECLS #define GST_COBALT_TYPE_SRC (gst_cobalt_src_get_type()) @@ -1370,10 +1386,8 @@ unsigned flagAudio = getGstPlayFlag("audio"); unsigned flagVideo = getGstPlayFlag("video"); unsigned flagNativeVideo = getGstPlayFlag("native-video"); - unsigned flagNativeAudio = 0; -#if SB_HAS(NATIVE_AUDIO) - flagNativeAudio = getGstPlayFlag("native-audio"); -#endif + unsigned flagNativeAudio = enableNativeAudio() ? getGstPlayFlag("native-audio") : 0; + g_object_set(pipeline_, "flags", flagAudio | flagVideo | flagNativeVideo | flagNativeAudio, nullptr);
diff --git a/src/third_party/starboard/rdk/shared/sources.gypi b/src/third_party/starboard/rdk/shared/sources.gypi index e82cd0a..a3d9201 100644 --- a/src/third_party/starboard/rdk/shared/sources.gypi +++ b/src/third_party/starboard/rdk/shared/sources.gypi
@@ -459,6 +459,8 @@ '<(DEPTH)/starboard/shared/starboard/application.cc', '<(DEPTH)/starboard/shared/starboard/command_line.cc', '<(DEPTH)/starboard/shared/starboard/command_line.h', + '<(DEPTH)/starboard/shared/starboard/crash_handler.cc', + '<(DEPTH)/starboard/shared/starboard/crash_handler.h', '<(DEPTH)/starboard/shared/stub/cryptography_create_transformer.cc', '<(DEPTH)/starboard/shared/stub/cryptography_destroy_transformer.cc', '<(DEPTH)/starboard/shared/stub/cryptography_get_tag.cc',
diff --git a/src/third_party/starboard/rdk/shared/system/system_get_extensions.cc b/src/third_party/starboard/rdk/shared/system/system_get_extensions.cc index d7666a8..9eaa625 100644 --- a/src/third_party/starboard/rdk/shared/system/system_get_extensions.cc +++ b/src/third_party/starboard/rdk/shared/system/system_get_extensions.cc
@@ -33,10 +33,29 @@ #include <cstring> #include "cobalt/extension/configuration.h" +#include "cobalt/extension/crash_handler.h" #include "starboard/common/string.h" #include "third_party/starboard/rdk/shared/configuration.h" +#if SB_IS(EVERGREEN_COMPATIBLE) +#include "starboard/elf_loader/evergreen_config.h" +#include "starboard/shared/starboard/crash_handler.h" +#endif const void* SbSystemGetExtension(const char* name) { +#if SB_IS(EVERGREEN_COMPATIBLE) + const starboard::elf_loader::EvergreenConfig* evergreen_config = + starboard::elf_loader::EvergreenConfig::GetInstance(); + if (evergreen_config != NULL && + evergreen_config->custom_get_extension_ != NULL) { + const void* ext = evergreen_config->custom_get_extension_(name); + if (ext != NULL) { + return ext; + } + } + if (strcmp(name, kCobaltExtensionCrashHandlerName) == 0) { + return starboard::common::GetCrashHandlerApi(); + } +#endif if (strcmp(name, kCobaltExtensionConfigurationName) == 0) { return third_party::starboard::rdk::shared::GetConfigurationApi(); }
diff --git a/src/third_party/starboard/rdk/shared/system/system_get_path.cc b/src/third_party/starboard/rdk/shared/system/system_get_path.cc index c6c84a3..01b6e81 100644 --- a/src/third_party/starboard/rdk/shared/system/system_get_path.cc +++ b/src/third_party/starboard/rdk/shared/system/system_get_path.cc
@@ -29,13 +29,40 @@ #include "starboard/directory.h" #include "starboard/file.h" #include "starboard/user.h" +#if SB_IS(EVERGREEN_COMPATIBLE) +#include "starboard/elf_loader/evergreen_config.h" +#endif namespace { +#if SB_IS(EVERGREEN_COMPATIBLE) +// May override the content path if there is EvergreenConfig published. +// The override allows for switching to different content paths based +// on the Evergreen binary executed. +// Returns false if it failed. +bool GetEvergreenContentPathOverride(char* out_path, int path_size) { + const starboard::elf_loader::EvergreenConfig* evergreen_config = + starboard::elf_loader::EvergreenConfig::GetInstance(); + if (!evergreen_config) { + return true; + } + if (evergreen_config->content_path_.empty()) { + return true; + } + + if (starboard::strlcpy(out_path, evergreen_config->content_path_.c_str(), + path_size) >= path_size) { + return false; + } + return true; +} +#endif + bool GetContentDirectory(char* out_path, int path_size) { const char* paths = std::getenv("COBALT_CONTENT_DIR"); - if(paths){ // Treat the environment variable as PATH-like search variable + if (paths) { + // Treat the environment variable as PATH-like search variable std::stringstream pathsStream(paths); const std::string testFilePath = "/fonts/fonts.xml"; std::string contentPath; @@ -46,10 +73,14 @@ return (starboard::strlcat<char>(out_path, contentPath.c_str(), path_size) < path_size); } } +#if !SB_IS(EVERGREEN_COMPATIBLE) + // Don't return false and let EvergreenConfig override the path return false; - } else { // Default to /usr/share/content/data if COBALT_CONTENT_PATH is not set - return (starboard::strlcat<char>(out_path, "/usr/share/content/data", path_size) < path_size); +#endif } + + // Default to /usr/share/content/data if COBALT_CONTENT_PATH is not set + return (starboard::strlcat<char>(out_path, "/usr/share/content/data", path_size) < path_size); } // Gets the path to the cache directory, using the user's home directory. @@ -162,6 +193,11 @@ if (!GetContentDirectory(path, kSbFileMaxPath)){ return false; } +#if SB_IS(EVERGREEN_COMPATIBLE) + if (!GetEvergreenContentPathOverride(path, kSbFileMaxPath)) { + return false; + } +#endif break; case kSbSystemPathCacheDirectory: @@ -202,7 +238,17 @@ case kSbSystemPathFontConfigurationDirectory: case kSbSystemPathFontDirectory: +#if SB_IS(EVERGREEN_COMPATIBLE) + if (!GetContentDirectory(path, kSbFileMaxPath)) { + return false; + } + if (starboard::strlcat(path, "/fonts", kSbFileMaxPath) >= kSbFileMaxPath) { + return false; + } + break; +#else return false; +#endif default: SB_NOTIMPLEMENTED() << "SbSystemGetPath not implemented for " << path_id;