Minor pipewire improvements
This commit is contained in:
parent
8cb9a2a561
commit
2bb1ace6dc
@ -65,7 +65,7 @@ index 1eb8ead26efa..316468eed1fc 100644
|
|||||||
};
|
};
|
||||||
|
|
||||||
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
diff --git a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
||||||
index 379341c833de..7a1ffa204ddf 100644
|
index 379341c833de..a51f7851b20f 100644
|
||||||
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
--- a/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
||||||
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
+++ b/media/webrtc/trunk/webrtc/modules/desktop_capture/linux/base_capturer_pipewire.cc
|
||||||
@@ -18,6 +18,11 @@
|
@@ -18,6 +18,11 @@
|
||||||
@ -133,23 +133,26 @@ index 379341c833de..7a1ffa204ddf 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
// static
|
// static
|
||||||
@@ -150,15 +181,21 @@ void BaseCapturerPipeWire::OnStreamProcess(void* data) {
|
@@ -150,15 +181,25 @@ void BaseCapturerPipeWire::OnStreamProcess(void* data) {
|
||||||
BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
|
BaseCapturerPipeWire* that = static_cast<BaseCapturerPipeWire*>(data);
|
||||||
RTC_DCHECK(that);
|
RTC_DCHECK(that);
|
||||||
|
|
||||||
- pw_buffer* buf = nullptr;
|
- pw_buffer* buf = nullptr;
|
||||||
+ struct pw_buffer *next_buffer;
|
+ struct pw_buffer *next_buffer;
|
||||||
+ struct pw_buffer *buffer = nullptr;
|
+ struct pw_buffer *buffer = nullptr;
|
||||||
|
+
|
||||||
- if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) {
|
|
||||||
- return;
|
|
||||||
+ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
|
+ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
|
||||||
+ while (next_buffer) {
|
+ while (next_buffer) {
|
||||||
+ buffer = next_buffer;
|
+ buffer = next_buffer;
|
||||||
+ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
|
+ next_buffer = pw_stream_dequeue_buffer(that->pw_stream_);
|
||||||
+
|
|
||||||
|
- if (!(buf = pw_stream_dequeue_buffer(that->pw_stream_))) {
|
||||||
+ if (next_buffer)
|
+ if (next_buffer)
|
||||||
+ pw_stream_queue_buffer (that->pw_stream_, buffer);
|
+ pw_stream_queue_buffer (that->pw_stream_, buffer);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (!buffer) {
|
||||||
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
- that->HandleBuffer(buf);
|
- that->HandleBuffer(buf);
|
||||||
@ -160,7 +163,7 @@ index 379341c833de..7a1ffa204ddf 100644
|
|||||||
}
|
}
|
||||||
|
|
||||||
BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type)
|
BaseCapturerPipeWire::BaseCapturerPipeWire(CaptureSourceType source_type)
|
||||||
@@ -197,10 +234,6 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() {
|
@@ -197,10 +238,6 @@ BaseCapturerPipeWire::~BaseCapturerPipeWire() {
|
||||||
pw_loop_destroy(pw_loop_);
|
pw_loop_destroy(pw_loop_);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -171,7 +174,7 @@ index 379341c833de..7a1ffa204ddf 100644
|
|||||||
if (start_request_signal_id_) {
|
if (start_request_signal_id_) {
|
||||||
g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_);
|
g_dbus_connection_signal_unsubscribe(connection_, start_request_signal_id_);
|
||||||
}
|
}
|
||||||
@@ -332,8 +365,7 @@ void BaseCapturerPipeWire::CreateReceivingStream() {
|
@@ -332,8 +369,7 @@ void BaseCapturerPipeWire::CreateReceivingStream() {
|
||||||
pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_,
|
pw_stream_add_listener(pw_stream_, &spa_stream_listener_, &pw_stream_events_,
|
||||||
this);
|
this);
|
||||||
pw_stream_flags flags = static_cast<pw_stream_flags>(
|
pw_stream_flags flags = static_cast<pw_stream_flags>(
|
||||||
@ -181,7 +184,7 @@ index 379341c833de..7a1ffa204ddf 100644
|
|||||||
if (pw_stream_connect(pw_stream_, PW_DIRECTION_INPUT, /*port_path=*/nullptr,
|
if (pw_stream_connect(pw_stream_, PW_DIRECTION_INPUT, /*port_path=*/nullptr,
|
||||||
flags, params,
|
flags, params,
|
||||||
/*n_params=*/1) != 0) {
|
/*n_params=*/1) != 0) {
|
||||||
@@ -344,15 +376,75 @@ void BaseCapturerPipeWire::CreateReceivingStream() {
|
@@ -344,15 +380,75 @@ void BaseCapturerPipeWire::CreateReceivingStream() {
|
||||||
}
|
}
|
||||||
|
|
||||||
void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) {
|
void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) {
|
||||||
@ -261,7 +264,7 @@ index 379341c833de..7a1ffa204ddf 100644
|
|||||||
if (srcStride != (desktop_size_.width() * kBytesPerPixel)) {
|
if (srcStride != (desktop_size_.width() * kBytesPerPixel)) {
|
||||||
RTC_LOG(LS_ERROR) << "Got buffer with stride different from screen stride: "
|
RTC_LOG(LS_ERROR) << "Got buffer with stride different from screen stride: "
|
||||||
<< srcStride
|
<< srcStride
|
||||||
@@ -361,21 +453,39 @@ void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) {
|
@@ -361,21 +457,39 @@ void BaseCapturerPipeWire::HandleBuffer(pw_buffer* buffer) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -314,7 +317,7 @@ index 379341c833de..7a1ffa204ddf 100644
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -813,10 +923,12 @@ void BaseCapturerPipeWire::CaptureFrame() {
|
@@ -813,10 +927,12 @@ void BaseCapturerPipeWire::CaptureFrame() {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -330,7 +333,7 @@ index 379341c833de..7a1ffa204ddf 100644
|
|||||||
if (!result) {
|
if (!result) {
|
||||||
callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
|
callback_->OnCaptureResult(Result::ERROR_TEMPORARY, nullptr);
|
||||||
return;
|
return;
|
||||||
@@ -837,4 +949,22 @@ bool BaseCapturerPipeWire::SelectSource(SourceId id) {
|
@@ -837,4 +953,22 @@ bool BaseCapturerPipeWire::SelectSource(SourceId id) {
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user