From 64465e595f4d4270ac1612ab5256bafa1fa4df15 Mon Sep 17 00:00:00 2001 From: Arkadiusz Hiler Date: Mon, 15 May 2023 21:05:25 +0300 Subject: [PATCH] media-converter: Don't hold state lock during pull_range --- media-converter/src/videoconv/imp.rs | 28 +++++++++++++++++++--------- 1 file changed, 19 insertions(+), 9 deletions(-) diff --git a/media-converter/src/videoconv/imp.rs b/media-converter/src/videoconv/imp.rs index a7b4f9b1..917bae73 100644 --- a/media-converter/src/videoconv/imp.rs +++ b/media-converter/src/videoconv/imp.rs @@ -571,16 +571,8 @@ impl <'a> Read for StreamSerializer<'a> { } impl VideoConv { - fn range( - &self, - _pad: &gst::Pad, - offset: u64, - in_buf: Option<&mut gst::BufferRef>, - requested_size: u32, - ) -> Result { - + fn get_upstream_range(&self, offset: u64, requested_size: u32) -> Result<(u64, u32), gst::FlowError> { let mut state = self.state.lock().unwrap(); - let state = match &mut *state { Some(s) => s, None => { return Err(gst::FlowError::Error); } @@ -593,6 +585,24 @@ impl VideoConv { let ups_offset = self.duration_ours_to_upstream(state, offset).unwrap(); let ups_requested_size = self.duration_ours_to_upstream(state, requested_size as u64).unwrap() as u32; + Ok((ups_offset, ups_requested_size)) + } + + fn range( + &self, + _pad: &gst::Pad, + offset: u64, + in_buf: Option<&mut gst::BufferRef>, + requested_size: u32, + ) -> Result { + let (ups_offset, ups_requested_size) = self.get_upstream_range(offset, requested_size)?; + + let mut state = self.state.lock().unwrap(); + let state = match &mut *state { + Some(s) => s, + None => { return Err(gst::FlowError::Error); } + }; + /* read and ignore upstream bytes */ self.sinkpad.pull_range(ups_offset, ups_requested_size)?;