PACS System 0.1.0
PACS DICOM system library
Loading...
Searching...
No Matches
kcenon::pacs::encoding::compression::jpeg_lossless_codec Class Referencefinal

JPEG Lossless (Process 14, Selection Value 1) codec implementation. More...

#include <jpeg_lossless_codec.h>

Inheritance diagram for kcenon::pacs::encoding::compression::jpeg_lossless_codec:
Inheritance graph
Collaboration diagram for kcenon::pacs::encoding::compression::jpeg_lossless_codec:
Collaboration graph

Classes

class  impl
 PIMPL implementation for jpeg_lossless_codec. More...
 

Public Member Functions

 jpeg_lossless_codec (int predictor=kDefaultPredictor, int point_transform=kDefaultPointTransform)
 Constructs a JPEG Lossless codec instance.
 
 ~jpeg_lossless_codec () override
 
 jpeg_lossless_codec (const jpeg_lossless_codec &)=delete
 
jpeg_lossless_codecoperator= (const jpeg_lossless_codec &)=delete
 
 jpeg_lossless_codec (jpeg_lossless_codec &&) noexcept
 
jpeg_lossless_codecoperator= (jpeg_lossless_codec &&) noexcept
 
Codec Information
std::string_view transfer_syntax_uid () const noexcept override
 Returns the Transfer Syntax UID supported by this codec.
 
std::string_view name () const noexcept override
 Returns a human-readable name for the codec.
 
bool is_lossy () const noexcept override
 Checks if this codec produces lossy compression.
 
bool can_encode (const image_params &params) const noexcept override
 Checks if this codec supports the given image parameters.
 
bool can_decode (const image_params &params) const noexcept override
 Checks if this codec can decode data with given parameters.
 
Configuration
int predictor () const noexcept
 Gets the current predictor selection value.
 
int point_transform () const noexcept
 Gets the current point transform value.
 
Compression Operations
codec_result encode (std::span< const uint8_t > pixel_data, const image_params &params, const compression_options &options={}) const override
 Compresses pixel data to JPEG Lossless format.
 
codec_result decode (std::span< const uint8_t > compressed_data, const image_params &params) const override
 Decompresses JPEG Lossless data.
 
- Public Member Functions inherited from kcenon::pacs::encoding::compression::compression_codec
virtual ~compression_codec ()=default
 

Static Public Attributes

static constexpr std::string_view kTransferSyntaxUID = "1.2.840.10008.1.2.4.70"
 DICOM Transfer Syntax UID for JPEG Lossless (Process 14, Selection Value 1)
 
static constexpr int kDefaultPredictor = 1
 Default predictor selection value (1 = Ra, left neighbor prediction)
 
static constexpr int kDefaultPointTransform = 0
 Default point transform (0 = no scaling)
 

Private Attributes

std::unique_ptr< implimpl_
 

Additional Inherited Members

- Protected Member Functions inherited from kcenon::pacs::encoding::compression::compression_codec
 compression_codec ()=default
 
 compression_codec (const compression_codec &)=default
 
compression_codecoperator= (const compression_codec &)=default
 
 compression_codec (compression_codec &&)=default
 
compression_codecoperator= (compression_codec &&)=default
 

Detailed Description

JPEG Lossless (Process 14, Selection Value 1) codec implementation.

Implements DICOM Transfer Syntax 1.2.840.10008.1.2.4.70. Uses libjpeg-turbo for high-performance SIMD-accelerated lossless encoding/decoding.

Supported Features:

  • 8-bit grayscale images
  • 12-bit grayscale images (medical imaging)
  • 16-bit grayscale images
  • First-order prediction (Selection Value 1: Ra = left neighbor)
  • Huffman coding

Limitations:

  • Maximum image size: 65535 x 65535 pixels
  • Grayscale only (color not supported for lossless in DICOM)
  • Requires libjpeg-turbo 3.0+ for native lossless support

Thread Safety:

  • This class is NOT thread-safe
  • Create separate instances per thread for concurrent operations

Integration:

  • Uses thread_system for parallel batch encoding (via thread_pool_adapter)
  • Logs operations via logger_system (via logger_adapter)
  • Reports metrics to monitoring_system (via monitoring_adapter)
See also
DICOM PS3.5 Annex A.4.2 - JPEG Lossless Image Compression
ITU-T T.81 - JPEG specification

Definition at line 48 of file jpeg_lossless_codec.h.

Constructor & Destructor Documentation

◆ jpeg_lossless_codec() [1/3]

