# 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 = [
    "main/interface/video_processing.h",
    "main/interface/video_processing_defines.h",
    "main/source/brighten.cc",
    "main/source/brighten.h",
    "main/source/brightness_detection.cc",
    "main/source/brightness_detection.h",
    "main/source/content_analysis.cc",
    "main/source/content_analysis.h",
    "main/source/deflickering.cc",
    "main/source/deflickering.h",
    "main/source/frame_preprocessor.cc",
    "main/source/frame_preprocessor.h",
    "main/source/spatial_resampler.cc",
    "main/source/spatial_resampler.h",
    "main/source/video_decimator.cc",
    "main/source/video_decimator.h",
    "main/source/video_processing_impl.cc",
    "main/source/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 = [
      "main/source/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" ]
    }
  }
}
