mirror of
https://gitlab.freedesktop.org/gstreamer/gst-plugins-rs.git
synced 2024-09-27 14:30:27 +00:00
Move duplicated code into a function
This commit is contained in:
parent
20a2c7bd33
commit
eac466040e
1 changed files with 22 additions and 36 deletions
|
@ -61,6 +61,26 @@ impl Adapter {
|
||||||
self.size
|
self.size
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn copy_data(deque: &VecDeque<ReadMappedBuffer>, skip: usize, data: &mut [u8], size: usize) {
|
||||||
|
let mut skip = skip;
|
||||||
|
let mut left = size;
|
||||||
|
let mut idx = 0;
|
||||||
|
|
||||||
|
for item in deque {
|
||||||
|
let data_item = item.as_slice();
|
||||||
|
|
||||||
|
let to_copy = cmp::min(left, data_item.len() - skip);
|
||||||
|
data[idx..idx + to_copy].copy_from_slice(&data_item[skip..skip + to_copy]);
|
||||||
|
skip = 0;
|
||||||
|
idx += to_copy;
|
||||||
|
left -= to_copy;
|
||||||
|
if left == 0 {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
assert_eq!(left, 0);
|
||||||
|
}
|
||||||
|
|
||||||
pub fn peek(&mut self, size: usize) -> Result<&[u8], AdapterError> {
|
pub fn peek(&mut self, size: usize) -> Result<&[u8], AdapterError> {
|
||||||
if self.size < size {
|
if self.size < size {
|
||||||
return Err(AdapterError::NotEnoughData);
|
return Err(AdapterError::NotEnoughData);
|
||||||
|
@ -80,24 +100,7 @@ impl Adapter {
|
||||||
self.scratch.reserve(size);
|
self.scratch.reserve(size);
|
||||||
{
|
{
|
||||||
let data = self.scratch.as_mut_slice();
|
let data = self.scratch.as_mut_slice();
|
||||||
|
Self::copy_data(&self.deque, self.skip, data, size);
|
||||||
let mut skip = self.skip;
|
|
||||||
let mut left = size;
|
|
||||||
let mut idx = 0;
|
|
||||||
|
|
||||||
for item in &self.deque {
|
|
||||||
let data_item = item.as_slice();
|
|
||||||
|
|
||||||
let to_copy = cmp::min(left, data_item.len() - skip);
|
|
||||||
data[idx..idx + to_copy].copy_from_slice(&data_item[skip..skip + to_copy]);
|
|
||||||
skip = 0;
|
|
||||||
idx += to_copy;
|
|
||||||
left -= to_copy;
|
|
||||||
if left == 0 {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert_eq!(left, 0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Ok(self.scratch.as_slice())
|
Ok(self.scratch.as_slice())
|
||||||
|
@ -132,24 +135,7 @@ impl Adapter {
|
||||||
{
|
{
|
||||||
let mut map = new.map_readwrite().unwrap();
|
let mut map = new.map_readwrite().unwrap();
|
||||||
let data = map.as_mut_slice();
|
let data = map.as_mut_slice();
|
||||||
|
Self::copy_data(&self.deque, self.skip, data, size);
|
||||||
let mut skip = self.skip;
|
|
||||||
let mut left = size;
|
|
||||||
let mut idx = 0;
|
|
||||||
|
|
||||||
for item in &self.deque {
|
|
||||||
let data_item = item.as_slice();
|
|
||||||
|
|
||||||
let to_copy = cmp::min(left, data_item.len() - skip);
|
|
||||||
data[idx..idx + to_copy].copy_from_slice(&data_item[skip..skip + to_copy]);
|
|
||||||
skip = 0;
|
|
||||||
idx += to_copy;
|
|
||||||
left -= to_copy;
|
|
||||||
if left == 0 {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
assert_eq!(left, 0);
|
|
||||||
}
|
}
|
||||||
self.flush(size).unwrap();
|
self.flush(size).unwrap();
|
||||||
Ok(new)
|
Ok(new)
|
||||||
|
|
Loading…
Reference in a new issue