+fn encode_frame(dst_id: u32, encoder: &mut Box<NAEncoder>, cvt: &mut OutputConvert, frm: NAFrameRef) -> bool {
+ let buf = frm.get_buffer();
+ let cbuf = match cvt {
+ OutputConvert::None => buf,
+ OutputConvert::Video(ref mut scaler, ref mut dbuf) => {
+ let cur_ifmt = get_scale_fmt_from_pic(&buf);
+ let last_ifmt = scaler.get_in_fmt();
+ if cur_ifmt != last_ifmt {
+ let ofmt = scaler.get_out_fmt();
+ let ret = NAScale::new(cur_ifmt, ofmt);
+ if ret.is_err() {
+ println!("error re-initialising scaler for {} -> {}", cur_ifmt, ofmt);
+ return false;
+ }
+ *scaler = ret.unwrap();
+ }
+ let ret = scaler.convert(&buf, dbuf);
+ if ret.is_err() {
+ println!("error converting frame for encoding");
+ return false;
+ }
+ dbuf.clone()
+ },
+ OutputConvert::Audio(ref dinfo, ref dchmap) => {
+ let ret = convert_audio_frame(&buf, dinfo, dchmap);
+ if ret.is_err() {
+ println!("error converting audio for stream {}", dst_id);
+ return false;
+ }
+ ret.unwrap()
+ },
+ };
+ let cfrm = NAFrame::new(frm.get_time_information(), frm.frame_type, frm.key, frm.get_info(), cbuf);
+ encoder.encode(&cfrm).unwrap();
+ true
+}
+