libspa/param/
format_utils.rs

1// Copyright The pipewire-rs Contributors.
2// SPDX-License-Identifier: MIT
3
4use std::mem::MaybeUninit;
5
6use crate::{
7    param::format::{MediaSubtype, MediaType},
8    pod::Pod,
9    utils::result::{Error, SpaResult},
10};
11
12/// helper function to parse format properties type
13pub fn parse_format(format: &Pod) -> Result<(MediaType, MediaSubtype), Error> {
14    let mut media_type: MaybeUninit<u32> = MaybeUninit::uninit();
15    let mut media_subtype: MaybeUninit<u32> = MaybeUninit::uninit();
16
17    let res = unsafe {
18        spa_sys::spa_format_parse(
19            format.as_raw_ptr(),
20            media_type.as_mut_ptr(),
21            media_subtype.as_mut_ptr(),
22        )
23    };
24
25    match SpaResult::from_c(res).into_sync_result() {
26        Err(e) => Err(e),
27        Ok(_) => Ok(unsafe {
28            (
29                MediaType::from_raw(media_type.assume_init()),
30                MediaSubtype::from_raw(media_subtype.assume_init()),
31            )
32        }),
33    }
34}