# Copyright 2015 The Chromium Authors. All rights reserved.
# Use of this source code is governed by a BSD-style license that can be
# found in the LICENSE file.

import("//third_party/openh264/openh264_args.gni")

# Config shared by all openh264 targets.
config("config") {
  cflags = []
  defines = []

  # GCC and clang flags. MSVS (is_win && !is_clang) does not use cflags.
  if (!is_win || is_clang) {
    cflags += [
      "-Wno-format",
      "-Wno-header-hygiene",
      "-Wno-unused-function",
      "-Wno-unused-value",
    ]
  }

  # Platform-specific defines.
  if (is_android) {
    # Android NDK is necessary for its cpufeatures and this define is what
    # OpenH264 code uses to check if it should be used.
    defines += [ "ANDROID_NDK" ]
  }
}

source_set("common") {
  sources = [
    "src/codec/common/inc/WelsCircleQueue.h",
    "src/codec/common/inc/WelsList.h",
    "src/codec/common/inc/WelsLock.h",
    "src/codec/common/inc/WelsTask.h",
    "src/codec/common/inc/WelsTaskThread.h",
    "src/codec/common/inc/WelsThread.h",
    "src/codec/common/inc/WelsThreadLib.h",
    "src/codec/common/inc/WelsThreadPool.h",
    "src/codec/common/inc/copy_mb.h",
    "src/codec/common/inc/cpu.h",
    "src/codec/common/inc/cpu_core.h",
    "src/codec/common/inc/crt_util_safe_x.h",
    "src/codec/common/inc/deblocking_common.h",
    "src/codec/common/inc/expand_pic.h",
    "src/codec/common/inc/golomb_common.h",
    "src/codec/common/inc/intra_pred_common.h",
    "src/codec/common/inc/ls_defines.h",
    "src/codec/common/inc/macros.h",
    "src/codec/common/inc/mc.h",
    "src/codec/common/inc/measure_time.h",
    "src/codec/common/inc/memory_align.h",
    "src/codec/common/inc/sad_common.h",
    "src/codec/common/inc/typedefs.h",
    "src/codec/common/inc/utils.h",
    "src/codec/common/inc/version.h",
    "src/codec/common/inc/welsCodecTrace.h",
    "src/codec/common/inc/wels_common_defs.h",
    "src/codec/common/inc/wels_const_common.h",
    "src/codec/common/src/WelsTaskThread.cpp",
    "src/codec/common/src/WelsThread.cpp",
    "src/codec/common/src/WelsThreadLib.cpp",
    "src/codec/common/src/WelsThreadPool.cpp",
    "src/codec/common/src/common_tables.cpp",
    "src/codec/common/src/copy_mb.cpp",
    "src/codec/common/src/cpu.cpp",
    "src/codec/common/src/crt_util_safe_x.cpp",
    "src/codec/common/src/deblocking_common.cpp",
    "src/codec/common/src/expand_pic.cpp",
    "src/codec/common/src/intra_pred_common.cpp",
    "src/codec/common/src/mc.cpp",
    "src/codec/common/src/memory_align.cpp",
    "src/codec/common/src/sad_common.cpp",
    "src/codec/common/src/utils.cpp",
    "src/codec/common/src/welsCodecTrace.cpp",
  ]

  include_dirs = [
    "src/codec/api/svc",
    "src/codec/common/inc",
    "src/codec/common/src",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  configs += [ ":config" ]
  deps = []
  if (is_android) {
    deps += [
      # Defines "android_get/setCpu..." functions. The original OpenH264 build
      # files replaces these using macros for "wels_..." versions of the same
      # functions. We do not have access to these and use the <cpu-features.h>
      # ones instead.
      "//third_party/android_tools:cpu_features",
    ]
  }
}

source_set("processing") {
  sources = [
    "src/codec/processing/interface/IWelsVP.h",
    "src/codec/processing/src/adaptivequantization/AdaptiveQuantization.cpp",
    "src/codec/processing/src/adaptivequantization/AdaptiveQuantization.h",
    "src/codec/processing/src/backgrounddetection/BackgroundDetection.cpp",
    "src/codec/processing/src/backgrounddetection/BackgroundDetection.h",
    "src/codec/processing/src/common/WelsFrameWork.cpp",
    "src/codec/processing/src/common/WelsFrameWork.h",
    "src/codec/processing/src/common/WelsFrameWorkEx.cpp",
    "src/codec/processing/src/common/common.h",
    "src/codec/processing/src/common/memory.cpp",
    "src/codec/processing/src/common/memory.h",
    "src/codec/processing/src/common/resource.h",
    "src/codec/processing/src/common/typedef.h",
    "src/codec/processing/src/common/util.h",
    "src/codec/processing/src/complexityanalysis/ComplexityAnalysis.cpp",
    "src/codec/processing/src/complexityanalysis/ComplexityAnalysis.h",
    "src/codec/processing/src/denoise/denoise.cpp",
    "src/codec/processing/src/denoise/denoise.h",
    "src/codec/processing/src/denoise/denoise_filter.cpp",
    "src/codec/processing/src/downsample/downsample.cpp",
    "src/codec/processing/src/downsample/downsample.h",
    "src/codec/processing/src/downsample/downsamplefuncs.cpp",
    "src/codec/processing/src/imagerotate/imagerotate.cpp",
    "src/codec/processing/src/imagerotate/imagerotate.h",
    "src/codec/processing/src/imagerotate/imagerotatefuncs.cpp",
    "src/codec/processing/src/scenechangedetection/SceneChangeDetection.cpp",
    "src/codec/processing/src/scenechangedetection/SceneChangeDetection.h",
    "src/codec/processing/src/scrolldetection/ScrollDetection.cpp",
    "src/codec/processing/src/scrolldetection/ScrollDetection.h",
    "src/codec/processing/src/scrolldetection/ScrollDetectionFuncs.cpp",
    "src/codec/processing/src/scrolldetection/ScrollDetectionFuncs.h",
    "src/codec/processing/src/vaacalc/vaacalcfuncs.cpp",
    "src/codec/processing/src/vaacalc/vaacalculation.cpp",
    "src/codec/processing/src/vaacalc/vaacalculation.h",
  ]

  include_dirs = [
    "src/codec/api/svc",
    "src/codec/common/inc",
    "src/codec/common/src",
    "src/codec/processing/interface",
    "src/codec/processing/interface/",
    "src/codec/processing/src/adaptivequantization",
    "src/codec/processing/src/backgrounddetection",
    "src/codec/processing/src/common",
    "src/codec/processing/src/complexityanalysis",
    "src/codec/processing/src/denoise",
    "src/codec/processing/src/downsample",
    "src/codec/processing/src/imagerotate",
    "src/codec/processing/src/scenechangedetection",
    "src/codec/processing/src/scrolldetection",
    "src/codec/processing/src/vaacalc",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  configs += [ ":config" ]
  deps = [
    ":common",
  ]
}

source_set("encoder") {
  sources = [
    "src/codec/encoder/core/inc/as264_common.h",
    "src/codec/encoder/core/inc/au_set.h",
    "src/codec/encoder/core/inc/deblocking.h",
    "src/codec/encoder/core/inc/decode_mb_aux.h",
    "src/codec/encoder/core/inc/dq_map.h",
    "src/codec/encoder/core/inc/encode_mb_aux.h",
    "src/codec/encoder/core/inc/encoder.h",
    "src/codec/encoder/core/inc/encoder_context.h",
    "src/codec/encoder/core/inc/extern.h",
    "src/codec/encoder/core/inc/get_intra_predictor.h",
    "src/codec/encoder/core/inc/mb_cache.h",
    "src/codec/encoder/core/inc/md.h",
    "src/codec/encoder/core/inc/mt_defs.h",
    "src/codec/encoder/core/inc/mv_pred.h",
    "src/codec/encoder/core/inc/nal_encap.h",
    "src/codec/encoder/core/inc/param_svc.h",
    "src/codec/encoder/core/inc/parameter_sets.h",
    "src/codec/encoder/core/inc/paraset_strategy.h",
    "src/codec/encoder/core/inc/picture.h",
    "src/codec/encoder/core/inc/picture_handle.h",
    "src/codec/encoder/core/inc/rc.h",
    "src/codec/encoder/core/inc/ref_list_mgr_svc.h",
    "src/codec/encoder/core/inc/sample.h",
    "src/codec/encoder/core/inc/set_mb_syn_cabac.h",
    "src/codec/encoder/core/inc/set_mb_syn_cavlc.h",
    "src/codec/encoder/core/inc/slice.h",
    "src/codec/encoder/core/inc/slice_multi_threading.h",
    "src/codec/encoder/core/inc/stat.h",
    "src/codec/encoder/core/inc/svc_base_layer_md.h",
    "src/codec/encoder/core/inc/svc_enc_frame.h",
    "src/codec/encoder/core/inc/svc_enc_golomb.h",
    "src/codec/encoder/core/inc/svc_enc_macroblock.h",
    "src/codec/encoder/core/inc/svc_enc_slice_segment.h",
    "src/codec/encoder/core/inc/svc_encode_mb.h",
    "src/codec/encoder/core/inc/svc_encode_slice.h",
    "src/codec/encoder/core/inc/svc_mode_decision.h",
    "src/codec/encoder/core/inc/svc_motion_estimate.h",
    "src/codec/encoder/core/inc/svc_set_mb_syn.h",
    "src/codec/encoder/core/inc/svc_set_mb_syn_cavlc.h",
    "src/codec/encoder/core/inc/vlc_encoder.h",
    "src/codec/encoder/core/inc/wels_common_basis.h",
    "src/codec/encoder/core/inc/wels_const.h",
    "src/codec/encoder/core/inc/wels_func_ptr_def.h",
    "src/codec/encoder/core/inc/wels_preprocess.h",
    "src/codec/encoder/core/inc/wels_task_base.h",
    "src/codec/encoder/core/inc/wels_task_encoder.h",
    "src/codec/encoder/core/inc/wels_task_management.h",
    "src/codec/encoder/core/inc/wels_transpose_matrix.h",
    "src/codec/encoder/core/src/au_set.cpp",
    "src/codec/encoder/core/src/deblocking.cpp",
    "src/codec/encoder/core/src/decode_mb_aux.cpp",
    "src/codec/encoder/core/src/encode_mb_aux.cpp",
    "src/codec/encoder/core/src/encoder.cpp",
    "src/codec/encoder/core/src/encoder_data_tables.cpp",
    "src/codec/encoder/core/src/encoder_ext.cpp",
    "src/codec/encoder/core/src/get_intra_predictor.cpp",
    "src/codec/encoder/core/src/md.cpp",
    "src/codec/encoder/core/src/mv_pred.cpp",
    "src/codec/encoder/core/src/nal_encap.cpp",
    "src/codec/encoder/core/src/paraset_strategy.cpp",
    "src/codec/encoder/core/src/picture_handle.cpp",
    "src/codec/encoder/core/src/ratectl.cpp",
    "src/codec/encoder/core/src/ref_list_mgr_svc.cpp",
    "src/codec/encoder/core/src/sample.cpp",
    "src/codec/encoder/core/src/set_mb_syn_cabac.cpp",
    "src/codec/encoder/core/src/set_mb_syn_cavlc.cpp",
    "src/codec/encoder/core/src/slice_multi_threading.cpp",
    "src/codec/encoder/core/src/svc_base_layer_md.cpp",
    "src/codec/encoder/core/src/svc_enc_slice_segment.cpp",
    "src/codec/encoder/core/src/svc_encode_mb.cpp",
    "src/codec/encoder/core/src/svc_encode_slice.cpp",
    "src/codec/encoder/core/src/svc_mode_decision.cpp",
    "src/codec/encoder/core/src/svc_motion_estimate.cpp",
    "src/codec/encoder/core/src/svc_set_mb_syn_cabac.cpp",
    "src/codec/encoder/core/src/svc_set_mb_syn_cavlc.cpp",
    "src/codec/encoder/core/src/wels_preprocess.cpp",
    "src/codec/encoder/core/src/wels_task_base.cpp",
    "src/codec/encoder/core/src/wels_task_encoder.cpp",
    "src/codec/encoder/core/src/wels_task_management.cpp",
    "src/codec/encoder/plus/inc/welsEncoderExt.h",
    "src/codec/encoder/plus/src/welsEncoderExt.cpp",

    # Note: Purposefully excluded: 'src/codec/encoder/plus/src/DllEntry.cpp',
    # This file is not built by the OpenH264 original build files.
  ]

  include_dirs = [
    "src/codec/api/svc",
    "src/codec/common/inc",
    "src/codec/common/src",
    "src/codec/encoder/core/inc",
    "src/codec/encoder/core/src",
    "src/codec/encoder/plus/inc",
    "src/codec/encoder/plus/src",
    "src/codec/processing/interface",
  ]

  configs -= [ "//build/config/compiler:chromium_code" ]
  configs += [ "//build/config/compiler:no_chromium_code" ]
  configs += [ ":config" ]
  deps = [
    ":common",
    ":processing",
  ]
}
