diff --git a/Cargo.toml b/Cargo.toml index ccba9f9..5b895dd 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -14,6 +14,7 @@ edition = "2018" bitreader = "0.3.1" memchr = "2.1.1" rfc6381-codec = "0.1" +log = "0.4" [dev-dependencies] hex-literal = "0.2.1" diff --git a/src/annexb.rs b/src/annexb.rs index d9ca1fd..eaa23b7 100644 --- a/src/annexb.rs +++ b/src/annexb.rs @@ -3,6 +3,7 @@ use crate::Context; use memchr; +use log::*; #[derive(Debug)] enum ParseState { @@ -95,7 +96,7 @@ impl AnnexBReader let b = buf[i]; match self.state { ParseState::End => { - eprintln!("no previous call to start()"); + error!("no previous call to start()"); self.state = ParseState::Error; return; }, @@ -214,7 +215,7 @@ impl AnnexBReader self.to(ParseState::InUnitStart); }, _ => { - eprintln!("Expected either start code byte 0x01 or end_units(), got byte {:#x}", b); + error!("Expected either start code byte 0x01 or end_units(), got byte {:#x}", b); self.to(ParseState::Error); }, } @@ -273,12 +274,12 @@ impl AnnexBReader }; self.nal_reader.push(ctx, &buf[start..end_index]) } else { - eprintln!("AnnexBReader: no start_index"); + error!("AnnexBReader: no start_index"); } } fn err(&mut self, b: u8) { - eprintln!("AnnexBReader: state={:?}, invalid byte {:#x}", self.state, b); + error!("AnnexBReader: state={:?}, invalid byte {:#x}", self.state, b); self.state = ParseState::Start; } } diff --git a/src/nal/mod.rs b/src/nal/mod.rs index c3e9e00..d4a325e 100644 --- a/src/nal/mod.rs +++ b/src/nal/mod.rs @@ -13,6 +13,7 @@ use crate::annexb::NalReader; use std::cell::RefCell; use crate::Context; use std::fmt; +use log::*; #[derive(PartialEq, Hash, Debug, Copy, Clone)] pub enum UnitType { @@ -210,7 +211,7 @@ impl NalReader for NalSwitch { }, Err(e) => { // TODO: proper error propagation - eprintln!("Bad NAL header: {:?}", e); + error!("Bad NAL header: {:?}", e); NalSwitchState::Ignoring } }; diff --git a/src/nal/pps.rs b/src/nal/pps.rs index c87c246..b5fed24 100644 --- a/src/nal/pps.rs +++ b/src/nal/pps.rs @@ -5,6 +5,7 @@ use super::sps; use std::marker; use crate::{rbsp, Context}; use crate::rbsp::RbspBitReader; +use log::*; #[derive(Debug)] pub enum PpsError { @@ -301,7 +302,7 @@ impl NalHandler for PicParameterSetNalHandler { ctx.put_pic_param_set(pps); }, Err(e) => { - eprintln!("pps: {:?}", e); + error!("pps: {:?}", e); }, } } diff --git a/src/nal/sei/buffering_period.rs b/src/nal/sei/buffering_period.rs index 2b3bbb0..6882ed8 100644 --- a/src/nal/sei/buffering_period.rs +++ b/src/nal/sei/buffering_period.rs @@ -5,6 +5,7 @@ use crate::nal::pps; use crate::rbsp::RbspBitReader; use crate::Context; use crate::nal::sei::HeaderType; +use log::*; #[derive(Debug)] enum BufferingPeriodError { @@ -94,9 +95,9 @@ impl SeiCompletePayloadReader for BufferingPeriodPayloadReader { fn header(&mut self, ctx: &mut Context, payload_type: HeaderType, buf: &[u8]) { assert_eq!(payload_type, HeaderType::BufferingPeriod); match BufferingPeriod::read(ctx, buf) { - Err(e) => eprintln!("Failure reading buffering_period: {:?}", e), + Err(e) => error!("Failure reading buffering_period: {:?}", e), Ok(buffering_period) => { -println!("buffering_period {:#?}", buffering_period); + info!("TODO: expose buffering_period {:#?}", buffering_period); } } } diff --git a/src/nal/sei/mod.rs b/src/nal/sei/mod.rs index 3d53687..84fce9b 100644 --- a/src/nal/sei/mod.rs +++ b/src/nal/sei/mod.rs @@ -6,6 +6,7 @@ use crate::Context; use crate::nal::NalHandler; use crate::nal::NalHeader; use crate::rbsp::RbspDecoder; +use log::*; #[derive(Debug, Copy, Clone, PartialEq)] pub enum HeaderType { @@ -370,15 +371,15 @@ impl NalHandler for SeiHeaderReader { // be 0b10000000 in an SEI payload since SEI messages are byte-aligned). }, SeiHeaderState::PayloadType { .. } => { - eprintln!("End of SEI data encountered while reading SEI payloadType"); + error!("End of SEI data encountered while reading SEI payloadType"); self.reader.reset(ctx); }, SeiHeaderState::PayloadSize { .. } => { - eprintln!("End of SEI data encountered while reading SEI payloadSize"); + error!("End of SEI data encountered while reading SEI payloadSize"); self.reader.reset(ctx); }, SeiHeaderState::Payload { payload_type, payload_size, consumed_size } => { - eprintln!("End of SEI data encountered having read {} bytes of payloadSize={} for header type {:?}", consumed_size, payload_size, payload_type); + error!("End of SEI data encountered having read {} bytes of payloadSize={} for header type {:?}", consumed_size, payload_size, payload_type); self.reader.reset(ctx); }, } diff --git a/src/nal/sei/pic_timing.rs b/src/nal/sei/pic_timing.rs index 4fea2ef..35202bb 100644 --- a/src/nal/sei/pic_timing.rs +++ b/src/nal/sei/pic_timing.rs @@ -6,6 +6,7 @@ use crate::rbsp::RbspBitReader; use crate::nal::sps; use crate::rbsp::RbspBitReaderError; use bitreader::BitReaderError; +use log::*; // FIXME: SPS selection // We should really wait until we know what SPS is in use by the frame which follows the @@ -331,7 +332,7 @@ impl SeiCompletePayloadReader for PicTimingReader { fn header(&mut self, ctx: &mut Context, payload_type: HeaderType, buf: &[u8]) { assert_eq!(payload_type, HeaderType::PicTiming); match PicTiming::read(ctx, buf) { - Err(e) => eprintln!("Failure reading pic_timing: {:?}", e), + Err(e) => error!("Failure reading pic_timing: {:?}", e), Ok(pic_timing) => { self.handler.handle(ctx, pic_timing); } diff --git a/src/nal/sei/user_data_registered_itu_t_t35.rs b/src/nal/sei/user_data_registered_itu_t_t35.rs index 1f0a545..c401ef9 100644 --- a/src/nal/sei/user_data_registered_itu_t_t35.rs +++ b/src/nal/sei/user_data_registered_itu_t_t35.rs @@ -1,6 +1,7 @@ use crate::nal::sei::HeaderType; use crate::Context; use crate::nal::sei::SeiCompletePayloadReader; +use log::*; #[derive(Debug)] pub enum ItuTT35Error { @@ -447,7 +448,7 @@ impl SeiCompletePayloadReader for UserDataRegisteredItuTT35Reader { - eprintln!("Failed to read user_data_registered_itu_t_t35 header: {:?}", e); + error!("Failed to read user_data_registered_itu_t_t35 header: {:?}", e); } } } diff --git a/src/nal/slice/mod.rs b/src/nal/slice/mod.rs index 9b9fb62..50fab22 100644 --- a/src/nal/slice/mod.rs +++ b/src/nal/slice/mod.rs @@ -9,6 +9,7 @@ use crate::nal::sps; use std::marker; use crate::nal::sps::SeqParameterSet; use crate::nal::NalHeader; +use log::*; enum ParseState { Unstarted, @@ -542,7 +543,6 @@ impl super::NalHandler for SliceLayerWithoutPartitioningRbsp { type Ctx = Ctx; fn start(&mut self, _ctx: &mut Context, header: NalHeader) { - println!("SliceLayerWithoutPartitioningRbsp: start()"); self.state = ParseState::Start(header); } @@ -552,8 +552,8 @@ impl super::NalHandler for SliceLayerWithoutPartitioningRbsp { ParseState::Start(header) => { let mut r = RbspBitReader::new(buf); match SliceHeader::read(ctx, &mut r, header) { - Ok(header) => println!("{:#?}", header), - Err(e) => println!("slice_header() error: SliceHeaderError::{:?}", e), + Ok(header) => info!("TODO: expose to caller: {:#?}", header), + Err(e) => error!("slice_header() error: SliceHeaderError::{:?}", e), } self.state = ParseState::Continue(header); }, @@ -564,7 +564,7 @@ impl super::NalHandler for SliceLayerWithoutPartitioningRbsp { } fn end(&mut self, _ctx: &mut Context) { - println!("SliceLayerWithoutPartitioningRbsp: end()"); + // TODO } } impl Default for SliceLayerWithoutPartitioningRbsp { diff --git a/src/rbsp.rs b/src/rbsp.rs index 6ffbc06..75bc2a5 100644 --- a/src/rbsp.rs +++ b/src/rbsp.rs @@ -26,6 +26,7 @@ use std::ops::{Deref, DerefMut}; use bitreader; use crate::nal::{NalHandler, NalHeader}; use crate::Context; +use log::*; #[derive(Debug)] enum ParseState { @@ -76,7 +77,7 @@ impl RbspDecoder if let Some(start) = start_index { self.nal_reader.push(ctx, &buf[start..end_index]) } else { - eprintln!("RbspDecoder: no start_index"); + error!("RbspDecoder: no start_index"); } }