use crate::encoding::{BitWriter, Encodable, EncodingResult};
use crate::time::*;
impl Encodable for SpliceTime {
fn encode(&self, writer: &mut BitWriter) -> EncodingResult<()> {
writer.write_bits(self.time_specified_flag as u64, 1)?;
if self.time_specified_flag != 0 {
writer.write_bits(0x3F, 6)?;
if let Some(pts_time) = self.pts_time {
writer.write_bits(pts_time & 0x1FFFFFFFF, 33)?;
} else {
writer.write_bits(0u64, 33)?;
}
} else {
writer.write_bits(0x7F, 7)?; }
Ok(())
}
fn encoded_size(&self) -> usize {
if self.time_specified_flag != 0 {
5 } else {
1 }
}
}
impl Encodable for BreakDuration {
fn encode(&self, writer: &mut BitWriter) -> EncodingResult<()> {
writer.write_bits(self.auto_return as u64, 1)?;
writer.write_bits(0x3F, 6)?;
writer.write_bits(self.duration & 0x1FFFFFFFF, 33)?;
Ok(())
}
fn encoded_size(&self) -> usize {
5 }
}