Files
Michael Froman 6d038c44c4 Bug 2064200 - Vendor libwebrtc from 5da5a6e4e0
We cherry-picked this in bug 2056029.

Upstream commit: https://webrtc.googlesource.com/src/+/5da5a6e4e00c69ef60c7643e99ef34f65f7af51a
    video_capture: Implement buffer stride support for Pipewire

    Add optional buffer stride support to VideoCaptureImpl and use it in
    VideoCaptureModulePipeWire, allowing us to drop the requirement for
    unpadded buffers. This notably improves compatibility with libcamera,
    which supports a wider range of devices than the V4L2 backend - some
    having hardware requirements for stride-alignment.

    Extending `ConvertToI420()` in libyuv was rejected on the grounds that there are various approaches to stride handling - using a single stride value for multiple planes, having explicit values for each one etc. - as well as the fact that we might well want to extend the helper further in the future - e.g. in order to better handle color spaces such as BT709 (instead of always assuming BT601).

    Thus this patch now adds a local copy of `ConvertToI420()`, supporting implicit and a single explicit stride value for now.

    libyuv CL for context:
    https://chromium-review.googlesource.com/c/libyuv/libyuv/+/8146821

    Bug: chromium:538875176
    Change-Id: Ic5781709cf5f20e8c75b9ad09d7052a355fcbec7
    Reviewed-on: https://webrtc-review.googlesource.com/c/src/+/491680
    Reviewed-by: Stefan Holmer <stefan@webrtc.org>
    Reviewed-by: Jan Grulich <grulja@gmail.com>
    Commit-Queue: Stefan Holmer <stefan@webrtc.org>
    Reviewed-by: Ilya Nikolaevskiy <ilnik@webrtc.org>
    Cr-Commit-Position: refs/heads/main@{#48353}
2026-08-28 09:33:31 +00:00

54 lines
2.0 KiB
Diff

From: Andreas Pehrson <apehrson@mozilla.com>
Date: Mon, 5 Sep 2022 13:56:00 +0000
Subject: Bug 1786502 - Lock access to DeviceInfo devicechange callbacks.
r=webrtc-reviewers,jib
Differential Revision: https://phabricator.services.mozilla.com/D155365
Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/e826dfadfe1264c59d9b13e3c17d6f75a40f5c33
---
modules/video_capture/video_capture.h | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/modules/video_capture/video_capture.h b/modules/video_capture/video_capture.h
index 75031bf2df..9f018e55f2 100644
--- a/modules/video_capture/video_capture.h
+++ b/modules/video_capture/video_capture.h
@@ -19,6 +19,8 @@
#include "api/video/video_sink_interface.h"
#include "modules/video_capture/raw_video_sink_interface.h"
#include "modules/video_capture/video_capture_defines.h"
+#include "rtc_base/synchronization/mutex.h"
+#include "rtc_base/thread_annotations.h"
#include <set>
#if defined(ANDROID)
@@ -43,15 +45,18 @@ class VideoCaptureModule : public RefCountInterface {
virtual uint32_t NumberOfDevices() = 0;
virtual int32_t Refresh() = 0;
virtual void DeviceChange() {
+ MutexLock lock(&_inputCallbacksMutex);
for (auto inputCallBack : _inputCallBacks) {
inputCallBack->OnDeviceChange();
}
}
virtual void RegisterVideoInputFeedBack(VideoInputFeedBack* callBack) {
+ MutexLock lock(&_inputCallbacksMutex);
_inputCallBacks.insert(callBack);
}
virtual void DeRegisterVideoInputFeedBack(VideoInputFeedBack* callBack) {
+ MutexLock lock(&_inputCallbacksMutex);
auto it = _inputCallBacks.find(callBack);
if (it != _inputCallBacks.end()) {
_inputCallBacks.erase(it);
@@ -105,7 +110,8 @@ class VideoCaptureModule : public RefCountInterface {
virtual ~DeviceInfo() {}
private:
- std::set<VideoInputFeedBack*> _inputCallBacks;
+ Mutex _inputCallbacksMutex;
+ std::set<VideoInputFeedBack*> _inputCallBacks RTC_GUARDED_BY(_inputCallbacksMutex);
};
// Register capture data callback