kcenon::pacs::encoding::compression::jpeg_lossless_codec::jpeg_lossless_codec ( int predictor = kDefaultPredictor,
int point_transform = kDefaultPointTransform )
explicit

Constructs a JPEG Lossless codec instance.

Parameters
predictorPredictor selection (1-7, default: 1)
  • 1: Ra (left neighbor)
  • 2: Rb (above neighbor)
  • 3: Rc (diagonal upper-left neighbor)
  • 4: Ra + Rb - Rc
  • 5: Ra + (Rb - Rc) / 2
  • 6: Rb + (Ra - Rc) / 2
  • 7: (Ra + Rb) / 2
point_transformPoint transform value (0-15, default: 0)

Definition at line 741 of file jpeg_lossless_codec.cpp.

742 : impl_(std::make_unique<impl>(predictor, point_transform)) {}
int predictor() const noexcept
Gets the current predictor selection value.
int point_transform() const noexcept
Gets the current point transform value.

◆ ~jpeg_lossless_codec()

kcenon::pacs::encoding::compression::jpeg_lossless_codec::~jpeg_lossless_codec ( )
overridedefault

◆ jpeg_lossless_codec() [2/3]

kcenon::pacs::encoding::compression::jpeg_lossless_codec::jpeg_lossless_codec ( const jpeg_lossless_codec & )
delete

◆ jpeg_lossless_codec() [3/3]

kcenon::pacs::encoding::compression::jpeg_lossless_codec::jpeg_lossless_codec ( jpeg_lossless_codec && )
defaultnoexcept

Member Function Documentation

◆ can_decode()

bool kcenon::pacs::encoding::compression::jpeg_lossless_codec::can_decode ( const image_params & params) const
nodiscardoverridevirtualnoexcept

Checks if this codec can decode data with given parameters.

Parameters
paramsThe image parameters
Returns
true if decoding is supported

Implements kcenon::pacs::encoding::compression::compression_codec.

Definition at line 770 of file jpeg_lossless_codec.cpp.

770 {
771 // Can decode any grayscale JPEG Lossless
772 // Width/height can be 0 (unknown) - will read from JPEG header
773 if (params.bits_allocated != 0 &&
774 params.bits_allocated != 8 &&
775 params.bits_allocated != 16) {
776 return false;
777 }
778 if (params.samples_per_pixel != 0 && params.samples_per_pixel != 1) {
779 return false;
780 }
781 return true;
782}

◆ can_encode()

bool kcenon::pacs::encoding::compression::jpeg_lossless_codec::can_encode ( const image_params & params) const
nodiscardoverridevirtualnoexcept

Checks if this codec supports the given image parameters.

Parameters
paramsThe image parameters to check
Returns
true if the codec can handle these parameters

Implements kcenon::pacs::encoding::compression::compression_codec.

Definition at line 762 of file jpeg_lossless_codec.cpp.

762 {
763 // JPEG Lossless supports 2-16 bit precision, grayscale only
764 if (params.bits_stored < 2 || params.bits_stored > 16) return false;
765 if (params.bits_allocated != 8 && params.bits_allocated != 16) return false;
766 if (params.samples_per_pixel != 1) return false;
767 return true;
768}

◆ decode()

codec_result kcenon::pacs::encoding::compression::jpeg_lossless_codec::decode ( std::span< const uint8_t > compressed_data,
const image_params & params ) const
nodiscardoverridevirtual

Decompresses JPEG Lossless data.

Parameters
compressed_dataJPEG lossless compressed data
paramsImage parameters (width/height for validation)
Returns
Decompressed pixel data or error

Output format matches the original bit depth:

  • 8-bit: single byte per sample
  • 12/16-bit: two bytes per sample (little-endian)

Implements kcenon::pacs::encoding::compression::compression_codec.

Definition at line 799 of file jpeg_lossless_codec.cpp.

801 {
802 return impl_->decode(compressed_data, params);
803}
codec_result decode(std::span< const uint8_t > compressed_data, const image_params &params) const

References kcenon::pacs::encoding::compression::jpeg_lossless_codec::impl::decode(), and impl_.

Here is the call graph for this function:

◆ encode()

codec_result kcenon::pacs::encoding::compression::jpeg_lossless_codec::encode ( std::span< const uint8_t > pixel_data,
const image_params & params,
const compression_options & options = {} ) const
nodiscardoverridevirtual

Compresses pixel data to JPEG Lossless format.

Parameters
pixel_dataUncompressed pixel data (8/12/16-bit)
paramsImage parameters
optionsCompression options (lossless flag is ignored, always lossless)
Returns
Compressed JPEG data or error

The output is guaranteed to be exactly reconstructible (lossless). Quality setting in options is ignored for lossless compression.

