# 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/features.gni")
import("//media/cdm/library_cdm/cdm_paths.gni")
import("//media/media_options.gni")

loadable_module("clear_key_cdm") {
  testonly = true
  output_dir = "$root_out_dir/$clearkey_cdm_path"
  output_name = "clearkeycdm"
  sources = [
    "cdm_file_adapter.cc",
    "cdm_file_adapter.h",
    "cdm_file_io_test.cc",
    "cdm_file_io_test.h",
    "cdm_video_decoder.cc",
    "cdm_video_decoder.h",
    "clear_key_cdm.cc",
    "clear_key_cdm.h",
    "clear_key_persistent_session_cdm.cc",
    "clear_key_persistent_session_cdm.h",
  ]

  defines = [ "CDM_IMPLEMENTATION" ]

  deps = [
    "//base",
    "//media",
    "//media:media_buildflags",
    "//media:shared_memory_support",  # For media::AudioBus.
    "//media/cdm:cdm_api",  # For content_decryption_module.h
    "//media/cdm/library_cdm:cdm_host_proxy",
    "//third_party/libyuv",
    "//url",
  ]

  if (!enable_library_cdms) {
    # cdm_type_conversion is not included via //media.
    deps += [ "//media/cdm:cdm_type_conversion" ]
  }

  # TODO(xhwang): Convert this to use media::FFmpegAudioDecoder.
  if (media_use_ffmpeg) {
    sources += [
      "ffmpeg_cdm_audio_decoder.cc",
      "ffmpeg_cdm_audio_decoder.h",
    ]
    defines += [ "CLEAR_KEY_CDM_USE_FFMPEG_DECODER" ]
    deps += [ "//third_party/ffmpeg" ]
  }
}
