Skip to content

Commit 9bbca7a

Browse files
committed
update pr-1791
2 parents 2dc8ed5 + efcb8af commit 9bbca7a

File tree

1 file changed

+13
-18
lines changed

1 file changed

+13
-18
lines changed

src/pw_utils.rs

Lines changed: 13 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ use std::ptr::NonNull;
88
use std::rc::Rc;
99
use std::time::Duration;
1010

11-
use smithay::backend::renderer::ExportMem;
1211
use anyhow::{ensure};
1312
use anyhow::Context as _;
1413
use calloop::timer::{TimeoutAction, Timer};
@@ -17,6 +16,7 @@ use pipewire::context::ContextRc;
1716
use pipewire::core::{CoreRc, PW_ID_CORE};
1817
use pipewire::main_loop::MainLoopRc;
1918
use pipewire::properties::PropertiesBox;
19+
use smithay::backend::renderer::ExportMem;
2020
use pipewire::spa::buffer::DataType;
2121
use pipewire::spa::param::format::{FormatProperties, MediaSubtype, MediaType};
2222
use pipewire::spa::param::format_utils::parse_format;
@@ -232,12 +232,13 @@ fn make_video_params(
232232
}
233233
}
234234

235-
fn make_video_params_for_initial_negotiation(
235+
/// this function return an extra Vec<u8> to avoid extra allocation when building Pod
236+
fn make_video_params_for_initial_negotiation_with_extra_buffer(
236237
possible_modifiers: &FormatSet,
237238
size: Size<u32, Physical>,
238239
refresh: u32,
239240
alpha: bool,
240-
) -> Vec<pod::Object> {
241+
) -> Vec<(pod::Object, Vec<u8>)> {
241242
let f = |alpha| {
242243
let video_formats = if alpha {
243244
vec![VideoFormat::BGRA]
@@ -259,34 +260,28 @@ fn make_video_params_for_initial_negotiation(
259260
trace!("offering: {modifiers:?}");
260261

261262
if modifiers.len() == 0 {
262-
vec![make_video_params(
263-
&video_formats,
264-
&vec![],
265-
size,
266-
refresh,
267-
false,
268-
)]
263+
vec![
264+
(make_video_params(&video_formats, &vec![], size, refresh, false), Vec::new()),
265+
]
269266
} else {
270267
vec![
271-
make_video_params(&video_formats, &modifiers, size, refresh, false),
272-
make_video_params(&video_formats, &vec![], size, refresh, false),
268+
(make_video_params(&video_formats, &modifiers, size, refresh, false), Vec::new()),
269+
(make_video_params(&video_formats, &vec![], size, refresh, false), Vec::new()),
273270
]
274271
}
275272
};
276-
let pod_objects = if alpha {
273+
let pod_objects_with_extra_buffer = if alpha {
277274
[f(true), f(false)].concat()
278275
} else {
279276
f(false)
280277
};
281-
pod_objects
278+
pod_objects_with_extra_buffer
282279
}
283280

284281
macro_rules! make_video_params_for_initial_negotiation_macro {
285282
($params:ident, $formats:expr, $size:expr, $refresh:expr, $alpha:expr) => {
286-
let $params = make_video_params_for_initial_negotiation($formats, $size, $refresh, $alpha);
287-
let mut obj_with_buffer: Vec<(&pod::Object, Vec<u8>)> =
288-
$params.iter().map(|obj| (obj, Vec::new())).collect();
289-
let $params: Vec<_> = obj_with_buffer
283+
let mut $params = make_video_params_for_initial_negotiation_with_extra_buffer($formats, $size, $refresh, $alpha);
284+
let $params: Vec<_> = $params
290285
.iter_mut()
291286
.map(|(obj, buf)| make_pod(buf, (*obj).clone()))
292287
.collect();

0 commit comments

Comments
 (0)