diff --git a/devices/src/virtio/video/decoder/backend/ffmpeg.rs b/devices/src/virtio/video/decoder/backend/ffmpeg.rs index 102abac5eb..ac93887487 100644 --- a/devices/src/virtio/video/decoder/backend/ffmpeg.rs +++ b/devices/src/virtio/video/decoder/backend/ffmpeg.rs @@ -83,7 +83,7 @@ impl AvBufferSource for InputBuffer { /// Types of input job we can receive from the crosvm decoder code. enum CodecJob { - Packet(InputBuffer), + Packet(AvPacket<'static>), Flush, } @@ -214,10 +214,9 @@ impl FfmpegDecoderSession { /// input at the moment. fn try_send_packet( &mut self, - input_packet: &mut InputBuffer, + input_packet: &AvPacket<'static>, ) -> Result { - let avpacket = AvPacket::new(input_packet.bitstream_id as i64, input_packet); - match self.context.try_send_packet(&avpacket) { + match self.context.try_send_packet(input_packet) { Ok(true) => Ok(true), // The codec cannot take more input at the moment, we'll try again after we receive some // frames. @@ -452,7 +451,11 @@ impl DecoderSession for FfmpegDecoderSession { event_queue: Arc::downgrade(&self.event_queue), }; - self.codec_jobs.push_back(CodecJob::Packet(input_buffer)); + let avpacket = AvPacket::new_owned(bitstream_id as i64, input_buffer) + .context("while creating AvPacket") + .map_err(VideoError::BackendFailure)?; + + self.codec_jobs.push_back(CodecJob::Packet(avpacket)); self.try_decode() .context("while decoding")