# Copyright (c) 2014 The WebRTC project authors. All Rights Reserved.
#
# Use of this source code is governed by a BSD-style license
# that can be found in the LICENSE file in the root of the source
# tree. An additional intellectual property rights grant can be found
# in the file PATENTS.  All contributing project authors may
# be found in the AUTHORS file in the root of the source tree.

import("//third_party/protobuf/proto_library.gni")
import("../webrtc.gni")

group("rtc_tools") {
  # This target shall build all targets in tools/.
  testonly = true

  deps = [
    ":command_line_parser",
    ":frame_analyzer",
    ":video_file_reader",
    ":video_quality_analysis",
  ]
  if (!build_with_chromium) {
    deps += [
      ":frame_editor",
      ":psnr_ssim_analyzer",
      ":rgba_to_i420_converter",
    ]
    if (rtc_enable_protobuf) {
      deps += [ ":chart_proto" ]
    }
  }

  if (rtc_include_tests) {
    deps += [
      ":activity_metric",
      ":tools_unittests",
    ]
    if (rtc_enable_protobuf) {
      if (!build_with_chromium) {
        deps += [ ":event_log_visualizer" ]
      }
      deps += [
        ":rtp_analyzer",
        ":unpack_aecdump",
        "network_tester",
      ]
    }
  }
}

rtc_static_library("command_line_parser") {
  sources = [
    "simple_command_line_parser.cc",
    "simple_command_line_parser.h",
  ]
  deps = [
    "../rtc_base:gtest_prod",
    "../rtc_base:rtc_base_approved",
  ]
}

