# 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 = [
    "brighten.cc",
    "brighten.h",
    "brightness_detection.cc",
    "brightness_detection.h",
    "content_analysis.cc",
    "content_analysis.h",
    "deflickering.cc",
    "deflickering.h",
    "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/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 = [
      "content_analysis_sse2.cc",
      "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" ]
    }
  }
}
