Skip to content

Commit b1ae470

Browse files
committed
make ImageRef/Mut dyn compatible and don't use generics in most functions
1 parent 8d65942 commit b1ae470

File tree

22 files changed

+53
-79
lines changed

22 files changed

+53
-79
lines changed

src/copy.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
use crate::{verify_input_windows, ConvertError, ImageMut, ImageRef, ImageRefExt};
22

33
#[inline(always)]
4-
pub(crate) fn copy_impl(src: &impl ImageRef, dst: &mut impl ImageMut) -> Result<(), ConvertError> {
5-
verify_input_windows(&src, &dst)?;
4+
pub(crate) fn copy_impl(src: &dyn ImageRef, dst: &mut dyn ImageMut) -> Result<(), ConvertError> {
5+
verify_input_windows(src, dst)?;
66

77
assert_eq!(src.format(), dst.format());
88

@@ -31,11 +31,11 @@ pub(crate) fn copy_impl(src: &impl ImageRef, dst: &mut impl ImageMut) -> Result<
3131

3232
#[inline(never)]
3333
#[doc(hidden)]
34-
pub fn copy(src: &impl ImageRef, dst: &mut impl ImageMut) -> Result<(), ConvertError> {
34+
pub fn copy(src: &dyn ImageRef, dst: &mut dyn ImageMut) -> Result<(), ConvertError> {
3535
#[cfg(all(feature = "unstable", any(target_arch = "x86", target_arch = "x86_64")))]
3636
if is_x86_feature_detected!("avx512f") && is_x86_feature_detected!("avx512bw") {
3737
#[target_feature(enable = "avx512f", enable = "avx512bw")]
38-
unsafe fn call(src: &impl ImageRef, dst: &mut impl ImageMut) -> Result<(), ConvertError> {
38+
unsafe fn call(src: &dyn ImageRef, dst: &mut dyn ImageMut) -> Result<(), ConvertError> {
3939
copy_impl(src, dst)
4040
}
4141

@@ -48,7 +48,7 @@ pub fn copy(src: &impl ImageRef, dst: &mut impl ImageMut) -> Result<(), ConvertE
4848
#[cfg(any(target_arch = "x86", target_arch = "x86_64"))]
4949
if is_x86_feature_detected!("avx2") {
5050
#[target_feature(enable = "avx2")]
51-
unsafe fn call(src: &impl ImageRef, dst: &mut impl ImageMut) -> Result<(), ConvertError> {
51+
unsafe fn call(src: &dyn ImageRef, dst: &mut dyn ImageMut) -> Result<(), ConvertError> {
5252
copy_impl(src, dst)
5353
}
5454

@@ -61,7 +61,7 @@ pub fn copy(src: &impl ImageRef, dst: &mut impl ImageMut) -> Result<(), ConvertE
6161
#[cfg(target_arch = "aarch64")]
6262
if crate::arch::is_aarch64_feature_detected!("neon") {
6363
#[target_feature(enable = "neon")]
64-
unsafe fn call(src: &impl ImageRef, dst: &mut impl ImageMut) -> Result<(), ConvertError> {
64+
unsafe fn call(src: &dyn ImageRef, dst: &mut dyn ImageMut) -> Result<(), ConvertError> {
6565
copy_impl(src, dst)
6666
}
6767

src/crop.rs

Lines changed: 5 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ unsafe impl<T: ImageRef> ImageRef for Cropped<T> {
7070
self.1.height
7171
}
7272

73-
fn planes(&self) -> impl Iterator<Item = (&[u8], usize)> {
73+
fn planes(&self) -> Box<dyn Iterator<Item = (&[u8], usize)> + '_> {
7474
use PixelFormat::*;
7575

7676
match self.format() {
@@ -96,7 +96,7 @@ unsafe impl<T: ImageRef> ImageRef for Cropped<T> {
9696
}
9797

9898
unsafe impl<T: ImageMut> ImageMut for Cropped<T> {
99-
fn planes_mut(&mut self) -> impl Iterator<Item = (&mut [u8], usize)> {
99+
fn planes_mut(&mut self) -> Box<dyn Iterator<Item = (&mut [u8], usize)> + '_> {
100100
use PixelFormat::*;
101101

102102
let format = self.format();
@@ -162,14 +162,11 @@ impl<S> Iterator for ArrayIter<S> {
162162
}
163163
}
164164

165-
fn crop_planes<const N: usize, S: AnySlice>(
165+
fn crop_planes<'s, const N: usize, S: AnySlice + 's>(
166166
plane_desc: [PlaneDesc; N],
167167
planes: [(S, usize); N],
168168
window: Window,
169-
) -> ArrayIter<(S, usize)>
170-
where
171-
ArrayIter<(S, usize)>: From<[(S, usize); N]>,
172-
{
169+
) -> Box<dyn Iterator<Item = (S, usize)> + 's> {
173170
let mut out = [const { MaybeUninit::uninit() }; N];
174171

175172
for ((plane_desc, (slice, stride)), out) in
@@ -185,5 +182,5 @@ where
185182
out.write((slice, stride));
186183
}
187184

188-
ArrayIter::from(out.map(|p| unsafe { p.assume_init() }))
185+
Box::new(out.map(|p| unsafe { p.assume_init() }).into_iter())
189186
}

src/formats/i420/read.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub(crate) struct I420Reader<'a, P: PrimitiveInternal> {
2020
}
2121

2222
impl<'a, P: PrimitiveInternal> I420Reader<'a, P> {
23-
pub(crate) fn new(src: &'a impl ImageRef) -> Result<Self, ConvertError> {
23+
pub(crate) fn new(src: &'a dyn ImageRef) -> Result<Self, ConvertError> {
2424
src.bounds_check()?;
2525

2626
let [(y, y_stride), (u, u_stride), (v, v_stride)] = read_planes(src.planes())?;

src/formats/i420/write.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ where
3131
P: PrimitiveInternal,
3232
S: I420Src,
3333
{
34-
pub(crate) fn write(dst: &'a mut impl ImageMut, i420_src: S) -> Result<(), ConvertError> {
34+
pub(crate) fn write(dst: &'a mut dyn ImageMut, i420_src: S) -> Result<(), ConvertError> {
3535
dst.bounds_check()?;
3636

3737
let dst_width = dst.width();

src/formats/i422/read.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub(crate) struct I422Reader<'a, P: PrimitiveInternal> {
2020
}
2121

2222
impl<'a, P: PrimitiveInternal> I422Reader<'a, P> {
23-
pub(crate) fn new(src: &'a impl ImageRef) -> Result<Self, ConvertError> {
23+
pub(crate) fn new(src: &'a dyn ImageRef) -> Result<Self, ConvertError> {
2424
src.bounds_check()?;
2525

2626
let [(y, y_stride), (u, u_stride), (v, v_stride)] = read_planes(src.planes())?;

src/formats/i422/write.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ where
3131
P: PrimitiveInternal,
3232
S: I422Src,
3333
{
34-
pub(crate) fn write(dst: &'a mut impl ImageMut, i422_src: S) -> Result<(), ConvertError> {
34+
pub(crate) fn write(dst: &'a mut dyn ImageMut, i422_src: S) -> Result<(), ConvertError> {
3535
dst.bounds_check()?;
3636

3737
let dst_width = dst.width();

src/formats/i444/read.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ pub(crate) struct I444Reader<'a, P: PrimitiveInternal> {
2020
}
2121

2222
impl<'a, P: PrimitiveInternal> I444Reader<'a, P> {
23-
pub(crate) fn new(src: &'a impl ImageRef) -> Result<Self, ConvertError> {
23+
pub(crate) fn new(src: &'a dyn ImageRef) -> Result<Self, ConvertError> {
2424
src.bounds_check()?;
2525

2626
let [(y, y_stride), (u, u_stride), (v, v_stride)] = read_planes(src.planes())?;

src/formats/i444/write.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@ where
3131
P: PrimitiveInternal,
3232
S: I444Src,
3333
{
34-
pub(crate) fn write(dst: &'a mut impl ImageMut, i444_src: S) -> Result<(), ConvertError> {
34+
pub(crate) fn write(dst: &'a mut dyn ImageMut, i444_src: S) -> Result<(), ConvertError> {
3535
dst.bounds_check()?;
3636

3737
let dst_width = dst.width();

src/formats/nv12/read.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ pub(crate) struct NV12Reader<'a, P: PrimitiveInternal> {
1818
}
1919

2020
impl<'a, P: PrimitiveInternal> NV12Reader<'a, P> {
21-
pub(crate) fn new(src: &'a impl ImageRef) -> Result<Self, ConvertError> {
21+
pub(crate) fn new(src: &'a dyn ImageRef) -> Result<Self, ConvertError> {
2222
src.bounds_check()?;
2323

2424
let [(y, y_stride), (uv, uv_stride)] = read_planes(src.planes())?;

src/formats/nv12/write.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@ where
2929
P: PrimitiveInternal,
3030
S: I420Src,
3131
{
32-
pub(crate) fn write(dst: &'a mut impl ImageMut, i420_src: S) -> Result<(), ConvertError> {
32+
pub(crate) fn write(dst: &'a mut dyn ImageMut, i420_src: S) -> Result<(), ConvertError> {
3333
dst.bounds_check()?;
3434

3535
let dst_width = dst.width();

0 commit comments

Comments
 (0)