hams: HAMShuffler<u8>,
width: usize,
height: usize,
+ decs: RegisteredDecoders,
}
impl QDrawDecoder {
fn new() -> Self {
- Self::default()
+ let mut decs = RegisteredDecoders::new();
+ crate::qt_register_all_decoders(&mut decs);
+ Self{ decs, ..Default::default() }
}
}
br.read_buf(&mut data)?;
br.seek(SeekFrom::Start(end))?;
- let mut decs = RegisteredDecoders::new();
- crate::qt_register_all_decoders(&mut decs);
let cname = match &fcc {
b"8BPS" => "8bps",
b"cvid" => "cinepak",
b"SVQ3" | b"svq3" => "sorenson-video3",
_ => "unknown",
};
- let decfunc = if let Some(df) = decs.find_decoder(cname) {
+ let decfunc = if let Some(df) = self.decs.find_decoder(cname) {
df
} else {
println!("can't find {cname} decoder");
Box::new(QDrawDecoder::new())
}
+pub fn get_qdraw_decoder_with_external_decreg(ref_decs: &RegisteredDecoders) -> Box<dyn NADecoder + Send> {
+ let mut decs = RegisteredDecoders::new();
+ for dec in ref_decs.iter() {
+ decs.add_decoder(*dec);
+ }
+ Box::new(QDrawDecoder{ decs, ..Default::default() })
+}
+
#[cfg(test)]
mod test {
use nihav_core::codecs::RegisteredDecoders;
pub use crate::codecs::qt_register_all_decoders;
#[cfg(feature="encoders")]
pub use crate::codecs::qt_register_all_encoders;
+///! Creates QuickDraw with externally provided list of other decoders.
+///!
+///! QuickDraw data may actually encode picture with some other QuickTime codec,
+///! e.g. RoadPizza or Cinepak. So in order to decode that data it may need
+///! to create another decoder, which may be implemented elsewhere.
+///! Hence the need for this special function.
+#[cfg(feature="decoder_qdraw")]
+pub use crate::codecs::qdraw::get_qdraw_decoder_with_external_decreg;
#[cfg(feature="demuxers")]
mod demuxers;