rtc_static_library("video_file_reader") {
  sources = [
    "video_file_reader.cc",
    "video_file_reader.h",
  ]
  deps = [
    "../api/video:video_frame",
    "../api/video:video_frame_i420",
    "../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_static_library("video_file_writer") {
  sources = [
    "video_file_writer.cc",
    "video_file_writer.h",
  ]
  deps = [
    ":video_file_reader",
    "../api/video:video_frame",
    "../api/video:video_frame_i420",
    "../rtc_base:rtc_base_approved",
    "//third_party/abseil-cpp/absl/types:optional",
  ]
}

rtc_static_library("video_quality_analysis") {
  sources = [
    "frame_analyzer/linear_least_squares.cc",
    "frame_analyzer/linear_least_squares.h",
    "frame_analyzer/video_color_aligner.cc",
    "frame_analyzer/video_color_aligner.h",
    "frame_analyzer/video_quality_analysis.cc",
    "frame_analyzer/video_quality_analysis.h",
    "frame_analyzer/video_temporal_aligner.cc",
    "frame_analyzer/video_temporal_aligner.h",
  ]
  deps = [
    ":video_file_reader",
    "../api:array_view",
    "../api/video:video_frame_i420",
    "../common_video",
    "../rtc_base:checks",
    "../rtc_base:rtc_base_approved",
    "../test:perf_test",
    "//third_party/abseil-cpp/absl/types:optional",
    "//third_party/libyuv",
  ]
}

rtc_executable("frame_analyzer") {
  visibility = [ "*" ]
  sources = [
    "frame_analyzer/frame_analyzer.cc",
  ]

  deps = [
    ":command_line_parser",
    ":video_file_reader",
    ":video_file_writer",
    ":video_quality_analysis",
    "../rtc_base:stringutils",
    "../test:perf_test",
  ]
}

if (!build_with_chromium && !build_with_mozilla) {
  action("frame_analyzer_host") {
    script = "//tools_webrtc/executable_host_build.py"
    outputs = [
      "${root_out_dir}/frame_analyzer_host",
    ]
    args = [
      "--executable_name",
      "frame_analyzer",
    ]
  }
}

# Only expose the targets needed by Chromium (e.g. frame_analyzer) to avoid
# building a lot of redundant code as part of Chromium builds.
if (!build_with_chromium) {
  rtc_executable("psnr_ssim_analyzer") {
    sources = [
      "psnr_ssim_analyzer/psnr_ssim_analyzer.cc",
    ]

    deps = [
      ":command_line_parser",
      ":video_file_reader",
      ":video_quality_analysis",
    ]
  }

  rtc_static_library("reference_less_video_analysis_lib") {
    sources = [
      "frame_analyzer/reference_less_video_analysis_lib.cc",
      "frame_analyzer/reference_less_video_analysis_lib.h",
    ]

    deps = [
      ":video_file_reader",
      ":video_quality_analysis",
    ]
  }

  rtc_executable("reference_less_video_analysis") {
    sources = [
      "frame_analyzer/reference_less_video_analysis.cc",
    ]

    deps = [
      ":command_line_parser",
      ":reference_less_video_analysis_lib",
    ]
  }

  rtc_executable("rgba_to_i420_converter") {
    visibility = [ "*" ]
    sources = [
      "converter/converter.cc",
      "converter/converter.h",
      "converter/rgba_to_i420_converter.cc",
    ]

    deps = [
      ":command_line_parser",
      "../common_video",
      "//third_party/libyuv",
    ]
  }

  rtc_static_library("frame_editing_lib") {
    sources = [
      "frame_editing/frame_editing_lib.cc",
      "frame_editing/frame_editing_lib.h",
    ]

    deps = [
      "..:webrtc_common",
      "../common_video",
    ]
  }

  rtc_executable("frame_editor") {
    sources = [
      "frame_editing/frame_editing.cc",
    ]

    deps = [
      ":command_line_parser",
      ":frame_editing_lib",
    ]
  }

  if (rtc_enable_protobuf) {
    proto_library("chart_proto") {
      sources = [
        "event_log_visualizer/chart.proto",
      ]
      proto_out_dir = "rtc_tools/event_log_visualizer"
    }

    rtc_static_library("event_log_visualizer_utils") {
      visibility = [ "*" ]
      allow_poison = [ "audio_codecs" ]  # TODO(bugs.webrtc.org/8396): Remove.
      sources = [
        "event_log_visualizer/analyzer.cc",
        "event_log_visualizer/analyzer.h",
        "event_log_visualizer/plot_base.cc",
        "event_log_visualizer/plot_base.h",
        "event_log_visualizer/plot_protobuf.cc",
        "event_log_visualizer/plot_protobuf.h",
        "event_log_visualizer/plot_python.cc",
        "event_log_visualizer/plot_python.h",
        "event_log_visualizer/triage_notifications.h",
      ]
      if (!build_with_chromium && is_clang) {
        # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
        suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
      }
      defines = [ "ENABLE_RTC_EVENT_LOG" ]
      deps = [
        ":chart_proto",
        "../:webrtc_common",
        "../call:call_interfaces",
        "../call:video_stream_api",
        "../logging:rtc_event_log_api",
        "../logging:rtc_event_log_impl_base",
        "../logging:rtc_event_log_parser",
        "../logging:rtc_stream_config",
        "../modules/audio_coding:ana_debug_dump_proto",
        "../modules/audio_coding:audio_network_adaptor",
        "../modules/audio_coding:neteq_tools",
        "../modules/rtp_rtcp:rtp_rtcp_format",
        "../rtc_base:checks",
        "../rtc_base:rtc_base_approved",
        "../rtc_base:rtc_numerics",
        "../rtc_base:stringutils",

        # TODO(kwiberg): Remove this dependency.
        "../api/audio_codecs:audio_codecs_api",
        "../api/transport:goog_cc",
        "../modules/congestion_controller",
        "../modules/congestion_controller/goog_cc:delay_based_bwe",
        "../modules/congestion_controller/goog_cc:estimators",
        "../modules/congestion_controller/rtp:transport_feedback",
        "../modules/pacing",
        "../modules/remote_bitrate_estimator",
        "../modules/rtp_rtcp",
        "//third_party/abseil-cpp/absl/memory",
      ]
    }
  }
}

if (rtc_include_tests) {
  if (rtc_enable_protobuf && !build_with_chromium) {
    rtc_executable("event_log_visualizer") {
      testonly = true
      sources = [
        "event_log_visualizer/main.cc",
      ]

      if (!build_with_chromium && is_clang) {
        # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
        suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
      }

      defines = [ "ENABLE_RTC_EVENT_LOG" ]
      deps = [
        ":event_log_visualizer_utils",
        "../logging:rtc_event_log_parser",
        "../rtc_base:protobuf_utils",
        "../rtc_base:rtc_base_approved",
        "../system_wrappers:field_trial",
        "../test:field_trial",
        "../test:fileutils",
        "../test:test_support",
      ]
    }
  }

  rtc_executable("activity_metric") {
    testonly = true
    sources = [
      "agc/activity_metric.cc",
    ]

    deps = [
      "../api/audio:audio_frame_api",
      "../modules/audio_processing/agc:level_estimation",
      "../modules/audio_processing/vad",
      "../rtc_base:rtc_base_approved",
      "../rtc_base:safe_minmax",
      "../test:test_support",
      "//testing/gtest",
    ]
  }

  tools_unittests_resources = [
    "../resources/foreman_128x96.yuv",
    "../resources/foreman_cif.yuv",
    "../resources/reference_less_video_test_file.y4m",
  ]

  if (is_ios) {
    bundle_data("tools_unittests_bundle_data") {
      testonly = true
      sources = tools_unittests_resources
      outputs = [
        "{{bundle_resources_dir}}/{{source_file_part}}",
      ]
    }
  }

  rtc_test("tools_unittests") {
    testonly = true

    sources = [
      "frame_analyzer/linear_least_squares_unittest.cc",
      "frame_analyzer/reference_less_video_analysis_unittest.cc",
      "frame_analyzer/video_color_aligner_unittest.cc",
      "frame_analyzer/video_quality_analysis_unittest.cc",
      "frame_analyzer/video_temporal_aligner_unittest.cc",
      "frame_editing/frame_editing_unittest.cc",
      "sanitizers_unittest.cc",
      "simple_command_line_parser_unittest.cc",
      "video_file_reader_unittest.cc",
      "video_file_writer_unittest.cc",
    ]

    if (!build_with_chromium && is_clang) {
      # Suppress warnings from the Chromium Clang plugin (bugs.webrtc.org/163).
      suppressed_configs += [ "//build/config/clang:find_bad_constructs" ]
    }

    deps = [
      ":command_line_parser",
      ":video_file_reader",
      ":video_file_writer",
      ":video_quality_analysis",
      "../common_video:common_video",
      "../rtc_base",
      "../rtc_base:checks",
      "../test:fileutils",
      "../test:test_main",
      "../test:test_support",
      "//testing/gtest",
      "//third_party/abseil-cpp/absl/memory",
      "//third_party/libyuv",
    ]

    if (!build_with_chromium) {
      deps += [
        ":frame_editing_lib",
        ":reference_less_video_analysis_lib",
      ]
    }

    if (rtc_enable_protobuf) {
      deps += [ "network_tester:network_tester_unittests" ]
    }

    data = tools_unittests_resources
    if (is_android) {
      deps += [ "//testing/android/native_test:native_test_support" ]
      shard_timeout = 900
    }
    if (is_ios) {
      deps += [ ":tools_unittests_bundle_data" ]
    }
  }

  if (rtc_enable_protobuf) {
    copy("rtp_analyzer") {
      sources = [
        "py_event_log_analyzer/misc.py",
        "py_event_log_analyzer/pb_parse.py",
        "py_event_log_analyzer/rtp_analyzer.py",
        "py_event_log_analyzer/rtp_analyzer.sh",
      ]
      outputs = [
        "$root_build_dir/{{source_file_part}}",
      ]
      deps = [
        "../logging:rtc_event_log_proto",
      ]
    }  # rtp_analyzer

    rtc_executable("unpack_aecdump") {
      visibility = [ "*" ]
      testonly = true
      sources = [
        "unpack_aecdump/unpack.cc",
      ]

      deps = [
        "..:webrtc_common",
        "../common_audio",
        "../modules/audio_processing",
        "../modules/audio_processing:audioproc_debug_proto",
        "../modules/audio_processing:audioproc_debug_proto",
        "../modules/audio_processing:audioproc_protobuf_utils",
        "../modules/audio_processing:audioproc_test_utils",
        "../rtc_base:protobuf_utils",
        "../rtc_base:rtc_base_approved",
      ]
    }  # unpack_aecdump
  }
}
