1#![deny(unsafe_op_in_unsafe_fn)]
6#![deny(missing_docs)]
7#![warn(unreachable_pub)]
8
9macro_rules! cuda_kernel_params {
10 ($($arg:ident),+ $(,)?) => {
11 [$(cuda_kernel_param(&mut $arg)),+]
12 };
13}
14
15macro_rules! impl_cuda_htj2k_encoded_status_accessors {
16 () => {
17 pub fn cleanup_length(&self) -> u32 {
19 htj2k_encoded_cleanup_length(self.status)
20 }
21
22 pub fn refinement_length(&self) -> u32 {
24 htj2k_encoded_refinement_length(self.status)
25 }
26
27 pub fn num_coding_passes(&self) -> u8 {
29 htj2k_encoded_num_coding_passes(self.status)
30 }
31
32 pub fn num_zero_bitplanes(&self) -> u8 {
34 htj2k_encoded_num_zero_bitplanes(self.status)
35 }
36
37 pub fn status(&self) -> CudaHtj2kEncodeStatus {
39 self.status
40 }
41
42 pub fn execution(&self) -> CudaExecutionStats {
44 self.execution
45 }
46
47 pub fn stage_timings(&self) -> CudaHtj2kEncodeStageTimings {
49 self.stage_timings
50 }
51 };
52}
53
54mod allocation;
55mod build_flags;
56mod bytes;
57mod classic_decode;
58mod context;
59mod driver;
60mod error;
61mod execution;
62mod htj2k_decode;
63mod htj2k_encode;
64mod htj2k_packetize;
65mod j2k_decode;
66mod j2k_encode;
67mod jpeg;
68mod kernels;
69mod memory;
70mod ml;
71#[cfg(test)]
72mod tests;
73mod transcode;
74
75pub use build_flags::transcode_kernels_built;
76pub use classic_decode::{
77 CudaClassicCodeBlockJob, CudaClassicDecodeStageTimings, CudaClassicDecodeTarget,
78 CudaClassicSegment, CudaClassicStatus,
79};
80#[cfg(test)]
81pub(crate) use context::CudaKernelName;
82pub use context::{
83 CudaContext, CudaExternalHostOwner, CudaExternalHostReservation,
84 CudaHtj2kCompactEncodedCodeBlock, CudaHtj2kCompactEncodedCodeBlocks,
85};
86pub use error::CudaError;
87#[cfg(test)]
88pub(crate) use execution::CudaEvent;
89pub use execution::{
90 CudaExecutionStats, CudaKernelBatchOutput, CudaKernelContiguousBatchOutput, CudaKernelOutput,
91 CudaPooledKernelOutput, CudaQueuedExecution,
92};
93pub use htj2k_decode::{
94 CudaHtj2kCleanupTarget, CudaHtj2kCodeBlockJob, CudaHtj2kDecodeOutput, CudaHtj2kDecodeResources,
95 CudaHtj2kDecodeStageTimings, CudaHtj2kDecodeTableResources, CudaHtj2kDecodeTables,
96 CudaHtj2kDequantizeTarget, CudaHtj2kStatus, CudaPooledHtj2kDecodeOutput,
97 CudaQueuedHtj2kCleanup,
98};
99pub use htj2k_encode::{
100 CudaHtj2kEncodeCodeBlockJob, CudaHtj2kEncodeCodeBlockRegionJob, CudaHtj2kEncodeResidentTarget,
101 CudaHtj2kEncodeResources, CudaHtj2kEncodeStageTimings, CudaHtj2kEncodeStatus,
102 CudaHtj2kEncodeTables, CudaHtj2kEncodedCodeBlock, CudaHtj2kEncodedCodeBlocks,
103};
104pub use htj2k_packetize::{
105 CudaHtj2kPacketizationBlock, CudaHtj2kPacketizationPacket, CudaHtj2kPacketizationStageTimings,
106 CudaHtj2kPacketizationStatus, CudaHtj2kPacketizationSubband,
107 CudaHtj2kPacketizationSubbandTagState, CudaHtj2kPacketizationTagNodeState,
108 CudaHtj2kPacketizedTile,
109};
110pub use j2k_decode::{
111 CudaJ2kIdwtJob, CudaJ2kIdwtTarget, CudaJ2kInverseMctJob, CudaJ2kRect, CudaJ2kStoreGray16Job,
112 CudaJ2kStoreGray8Job, CudaJ2kStoreRgb16Job, CudaJ2kStoreRgb16MctJob, CudaJ2kStoreRgb8Job,
113 CudaJ2kStoreRgb8MctJob, CudaJ2kStoreRgb8MctTarget, CudaJ2kStridedInterleavedPixels,
114};
115pub use j2k_encode::{
116 CudaDwt53LevelShape, CudaDwt53Output, CudaDwt97BatchStageTimings, CudaDwt97Output,
117 CudaJ2kDeinterleavedComponents, CudaJ2kQuantizeJob, CudaJ2kQuantizeSubbandRegionJob,
118 CudaJ2kQuantizedSubband, CudaJ2kResidentComponents, CudaJ2kResidentQuantizedSubband,
119 CudaResidentDwt53Output, CudaResidentDwt97Output,
120};
121pub use jpeg::{
122 CudaJpegBaselineEncodeFormat, CudaJpegBaselineEncodeHuffmanTable, CudaJpegBaselineEncodeParams,
123 CudaJpegBaselineEntropyEncodeBatchJob, CudaJpegBaselineEntropyEncodeJob,
124 CudaJpegChunkedEntropyConfig, CudaJpegChunkedEntropyPlan, CudaJpegChunkedEntropyReport,
125 CudaJpegEntropyCheckpoint, CudaJpegEntropyOverflowState, CudaJpegEntropySyncState,
126 CudaJpegHuffmanTable, CudaJpegRgb8DecodePlan, CudaJpegRgb8Sampling,
127};
128pub use memory::{
129 CudaBufferPool, CudaBufferPoolDiagnostics, CudaBufferPoolLimits, CudaBufferPoolTakeTrace,
130 CudaDeviceBuffer, CudaDeviceBufferRange, CudaDeviceBufferView, CudaDeviceBufferViewMut,
131 CudaExternalDeviceBufferViewMut, CudaPinnedUploadOperationGuard,
132 CudaPinnedUploadStagingCheckout, CudaPinnedUploadStagingPoolDiagnostics,
133 CudaPinnedUploadStagingPoolLimits, CudaPooledDeviceBuffer,
134};
135pub use ml::{CudaJ2kMlKernelConfig, CudaJ2kMlLayout, CudaJ2kMlNormalization, CudaJ2kMlSample};
136pub use transcode::{
137 CudaDwt97BatchGeometry, CudaDwt97BatchWithPoolRequest, CudaHtj2k97CodeblockBands,
138 CudaHtj2k97CodeblockBatchWithPoolRequest, CudaHtj2k97DeviceCodeblockBands,
139 CudaHtj2k97I16CodeblockBatchWithPoolRequest, CudaHtj2k97QuantizeParams,
140 CudaTranscodeDwt97Bands, CudaTranscodeReversible53Bands,
141};
142
143#[cfg(test)]
144pub(crate) use bytes::{
145 f32_slice_as_bytes, f32_slice_as_bytes_mut, htj2k_cleanup_multi_jobs_as_bytes,
146 i32_slice_as_bytes, i32_slice_as_bytes_mut,
147};
148#[cfg(test)]
149pub(crate) use context::HTJ2K_UVLC_ENCODE_TABLE_BYTES;
150#[cfg(test)]
151pub(crate) use htj2k_decode::{
152 htj2k_decode_multi_cleanup_dequant_kernel_for_jobs, htj2k_decode_multi_kernel_for_jobs,
153 CudaHtj2kCleanupMultiKernelJob, HTJ2K_STATUS_OK, HTJ2K_STATUS_UNSUPPORTED,
154};
155#[cfg(test)]
156pub(crate) use htj2k_encode::{
157 htj2k_encode_compact_jobs, htj2k_encode_compact_jobs_multi_input, CudaHtj2kEncodeCompactJob,
158 CudaHtj2kEncodeKernelJob, CudaHtj2kEncodeMultiInputKernelJob, HTJ2K_ENCODE_OUTPUT_CAPACITY,
159};
160#[cfg(test)]
161pub(crate) use j2k_decode::{
162 checked_f32_words_byte_len, format_idwt_batch_trace_row, idwt_batch_kernel_mode,
163 idwt_batch_trace_row, idwt_batch_uses_cooperative_53, CudaJ2kIdwtBatchKernelMode,
164 CudaJ2kIdwtMultiKernelJob,
165};
166#[cfg(test)]
167pub(crate) use jpeg::jpeg_entropy_overflow_count;
168#[cfg(test)]
169pub(crate) use memory::{copy_pooled_bytes_to_vec_uninit, pool_fit_buffer_index_by_len};
170#[cfg(test)]
171pub(crate) use transcode::{should_use_pinned_pooled_i16_upload, validate_dct_block_grid};