# 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/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",
    "video_decimator.cc",
    "video_decimator.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" ]
  }

  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",
    ]

    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" ]
    }
  }
}
