use j2k::EncodedJ2k;
#[cfg(target_os = "macos")]
use j2k_core::PixelFormat;
#[cfg(target_os = "macos")]
use metal::Buffer;
use std::time::Duration;
use super::MetalEncodedJ2k;
#[cfg(target_os = "macos")]
#[derive(Debug, Clone, Copy)]
pub struct MetalLosslessEncodeTile<'a> {
pub buffer: &'a Buffer,
pub byte_offset: usize,
pub width: u32,
pub height: u32,
pub pitch_bytes: usize,
pub output_width: u32,
pub output_height: u32,
pub format: PixelFormat,
}
#[cfg(not(target_os = "macos"))]
#[derive(Debug, Clone, Copy)]
pub struct MetalLosslessEncodeTile<'a> {
_private: core::marker::PhantomData<&'a ()>,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MetalLosslessEncodeResidency {
pub coefficient_prep_used: bool,
pub packetization_used: bool,
pub codestream_assembly_used: bool,
}
#[derive(Debug, Clone, PartialEq, Eq)]
pub struct MetalLosslessEncodeOutcome {
pub encoded: EncodedJ2k,
pub input_copy_used: bool,
pub resident: MetalLosslessEncodeResidency,
pub input_copy_duration: Duration,
pub encode_duration: Duration,
pub gpu_duration: Option<Duration>,
pub validation_duration: Duration,
pub host_readback_duration: Duration,
}
pub struct MetalLosslessBufferEncodeOutcome {
pub encoded: MetalEncodedJ2k,
pub input_copy_used: bool,
pub resident: MetalLosslessEncodeResidency,
pub input_copy_duration: Duration,
pub encode_duration: Duration,
pub gpu_duration: Option<Duration>,
pub validation_duration: Duration,
}
#[derive(Debug, Clone, Copy, Default, PartialEq, Eq)]
pub struct MetalLosslessEncodeConfig {
pub gpu_encode_inflight_tiles: Option<usize>,
pub gpu_encode_memory_budget_bytes: Option<usize>,
}
#[derive(Clone, Copy)]
pub struct MetalLosslessEncodeBatchRequest<'a, 'b> {
pub tiles: &'a [MetalLosslessEncodeTile<'b>],
pub staging: MetalEncodeInputStaging,
pub config: MetalLosslessEncodeConfig,
}
#[derive(Debug, Clone, Copy, PartialEq, Eq)]
pub enum MetalEncodeInputStaging {
CopyAndPad,
AlreadyPaddedContiguous,
}