# 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")

source_set("video_render_module") {
  sources = [
    "external/video_render_external_impl.cc",
    "external/video_render_external_impl.h",
    "i_video_render.h",
    "include/video_render.h",
    "include/video_render_defines.h",
    "incoming_video_stream.cc",
    "incoming_video_stream.h",
    "video_render_frames.cc",
    "video_render_frames.h",
    "video_render_impl.h",
  ]

  deps = [
    "../../common_video",
    "../../system_wrappers",
    "../utility",
  ]

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

source_set("video_render") {
  sources = [
    "video_render_impl.cc",
  ]
  deps = [
    ":video_render_module",
    "../../system_wrappers",
  ]

  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_with_chromium) {
  config("video_render_internal_impl_config") {
    if (is_ios) {
      libs = [
        "OpenGLES.framework",
        "QuartzCore.framework",
      ]
    }
  }

  source_set("video_render_internal_impl") {
    libs = []
    sources = [
      "video_render_internal_impl.cc",
    ]
    deps = [
      ":video_render_module",
      "../../system_wrappers",
    ]

    if (is_linux) {
      sources += [
        "linux/video_render_linux_impl.cc",
        "linux/video_render_linux_impl.h",
        "linux/video_x11_channel.cc",
        "linux/video_x11_channel.h",
        "linux/video_x11_render.cc",
        "linux/video_x11_render.h",
      ]

      libs += [ "Xext" ]
    }
    if (is_mac) {
      sources += [
        "mac/cocoa_full_screen_window.h",
        "mac/cocoa_full_screen_window.mm",
        "mac/cocoa_render_view.h",
        "mac/cocoa_render_view.mm",
        "mac/video_render_agl.cc",
        "mac/video_render_agl.h",
        "mac/video_render_mac_carbon_impl.cc",
        "mac/video_render_mac_carbon_impl.h",
        "mac/video_render_mac_cocoa_impl.h",
        "mac/video_render_mac_cocoa_impl.mm",
        "mac/video_render_nsopengl.h",
        "mac/video_render_nsopengl.mm",
      ]

      libs += [
        "CoreVideo.framework",
        "QTKit.framework",
      ]
    }
    if (is_win) {
      sources += [
        "windows/i_video_render_win.h",
        "windows/video_render_direct3d9.cc",
        "windows/video_render_direct3d9.h",
        "windows/video_render_windows_impl.cc",
        "windows/video_render_windows_impl.h",
      ]

      directxsdk_exists =
        (exec_script("//build/dir_exists.py",
                     [ rebase_path("//third_party/directxsdk/files",
                                   root_build_dir) ],
                     "trim string") == "True")
      if (directxsdk_exists) {
        directxsdk_path = "//third_party/directxsdk/files"
      } else {
        directxsdk_path =
            exec_script("../../build/find_directx_sdk.py", [], "trim string")
      }
      include_dirs = [ directxsdk_path +  "/Include" ]
    }
    if (is_android) {
      sources += [
        "android/video_render_android_impl.cc",
        "android/video_render_android_impl.h",
        "android/video_render_android_native_opengl2.cc",
        "android/video_render_android_native_opengl2.h",
        "android/video_render_android_surface_view.cc",
        "android/video_render_android_surface_view.h",
        "android/video_render_opengles20.cc",
        "android/video_render_opengles20.h",
      ]

      libs += [ "GLESv2" ]
    }
    if (is_ios) {
      sources += [
        "ios/open_gles20.h",
        "ios/open_gles20.mm",
        "ios/video_render_ios_channel.h",
        "ios/video_render_ios_channel.mm",
        "ios/video_render_ios_gles20.h",
        "ios/video_render_ios_gles20.mm",
        "ios/video_render_ios_impl.h",
        "ios/video_render_ios_impl.mm",
        "ios/video_render_ios_view.h",
        "ios/video_render_ios_view.mm",
      ]

      cflags += [ "-fobjc-arc" ]  # CLANG_ENABLE_OBJC_ARC = YES.
    }

    all_dependent_configs = [ ":video_render_internal_impl_config"]

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