Bug 1880804 [wpt PR 44645] - Implement constructor in RTCEncodedVideoFrame, a=testonly
[gecko.git] / third_party / libwebrtc / moz-patch-stack / 0105.patch
blobfd05008507ef796f1a35a93541e9537fc05d8fa6
1 From: Jan Grulich <jgrulich@redhat.com>
2 Date: Fri, 2 Feb 2024 11:47:00 +0000
3 Subject: Bug 1876896 - WebRTC backport: Allow VideoCaptureModulePipeWire to be
4 shared with more consumers r=pehrsons,webrtc-reviewers
6 This is a simple backport of an WebRTC upstream change.
8 Upstream commit: 958c9ac546f33716d097b5092515dcac705151d3
10 Differential Revision: https://phabricator.services.mozilla.com/D200142
11 Mercurial Revision: https://hg.mozilla.org/mozilla-central/rev/2ba2ef65280b2e6f246fed24d6986718981744f5
12 ---
13 .../video_capture/linux/video_capture_pipewire.cc | 15 ++++++++++++++-
14 .../video_capture/linux/video_capture_pipewire.h | 1 +
15 2 files changed, 15 insertions(+), 1 deletion(-)
17 diff --git a/modules/video_capture/linux/video_capture_pipewire.cc b/modules/video_capture/linux/video_capture_pipewire.cc
18 index 9d47e3ddbf..fb813e331f 100644
19 --- a/modules/video_capture/linux/video_capture_pipewire.cc
20 +++ b/modules/video_capture/linux/video_capture_pipewire.cc
21 @@ -48,7 +48,10 @@ VideoType VideoCaptureModulePipeWire::PipeWireRawFormatToVideoType(
23 VideoCaptureModulePipeWire::VideoCaptureModulePipeWire(
24 VideoCaptureOptions* options)
25 - : VideoCaptureImpl(), session_(options->pipewire_session()) {}
26 + : VideoCaptureImpl(),
27 + session_(options->pipewire_session()),
28 + initialized_(false),
29 + started_(false) {}
31 VideoCaptureModulePipeWire::~VideoCaptureModulePipeWire() {
32 RTC_DCHECK_RUN_ON(&api_checker_);
33 @@ -121,6 +124,14 @@ int32_t VideoCaptureModulePipeWire::StartCapture(
34 RTC_CHECK_RUNS_SERIALIZED(&capture_checker_);
35 RTC_DCHECK_RUN_ON(&api_checker_);
37 + if (initialized_) {
38 + if (capability == _requestedCapability) {
39 + return 0;
40 + } else {
41 + StopCapture();
42 + }
43 + }
45 uint8_t buffer[1024] = {};
47 RTC_LOG(LS_VERBOSE) << "Creating new PipeWire stream for node " << node_id_;
48 @@ -171,6 +182,8 @@ int32_t VideoCaptureModulePipeWire::StartCapture(
51 _requestedCapability = capability;
52 + initialized_ = true;
54 return 0;
57 diff --git a/modules/video_capture/linux/video_capture_pipewire.h b/modules/video_capture/linux/video_capture_pipewire.h
58 index 620ee520ca..5d6794ed65 100644
59 --- a/modules/video_capture/linux/video_capture_pipewire.h
60 +++ b/modules/video_capture/linux/video_capture_pipewire.h
61 @@ -50,6 +50,7 @@ class VideoCaptureModulePipeWire : public VideoCaptureImpl {
62 int node_id_ RTC_GUARDED_BY(capture_checker_);
63 VideoCaptureCapability configured_capability_
64 RTC_GUARDED_BY(pipewire_checker_);
65 + bool initialized_ RTC_GUARDED_BY(capture_checker_);
66 bool started_ RTC_GUARDED_BY(api_lock_);
68 struct pw_stream* stream_ RTC_GUARDED_BY(pipewire_checker_) = nullptr;