X-Git-Url: https://git.nihav.org/?a=blobdiff_plain;f=videoplayer%2Fsrc%2Fvideodec.rs;h=b8867f1ad46f947d972ca267e0cb74c407688266;hb=HEAD;hp=7ebf17710fb7e2c38efacfbd18487920b74a3304;hpb=31611a29ca46057801173423e566748958d7eeae;p=nihav-player.git diff --git a/videoplayer/src/videodec.rs b/videoplayer/src/videodec.rs index 7ebf177..295cfc7 100644 --- a/videoplayer/src/videodec.rs +++ b/videoplayer/src/videodec.rs @@ -137,6 +137,16 @@ impl VideoDecoder { return self.convert_buf(bt, ts); } }, + #[cfg(feature="hwaccel")] + DecoderType::VideoHW(ref mut vdec) => { + let _ = vdec.queue_pkt(pkt); + while let Some(frm) = vdec.get_frame() { + let bt = frm.get_buffer(); + if let NABufferType::None = bt { continue; } + let ts = frm.get_dts().unwrap_or_else(|| frm.get_pts().unwrap_or(0)); + return self.convert_buf(bt, ts); + } + }, _ => panic!("not a video decoder!"), }; None @@ -188,6 +198,15 @@ impl VideoDecoder { return self.convert_buf(bt, ts); } }, + #[cfg(feature="hwaccel")] + DecoderType::VideoHW(ref mut vdec) => { + while let Some(frm) = vdec.get_frame() { + let bt = frm.get_buffer(); + if let NABufferType::None = bt { continue; } + let ts = frm.get_dts().unwrap_or_else(|| frm.get_pts().unwrap_or(0)); + return self.convert_buf(bt, ts); + } + }, _ => {}, }; None @@ -210,6 +229,15 @@ impl VideoDecoder { return self.convert_buf(bt, ts); } }, + #[cfg(feature="hwaccel")] + DecoderType::VideoHW(ref mut dec) => { + while let Some(frm) = dec.get_last_frames() { + let bt = frm.get_buffer(); + if let NABufferType::None = bt { continue; } + let ts = frm.get_dts().unwrap_or_else(|| frm.get_pts().unwrap_or(0)); + return self.convert_buf(bt, ts); + } + }, _ => {}, }; None @@ -224,6 +252,10 @@ impl VideoDecoder { dec.flush(); reord.flush(); }, + #[cfg(feature="hwaccel")] + DecoderType::VideoHW(ref mut dec) => { + dec.flush(); + }, _ => {}, }; }