# 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("//build/config/arm.gni")
import("../../build/webrtc.gni")

build_video_processing_sse2 = current_cpu == "x86" || current_cpu == "x64"

source_set("video_processing") {
  sources = [
    "frame_preprocessor.cc",
    "frame_preprocessor.h",
    "include/video_processing.h",
    "include/video_processing_defines.h",
    "spatial_resampler.cc",
    "spatial_resampler.h",
    "util/denoiser_filter.cc",
    "util/denoiser_filter.h",
    "util/denoiser_filter_c.cc",
    "util/denoiser_filter_c.h",
    "util/noise_estimation.cc",
    "util/noise_estimation.h",
    "util/skin_detection.cc",
    "util/skin_detection.h",
    "video_decimator.cc",
    "video_decimator.h",
    "video_denoiser.cc",
    "video_denoiser.h",
    "video_processing_impl.cc",
    "video_processing_impl.h",
  ]

  deps = [
    "../../common_audio",
    "../../common_video",
    "../../modules/utility",
    "../../system_wrappers",
  ]
  if (build_video_processing_sse2) {
    deps += [ ":video_processing_sse2" ]
  }
  if (rtc_build_with_neon) {
    deps += [ ":video_processing_neon" ]
  }

  configs += [ "../..:common_config" ]
  public_configs = [ "../..:common_inherited_config" ]

  if (is_clang) {
    # Suppress warnings from Chrome's Clang plugins.
    # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
    configs -= [ "//build/config/clang:find_bad_constructs" ]
  }
}

if (build_video_processing_sse2) {
  source_set("video_processing_sse2") {
    sources = [
      "util/denoiser_filter_sse2.cc",
      "util/denoiser_filter_sse2.h",
    ]

    configs += [ "../..:common_config" ]
    public_configs = [ "../..:common_inherited_config" ]

    if (is_clang) {
      # Suppress warnings from Chrome's Clang plugins.
      # See http://code.google.com/p/webrtc/issues/detail?id=163 for details.
      configs -= [ "//build/config/clang:find_bad_constructs" ]
    }

    if (is_posix) {
      cflags = [ "-msse2" ]
    }
  }
}

if (rtc_build_with_neon) {
  source_set("video_processing_neon") {
    sources = [
      "util/denoiser_filter_neon.cc",
      "util/denoiser_filter_neon.h",
    ]
    if (current_cpu != "arm64") {
      configs -= [ "//build/config/compiler:compiler_arm_fpu" ]
      cflags = [ "-mfpu=neon" ]
    }
    configs += [ "../..:common_config" ]
    public_configs = [ "../..:common_inherited_config" ]
  }
}
