Jan Grulich 9e755f0e19 PipeWire camera: Annotate functions with PipeWire calls to avoid CFI
Similar to PipeWire implementation of desktop capture, we have to avoid
CFI check for calls of dlopened PipeWire library. This avoid crashing
PipeWire camera backend when "is_official_build=true" option is used as
this turns on "is_cfi=true" enabling control flow integrity.

Bug: chromium:354776214
Change-Id: I7a9fc1c2d77c4ee0e8fe0586369b7246e0bb9180
Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/358103
Commit-Queue: Jan Grulich <grulja@gmail.com>
Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
Reviewed-by: Alexander Cooper <alcooper@chromium.org>
Cr-Commit-Position: refs/heads/main@{#42706}
2024-07-31 18:11:40 +00:00

199 lines
5.4 KiB
Plaintext

# 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("../../webrtc.gni")
# Note this target is missing an implementation for the video capture.
# Targets must link with either 'video_capture' or
# 'video_capture_internal_impl' depending on whether they want to
# use the internal capturer.
rtc_library("video_capture_module") {
visibility = [ "*" ]
sources = [
"device_info_impl.cc",
"device_info_impl.h",
"raw_video_sink_interface.h",
"video_capture.h",
"video_capture_config.h",
"video_capture_defines.h",
"video_capture_factory.cc",
"video_capture_factory.h",
"video_capture_impl.cc",
"video_capture_impl.h",
]
deps = [
"../../api:scoped_refptr",
"../../api:sequence_checker",
"../../api/video:video_frame",
"../../api/video:video_rtp_headers",
"../../common_video",
"../../rtc_base:event_tracer",
"../../rtc_base:logging",
"../../rtc_base:macromagic",
"../../rtc_base:race_checker",
"../../rtc_base:refcount",
"../../rtc_base:stringutils",
"../../rtc_base:timeutils",
"../../rtc_base/synchronization:mutex",
"../../rtc_base/system:rtc_export",
"../../system_wrappers",
"//third_party/abseil-cpp/absl/strings",
"//third_party/abseil-cpp/absl/strings:string_view",
"//third_party/libyuv",
]
}
if (!build_with_chromium || is_linux || is_chromeos) {
rtc_source_set("video_capture_internal_impl") {
visibility = [ "*" ]
deps = [
":video_capture_module",
"../../api:scoped_refptr",
"../../api:sequence_checker",
"../../media:video_common",
"../../rtc_base:checks",
"../../rtc_base:logging",
"../../rtc_base:macromagic",
"../../rtc_base:platform_thread",
"../../rtc_base:refcount",
"../../rtc_base:stringutils",
"../../rtc_base/synchronization:mutex",
"../../rtc_base/system:rtc_export",
"../../system_wrappers",
]
sources = [
"video_capture_options.cc",
"video_capture_options.h",
]
if (is_linux || is_chromeos) {
sources += [
"linux/device_info_linux.cc",
"linux/device_info_v4l2.cc",
"linux/device_info_v4l2.h",
"linux/video_capture_linux.cc",
"linux/video_capture_v4l2.cc",
"linux/video_capture_v4l2.h",
]
deps += [
"../../media:rtc_media_base",
"../../rtc_base:sanitizer",
]
if (rtc_use_pipewire) {
sources += [
"linux/camera_portal.cc",
"linux/camera_portal.h",
"linux/device_info_pipewire.cc",
"linux/device_info_pipewire.h",
"linux/pipewire_session.cc",
"linux/pipewire_session.h",
"linux/video_capture_pipewire.cc",
"linux/video_capture_pipewire.h",
]
configs += [ "../portal:pipewire_base" ]
public_configs = [ "../portal:pipewire_config" ]
deps += [
"../../api:refcountedbase",
"../../common_video",
"../../media:rtc_media_base",
"../portal",
]
}
}
if (is_win) {
sources += [
"windows/device_info_ds.cc",
"windows/device_info_ds.h",
"windows/help_functions_ds.cc",
"windows/help_functions_ds.h",
"windows/sink_filter_ds.cc",
"windows/sink_filter_ds.h",
"windows/video_capture_ds.cc",
"windows/video_capture_ds.h",
"windows/video_capture_factory_windows.cc",
]
libs = [
"ole32.lib",
"oleaut32.lib",
"strmiids.lib",
"user32.lib",
]
if (build_with_mozilla) {
sources += [
"windows/BaseFilter.cpp",
"windows/BaseInputPin.cpp",
"windows/BasePin.cpp",
"windows/MediaType.cpp",
]
}
}
if (is_fuchsia) {
sources += [ "video_capture_factory_null.cc" ]
}
if (build_with_mozilla && is_android) {
include_dirs = [
"/config/external/nspr",
"/nsprpub/lib/ds",
"/nsprpub/pr/include",
]
sources += [
"android/device_info_android.cc",
"android/video_capture_android.cc",
]
}
}
if (!is_android && rtc_include_tests) {
rtc_test("video_capture_tests") {
sources = [ "test/video_capture_unittest.cc" ]
ldflags = []
if (is_linux || is_chromeos || is_mac) {
ldflags += [
"-lpthread",
"-lm",
]
}
if (is_linux || is_chromeos) {
ldflags += [
"-lrt",
"-lXext",
"-lX11",
]
}
deps = [
":video_capture_internal_impl",
":video_capture_module",
"../../api:scoped_refptr",
"../../api/video:video_frame",
"../../api/video:video_rtp_headers",
"../../common_video",
"../../rtc_base:gunit_helpers",
"../../rtc_base:timeutils",
"../../rtc_base/synchronization:mutex",
"../../system_wrappers",
"../../test:frame_utils",
"../../test:test_main",
"../../test:test_support",
"../../test:video_test_common",
"//testing/gtest",
"//third_party/abseil-cpp/absl/memory",
]
}
}
}