#[derive(Debug,Clone,Copy,PartialEq)]
#[allow(dead_code)]
pub enum DemuxerError {
#[derive(Debug,Clone,Copy,PartialEq)]
#[allow(dead_code)]
pub enum DemuxerError {
fn read_packet(&mut self, str: NAStreamRef, ts: NATimeInfo, keyframe: bool, size: usize) -> DemuxerResult<NAPacket>;
fn read_packet(&mut self, str: NAStreamRef, ts: NATimeInfo, keyframe: bool, size: usize) -> DemuxerResult<NAPacket>;
#[derive(Default)]
pub struct StreamManager {
streams: Vec<NAStreamRef>,
#[derive(Default)]
pub struct StreamManager {
streams: Vec<NAStreamRef>,
pub fn add_stream(&mut self, stream: NAStream) -> Option<usize> {
let stream_num = self.streams.len();
let mut str = stream.clone();
pub fn add_stream(&mut self, stream: NAStream) -> Option<usize> {
let stream_num = self.streams.len();
let mut str = stream.clone();
pub fn get_stream(&self, idx: usize) -> Option<NAStreamRef> {
if idx < self.streams.len() {
Some(self.streams[idx].clone())
pub fn get_stream(&self, idx: usize) -> Option<NAStreamRef> {
if idx < self.streams.len() {
Some(self.streams[idx].clone())
pub fn get_stream_by_id(&self, id: u32) -> Option<NAStreamRef> {
for i in 0..self.streams.len() {
if self.streams[i].get_id() == id {
pub fn get_stream_by_id(&self, id: u32) -> Option<NAStreamRef> {
for i in 0..self.streams.len() {
if self.streams[i].get_id() == id {
pub fn is_ignored_id(&self, id: u32) -> bool {
for i in 0..self.streams.len() {
if self.streams[i].get_id() == id {
pub fn is_ignored_id(&self, id: u32) -> bool {
for i in 0..self.streams.len() {
if self.streams[i].get_id() == id {
pub fn set_ignored(&mut self, idx: usize) {
if idx < self.ignored.len() {
self.ignored[idx] = true;
self.no_ign = false;
}
}
pub fn set_ignored(&mut self, idx: usize) {
if idx < self.ignored.len() {
self.ignored[idx] = true;
self.no_ign = false;
}
}
pub fn set_unignored(&mut self, idx: usize) {
if idx < self.ignored.len() {
self.ignored[idx] = false;
pub fn set_unignored(&mut self, idx: usize) {
if idx < self.ignored.len() {
self.ignored[idx] = false;
pub struct StreamIter<'a> {
streams: &'a [NAStreamRef],
pos: usize,
}
impl<'a> StreamIter<'a> {
pub struct StreamIter<'a> {
streams: &'a [NAStreamRef],
pos: usize,
}
impl<'a> StreamIter<'a> {
pub fn new(streams: &'a [NAStreamRef]) -> Self {
StreamIter { streams, pos: 0 }
}
pub fn new(streams: &'a [NAStreamRef]) -> Self {
StreamIter { streams, pos: 0 }
}
pub fn add_entry(&mut self, entry: SeekEntry) {
self.entries.push(entry);
}
pub fn add_entry(&mut self, entry: SeekEntry) {
self.entries.push(entry);
}
pub fn find_pos(&self, time: u64) -> Option<SeekEntry> {
if !self.entries.is_empty() {
// todo something faster like binary search
pub fn find_pos(&self, time: u64) -> Option<SeekEntry> {
if !self.entries.is_empty() {
// todo something faster like binary search
#[derive(Clone,Copy,Default)]
pub struct SeekIndexResult {
#[derive(Clone,Copy,Default)]
pub struct SeekIndexResult {
pub fn new() -> Self { Self::default() }
pub fn add_stream(&mut self, id: u32) -> usize {
let ret = self.stream_id_to_index(id);
pub fn new() -> Self { Self::default() }
pub fn add_stream(&mut self, id: u32) -> usize {
let ret = self.stream_id_to_index(id);
pub fn stream_id_to_index(&self, id: u32) -> Option<usize> {
for (idx, str) in self.seek_info.iter().enumerate() {
if str.id == id {
pub fn stream_id_to_index(&self, id: u32) -> Option<usize> {
for (idx, str) in self.seek_info.iter().enumerate() {
if str.id == id {
pub fn get_stream_index(&mut self, id: u32) -> Option<&mut StreamSeekInfo> {
for str in self.seek_info.iter_mut() {
if str.id == id {
pub fn get_stream_index(&mut self, id: u32) -> Option<&mut StreamSeekInfo> {
for str in self.seek_info.iter_mut() {
if str.id == id {
pub fn add_entry(&mut self, id: u32, entry: SeekEntry) {
let mut idx = self.stream_id_to_index(id);
if idx.is_none() {
pub fn add_entry(&mut self, id: u32, entry: SeekEntry) {
let mut idx = self.stream_id_to_index(id);
if idx.is_none() {
pub fn find_pos(&self, time: u64) -> Option<SeekIndexResult> {
let mut cand = None;
for str in self.seek_info.iter() {
pub fn find_pos(&self, time: u64) -> Option<SeekIndexResult> {
let mut cand = None;
for str in self.seek_info.iter() {
pub fn get_stream(&self, idx: usize) -> Option<NAStreamRef> {
self.streams.get_stream(idx)
}
pub fn get_stream(&self, idx: usize) -> Option<NAStreamRef> {
self.streams.get_stream(idx)
}
pub fn get_stream_by_id(&self, id: u32) -> Option<NAStreamRef> {
self.streams.get_stream_by_id(id)
}
pub fn get_stream_by_id(&self, id: u32) -> Option<NAStreamRef> {
self.streams.get_stream_by_id(id)
}
pub fn is_ignored_stream(&self, idx: usize) -> bool {
self.streams.is_ignored(idx)
}
pub fn is_ignored_stream(&self, idx: usize) -> bool {
self.streams.is_ignored(idx)
}
pub fn set_ignored_stream(&mut self, idx: usize) {
self.streams.set_ignored(idx)
}
pub fn set_ignored_stream(&mut self, idx: usize) {
self.streams.set_ignored(idx)
}
pub fn set_unignored_stream(&mut self, idx: usize) {
self.streams.set_unignored(idx)
}
pub fn set_unignored_stream(&mut self, idx: usize) {
self.streams.set_unignored(idx)
}
pub fn get_frame(&mut self) -> DemuxerResult<NAPacket> {
loop {
let res = self.dmx.get_frame(&mut self.streams);
pub fn get_frame(&mut self) -> DemuxerResult<NAPacket> {
loop {
let res = self.dmx.get_frame(&mut self.streams);
pub fn create_demuxer<'a>(dmxcr: &DemuxerCreator, br: &'a mut ByteReader<'a>) -> DemuxerResult<Demuxer<'a>> {
let mut dmx = dmxcr.new_demuxer(br);
let mut str = StreamManager::new();
pub fn create_demuxer<'a>(dmxcr: &DemuxerCreator, br: &'a mut ByteReader<'a>) -> DemuxerResult<Demuxer<'a>> {
let mut dmx = dmxcr.new_demuxer(br);
let mut str = StreamManager::new();
#[derive(Default)]
pub struct RegisteredDemuxers {
dmxs: Vec<&'static DemuxerCreator>,
}
impl RegisteredDemuxers {
#[derive(Default)]
pub struct RegisteredDemuxers {
dmxs: Vec<&'static DemuxerCreator>,
}
impl RegisteredDemuxers {
pub fn find_demuxer(&self, name: &str) -> Option<&DemuxerCreator> {
for &dmx in self.dmxs.iter() {
if dmx.get_name() == name {
pub fn find_demuxer(&self, name: &str) -> Option<&DemuxerCreator> {
for &dmx in self.dmxs.iter() {
if dmx.get_name() == name {