use std::io::{self, Seek};
use byteorder::ReadBytesExt;
use bytes::Bytes;
use enhanced::ExAudioTagHeader;
use legacy::{LegacyAudioTagHeader, SoundFormat};
use crate::error::FlvError;
pub mod enhanced;
pub mod legacy;
#[derive(Debug, Clone, PartialEq)]
pub enum AudioTagHeader {
Legacy(LegacyAudioTagHeader),
Enhanced(ExAudioTagHeader),
}
impl AudioTagHeader {
#[allow(clippy::unusual_byte_groupings)]
pub fn demux(reader: &mut io::Cursor<Bytes>) -> Result<Self, FlvError> {
let byte = reader.read_u8()?;
let sound_format = SoundFormat::from((byte & 0b1111_00_0_0) >> 4);
reader.seek_relative(-1)?;
if sound_format == SoundFormat::ExHeader {
ExAudioTagHeader::demux(reader).map(AudioTagHeader::Enhanced)
} else {
LegacyAudioTagHeader::demux(reader).map(AudioTagHeader::Legacy)
}
}
}