mod bitreader;
pub mod parser;
#[cfg(test)]
pub(crate) mod testutil;
pub use parser::{CodecConfig, CodecParser, VideoParams};
#[cfg(feature = "_nal")]
pub mod nal;
#[cfg(feature = "codec-h264")]
#[cfg_attr(docsrs, doc(cfg(feature = "codec-h264")))]
pub mod h264;
#[cfg(feature = "codec-h265")]
#[cfg_attr(docsrs, doc(cfg(feature = "codec-h265")))]
pub mod h265;
#[cfg(feature = "codec-vvc")]
#[cfg_attr(docsrs, doc(cfg(feature = "codec-vvc")))]
pub mod vvc;
#[cfg(feature = "codec-av1")]
#[cfg_attr(docsrs, doc(cfg(feature = "codec-av1")))]
pub mod av1;
#[cfg(feature = "codec-av1")]
pub(crate) mod obu;
#[cfg(feature = "codec-vp9")]
#[cfg_attr(docsrs, doc(cfg(feature = "codec-vp9")))]
pub mod vp9;
#[cfg(feature = "codec-aac")]
#[cfg_attr(docsrs, doc(cfg(feature = "codec-aac")))]
pub mod aac;
#[cfg(feature = "codec-aac")]
pub use aac::{parse_adts, AdtsHeader};
#[cfg(feature = "codec-h264")]
pub use h264::{annexb_to_avcc, avcc_to_annexb, iter_nals_annexb, parse_sps, SpsInfo};
pub mod dispatch {
use super::*;
use crate::CodecId;
#[allow(unused_variables)]
pub fn parse_config(codec: CodecId, data: &[u8]) -> Option<VideoParams> {
match codec {
#[cfg(feature = "codec-h264")]
CodecId::H264 => <h264::H264 as CodecParser>::parse_config(data),
#[cfg(feature = "codec-h265")]
CodecId::H265 => <h265::H265 as CodecParser>::parse_config(data),
#[cfg(feature = "codec-vvc")]
CodecId::VVC => <vvc::Vvc as CodecParser>::parse_config(data),
#[cfg(feature = "codec-av1")]
CodecId::AV1 => <av1::Av1 as CodecParser>::parse_config(data),
#[cfg(feature = "codec-vp9")]
CodecId::VP9 => <vp9::Vp9 as CodecParser>::parse_config(data),
_ => None,
}
}
#[allow(unused_variables)]
pub fn is_random_access_point(codec: CodecId, data: &[u8]) -> bool {
match codec {
#[cfg(feature = "codec-h264")]
CodecId::H264 => <h264::H264 as CodecParser>::is_random_access_point(data),
#[cfg(feature = "codec-h265")]
CodecId::H265 => <h265::H265 as CodecParser>::is_random_access_point(data),
#[cfg(feature = "codec-vvc")]
CodecId::VVC => <vvc::Vvc as CodecParser>::is_random_access_point(data),
#[cfg(feature = "codec-av1")]
CodecId::AV1 => <av1::Av1 as CodecParser>::is_random_access_point(data),
#[cfg(feature = "codec-vp9")]
CodecId::VP9 => <vp9::Vp9 as CodecParser>::is_random_access_point(data),
_ => false,
}
}
#[allow(unused_variables)]
pub fn hls_codec_string(codec: CodecId, params: &VideoParams) -> Option<String> {
match codec {
#[cfg(feature = "codec-h264")]
CodecId::H264 => Some(<h264::H264 as CodecParser>::hls_codec_string(params)),
#[cfg(feature = "codec-h265")]
CodecId::H265 => Some(<h265::H265 as CodecParser>::hls_codec_string(params)),
#[cfg(feature = "codec-vvc")]
CodecId::VVC => Some(<vvc::Vvc as CodecParser>::hls_codec_string(params)),
#[cfg(feature = "codec-av1")]
CodecId::AV1 => Some(<av1::Av1 as CodecParser>::hls_codec_string(params)),
#[cfg(feature = "codec-vp9")]
CodecId::VP9 => Some(<vp9::Vp9 as CodecParser>::hls_codec_string(params)),
_ => None,
}
}
}