# Copyright 2014 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.

import("//build/config/chromecast_build.gni")
import("//build/config/headless_build.gni")

declare_args() {
  # Allows distributions to link pulseaudio directly (DT_NEEDED) instead of
  # using dlopen. This helps with automated detection of ABI mismatches and
  # prevents silent errors.
  link_pulseaudio = false

  # Enable usage of FFmpeg within the media library. Used for most software
  # based decoding, demuxing, and sometimes optimized FFTs. If disabled,
  # implementors must provide their own demuxers and decoders.
  media_use_ffmpeg = true

  # Enable usage of libvpx within the media library. Used for software based
  # decoding of VP9 and VP8A type content.
  media_use_libvpx = true

  # Neither Android nor iOS use ffmpeg, libvpx.
  if (is_android || is_ios) {
    media_use_ffmpeg = false
    media_use_libvpx = false
  }

  # Override to dynamically link the cras (ChromeOS audio) library.
  use_cras = false

  # Enables runtime selection of PulseAudio library.
  use_pulseaudio = false

  # Enables runtime selection of ALSA library for audio.
  use_alsa = false

  # Alsa should be used on non-Android, non-Mac POSIX systems, and Chromecast
  # builds for desktop Linux.
  if (is_posix && !is_headless && !is_android && !is_mac &&
      (!is_chromecast || target_cpu != "arm")) {
    use_alsa = true
    if (!use_cras) {
      use_pulseaudio = true
    }
  }

  # Use low-memory buffers on non-Android builds of Chromecast.
  use_low_memory_buffer = is_chromecast && !is_android

  # Enables the MPEG2-TS stream parser for use with Media Source. Disabled by
  # default (except on Chromecast) since it's not available on the normal Web
  # Platform and costs money.
  enable_mpeg2ts_stream_parser = is_chromecast

  # Enable HEVC/H265 demuxing. Actual decoding must be provided by the
  # platform. Enable by default for Chromecast.
  enable_hevc_demuxing = is_chromecast

  # Experiment to enable mojo media application: http://crbug.com/431776
  # Valid options are:
  # - "none": Do not use mojo media application.
  # - "browser": Use mojo media application hosted in the browser process.
  # - "gpu": Use mojo media application hosted in the gpu process.
  # - "utility": Use mojo media application hosted in the utility process.
  enable_mojo_media = "none"

  # TODO(GYP): This should be a platform define.
  is_openbsd = false
}
