use std::ffi::CStr;
use std::os::raw::c_char;
use crate::ffi;
#[derive(Debug, Clone, Default, PartialEq)]
pub struct Metadata {
pub duration: f64,
pub num_samples: i64,
pub sample_rate: i32,
pub num_channels: i32,
pub bit_rate: i64,
pub sample_format: String,
pub codec: String,
pub container: String,
}
impl Metadata {
pub(crate) fn from_ffi(raw: &ffi::AvfMetadata) -> Self {
Self {
duration: raw.duration,
num_samples: raw.num_samples,
sample_rate: raw.sample_rate,
num_channels: raw.num_channels,
bit_rate: raw.bit_rate,
sample_format: fixed_string(&raw.sample_format),
codec: fixed_string(&raw.codec),
container: fixed_string(&raw.container),
}
}
}
fn fixed_string(buffer: &[c_char]) -> String {
unsafe {
CStr::from_ptr(buffer.as_ptr())
.to_string_lossy()
.into_owned()
}
}