// Copyright 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "media/base/media.h" #include "base/command_line.h" #include "base/macros.h" #include "base/metrics/field_trial.h" #include "base/trace_event/trace_event.h" #include "media/base/media_switches.h" #include "third_party/libyuv/include/libyuv.h" #if defined(OS_ANDROID) #include "base/android/build_info.h" #include "media/base/android/media_codec_util.h" #endif #if !defined(MEDIA_DISABLE_FFMPEG) #include "media/ffmpeg/ffmpeg_common.h" #endif namespace media { // Media must only be initialized once; use a thread-safe static to do this. class MediaInitializer { public: MediaInitializer() { TRACE_EVENT_WARMUP_CATEGORY("audio"); TRACE_EVENT_WARMUP_CATEGORY("media"); libyuv::InitCpuFlags(); #if !defined(MEDIA_DISABLE_FFMPEG) // Initialize CPU flags outside of the sandbox as this may query /proc for // details on the current CPU for NEON, VFP, etc optimizations. av_get_cpu_flags(); // Disable logging as it interferes with layout tests. av_log_set_level(AV_LOG_QUIET); #if defined(ALLOCATOR_SHIM) // Remove allocation limit from ffmpeg, so calls go down to shim layer. av_max_alloc(0); #endif // defined(ALLOCATOR_SHIM) #endif // !defined(MEDIA_DISABLE_FFMPEG) } #if defined(OS_ANDROID) void enable_platform_decoder_support() { has_platform_decoder_support_ = true; } bool has_platform_decoder_support() const { return has_platform_decoder_support_; } #endif // defined(OS_ANDROID) private: ~MediaInitializer() = delete; #if defined(OS_ANDROID) bool has_platform_decoder_support_ = false; #endif // defined(OS_ANDROID) DISALLOW_COPY_AND_ASSIGN(MediaInitializer); }; static MediaInitializer* GetMediaInstance() { static MediaInitializer* instance = new MediaInitializer(); return instance; } void InitializeMediaLibrary() { GetMediaInstance(); } #if defined(OS_ANDROID) void EnablePlatformDecoderSupport() { GetMediaInstance()->enable_platform_decoder_support(); } bool HasPlatformDecoderSupport() { return GetMediaInstance()->has_platform_decoder_support(); } bool PlatformHasOpusSupport() { return base::android::BuildInfo::GetInstance()->sdk_int() >= 21; } #endif // defined(OS_ANDROID) } // namespace media