# 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/android/config.gni")
import("//build/config/android/rules.gni")
import("//build/config/arm.gni")
import("//build/config/ui.gni")
import("//media/media_options.gni")

assert(is_android)

source_set("android") {
  sources = [
    "access_unit_queue.cc",
    "access_unit_queue.h",
    "android_cdm_factory.cc",
    "android_cdm_factory.h",
    "audio_decoder_job.cc",
    "audio_decoder_job.h",
    "demuxer_android.h",
    "demuxer_stream_player_params.cc",
    "demuxer_stream_player_params.h",
    "media_client_android.cc",
    "media_client_android.h",
    "media_codec_audio_decoder.cc",
    "media_codec_audio_decoder.h",
    "media_codec_bridge.cc",
    "media_codec_bridge.h",
    "media_codec_decoder.cc",
    "media_codec_decoder.h",
    "media_codec_player.cc",
    "media_codec_player.h",
    "media_codec_util.cc",
    "media_codec_util.h",
    "media_codec_video_decoder.cc",
    "media_codec_video_decoder.h",
    "media_decoder_job.cc",
    "media_decoder_job.h",
    "media_drm_bridge.cc",
    "media_drm_bridge.h",
    "media_drm_bridge_delegate.cc",
    "media_drm_bridge_delegate.h",
    "media_jni_registrar.cc",
    "media_jni_registrar.h",
    "media_player_android.cc",
    "media_player_android.h",
    "media_player_bridge.cc",
    "media_player_bridge.h",
    "media_player_listener.cc",
    "media_player_listener.h",
    "media_player_manager.h",
    "media_resource_getter.cc",
    "media_resource_getter.h",
    "media_source_player.cc",
    "media_source_player.h",
    "media_statistics.cc",
    "media_statistics.h",
    "media_task_runner.cc",
    "media_task_runner.h",
    "media_url_interceptor.h",
    "provision_fetcher.h",
    "sdk_media_codec_bridge.cc",
    "sdk_media_codec_bridge.h",
    "video_decoder_job.cc",
    "video_decoder_job.h",
    "webaudio_media_codec_bridge.cc",
    "webaudio_media_codec_bridge.h",
    "webaudio_media_codec_info.h",
  ]
  configs += [
    "//media:media_config",
    "//media:media_implementation",
  ]
  deps = [
    ":media_jni_headers",
    "//media:shared_memory_support",
    "//third_party/widevine/cdm:version_h",
    "//ui/gl",
    "//url",
  ]
}

source_set("unittests") {
  testonly = true
  sources = [
    "access_unit_queue_unittest.cc",
    "media_codec_decoder_unittest.cc",
    "media_codec_player_unittest.cc",
    "media_drm_bridge_unittest.cc",
    "media_player_bridge_unittest.cc",
    "media_source_player_unittest.cc",
    "sdk_media_codec_bridge_unittest.cc",
    "test_data_factory.cc",
    "test_data_factory.h",
    "test_statistics.h",
  ]
  deps = [
    ":android",
    "//media/base:test_support",
    "//testing/gmock",
    "//testing/gtest",
    "//third_party/widevine/cdm:version_h",
  ]
  configs += [ "//media:media_config" ]
}

generate_jni("media_jni_headers") {
  sources = [
    "java/src/org/chromium/media/AudioManagerAndroid.java",
    "java/src/org/chromium/media/AudioRecordInput.java",
    "java/src/org/chromium/media/MediaCodecBridge.java",
    "java/src/org/chromium/media/MediaCodecUtil.java",
    "java/src/org/chromium/media/MediaDrmBridge.java",
    "java/src/org/chromium/media/MediaPlayerBridge.java",
    "java/src/org/chromium/media/MediaPlayerListener.java",
    "java/src/org/chromium/media/WebAudioMediaCodecBridge.java",
  ]
  jni_package = "media"
}

generate_jni("video_capture_jni_headers") {
  sources = [
    "java/src/org/chromium/media/VideoCapture.java",
    "java/src/org/chromium/media/VideoCaptureFactory.java",
  ]
  jni_package = "media"
}

java_cpp_enum("media_java_enums_srcjar") {
  sources = [
    "//media/capture/video/android/video_capture_device_android.h",
    "//media/capture/video/video_capture_device.h",
  ]
}

android_library("media_java") {
  deps = [
    "//base:base_java",
  ]

  srcjar_deps = [ ":media_java_enums_srcjar" ]

  DEPRECATED_java_in_dir = "java/src"
}
