Reduce number of clones when processing jpeg data

This commit is contained in:
Alan Race committed 2022-04-27 14:46:52 +02:00
1 parent 592405268e
commit eeb79ee07a
2 files changed
+7 -9

No files matched your search

+3 -4
View File
@@ -1153,14 +1153,13 @@ impl<R: Read + Seek> Decoder<R> {
)); ));
} }
// TODO: avoid this clone
let jpeg_tables = decoder.image().jpeg_tables.clone(); let jpeg_tables = decoder.image().jpeg_tables.clone();
let photometric_interpretation = decoder.image().photometric_interpretation; let photometric_interpretation = decoder.image().photometric_interpretation;
let jpeg_reader = JpegReader::new( let jpeg_reader = JpegReader::new(
&mut decoder.reader, &mut decoder.reader,
compressed_length, compressed_length,
&jpeg_tables, jpeg_tables,
&photometric_interpretation, &photometric_interpretation,
)?; )?;
let mut decoder = jpeg::Decoder::new(jpeg_reader); let mut decoder = jpeg::Decoder::new(jpeg_reader);
@@ -1248,14 +1247,14 @@ impl<R: Read + Seek> Decoder<R> {
TiffFormatError::InvalidTagValueType(Tag::JPEGTables), TiffFormatError::InvalidTagValueType(Tag::JPEGTables),
)); ));
} }
// TODO: avoid this clone
let jpeg_tables = self.image().jpeg_tables.clone(); let jpeg_tables = self.image().jpeg_tables.clone();
let photometric_interpretation = self.image().photometric_interpretation; let photometric_interpretation = self.image().photometric_interpretation;
let jpeg_reader = JpegReader::new( let jpeg_reader = JpegReader::new(
&mut self.reader, &mut self.reader,
length, length,
&jpeg_tables, jpeg_tables,
&photometric_interpretation, &photometric_interpretation,
)?; )?;
let mut decoder = jpeg::Decoder::new(jpeg_reader); let mut decoder = jpeg::Decoder::new(jpeg_reader);
+4 -5
View File
@@ -208,7 +208,7 @@ impl JpegReader {
pub fn new<R>( pub fn new<R>(
reader: &mut SmartReader<R>, reader: &mut SmartReader<R>,
length: u64, length: u64,
jpeg_tables: &Option<Vec<u8>>, jpeg_tables: Option<Vec<u8>>,
photometric_interpretation: &PhotometricInterpretation, photometric_interpretation: &PhotometricInterpretation,
) -> io::Result<JpegReader> ) -> io::Result<JpegReader>
where where
@@ -220,11 +220,11 @@ impl JpegReader {
reader.read_exact(&mut segment[..])?; reader.read_exact(&mut segment[..])?;
match jpeg_tables { match jpeg_tables {
Some(tables) => { Some(mut jpeg_data) => {
assert!( assert!(
tables.len() >= 2, jpeg_data.len() >= 2,
"jpeg_tables, if given, must be at least 2 bytes long. Got {:?}", "jpeg_tables, if given, must be at least 2 bytes long. Got {:?}",
tables jpeg_data
); );
assert!( assert!(
@@ -233,7 +233,6 @@ impl JpegReader {
length length
); );
let mut jpeg_data = tables.clone();
if photometric_interpretation == &PhotometricInterpretation::RGB { if photometric_interpretation == &PhotometricInterpretation::RGB {
add_app14segment(&mut jpeg_data, JpegTagApp14Transform::App14TransformUnknown) add_app14segment(&mut jpeg_data, JpegTagApp14Transform::App14TransformUnknown)
} }