# 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: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"
    },
  ]
}
