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

JPEG Baseline (Process 1) codec implementation. More...

#include <jpeg_baseline_codec.h>

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

Classes

class  impl
 PIMPL implementation for jpeg_baseline_codec. More...
 

Public Member Functions

 jpeg_baseline_codec ()
 Constructs a JPEG Baseline codec instance.
 
 ~jpeg_baseline_codec () override
 
 jpeg_baseline_codec (const jpeg_baseline_codec &)=delete
 
jpeg_baseline_codecoperator= (const jpeg_baseline_codec &)=delete
 
 jpeg_baseline_codec (jpeg_baseline_codec &&) noexcept
 
jpeg_baseline_codecoperator= (jpeg_baseline_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.
 
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 Baseline format.
 
codec_result decode (std::span< const uint8_t > compressed_data, const image_params &params) const override
 Decompresses JPEG Baseline 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.50"
 DICOM Transfer Syntax UID for JPEG Baseline.
 

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 Baseline (Process 1) codec implementation.

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

Supported Features:

  • 8-bit grayscale images
  • 8-bit RGB/YCbCr color images
  • Quality settings from 1-100
  • Chroma subsampling (4:4:4, 4:2:2, 4:2:0)

Limitations:

  • Maximum image size: 65535 x 65535 pixels
  • Only 8-bit depth (JPEG Baseline limitation)
  • Lossy compression only

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.1 - JPEG Image Compression
ITU-T T.81 - JPEG specification

Definition at line 47 of file jpeg_baseline_codec.h.

Constructor & Destructor Documentation

◆ jpeg_baseline_codec() [1/3]

kcenon::pacs::encoding::compression::jpeg_baseline_codec::jpeg_baseline_codec ( )

Constructs a JPEG Baseline codec instance.

Definition at line 365 of file jpeg_baseline_codec.cpp.

366 : impl_(std::make_unique<impl>()) {}

◆ ~jpeg_baseline_codec()

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

◆ jpeg_baseline_codec() [2/3]

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

◆ jpeg_baseline_codec() [3/3]

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

Member Function Documentation

◆ can_decode()

bool kcenon::pacs::encoding::compression::jpeg_baseline_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 390 of file jpeg_baseline_codec.cpp.

390 {
391 // Can decode any 8-bit grayscale or color JPEG
392 // Width/height can be 0 (unknown) for decode - will read from JPEG header
393 if (params.bits_allocated != 0 && params.bits_allocated != 8) return false;
394 if (params.samples_per_pixel != 0 &&
395 params.samples_per_pixel != 1 &&
396 params.samples_per_pixel != 3) {
397 return false;
398 }
399 return true;
400}

◆ can_encode()

bool kcenon::pacs::encoding::compression::jpeg_baseline_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 386 of file jpeg_baseline_codec.cpp.

386 {
387 return params.valid_for_jpeg_baseline();
388}

◆ decode()

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

Decompresses JPEG Baseline data.

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

Output format:

  • Grayscale: 8-bit samples
  • Color: Interleaved RGB (converted from YCbCr)

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

Definition at line 409 of file jpeg_baseline_codec.cpp.

411 {
412 return impl_->decode(compressed_data, params);
413}
codec_result decode(std::span< const uint8_t > compressed_data, const image_params &params) const

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

Here is the call graph for this function:

◆ encode()

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

Compresses pixel data to JPEG Baseline format.

Parameters
pixel_dataUncompressed pixel data (8-bit)
paramsImage parameters
optionsCompression options (quality, subsampling)
Returns
Compressed JPEG data or error

Quality mapping:

  • 100: Highest quality, largest file size
  • 75: Good balance (default)
  • 50: Medium quality
  • 25: Lower quality, smaller file

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

Definition at line 402 of file jpeg_baseline_codec.cpp.

405 {
406 return impl_->encode(pixel_data, params, options);
407}
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_baseline_codec::impl::encode(), and impl_.

Referenced by kcenon::pacs::web::dicomweb::render_dicom_image().

Here is the call graph for this function:
Here is the caller graph for this function:

◆ is_lossy()

bool kcenon::pacs::encoding::compression::jpeg_baseline_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 382 of file jpeg_baseline_codec.cpp.

382 {
383 return true;
384}

◆ name()

std::string_view kcenon::pacs::encoding::compression::jpeg_baseline_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 378 of file jpeg_baseline_codec.cpp.

378 {
379 return "JPEG Baseline (Process 1)";
380}

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ transfer_syntax_uid()

std::string_view kcenon::pacs::encoding::compression::jpeg_baseline_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 374 of file jpeg_baseline_codec.cpp.

374 {
375 return kTransferSyntaxUID;
376}
static constexpr std::string_view kTransferSyntaxUID
DICOM Transfer Syntax UID for JPEG Baseline.

Member Data Documentation

◆ impl_

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

Definition at line 117 of file jpeg_baseline_codec.h.

Referenced by decode(), and encode().

◆ kTransferSyntaxUID

std::string_view kcenon::pacs::encoding::compression::jpeg_baseline_codec::kTransferSyntaxUID = "1.2.840.10008.1.2.4.50"
staticconstexpr

DICOM Transfer Syntax UID for JPEG Baseline.

Definition at line 50 of file jpeg_baseline_codec.h.

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


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