From 4d7e73087d595fc61130e140aae61857677d859b Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Sat, 26 Aug 2023 18:47:45 -0700 Subject: [PATCH 1/2] Deprecate incremental decoding --- src/codecs/dds.rs | 2 ++ src/codecs/dxt.rs | 5 +++-- src/codecs/png.rs | 1 + src/codecs/tga/decoder.rs | 2 +- src/image.rs | 9 +++++++++ 5 files changed, 16 insertions(+), 3 deletions(-) diff --git a/src/codecs/dds.rs b/src/codecs/dds.rs index d1045676eb..408d786cec 100644 --- a/src/codecs/dds.rs +++ b/src/codecs/dds.rs @@ -340,10 +340,12 @@ impl<'a, R: 'a + Read> ImageDecoder<'a> for DdsDecoder { } fn scanline_bytes(&self) -> u64 { + #[allow(deprecated)] self.inner.scanline_bytes() } fn into_reader(self) -> ImageResult { + #[allow(deprecated)] self.inner.into_reader() } diff --git a/src/codecs/dxt.rs b/src/codecs/dxt.rs index 8737fb39ac..aed9eaff3e 100644 --- a/src/codecs/dxt.rs +++ b/src/codecs/dxt.rs @@ -100,7 +100,7 @@ impl DxtDecoder { } fn read_scanline(&mut self, buf: &mut [u8]) -> io::Result { - assert_eq!(u64::try_from(buf.len()), Ok(self.scanline_bytes())); + assert_eq!(u64::try_from(buf.len()), Ok(#[allow(deprecated)] self.scanline_bytes())); let mut src = vec![0u8; self.variant.encoded_bytes_per_block() * self.width_blocks as usize]; @@ -134,7 +134,7 @@ impl<'a, R: 'a + Read> ImageDecoder<'a> for DxtDecoder { fn into_reader(self) -> ImageResult { Ok(DxtReader { - buffer: ImageReadBuffer::new(self.scanline_bytes(), self.total_bytes()), + buffer: ImageReadBuffer::new(#[allow(deprecated)] self.scanline_bytes(), self.total_bytes()), decoder: self, }) } @@ -142,6 +142,7 @@ impl<'a, R: 'a + Read> ImageDecoder<'a> for DxtDecoder { fn read_image(mut self, buf: &mut [u8]) -> ImageResult<()> { assert_eq!(u64::try_from(buf.len()), Ok(self.total_bytes())); + #[allow(deprecated)] for chunk in buf.chunks_mut(self.scanline_bytes().max(1) as usize) { self.read_scanline(chunk)?; } diff --git a/src/codecs/png.rs b/src/codecs/png.rs index 9384451ce1..79e4de749e 100644 --- a/src/codecs/png.rs +++ b/src/codecs/png.rs @@ -740,6 +740,7 @@ mod tests { "Image MUST have the Rgb8 format" ]; + #[allow(deprecated)] let correct_bytes = dec .into_reader() .expect("Unable to read file") diff --git a/src/codecs/tga/decoder.rs b/src/codecs/tga/decoder.rs index 16243cedf0..436cf23684 100644 --- a/src/codecs/tga/decoder.rs +++ b/src/codecs/tga/decoder.rs @@ -435,7 +435,7 @@ impl<'a, R: 'a + Read + Seek> ImageDecoder<'a> for TgaDecoder { fn into_reader(self) -> ImageResult { Ok(TGAReader { - buffer: ImageReadBuffer::new(self.scanline_bytes(), self.total_bytes()), + buffer: ImageReadBuffer::new(#[allow(deprecated)] self.scanline_bytes(), self.total_bytes()), decoder: self, }) } diff --git a/src/image.rs b/src/image.rs index 5fc4e87d19..33ede80a46 100644 --- a/src/image.rs +++ b/src/image.rs @@ -514,6 +514,7 @@ where let dimensions = decoder.dimensions(); let bytes_per_pixel = u64::from(decoder.color_type().bytes_per_pixel()); let row_bytes = bytes_per_pixel * u64::from(dimensions.0); + #[allow(deprecated)] let scanline_bytes = decoder.scanline_bytes(); let total_bytes = width * height * bytes_per_pixel; @@ -716,6 +717,7 @@ pub trait ImageDecoder<'a>: Sized { /// Returns a reader that can be used to obtain the bytes of the image. For the best /// performance, always try to read at least `scanline_bytes` from the reader at a time. Reading /// fewer bytes will cause the reader to perform internal buffering. + #[deprecated = "Planned for removal. See https://github.com/image-rs/image/issues/1989"] fn into_reader(self) -> ImageResult; /// Returns the total number of bytes in the decoded image. @@ -733,6 +735,7 @@ pub trait ImageDecoder<'a>: Sized { /// Returns the minimum number of bytes that can be efficiently read from this decoder. This may /// be as few as 1 or as many as `total_bytes()`. + #[deprecated = "Planned for removal. See https://github.com/image-rs/image/issues/1989"] fn scanline_bytes(&self) -> u64 { self.total_bytes() } @@ -759,11 +762,13 @@ pub trait ImageDecoder<'a>: Sized { /// } /// ``` fn read_image(self, buf: &mut [u8]) -> ImageResult<()> { + #[allow(deprecated)] self.read_image_with_progress(buf, |_| {}) } /// Same as `read_image` but periodically calls the provided callback to give updates on loading /// progress. + #[deprecated = "Use read_image instead. See https://github.com/image-rs/image/issues/1989"] fn read_image_with_progress( self, buf: &mut [u8], @@ -772,6 +777,7 @@ pub trait ImageDecoder<'a>: Sized { assert_eq!(u64::try_from(buf.len()), Ok(self.total_bytes())); let total_bytes = self.total_bytes() as usize; + #[allow(deprecated)] let scanline_bytes = self.scanline_bytes() as usize; let target_read_size = if scanline_bytes < 4096 { (4096 / scanline_bytes) * scanline_bytes @@ -779,6 +785,7 @@ pub trait ImageDecoder<'a>: Sized { scanline_bytes }; + #[allow(deprecated)] let mut reader = self.into_reader()?; let mut bytes_read = 0; @@ -828,6 +835,7 @@ pub trait ImageDecoderRect<'a>: ImageDecoder<'a> + Sized { height: u32, buf: &mut [u8], ) -> ImageResult<()> { + #[allow(deprecated)] self.read_rect_with_progress(x, y, width, height, buf, |_| {}) } @@ -843,6 +851,7 @@ pub trait ImageDecoderRect<'a>: ImageDecoder<'a> + Sized { /// /// This function will panic if the output buffer isn't at least /// `color_type().bytes_per_pixel() * color_type().channel_count() * width * height` bytes long. + #[deprecated = "Use read_image instead. See https://github.com/image-rs/image/issues/1989"] fn read_rect_with_progress( &mut self, x: u32, From 3f59314fa37f05040525a61499a1b1c4caba7f56 Mon Sep 17 00:00:00 2001 From: Jonathan Behrens Date: Sat, 26 Aug 2023 18:50:16 -0700 Subject: [PATCH 2/2] Formatting fixes --- src/codecs/dxt.rs | 14 ++++++++++++-- src/codecs/tga/decoder.rs | 6 +++++- 2 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/codecs/dxt.rs b/src/codecs/dxt.rs index aed9eaff3e..b971187993 100644 --- a/src/codecs/dxt.rs +++ b/src/codecs/dxt.rs @@ -100,7 +100,13 @@ impl DxtDecoder { } fn read_scanline(&mut self, buf: &mut [u8]) -> io::Result { - assert_eq!(u64::try_from(buf.len()), Ok(#[allow(deprecated)] self.scanline_bytes())); + assert_eq!( + u64::try_from(buf.len()), + Ok( + #[allow(deprecated)] + self.scanline_bytes() + ) + ); let mut src = vec![0u8; self.variant.encoded_bytes_per_block() * self.width_blocks as usize]; @@ -134,7 +140,11 @@ impl<'a, R: 'a + Read> ImageDecoder<'a> for DxtDecoder { fn into_reader(self) -> ImageResult { Ok(DxtReader { - buffer: ImageReadBuffer::new(#[allow(deprecated)] self.scanline_bytes(), self.total_bytes()), + buffer: ImageReadBuffer::new( + #[allow(deprecated)] + self.scanline_bytes(), + self.total_bytes(), + ), decoder: self, }) } diff --git a/src/codecs/tga/decoder.rs b/src/codecs/tga/decoder.rs index 436cf23684..f4fbf471ec 100644 --- a/src/codecs/tga/decoder.rs +++ b/src/codecs/tga/decoder.rs @@ -435,7 +435,11 @@ impl<'a, R: 'a + Read + Seek> ImageDecoder<'a> for TgaDecoder { fn into_reader(self) -> ImageResult { Ok(TGAReader { - buffer: ImageReadBuffer::new(#[allow(deprecated)] self.scanline_bytes(), self.total_bytes()), + buffer: ImageReadBuffer::new( + #[allow(deprecated)] + self.scanline_bytes(), + self.total_bytes(), + ), decoder: self, }) }