use std::time::Duration;
use j2k_native::J2kPacketizationPacketDescriptor;
use metal::{Buffer, CommandBuffer};
use super::{
J2kLosslessCodestreamAssemblyJob, J2kPreparedLosslessDeviceCodeBlocks,
J2kResidentPacketizationResolution,
};
pub(crate) struct J2kResidentLosslessCodestream {
pub(crate) buffer: Buffer,
pub(crate) byte_offset: usize,
pub(crate) byte_len: usize,
pub(crate) capacity: usize,
pub(crate) gpu_duration: Option<Duration>,
}
pub(crate) struct J2kPendingResidentLosslessCodestream {
pub(super) buffer: Buffer,
pub(super) capacity: usize,
pub(super) status_buffer: Buffer,
pub(super) command_buffer: CommandBuffer,
pub(super) retained_command_buffers: Vec<CommandBuffer>,
pub(super) _retained_buffers: Vec<Buffer>,
pub(super) status_stage: &'static str,
pub(super) length_error: &'static str,
pub(super) capacity_error: &'static str,
}
pub(crate) struct J2kResidentBatchEncodeItem {
pub(crate) prepared: J2kPreparedLosslessDeviceCodeBlocks,
pub(crate) resolution_count: u32,
pub(crate) num_layers: u8,
pub(crate) num_components: u8,
pub(crate) code_block_count: u32,
pub(crate) packet_descriptors: Vec<J2kPacketizationPacketDescriptor>,
pub(crate) resolutions: Vec<J2kResidentPacketizationResolution>,
pub(crate) codestream: J2kLosslessCodestreamAssemblyJob,
}
#[derive(Clone, Copy, Debug, Default, PartialEq, Eq)]
pub(crate) struct J2kResidentEncodeStageStats {
pub(crate) coefficient_prep_duration: Duration,
pub(crate) deinterleave_rct_duration: Duration,
pub(crate) dwt53_duration: Duration,
pub(crate) coefficient_extract_duration: Duration,
pub(crate) ht_table_build_duration: Duration,
pub(crate) ht_buffer_allocation_duration: Duration,
pub(crate) ht_command_encode_duration: Duration,
pub(crate) ht_block_encode_duration: Duration,
pub(crate) classic_tier1_setup_duration: Duration,
pub(crate) classic_block_encode_duration: Duration,
pub(crate) classic_tier1_token_pack_duration: Duration,
pub(crate) classic_packet_plan_duration: Duration,
pub(crate) classic_packet_buffer_setup_duration: Duration,
pub(crate) classic_command_buffer_commit_duration: Duration,
pub(crate) result_harvest_duration: Duration,
pub(crate) result_status_copy_duration: Duration,
pub(crate) result_private_recycle_duration: Duration,
pub(crate) result_shared_recycle_duration: Duration,
pub(crate) result_codestream_collect_duration: Duration,
pub(crate) packet_block_prep_duration: Duration,
pub(crate) packetization_duration: Duration,
pub(crate) codestream_assembly_duration: Duration,
pub(crate) coefficient_prep_gpu_duration: Duration,
pub(crate) coefficient_deinterleave_rct_gpu_duration: Duration,
pub(crate) coefficient_dwt53_gpu_duration: Duration,
pub(crate) coefficient_dwt53_vertical_gpu_duration: Duration,
pub(crate) coefficient_dwt53_horizontal_gpu_duration: Duration,
pub(crate) coefficient_extract_gpu_duration: Duration,
pub(crate) coefficient_copy_gpu_duration: Duration,
pub(crate) gpu_elapsed_wall_duration: Duration,
pub(crate) classic_block_gpu_duration: Duration,
pub(crate) classic_tier1_density_gpu_duration: Duration,
pub(crate) classic_tier1_raw_pack_gpu_duration: Duration,
pub(crate) classic_tier1_arithmetic_pack_gpu_duration: Duration,
pub(crate) classic_tier1_symbol_plan_gpu_duration: Duration,
pub(crate) classic_tier1_pass_plan_gpu_duration: Duration,
pub(crate) classic_tier1_token_emit_gpu_duration: Duration,
pub(crate) classic_tier1_split_token_emit_gpu_duration: Duration,
pub(crate) classic_tier1_token_pack_gpu_duration: Duration,
pub(crate) ht_block_gpu_duration: Duration,
pub(crate) packet_block_prep_gpu_duration: Duration,
pub(crate) packetization_gpu_duration: Duration,
pub(crate) packet_payload_copy_gpu_duration: Duration,
pub(crate) codestream_assembly_gpu_duration: Duration,
pub(crate) codestream_payload_copy_gpu_duration: Duration,
pub(crate) tier1_output_capacity_total: usize,
pub(crate) max_tier1_output_capacity: usize,
pub(crate) tier1_output_used_bytes_total: usize,
pub(crate) max_tier1_output_used_bytes: usize,
pub(crate) tier1_segment_capacity_total: usize,
pub(crate) max_tier1_segment_capacity_per_block: usize,
pub(crate) tier1_coding_pass_count_total: usize,
pub(crate) max_tier1_coding_passes_per_block: usize,
pub(crate) tier1_arithmetic_pass_count_total: usize,
pub(crate) tier1_raw_pass_count_total: usize,
pub(crate) tier1_cleanup_pass_count_total: usize,
pub(crate) tier1_sigprop_pass_count_total: usize,
pub(crate) tier1_magref_pass_count_total: usize,
pub(crate) tier1_arithmetic_cleanup_pass_count_total: usize,
pub(crate) tier1_arithmetic_sigprop_pass_count_total: usize,
pub(crate) tier1_arithmetic_magref_pass_count_total: usize,
pub(crate) tier1_raw_sigprop_pass_count_total: usize,
pub(crate) tier1_raw_magref_pass_count_total: usize,
pub(crate) tier1_full_scan_coeff_visit_count_total: usize,
pub(crate) tier1_arithmetic_scan_coeff_visit_count_total: usize,
pub(crate) tier1_raw_scan_coeff_visit_count_total: usize,
pub(crate) tier1_cleanup_scan_coeff_visit_count_total: usize,
pub(crate) tier1_sigprop_scan_coeff_visit_count_total: usize,
pub(crate) tier1_magref_scan_coeff_visit_count_total: usize,
pub(crate) max_tier1_full_scan_coeff_visits_per_block: usize,
pub(crate) tier1_sigprop_active_candidate_count_total: usize,
pub(crate) tier1_sigprop_new_significant_count_total: usize,
pub(crate) tier1_magref_active_candidate_count_total: usize,
pub(crate) tier1_arithmetic_sigprop_active_candidate_count_total: usize,
pub(crate) tier1_arithmetic_sigprop_new_significant_count_total: usize,
pub(crate) tier1_raw_sigprop_active_candidate_count_total: usize,
pub(crate) tier1_raw_sigprop_new_significant_count_total: usize,
pub(crate) tier1_arithmetic_magref_active_candidate_count_total: usize,
pub(crate) tier1_raw_magref_active_candidate_count_total: usize,
pub(crate) tier1_cleanup_active_candidate_count_total: usize,
pub(crate) tier1_cleanup_new_significant_count_total: usize,
pub(crate) tier1_cleanup_rlc_stripe_count_total: usize,
pub(crate) tier1_cleanup_rlc_zero_stripe_count_total: usize,
pub(crate) tier1_symbol_plan_mq_symbol_count_total: usize,
pub(crate) tier1_symbol_plan_raw_bit_count_total: usize,
pub(crate) max_tier1_symbol_plan_mq_symbols_per_block: usize,
pub(crate) max_tier1_symbol_plan_raw_bits_per_block: usize,
pub(crate) tier1_symbol_plan_packed_token_bytes_total: usize,
pub(crate) max_tier1_symbol_plan_packed_token_bytes_per_block: usize,
pub(crate) tier1_symbol_plan_cleanup_mq_symbol_count_total: usize,
pub(crate) tier1_symbol_plan_sigprop_mq_symbol_count_total: usize,
pub(crate) tier1_symbol_plan_magref_mq_symbol_count_total: usize,
pub(crate) tier1_symbol_plan_raw_sigprop_bit_count_total: usize,
pub(crate) tier1_symbol_plan_raw_magref_bit_count_total: usize,
pub(crate) tier1_symbol_plan_cleanup_sign_symbol_count_total: usize,
pub(crate) tier1_symbol_plan_sigprop_sign_symbol_count_total: usize,
pub(crate) tier1_symbol_plan_mq_symbol_hash_xor: usize,
pub(crate) tier1_symbol_plan_raw_bit_hash_xor: usize,
pub(crate) tier1_pass_plan_mq_symbol_count_total: usize,
pub(crate) tier1_pass_plan_raw_bit_count_total: usize,
pub(crate) tier1_pass_plan_nonempty_mq_pass_count_total: usize,
pub(crate) tier1_pass_plan_nonempty_raw_pass_count_total: usize,
pub(crate) max_tier1_pass_plan_mq_symbols_per_pass: usize,
pub(crate) max_tier1_pass_plan_raw_bits_per_pass: usize,
pub(crate) tier1_token_emit_mq_symbol_count_total: usize,
pub(crate) tier1_token_emit_raw_bit_count_total: usize,
pub(crate) tier1_token_emit_token_bytes_total: usize,
pub(crate) max_tier1_token_emit_token_bytes_per_block: usize,
pub(crate) tier1_token_emit_segment_count_total: usize,
pub(crate) max_tier1_token_emit_segments_per_block: usize,
pub(crate) tier1_token_emit_mq_symbol_hash_xor: usize,
pub(crate) tier1_token_emit_raw_bit_hash_xor: usize,
pub(crate) tier1_token_pack_output_bytes_total: usize,
pub(crate) max_tier1_token_pack_output_bytes_per_block: usize,
pub(crate) tier1_nonzero_block_count_total: usize,
pub(crate) tier1_zero_block_count_total: usize,
pub(crate) tier1_missing_bitplane_count_total: usize,
pub(crate) max_tier1_missing_bitplanes_per_block: usize,
pub(crate) tier1_segment_count_total: usize,
pub(crate) max_tier1_segments_per_block: usize,
pub(crate) packet_payload_copy_job_capacity_total: usize,
pub(crate) max_packet_payload_copy_jobs_per_tile: usize,
pub(crate) packet_payload_copy_job_count_total: usize,
pub(crate) max_packet_payload_copy_jobs_used_per_tile: usize,
pub(crate) packet_payload_copy_bytes_total: usize,
pub(crate) max_packet_payload_copy_bytes_per_tile: usize,
pub(crate) packet_payload_copy_small_job_count_total: usize,
pub(crate) packet_payload_copy_medium_job_count_total: usize,
pub(crate) packet_payload_copy_large_job_count_total: usize,
pub(crate) packet_payload_copy_launched_stripe_count_total: usize,
pub(crate) packet_payload_copy_active_stripe_count_total: usize,
pub(crate) packet_output_capacity_total: usize,
pub(crate) max_packet_output_capacity: usize,
pub(crate) packet_output_used_bytes_total: usize,
pub(crate) max_packet_output_used_bytes: usize,
pub(crate) codestream_payload_copy_bytes_total: usize,
pub(crate) codestream_payload_copy_launched_thread_count_total: usize,
pub(crate) codestream_payload_copy_active_thread_count_total: usize,
pub(crate) code_block_count: usize,
}
pub(crate) struct J2kResidentLosslessCodestreamBatchResult {
pub(crate) codestreams: Vec<J2kResidentLosslessCodestream>,
pub(crate) stage_stats: J2kResidentEncodeStageStats,
}