0

Adding third_party/openh264 build files for encoding (but not decoding).

Adds GYP and GN build files. Only building C++ code. Architecture-specific assembly code will be added in follow-up CL(s).

(This is a reupload of https://codereview.chromium.org/1403893007/ after having split it up into pieces and removed decoding and tests).

BUG=500605, 468365

Review URL: https://codereview.chromium.org/1446453004

Cr-Commit-Position: refs/heads/master@{#363443}
This commit is contained in:
hbos
2015-12-07 02:49:45 -08:00
committed by Commit bot
parent 511c5db753
commit 17a7b4a295
10 changed files with 497 additions and 5 deletions

1
.gn

@ -174,6 +174,7 @@ exec_script_whitelist = [
"//third_party/harfbuzz-ng/BUILD.gn",
"//third_party/libaddressinput/BUILD.gn",
"//third_party/opus/BUILD.gn",
"//third_party/openh264/BUILD.gn",
"//third_party/WebKit/Source/bindings/bindings.gni",
"//third_party/WebKit/Source/bindings/scripts/scripts.gni",
"//third_party/WebKit/Source/config.gni",

@ -13,6 +13,7 @@ import("//build/config/sanitizers/sanitizers.gni")
import("//build/config/ui.gni")
import("//build_overrides/v8.gni")
import("//media/media_options.gni")
import("//third_party/openh264/openh264_args.gni")
if (is_android) {
import("//build/config/android/config.gni")
@ -587,6 +588,14 @@ group("both_gn_and_gyp") {
if (is_ios || is_mac) {
deps += [ "//media/cast:cast_h264_vt_encoder_unittests" ]
}
if (use_openh264) {
deps += [
"//third_party/openh264:common",
"//third_party/openh264:encoder",
"//third_party/openh264:processing",
]
}
}
group("gn_only") {

@ -10,6 +10,9 @@
# For Android-specific targets.
'android_app_targets%': [],
},
'includes': [
'../third_party/openh264/openh264_args.gypi',
],
'targets': [
{
'target_name': 'All',
@ -286,6 +289,11 @@
'../envoy/envoy.gyp:*',
],
}],
['use_openh264==1', {
'dependencies': [
'../third_party/openh264/openh264.gyp:*',
],
}],
],
}, # target_name: All
{

@ -528,8 +528,15 @@
['chromecast==1', {
'dependencies': [
'../chromecast/chromecast.gyp:cast_shell',
]
}]
],
}],
['use_openh264==1', {
'dependencies': [
'../third_party/openh264/openh264.gyp:openh264_common',
'../third_party/openh264/openh264.gyp:openh264_processing',
'../third_party/openh264/openh264.gyp:openh264_encoder',
],
}],
],
},
{

75
third_party/openh264/BUILD.gn vendored Normal file

@ -0,0 +1,75 @@
# 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")
assert(use_openh264)
# Import source and include variables from openh264.gypi.
openh264_gypi_values = exec_script("//build/gypi_to_gn.py",
[ rebase_path("openh264.gypi") ],
"scope")
# Config shared by all openh264 targets.
config("config") {
cflags = []
defines = []
# Compiler warnings to ignore.
if (!is_win) {
# GCC flags
cflags += [
"-Wno-header-hygiene",
"-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 = openh264_gypi_values.openh264_common_sources
include_dirs = openh264_gypi_values.openh264_common_includes
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 = openh264_gypi_values.openh264_processing_sources
include_dirs = openh264_gypi_values.openh264_processing_includes
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
configs += [ ":config" ]
deps = [
":common",
]
}
source_set("encoder") {
sources = openh264_gypi_values.openh264_encoder_sources
include_dirs = openh264_gypi_values.openh264_encoder_includes
configs -= [ "//build/config/compiler:chromium_code" ]
configs += [ "//build/config/compiler:no_chromium_code" ]
configs += [ ":config" ]
deps = [
":common",
":processing",
]
}

@ -1,3 +0,0 @@
include_rules = [
'+testing',
]

107
third_party/openh264/openh264.gyp vendored Normal file

@ -0,0 +1,107 @@
# 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.
{
'includes': [
'openh264_args.gypi',
],
'conditions': [
['use_openh264==1', {
# Settings shared by all openh264 targets.
'target_defaults': {
'variables': {
'chromium_code': 0,
'conditions': [
['OS!="win"', {
# GCC flags
'openh264_cflags_add': [
'-Wno-unused-value',
],
'openh264_cflags_remove': [
'-Wheader-hygiene',
],
},{
# Windows uses 'msvs_disabled_warnings' instead, for MSVC flags.
'openh264_cflags_add': [],
'openh264_cflags_remove': [],
}],
],
},
'cflags': [ '<@(openh264_cflags_add)' ],
'cflags!': [ '<@(openh264_cflags_remove)' ],
'xcode_settings': {
'WARNING_CFLAGS': [ '<@(openh264_cflags_add)' ],
'WARNING_CFLAGS!': [ '<@(openh264_cflags_remove)' ],
},
'msvs_disabled_warnings': [
4324, # structure was padded
4245, # signed/unsigned mismatch
4701, # uninitialized variable used
4702, # unreachable code
],
# Platform-specific defines.
'conditions': [
['OS=="android"', {
'defines': [
# Android NDK is necessary for its cpufeatures and this define is
# what OpenH264 code uses to check if it should be used.
'ANDROID_NDK',
],
}],
],
},
'includes': [
'openh264.gypi',
],
'targets': [
{
'target_name': 'openh264_common',
'type': 'static_library',
'conditions': [
['OS=="android"', {
'dependencies': [
# 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.
'<(DEPTH)/build/android/ndk.gyp:cpu_features',
],
}],
],
'include_dirs+': [ '<@(openh264_common_includes)' ],
'sources': [ '<@(openh264_common_sources)' ],
},
{
'target_name': 'openh264_processing',
'type': 'static_library',
'dependencies': [
'openh264_common',
],
'include_dirs+': [ '<@(openh264_processing_includes)' ],
'sources': [ '<@(openh264_processing_sources)' ],
},
{
'target_name': 'openh264_encoder',
'type': 'static_library',
'dependencies': [
'openh264_common',
'openh264_processing',
],
'include_dirs+': [ '<@(openh264_encoder_includes)' ],
'sources': [ '<@(openh264_encoder_sources)' ],
},
],
},{
# Building without OpenH264. Defining a dummy target because every build
# file needs to have at least one target.
'targets': [
{
'target_name': 'openh264_dummy_target',
'type': 'none',
}
],
}],
],
}

264
third_party/openh264/openh264.gypi vendored Normal file

@ -0,0 +1,264 @@
# 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.
{
'variables': {
'openh264_common_includes': [
'src/codec/api/svc',
'src/codec/common/inc',
'src/codec/common/src',
],
'openh264_common_sources': [
'src/codec/common/inc/WelsThreadLib.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/WelsThreadLib.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',
],
# TODO(hbos): compile with *_asm_* sources
'openh264_common_sources_asm_x86': [
'src/codec/common/src/x86/cpuid.asm',
'src/codec/common/src/x86/deblock.asm',
'src/codec/common/src/x86/expand_picture.asm',
'src/codec/common/src/x86/intra_pred_com.asm',
'src/codec/common/src/x86/mb_copy.asm',
'src/codec/common/src/x86/mc_chroma.asm',
'src/codec/common/src/x86/mc_luma.asm',
'src/codec/common/src/x86/satd_sad.asm',
'src/codec/common/src/x86/vaa.asm',
],
'openh264_common_sources_asm_arm': [
'src/codec/common/src/arm/copy_mb_neon.S',
'src/codec/common/src/arm/deblocking_neon.S',
'src/codec/common/src/arm/expand_picture_neon.S',
'src/codec/common/src/arm/intra_pred_common_neon.S',
'src/codec/common/src/arm/mc_neon.S',
],
'openh264_common_sources_asm_arm64': [
'src/codec/common/src/arm64/copy_mb_aarch64_neon.S',
'src/codec/common/src/arm64/deblocking_aarch64_neon.S',
'src/codec/common/src/arm64/expand_picture_aarch64_neon.S',
'src/codec/common/src/arm64/intra_pred_common_aarch64_neon.S',
'src/codec/common/src/arm64/mc_aarch64_neon.S',
],
'openh264_processing_includes': [
'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',
],
'openh264_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',
],
# TODO(hbos): compile with *_asm_* sources
'openh264_processing_sources_asm_x86': [
'src/codec/processing/src/x86/denoisefilter.asm',
'src/codec/processing/src/x86/downsample_bilinear.asm',
'src/codec/processing/src/x86/vaa.asm',
],
'openh264_processing_sources_asm_arm': [
'src/codec/processing/src/arm/adaptive_quantization.S',
'src/codec/processing/src/arm/down_sample_neon.S',
'src/codec/processing/src/arm/pixel_sad_neon.S',
'src/codec/processing/src/arm/vaa_calc_neon.S',
],
'openh264_processing_sources_asm_arm64': [
'src/codec/processing/src/arm64/adaptive_quantization_aarch64_neon.S',
'src/codec/processing/src/arm64/down_sample_aarch64_neon.S',
'src/codec/processing/src/arm64/pixel_sad_aarch64_neon.S',
'src/codec/processing/src/arm64/vaa_calc_aarch64_neon.S',
],
'openh264_encoder_includes': [
'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/',
],
'openh264_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/picture.h',
'src/codec/encoder/core/inc/picture_handle.h',
'src/codec/encoder/core/inc/property.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_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/picture_handle.cpp',
'src/codec/encoder/core/src/property.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/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.
],
# TODO(hbos): compile with *_asm_* sources
'openh264_encoder_sources_asm_x86': [
'src/codec/encoder/core/x86/coeff.asm',
'src/codec/encoder/core/x86/dct.asm',
'src/codec/encoder/core/x86/intra_pred.asm',
'src/codec/encoder/core/x86/matrix_transpose.asm',
'src/codec/encoder/core/x86/memzero.asm',
'src/codec/encoder/core/x86/quant.asm',
'src/codec/encoder/core/x86/sample_sc.asm',
'src/codec/encoder/core/x86/score.asm',
],
'openh264_encoder_sources_asm_arm': [
'src/codec/encoder/core/arm/intra_pred_neon.S',
'src/codec/encoder/core/arm/intra_pred_sad_3_opt_neon.S',
'src/codec/encoder/core/arm/memory_neon.S',
'src/codec/encoder/core/arm/pixel_neon.S',
'src/codec/encoder/core/arm/reconstruct_neon.S',
'src/codec/encoder/core/arm/svc_motion_estimation.S',
],
'openh264_encoder_sources_asm_arm64': [
'src/codec/encoder/core/arm64/intra_pred_aarch64_neon.S',
'src/codec/encoder/core/arm64/intra_pred_sad_3_opt_aarch64_neon.S',
'src/codec/encoder/core/arm64/memory_aarch64_neon.S',
'src/codec/encoder/core/arm64/pixel_aarch64_neon.S',
'src/codec/encoder/core/arm64/reconstruct_aarch64_neon.S',
'src/codec/encoder/core/arm64/svc_motion_estimation_aarch64_neon.S',
],
},
}

12
third_party/openh264/openh264_args.gni vendored Normal file

@ -0,0 +1,12 @@
# 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("//build/config/chrome_build.gni")
declare_args() {
# Enable this to build OpenH264 (for encoding, not decoding).
# CHECK THE OPENH264 LICENSE/PATENT BEFORE BUILDING, see
# http://www.openh264.org/.
use_openh264 = false
}

12
third_party/openh264/openh264_args.gypi vendored Normal file

@ -0,0 +1,12 @@
# 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.
{
'variables': {
# Enable this to build OpenH264 (for encoding, not decoding).
# CHECK THE OPENH264 LICENSE/PATENT BEFORE BUILDING, see
# http://www.openh264.org/.
'use_openh264%': 0,
},
}