# Copyright 2016 The Fuchsia 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/components.gni")
import("//build/config.gni")
import("//src/sys/core/build/core_shard.gni")

group("codec") {
  testonly = true
  deps = [
    ":codec_factory",
    ":codec_runner_sw_aac",
    ":codec_runner_sw_ffmpeg",
    ":codec_runner_sw_sbc",
    ":services",
    ":tests",
    "//src/media/codec/codecs",
    "//src/media/codec/factory",
  ]
}

group("tests") {
  testonly = true
  deps = [
    "//src/media/codec/codecs:tests",
    "//src/media/codec/examples:encode-camera",
    "//src/media/codec/examples:encode-file",
    "//src/media/codec/examples:h264_decoder_fuzzer_tests",
    "//src/media/codec/examples:use_h264_decoder_frame_num_gaps_tests",
    "//src/media/codec/examples:use_h264_decoder_secure_input_output_test",
    "//src/media/codec/examples:use_h264_decoder_secure_output_tests",
    "//src/media/codec/examples:use_h264_decoder_stream_switching_tests",
    "//src/media/codec/examples:use_h264_decoder_tests",
    "//src/media/codec/examples:use_h264_decoder_tests_x86",  # decode to
                                                              # HW-specific
                                                              # tiled format
    "//src/media/codec/examples:use_h264_sw_decoder_tests",
    "//src/media/codec/examples:use_media_decoder",
    "//src/media/codec/examples:use_vp9_decoder_24_output_frames_tests",
    "//src/media/codec/examples:use_vp9_decoder_secure_input_output_test",
    "//src/media/codec/examples:use_vp9_decoder_secure_output_tests",
    "//src/media/codec/examples:use_vp9_decoder_skip_first_frame_tests",
    "//src/media/codec/examples:use_vp9_decoder_stream_switching_tests",
    "//src/media/codec/examples:use_vp9_decoder_tests",
    "//src/media/codec/examples:use_vp9_decoder_tests_x86",  # decode to
                                                             # HW-specific tiled
                                                             # format
    "//src/media/codec/examples:vp9-decoder-conformance-test--bear-vp9",
    "//src/media/codec/examples:vp9_decoder_fuzzer_tests",
    "//src/media/codec/factory:codec_detect_hw_decode_test",
    "//src/media/codec/factory:codec_detect_hw_decode_test_v2",
    "//src/media/codec/factory:codec_factory_integration_test",
  ]
}

core_shard("codec_factory_shard") {
  shard_file = "factory/meta/codec_factory.core_shard.cml"
}

group("hw_dependent_tests") {
  testonly = true
  deps = [ "//src/media/codec/codecs:hw_dependent_tests" ]
}

group("services") {
  public_deps = [ "//src/media/codec/factory" ]
}

fuchsia_package("codec_factory") {
  deps = [ ":factory_with_sw_codecs" ]
}

# This package is only really expected to be used by the codec_factory package.
fuchsia_package_with_single_component("codec_runner_sw_aac") {
  manifest = "codecs/meta/codec_runner_sw_aac.cmx"
  deps = [ "//src/media/codec/codecs/sw/aac:codec_runner_sw_aac" ]
}

# This package is only really expected to be used by the codec_factory package.
fuchsia_package_with_single_component("codec_runner_sw_ffmpeg") {
  manifest = "codecs/meta/codec_runner_sw_ffmpeg.cmx"
  deps = [ "//src/media/codec/codecs/sw/ffmpeg:codec_runner_sw_ffmpeg" ]
}

# This package is only really expected to be used by the codec_factory package.
fuchsia_package_with_single_component("codec_runner_sw_sbc") {
  manifest = "codecs/meta/codec_runner_sw_sbc.cmx"
  deps = [ "//src/media/codec/codecs/sw/sbc:codec_runner_sw_sbc" ]
}

group("factory_with_sw_codecs") {
  deps = [
    ":sw_codecs",
    "//src/media/codec/factory:component",
    "//src/media/codec/factory:component_v2",
  ]
}

group("sw_codecs") {
  deps = [
    ":codec_runner_sw_aac_v2",
    ":codec_runner_sw_ffmpeg_v2",
    ":codec_runner_sw_sbc_v2",
  ]
}

fuchsia_component("codec_runner_sw_sbc_v2") {
  manifest = "codecs/meta/codec_runner_sw_sbc.cml"
  deps = [ "//src/media/codec/codecs/sw/sbc:codec_runner_sw_sbc" ]
  component_name = "codec_runner_sw_sbc"
}

fuchsia_component("codec_runner_sw_aac_v2") {
  manifest = "codecs/meta/codec_runner_sw_aac.cml"
  deps = [ "//src/media/codec/codecs/sw/aac:codec_runner_sw_aac" ]
  component_name = "codec_runner_sw_aac"
}

fuchsia_component("codec_runner_sw_ffmpeg_v2") {
  manifest = "codecs/meta/codec_runner_sw_ffmpeg.cml"
  deps = [ "//src/media/codec/codecs/sw/ffmpeg:codec_runner_sw_ffmpeg" ]
  component_name = "codec_runner_sw_ffmpeg"
}
