media_switches.h 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347
  1. // Copyright (c) 2012 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. // Defines all the "media" command-line switches.
  5. #ifndef MEDIA_BASE_MEDIA_SWITCHES_H_
  6. #define MEDIA_BASE_MEDIA_SWITCHES_H_
  7. #include <string>
  8. #include "base/feature_list.h"
  9. #include "base/metrics/field_trial_params.h"
  10. #include "build/build_config.h"
  11. #include "build/chromeos_buildflags.h"
  12. #include "media/base/media_export.h"
  13. #include "media/media_buildflags.h"
  14. namespace base {
  15. class CommandLine;
  16. }
  17. namespace switches {
  18. MEDIA_EXPORT extern const char kAudioBufferSize[];
  19. MEDIA_EXPORT extern const char kAudioServiceQuitTimeoutMs[];
  20. MEDIA_EXPORT extern const char kAutoplayPolicy[];
  21. MEDIA_EXPORT extern const char kDisableAudioOutput[];
  22. MEDIA_EXPORT extern const char kFailAudioStreamCreation[];
  23. MEDIA_EXPORT extern const char kVideoThreads[];
  24. MEDIA_EXPORT extern const char kDisableBackgroundMediaSuspend[];
  25. MEDIA_EXPORT extern const char kReportVp9AsAnUnsupportedMimeType[];
  26. #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS) || BUILDFLAG(IS_FREEBSD) || \
  27. BUILDFLAG(IS_SOLARIS)
  28. MEDIA_EXPORT extern const char kAlsaInputDevice[];
  29. MEDIA_EXPORT extern const char kAlsaOutputDevice[];
  30. #endif
  31. #if BUILDFLAG(IS_WIN)
  32. MEDIA_EXPORT extern const char kEnableExclusiveAudio[];
  33. MEDIA_EXPORT extern const char kForceWaveAudio[];
  34. MEDIA_EXPORT extern const char kTrySupportedChannelLayouts[];
  35. MEDIA_EXPORT extern const char kWaveOutBuffers[];
  36. MEDIA_EXPORT extern const char kUseFakeAudioCaptureTimestamps[];
  37. #endif
  38. #if BUILDFLAG(IS_FUCHSIA)
  39. MEDIA_EXPORT extern const char kEnableProtectedVideoBuffers[];
  40. MEDIA_EXPORT extern const char kForceProtectedVideoOutputBuffers[];
  41. MEDIA_EXPORT extern const char kDisableAudioInput[];
  42. MEDIA_EXPORT extern const char kUseOverlaysForVideo[];
  43. MEDIA_EXPORT extern const char kAudioCapturerWithEchoCancellation[];
  44. #endif
  45. #if defined(USE_CRAS)
  46. MEDIA_EXPORT extern const char kUseCras[];
  47. #endif
  48. MEDIA_EXPORT extern const char
  49. kUnsafelyAllowProtectedMediaIdentifierForDomain[];
  50. MEDIA_EXPORT extern const char kUseFakeDeviceForMediaStream[];
  51. MEDIA_EXPORT extern const char kUseFileForFakeVideoCapture[];
  52. MEDIA_EXPORT extern const char kUseFileForFakeAudioCapture[];
  53. MEDIA_EXPORT extern const char kUseFakeMjpegDecodeAccelerator[];
  54. MEDIA_EXPORT extern const char kDisableAcceleratedMjpegDecode[];
  55. MEDIA_EXPORT extern const char kRequireAudioHardwareForTesting[];
  56. MEDIA_EXPORT extern const char kMuteAudio[];
  57. MEDIA_EXPORT extern const char kVideoUnderflowThresholdMs[];
  58. MEDIA_EXPORT extern const char kDisableRTCSmoothnessAlgorithm[];
  59. MEDIA_EXPORT extern const char kForceVideoOverlays[];
  60. MEDIA_EXPORT extern const char kMSEAudioBufferSizeLimitMb[];
  61. MEDIA_EXPORT extern const char kMSEVideoBufferSizeLimitMb[];
  62. MEDIA_EXPORT extern const char kClearKeyCdmPathForTesting[];
  63. MEDIA_EXPORT extern const char kOverrideEnabledCdmInterfaceVersion[];
  64. MEDIA_EXPORT extern const char kOverrideHardwareSecureCodecsForTesting[];
  65. MEDIA_EXPORT extern const char kEnableLiveCaptionPrefForTesting[];
  66. #if BUILDFLAG(IS_CHROMEOS)
  67. MEDIA_EXPORT extern const char kLacrosEnablePlatformHevc[];
  68. MEDIA_EXPORT extern const char kLacrosUseChromeosProtectedMedia[];
  69. MEDIA_EXPORT extern const char kLacrosUseChromeosProtectedAv1[];
  70. #endif // BUILDFLAG(IS_CHROMEOS)
  71. namespace autoplay {
  72. MEDIA_EXPORT extern const char kDocumentUserActivationRequiredPolicy[];
  73. MEDIA_EXPORT extern const char kNoUserGestureRequiredPolicy[];
  74. MEDIA_EXPORT extern const char kUserGestureRequiredPolicy[];
  75. } // namespace autoplay
  76. #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
  77. MEDIA_EXPORT extern const char kHardwareVideoDecodeFrameRate[];
  78. MEDIA_EXPORT extern const char kMaxChromeOSDecoderThreads[];
  79. #endif
  80. } // namespace switches
  81. namespace media {
  82. // All features in alphabetical order. The features should be documented
  83. // alongside the definition of their values in the .cc file.
  84. MEDIA_EXPORT extern const base::Feature kAudioFocusDuckFlash;
  85. MEDIA_EXPORT extern const base::Feature kAudioFocusLossSuspendMediaSession;
  86. MEDIA_EXPORT extern const base::Feature kAutoplayIgnoreWebAudio;
  87. MEDIA_EXPORT extern const base::Feature kAutoplayDisableSettings;
  88. MEDIA_EXPORT extern const base::Feature kBackgroundVideoPauseOptimization;
  89. MEDIA_EXPORT extern const base::Feature kBresenhamCadence;
  90. MEDIA_EXPORT extern const base::Feature kCdmHostVerification;
  91. MEDIA_EXPORT extern const base::Feature kCdmProcessSiteIsolation;
  92. #if BUILDFLAG(CHROME_WIDE_ECHO_CANCELLATION)
  93. MEDIA_EXPORT extern const base::Feature kChromeWideEchoCancellation;
  94. MEDIA_EXPORT extern const base::FeatureParam<int>
  95. kChromeWideEchoCancellationProcessingFifoSize;
  96. MEDIA_EXPORT extern const base::FeatureParam<bool>
  97. kChromeWideEchoCancellationMinimizeResampling;
  98. MEDIA_EXPORT extern const base::FeatureParam<double>
  99. kChromeWideEchoCancellationDynamicMixingTimeout;
  100. MEDIA_EXPORT extern const base::FeatureParam<bool>
  101. kChromeWideEchoCancellationAllowAllSampleRates;
  102. #endif
  103. MEDIA_EXPORT extern const base::Feature kD3D11VideoDecoderUseSharedHandle;
  104. MEDIA_EXPORT extern const base::Feature kEnableTabMuting;
  105. MEDIA_EXPORT extern const base::Feature kExposeSwDecodersToWebRTC;
  106. MEDIA_EXPORT extern const base::Feature kExternalClearKeyForTesting;
  107. MEDIA_EXPORT extern const base::Feature kFFmpegDecodeOpaqueVP8;
  108. MEDIA_EXPORT extern const base::Feature kFailUrlProvisionFetcherForTesting;
  109. MEDIA_EXPORT extern const base::Feature kFallbackAfterDecodeError;
  110. MEDIA_EXPORT extern const base::Feature kGav1VideoDecoder;
  111. MEDIA_EXPORT extern const base::Feature kGlobalMediaControls;
  112. MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsAutoDismiss;
  113. #if BUILDFLAG(IS_CHROMEOS)
  114. MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsForCast;
  115. #endif
  116. MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsForChromeOS;
  117. MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsPictureInPicture;
  118. MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsSeamlessTransfer;
  119. MEDIA_EXPORT extern const base::Feature kGlobalMediaControlsModernUI;
  120. MEDIA_EXPORT extern const base::Feature kHardwareMediaKeyHandling;
  121. MEDIA_EXPORT extern const base::Feature kHardwareSecureDecryption;
  122. MEDIA_EXPORT extern const base::Feature kHardwareSecureDecryptionExperiment;
  123. MEDIA_EXPORT extern const base::Feature kHardwareSecureDecryptionFallback;
  124. MEDIA_EXPORT extern const base::Feature kInternalMediaSession;
  125. MEDIA_EXPORT extern const base::Feature kKeepRvfcFrameAlive;
  126. MEDIA_EXPORT extern const base::Feature kKeyPressMonitoring;
  127. MEDIA_EXPORT extern const base::Feature kLiveCaption;
  128. MEDIA_EXPORT extern const base::Feature kLiveCaptionMultiLanguage;
  129. MEDIA_EXPORT extern const base::Feature kLiveCaptionSystemWideOnChromeOS;
  130. MEDIA_EXPORT extern const base::Feature kLowDelayVideoRenderingOnLiveStream;
  131. MEDIA_EXPORT extern const base::Feature kMediaCapabilitiesQueryGpuFactories;
  132. MEDIA_EXPORT extern const base::Feature kMediaCapabilitiesWithParameters;
  133. MEDIA_EXPORT extern const base::Feature kMediaCastOverlayButton;
  134. MEDIA_EXPORT extern const base::Feature kMediaEngagementBypassAutoplayPolicies;
  135. MEDIA_EXPORT extern const base::Feature kMediaEngagementHTTPSOnly;
  136. MEDIA_EXPORT extern const base::Feature kMediaLearningExperiment;
  137. MEDIA_EXPORT extern const base::Feature kMediaLearningFramework;
  138. MEDIA_EXPORT extern const base::Feature kMediaLearningSmoothnessExperiment;
  139. MEDIA_EXPORT extern const base::Feature kMediaOptimizer;
  140. MEDIA_EXPORT extern const base::Feature kMediaPowerExperiment;
  141. MEDIA_EXPORT extern const base::Feature kMediaSessionWebRTC;
  142. MEDIA_EXPORT extern const base::Feature kMemoryPressureBasedSourceBufferGC;
  143. MEDIA_EXPORT extern const base::Feature kMultiPlaneVideoCaptureSharedImages;
  144. MEDIA_EXPORT extern const base::Feature kOpenscreenCastStreamingSession;
  145. MEDIA_EXPORT extern const base::Feature kOverlayFullscreenVideo;
  146. MEDIA_EXPORT extern const base::Feature kPictureInPicture;
  147. MEDIA_EXPORT extern const base::Feature kPlatformAudioEncoder;
  148. #if BUILDFLAG(ENABLE_PLATFORM_HEVC)
  149. MEDIA_EXPORT extern const base::Feature kPlatformHEVCDecoderSupport;
  150. #endif // BUILDFLAG(ENABLE_PLATFORM_HEVC)
  151. MEDIA_EXPORT extern const base::Feature kPlaybackSpeedButton;
  152. MEDIA_EXPORT extern const base::Feature kPreloadMediaEngagementData;
  153. MEDIA_EXPORT extern const base::Feature kPreloadMetadataLazyLoad;
  154. MEDIA_EXPORT extern const base::Feature kPreloadMetadataSuspend;
  155. MEDIA_EXPORT extern const base::Feature kRecordMediaEngagementScores;
  156. MEDIA_EXPORT extern const base::Feature kRecordWebAudioEngagement;
  157. MEDIA_EXPORT extern const base::Feature kResumeBackgroundVideo;
  158. MEDIA_EXPORT extern const base::Feature kRevokeMediaSourceObjectURLOnAttach;
  159. MEDIA_EXPORT extern const base::Feature
  160. kShareThisTabInsteadButtonGetDisplayMedia;
  161. MEDIA_EXPORT extern const base::Feature
  162. kShareThisTabInsteadButtonGetDisplayMediaAudio;
  163. MEDIA_EXPORT extern const base::Feature kSpeakerChangeDetection;
  164. MEDIA_EXPORT extern const base::Feature kSpecCompliantCanPlayThrough;
  165. MEDIA_EXPORT extern const base::Feature kSuspendMutedAudio;
  166. MEDIA_EXPORT extern const base::Feature kUnifiedAutoplay;
  167. MEDIA_EXPORT extern const base::Feature kUseAndroidOverlayForSecureOnly;
  168. MEDIA_EXPORT extern const base::Feature kUseDecoderStreamForWebRTC;
  169. MEDIA_EXPORT extern const base::Feature kUseFakeDeviceForMediaStream;
  170. MEDIA_EXPORT extern const base::Feature kUseMediaHistoryStore;
  171. MEDIA_EXPORT extern const base::Feature kUseR16Texture;
  172. #if BUILDFLAG(IS_LINUX)
  173. MEDIA_EXPORT extern const base::Feature kVaapiVideoDecodeLinux;
  174. MEDIA_EXPORT extern const base::Feature kVaapiVideoEncodeLinux;
  175. MEDIA_EXPORT extern const base::Feature kVaapiIgnoreDriverChecks;
  176. #endif // BUILDFLAG(IS_LINUX)
  177. MEDIA_EXPORT extern const base::Feature kVaapiAV1Decoder;
  178. MEDIA_EXPORT extern const base::Feature kVaapiLowPowerEncoderGen9x;
  179. MEDIA_EXPORT extern const base::Feature kVaapiEnforceVideoMinMaxResolution;
  180. MEDIA_EXPORT extern const base::Feature kVaapiVideoMinResolutionForPerformance;
  181. MEDIA_EXPORT extern const base::Feature kVaapiVP8Encoder;
  182. MEDIA_EXPORT extern const base::Feature kVaapiVP9Encoder;
  183. MEDIA_EXPORT extern const base::Feature kGlobalVaapiLock;
  184. #if defined(ARCH_CPU_X86_FAMILY) && BUILDFLAG(IS_CHROMEOS)
  185. MEDIA_EXPORT extern const base::Feature kVaapiH264TemporalLayerHWEncoding;
  186. MEDIA_EXPORT extern const base::Feature kVaapiVp8TemporalLayerHWEncoding;
  187. MEDIA_EXPORT extern const base::Feature kVaapiVp9kSVCHWEncoding;
  188. #endif // defined(ARCH_CPU_X86_FAMILY) && BUILDFLAG(IS_CHROMEOS)
  189. MEDIA_EXPORT extern const base::Feature kVideoBlitColorAccuracy;
  190. MEDIA_EXPORT extern const base::Feature kVp9kSVCHWDecoding;
  191. MEDIA_EXPORT extern const base::Feature kWakeLockOptimisationHiddenMuted;
  192. MEDIA_EXPORT extern const base::Feature kWebContentsCaptureHiDpi;
  193. MEDIA_EXPORT extern const base::Feature kWebrtcMediaCapabilitiesParameters;
  194. MEDIA_EXPORT extern const base::Feature kResolutionBasedDecoderPriority;
  195. MEDIA_EXPORT extern const base::Feature kForceHardwareVideoDecoders;
  196. MEDIA_EXPORT extern const base::Feature kForceHardwareAudioDecoders;
  197. #if BUILDFLAG(IS_ANDROID)
  198. MEDIA_EXPORT extern const base::Feature kAllowNonSecureOverlays;
  199. MEDIA_EXPORT extern const base::Feature kMediaControlsExpandGesture;
  200. MEDIA_EXPORT extern const base::Feature kMediaDrmPersistentLicense;
  201. MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioning;
  202. MEDIA_EXPORT extern const base::Feature kMediaDrmPreprovisioningAtStartup;
  203. MEDIA_EXPORT extern const base::Feature kCanPlayHls;
  204. MEDIA_EXPORT extern const base::Feature kPictureInPictureAPI;
  205. MEDIA_EXPORT extern const base::Feature kHlsPlayer;
  206. MEDIA_EXPORT extern const base::Feature kRequestSystemAudioFocus;
  207. MEDIA_EXPORT extern const base::Feature kUseAudioLatencyFromHAL;
  208. MEDIA_EXPORT extern const base::Feature kUsePooledSharedImageVideoProvider;
  209. MEDIA_EXPORT extern const base::Feature kUseRealColorSpaceForAndroidVideo;
  210. #endif // BUILDFLAG(IS_ANDROID)
  211. #if BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
  212. MEDIA_EXPORT extern const base::Feature kChromeOSHWVBREncoding;
  213. MEDIA_EXPORT extern const base::Feature kUseChromeOSDirectVideoDecoder;
  214. MEDIA_EXPORT extern const base::Feature kLimitConcurrentDecoderInstances;
  215. #if defined(ARCH_CPU_ARM_FAMILY)
  216. MEDIA_EXPORT extern const base::Feature kPreferLibYuvImageProcessor;
  217. #endif // defined(ARCH_CPU_ARM_FAMILY)
  218. #if BUILDFLAG(IS_CHROMEOS)
  219. MEDIA_EXPORT extern const base::Feature kUseAlternateVideoDecoderImplementation;
  220. #endif // BUILDFLAG(IS_CHROMEOS)
  221. #endif // BUILDFLAG(USE_CHROMEOS_MEDIA_ACCELERATION)
  222. #if BUILDFLAG(IS_MAC)
  223. MEDIA_EXPORT extern const base::Feature kMultiPlaneVideoToolboxSharedImages;
  224. #endif // BUILDFLAG(IS_MAC)
  225. #if BUILDFLAG(IS_WIN)
  226. MEDIA_EXPORT extern const base::Feature kDelayCopyNV12Textures;
  227. MEDIA_EXPORT extern const base::Feature kDirectShowGetPhotoState;
  228. MEDIA_EXPORT extern const base::Feature kIncludeIRCamerasInDeviceEnumeration;
  229. MEDIA_EXPORT extern const base::Feature kMediaFoundationAV1Encoding;
  230. // For feature check of kMediaFoundationH264CbpEncoding at runtime,
  231. // please use IsMediaFoundationH264CbpEncodingEnabled() instead.
  232. MEDIA_EXPORT extern const base::Feature kMediaFoundationH264CbpEncoding;
  233. MEDIA_EXPORT extern const base::Feature kMediaFoundationVP9Encoding;
  234. MEDIA_EXPORT extern const base::Feature kMediaFoundationVideoCapture;
  235. MEDIA_EXPORT extern const base::Feature kMediaFoundationVP8Decoding;
  236. // For feature check of kMediaFoundationD3D11VideoCapture at runtime,
  237. // please use IsMediaFoundationD3D11VideoCaptureEnabled() instead.
  238. MEDIA_EXPORT extern const base::Feature kMediaFoundationD3D11VideoCapture;
  239. MEDIA_EXPORT extern const base::Feature kMediaFoundationClearPlayback;
  240. MEDIA_EXPORT extern const base::Feature kAllowMediaFoundationFrameServerMode;
  241. MEDIA_EXPORT extern const base::Feature kWasapiRawAudioCapture;
  242. MEDIA_EXPORT extern const base::Feature kD3D11Vp9kSVCHWDecoding;
  243. // Strategy affecting how Media Foundation Renderer determines its rendering
  244. // mode when used with clear video media. This strategy does not impact
  245. // protected media which must always use Direct Composition mode.
  246. enum class MediaFoundationClearRenderingStrategy {
  247. // The renderer will operate in Direct Composition mode (e.g. windowless
  248. // swapchain).
  249. kDirectComposition,
  250. // The renderer will operate in Frame Server mode.
  251. kFrameServer,
  252. // The renderer is allowed to switch between Direct Composition & Frame Server
  253. // mode at its discretion.
  254. kDynamic,
  255. };
  256. // Under this feature, a given MediaFoundationClearRenderingStrategy param is
  257. // used by the Media Foundation Renderer for Clear content scenarios.
  258. MEDIA_EXPORT extern const base::Feature kMediaFoundationClearRendering;
  259. MEDIA_EXPORT extern const base::FeatureParam<
  260. MediaFoundationClearRenderingStrategy>
  261. kMediaFoundationClearRenderingStrategyParam;
  262. #endif // BUILDFLAG(IS_WIN)
  263. #if BUILDFLAG(IS_CHROMEOS)
  264. MEDIA_EXPORT extern const base::Feature kDeprecateLowUsageCodecs;
  265. #endif
  266. #if BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  267. MEDIA_EXPORT extern const base::Feature kUseOutOfProcessVideoDecoding;
  268. #endif // BUILDFLAG(IS_LINUX) || BUILDFLAG(IS_CHROMEOS)
  269. // Based on a |command_line| and the current platform, returns the effective
  270. // autoplay policy. In other words, it will take into account the default policy
  271. // if none is specified via the command line and options passed for testing.
  272. // Returns one of the possible autoplay policy switches from the
  273. // switches::autoplay namespace.
  274. MEDIA_EXPORT std::string GetEffectiveAutoplayPolicy(
  275. const base::CommandLine& command_line);
  276. MEDIA_EXPORT bool IsChromeWideEchoCancellationEnabled();
  277. MEDIA_EXPORT bool IsHardwareSecureDecryptionEnabled();
  278. MEDIA_EXPORT bool IsVideoCaptureAcceleratedJpegDecodingEnabled();
  279. #if BUILDFLAG(IS_WIN)
  280. MEDIA_EXPORT bool IsMediaFoundationH264CbpEncodingEnabled();
  281. MEDIA_EXPORT bool IsMediaFoundationD3D11VideoCaptureEnabled();
  282. #endif
  283. enum class kCrosGlobalMediaControlsPinOptions {
  284. kPin,
  285. kNotPin,
  286. kHeuristic,
  287. };
  288. // Feature param used to force default pin/unpin for global media controls in
  289. // CrOS.
  290. MEDIA_EXPORT extern const base::FeatureParam<kCrosGlobalMediaControlsPinOptions>
  291. kCrosGlobalMediaControlsPinParam;
  292. } // namespace media
  293. #endif // MEDIA_BASE_MEDIA_SWITCHES_H_