diff --git a/src/encoder.rs b/src/encoder.rs index a96fcd6..5320011 100644 --- a/src/encoder.rs +++ b/src/encoder.rs @@ -353,13 +353,17 @@ impl Encoder { /// # Errors /// /// Returns an error if the segment number is invalid or data exceeds the allowed size - pub fn add_app_segment(&mut self, segment_nr: u8, data: &[u8]) -> Result<(), EncodingError> { + pub fn add_app_segment( + &mut self, + segment_nr: u8, + data: Vec, + ) -> Result<(), EncodingError> { if segment_nr == 0 || segment_nr > 15 { Err(EncodingError::InvalidAppSegment(segment_nr)) } else if data.len() > 65533 { Err(EncodingError::AppSegmentTooLarge(data.len())) } else { - self.app_segments.push((segment_nr, data.to_vec())); + self.app_segments.push((segment_nr, data)); Ok(()) } } @@ -385,16 +389,14 @@ impl Encoder { return Err(EncodingError::IccTooLarge(data.len())); } - let mut chunk_data = Vec::with_capacity(MAX_CHUNK_LENGTH); - for (i, data) in data.chunks(MAX_CHUNK_LENGTH).enumerate() { - chunk_data.clear(); + let mut chunk_data = Vec::with_capacity(MAX_CHUNK_LENGTH); chunk_data.extend_from_slice(MARKER); chunk_data.push(i as u8 + 1); chunk_data.push(num_chunks as u8); chunk_data.extend_from_slice(data); - self.add_app_segment(2, &chunk_data)?; + self.add_app_segment(2, chunk_data)?; } Ok(()) @@ -415,7 +417,7 @@ impl Encoder { let mut formatted = EXIF_HEADER.to_vec(); formatted.extend_from_slice(data); - self.add_app_segment(1, &formatted) + self.add_app_segment(1, formatted) } /// Encode an image diff --git a/src/lib.rs b/src/lib.rs index 796df8b..cdfa85e 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -473,7 +473,7 @@ mod tests { let mut result = Vec::new(); let mut encoder = Encoder::new(&mut result, 100); - encoder.add_app_segment(15, b"HOHOHO\0").unwrap(); + encoder.add_app_segment(15, b"HOHOHO\0".to_vec()).unwrap(); encoder .encode(&data, width, height, ColorType::Rgb)