# 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/package.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_test",
    "//src/media/codec/examples:use-vp9-decoder-stream-switching-test",
    "//src/media/codec/examples:use_h264_decoder_secure_input_output_test",
    "//src/media/codec/examples:use_h264_decoder_secure_output_test",
    "//src/media/codec/examples:use_h264_decoder_stream_switching_test",
    "//src/media/codec/examples:use_h264_decoder_test",
    "//src/media/codec/examples:use_media_decoder",
    "//src/media/codec/examples:use_vp9_decoder_24_output_frames_test",
    "//src/media/codec/examples:use_vp9_decoder_secure_input_output_test",
    "//src/media/codec/examples:use_vp9_decoder_secure_output_test",
    "//src/media/codec/examples:use_vp9_decoder_secure_output_test",
    "//src/media/codec/examples:use_vp9_decoder_skip_first_frame_test",
    "//src/media/codec/examples:use_vp9_decoder_skip_first_frame_test",
    "//src/media/codec/examples:use_vp9_decoder_test",
    "//src/media/codec/examples:vp9-decoder-conformance-test--bear-vp9",
    "//src/media/codec/examples:vp9_decoder_fuzzer_test",
    "//src/media/codec/examples:vp9_decoder_fuzzer_test",
    "//src/media/codec/factory:codec_detect_hw_decode_test",
    "//src/media/codec/factory:codec_detect_hw_encode_test",
  ]
}

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

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

package("codec_factory") {
  deps = [ "//src/media/codec/factory" ]

  binaries = [
    {
      name = "codec_factory"
    },
  ]

  meta = [
    {
      path = rebase_path("factory/meta/codec_factory.cmx")
      dest = "codec_factory.cmx"
    },
  ]
}

# This package is only really expected to be used by the codec_factory package.
package("codec_runner_sw_aac") {
  meta = [
    {
      path = rebase_path("codecs/meta/codec_runner_sw_aac.cmx")
      dest = "codec_runner_sw_aac.cmx"
    },
  ]

  deps = [ "//src/media/codec/codecs/sw/aac:codec_runner_sw_aac" ]

  binaries = [
    {
      name = "codec_runner_sw_aac"
    },
  ]
}

# This package is only really expected to be used by the codec_factory package.
package("codec_runner_sw_ffmpeg") {
  meta = [
    {
      path = rebase_path("codecs/meta/codec_runner_sw_ffmpeg.cmx")
      dest = "codec_runner_sw_ffmpeg.cmx"
    },
  ]

  deps = [ "//src/media/codec/codecs/sw/ffmpeg:codec_runner_sw_ffmpeg" ]

  binaries = [
    {
      name = "codec_runner_sw_ffmpeg"
    },
  ]
}

# This package is only really expected to be used by the codec_factory package.
package("codec_runner_sw_sbc") {
  meta = [
    {
      path = rebase_path("codecs/meta/codec_runner_sw_sbc.cmx")
      dest = "codec_runner_sw_sbc.cmx"
    },
  ]

  deps = [ "//src/media/codec/codecs/sw/sbc:codec_runner_sw_sbc" ]

  binaries = [
    {
      name = "codec_runner_sw_sbc"
    },
  ]
}
