extern crate ffmpeg_next as ffmpeg;
use ffmpeg::codec::Parameters as AvCodecParameters;
use ffmpeg::{Error as AvError, Rational as AvRational};
use crate::error::Error;
use crate::io::Reader;
type Result<T> = std::result::Result<T, Error>;
#[derive(Clone)]
pub struct StreamInfo {
pub index: usize,
codec_parameters: AvCodecParameters,
time_base: AvRational,
}
impl StreamInfo {
pub(crate) fn from_reader(reader: &Reader, stream_index: usize) -> Result<Self> {
let stream = reader
.input
.stream(stream_index)
.ok_or(AvError::StreamNotFound)?;
Self::from_params(stream.parameters(), stream.time_base(), stream_index)
}
pub fn from_params(
copar: AvCodecParameters,
timebase: AvRational,
stream_index: usize,
) -> Result<Self> {
Ok(Self {
index: stream_index,
codec_parameters: copar,
time_base: timebase,
})
}
pub(crate) fn into_parts(self) -> (usize, AvCodecParameters, AvRational) {
(self.index, self.codec_parameters, self.time_base)
}
}
unsafe impl Send for StreamInfo {}
unsafe impl Sync for StreamInfo {}