Implements kcenon::pacs::encoding::compression::compression_codec.

Definition at line 792 of file jpeg_lossless_codec.cpp.

795 {
796 return impl_->encode(pixel_data, params, options);
797}
codec_result encode(std::span< const uint8_t > pixel_data, const image_params &params, const compression_options &options) const

References kcenon::pacs::encoding::compression::jpeg_lossless_codec::impl::encode(), and impl_.

Here is the call graph for this function:

◆ is_lossy()

bool kcenon::pacs::encoding::compression::jpeg_lossless_codec::is_lossy ( ) const
nodiscardoverridevirtualnoexcept

Checks if this codec produces lossy compression.

Returns
true if lossy, false if lossless

Implements kcenon::pacs::encoding::compression::compression_codec.

Definition at line 758 of file jpeg_lossless_codec.cpp.

758 {
759 return false;
760}

◆ name()

std::string_view kcenon::pacs::encoding::compression::jpeg_lossless_codec::name ( ) const
nodiscardoverridevirtualnoexcept

Returns a human-readable name for the codec.

Returns
The codec name (e.g., "JPEG Baseline")

Implements kcenon::pacs::encoding::compression::compression_codec.

Definition at line 754 of file jpeg_lossless_codec.cpp.

754 {
755 return "JPEG Lossless (Process 14, SV1)";
756}

◆ operator=() [1/2]

jpeg_lossless_codec & kcenon::pacs::encoding::compression::jpeg_lossless_codec::operator= ( const jpeg_lossless_codec & )
delete

◆ operator=() [2/2]

jpeg_lossless_codec & kcenon::pacs::encoding::compression::jpeg_lossless_codec::operator= ( jpeg_lossless_codec && )
defaultnoexcept

◆ point_transform()

int kcenon::pacs::encoding::compression::jpeg_lossless_codec::point_transform ( ) const
nodiscardnoexcept

Gets the current point transform value.

Returns
Point transform value (0-15)

Definition at line 788 of file jpeg_lossless_codec.cpp.

References impl_, and kcenon::pacs::encoding::compression::jpeg_lossless_codec::impl::point_transform().

Here is the call graph for this function:

◆ predictor()

int kcenon::pacs::encoding::compression::jpeg_lossless_codec::predictor ( ) const
nodiscardnoexcept

Gets the current predictor selection value.

Returns
Predictor value (1-7)

Definition at line 784 of file jpeg_lossless_codec.cpp.

References impl_, and kcenon::pacs::encoding::compression::jpeg_lossless_codec::impl::predictor().

Here is the call graph for this function:

◆ transfer_syntax_uid()

std::string_view kcenon::pacs::encoding::compression::jpeg_lossless_codec::transfer_syntax_uid ( ) const
nodiscardoverridevirtualnoexcept

Returns the Transfer Syntax UID supported by this codec.

Returns
The DICOM Transfer Syntax UID

Implements kcenon::pacs::encoding::compression::compression_codec.

Definition at line 750 of file jpeg_lossless_codec.cpp.

750 {
751 return kTransferSyntaxUID;
752}
static constexpr std::string_view kTransferSyntaxUID
DICOM Transfer Syntax UID for JPEG Lossless (Process 14, Selection Value 1)

Member Data Documentation

◆ impl_

std::unique_ptr<impl> kcenon::pacs::encoding::compression::jpeg_lossless_codec::impl_
private

Definition at line 149 of file jpeg_lossless_codec.h.

Referenced by decode(), encode(), point_transform(), and predictor().

◆ kDefaultPointTransform

int kcenon::pacs::encoding::compression::jpeg_lossless_codec::kDefaultPointTransform = 0
staticconstexpr

Default point transform (0 = no scaling)

Definition at line 57 of file jpeg_lossless_codec.h.

◆ kDefaultPredictor

int kcenon::pacs::encoding::compression::jpeg_lossless_codec::kDefaultPredictor = 1
staticconstexpr

Default predictor selection value (1 = Ra, left neighbor prediction)

Definition at line 54 of file jpeg_lossless_codec.h.

◆ kTransferSyntaxUID

std::string_view kcenon::pacs::encoding::compression::jpeg_lossless_codec::kTransferSyntaxUID = "1.2.840.10008.1.2.4.70"
staticconstexpr

DICOM Transfer Syntax UID for JPEG Lossless (Process 14, Selection Value 1)

Definition at line 51 of file jpeg_lossless_codec.h.

Referenced by kcenon::pacs::encoding::compression::codec_factory::create().


The documentation for this class was generated from the following files: