}
transcoder.apply_decoder_options(decoder.as_mut(), str_id);
let desc = register::get_codec_description(info.get_name());
- let has_b = if let Some(desc) = desc {
- desc.has_reorder()
- } else {
+ let caps = if let Some(desc) = desc {
+ desc.caps
+ } else if s.get_media_type() == StreamType::Video {
println!("No codec description found, using B-frame reorderer.");
- true
+ register::CODEC_CAP_REORDER
+ } else {
+ 0
+ };
+ let reorderer: Box<dyn FrameReorderer> = if (caps & register::CODEC_CAP_COMPLEX_REORDER) != 0 {
+ Box::new(ComplexReorderer::new())
+ } else if (caps & register::CODEC_CAP_REORDER) != 0 {
+ Box::new(IPBReorderer::new())
+ } else {
+ Box::new(NoReorderer::new())
};
- let reorderer: Box<dyn FrameReorderer> = if has_b { Box::new(IPBReorderer::new()) } else { Box::new(NoReorderer::new()) };
transcoder.decoders.push(Some(DecodeContext{ dsupp, decoder, reorderer }));
} else {
println!("No decoder for stream {} ({}) is found", str_id, info.get_name());