27 #include <hybris/media/media_codec_layer.h> 29 #include <core/posix/signal.h> 41 const char *level = ::getenv(
"MH_LOG_LEVEL");
46 if (strcmp(level,
"trace") == 0)
47 severity = media::Logger::Severity::kTrace;
48 else if (strcmp(level,
"debug") == 0)
49 severity = media::Logger::Severity::kDebug;
50 else if (strcmp(level,
"info") == 0)
51 severity = media::Logger::Severity::kInfo;
52 else if (strcmp(level,
"warning") == 0)
53 severity = media::Logger::Severity::kWarning;
54 else if (strcmp(level,
"error") == 0)
55 severity = media::Logger::Severity::kError;
56 else if (strcmp(level,
"fatal") == 0)
57 severity = media::Logger::Severity::kFatal;
59 std::cerr <<
"Invalid log level \"" << level
60 <<
"\", setting to info. Valid options: [trace, debug, info, warning, error, fatal]." 64 std::cout <<
"Using default log level: info" << std::endl;
67 cout <<
"Log level: " << severity << std::endl;
76 case media::AVBackend::Backend::hybris:
78 decoding_service_init();
80 case media::AVBackend::Backend::mir:
83 case media::AVBackend::Backend::none:
84 MH_WARNING(
"No video backend selected. Video functionality won't work.");
87 MH_INFO(
"Invalid or no A/V backend specified, using \"hybris\" as a default.");
88 decoding_service_init();
95 auto trap = core::posix::trap_signals_for_all_subsequent_threads(
97 core::posix::Signal::sig_int,
98 core::posix::Signal::sig_term
101 trap->signal_raised().connect([trap](core::posix::Signal)
112 bool shutdown_requested{
false};
119 std::thread external_services_worker
124 [&shutdown_requested, &external_services]()
126 while (not shutdown_requested)
134 catch (
const std::exception& e)
136 std::cerr <<
"Error while executing the underlying io_service: " << e.what() << std::endl;
140 std::cerr <<
"Error while executing the underlying io_service." << std::endl;
147 auto player_store = std::make_shared<media::HashedKeyedPlayerStore>();
149 media::ServiceImplementation::Configuration service_config
151 std::make_shared<media::HashedKeyedPlayerStore>(),
155 auto impl = std::make_shared<media::ServiceImplementation>(media::ServiceImplementation::Configuration
161 auto skeleton = std::make_shared<media::ServiceSkeleton>(media::ServiceSkeleton::Configuration
169 std::thread service_worker
171 [&shutdown_requested, skeleton]()
173 while (not shutdown_requested)
179 catch (
const std::exception& e)
181 std::cerr <<
"Recoverable error while executing the service: " << e.what() << std::endl;
185 std::cerr <<
"Recoverable error while executing the service." << std::endl;
197 shutdown_requested =
true;
202 if (service_worker.joinable())
203 service_worker.join();
205 external_services.
stop();
207 if (external_services_worker.joinable())
208 external_services_worker.join();