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

HEVC/H.265 codec implementation for video-encoded multi-frame DICOM. More...

#include <hevc_codec.h>

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

Public Member Functions

 hevc_codec (bool main10=false, int quality=kDefaultQuality)
 Constructs an HEVC codec instance.
 
 ~hevc_codec () override
 
 hevc_codec (const hevc_codec &)=delete
 
hevc_codecoperator= (const hevc_codec &)=delete
 
 hevc_codec (hevc_codec &&) noexcept
 
hevc_codecoperator= (hevc_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
bool is_main10_profile () const noexcept
 Checks if this codec is configured for Main 10 Profile.
 
int quality () const noexcept
 Gets the current quality setting (CRF).
 
Compression Operations
codec_result encode (std::span< const uint8_t > pixel_data, const image_params &params, const compression_options &options={}) const override
 Compresses uncompressed pixel data.
 
codec_result decode (std::span< const uint8_t > compressed_data, const image_params &params) const override
 Decompresses compressed pixel data.
 
- Public Member Functions inherited from kcenon::pacs::encoding::compression::compression_codec
virtual ~compression_codec ()=default
 

Static Public Attributes

static constexpr std::string_view kTransferSyntaxUIDMain
 DICOM Transfer Syntax UID for HEVC/H.265 Main Profile / Level 5.1.
 
static constexpr std::string_view kTransferSyntaxUIDMain10
 DICOM Transfer Syntax UID for HEVC/H.265 Main 10 Profile / Level 5.1.
 
static constexpr int kDefaultQuality = 23
 Default quality for lossy encoding (CRF value, 0-51, lower = better)
 

Private Attributes

bool main10_
 
int quality_
 

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

HEVC/H.265 codec implementation for video-encoded multi-frame DICOM.

Implements DICOM Transfer Syntaxes for HEVC:

  • 1.2.840.10008.1.2.4.107 (HEVC/H.265 Main Profile / Level 5.1)
  • 1.2.840.10008.1.2.4.108 (HEVC/H.265 Main 10 Profile / Level 5.1)

HEVC provides approximately 50% bitrate reduction compared to H.264/AVC for equivalent video quality. Intended for video-encoded multi-frame DICOM objects such as cine MRI, ultrasound clips, and XA sequences.

Supported Features:

  • 8-bit grayscale and color images (Main Profile)
  • 10-bit grayscale and color images (Main 10 Profile)
  • Lossy compression with configurable quality
  • Encapsulated pixel data per PS3.5 Annex A.4

Thread Safety:

  • This class is NOT thread-safe
  • Create separate instances per thread for concurrent operations
Note
Actual encode/decode operations require an HEVC library (libde265, x265, or ffmpeg). Without a library, encode/decode return an error.
See also
DICOM PS3.5 – HEVC/H.265 Transfer Syntax
ITU-T H.265 / ISO/IEC 23008-2

Definition at line 45 of file hevc_codec.h.

Constructor & Destructor Documentation

◆ hevc_codec() [1/3]

kcenon::pacs::encoding::compression::hevc_codec::hevc_codec ( bool main10 = false,
int quality = kDefaultQuality )
explicit

Constructs an HEVC codec instance.

Parameters
main10If true, use Main 10 Profile (10-bit, UID .108). If false, use Main Profile (8-bit, UID .107).
qualityConstant Rate Factor for encoding (0-51, lower = better).

Definition at line 10 of file hevc_codec.cpp.

◆ ~hevc_codec()

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

◆ hevc_codec() [2/3]

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

◆ hevc_codec() [3/3]

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

Member Function Documentation

◆ can_decode()

bool kcenon::pacs::encoding::compression::hevc_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 55 of file hevc_codec.cpp.

55 {
56 return can_encode(params);
57}
bool can_encode(const image_params &params) const noexcept override
Checks if this codec supports the given image parameters.

◆ can_encode()

bool kcenon::pacs::encoding::compression::hevc_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 31 of file hevc_codec.cpp.

31 {
32 if (params.width == 0 || params.height == 0) {
33 return false;
34 }
35
36 if (params.samples_per_pixel != 1 && params.samples_per_pixel != 3) {
37 return false;
38 }
39
40 if (main10_) {
41 // Main 10 Profile supports up to 10-bit
42 if (params.bits_stored < 1 || params.bits_stored > 10) {
43 return false;
44 }
45 } else {
46 // Main Profile supports up to 8-bit
47 if (params.bits_stored < 1 || params.bits_stored > 8) {
48 return false;
49 }
50 }
51
52 return true;
53}

◆ decode()

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

Decompresses compressed pixel data.

Parameters
compressed_dataThe compressed pixel data (single frame)
paramsImage parameters (width, height, samples_per_pixel)
Returns
codec_result containing decompressed data or error

The output pixel data is always in interleaved format (planar_configuration=0).

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

Definition at line 79 of file hevc_codec.cpp.

81 {
84 "HEVC codec not available: HEVC library not found at build time. "
85 "Build with PACS_WITH_HEVC=ON to enable.");
86}
constexpr int decompression_error
Definition result.h:79
Result< T > pacs_error(int code, const std::string &message, const std::string &details="")
Create a PACS error result with module context.
Definition result.h:234

References kcenon::pacs::error_codes::decompression_error, and kcenon::pacs::pacs_error().

Here is the call graph for this function:

◆ encode()

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

Compresses uncompressed pixel data.

Parameters
pixel_dataThe raw, uncompressed pixel data
paramsImage parameters describing the pixel data
optionsCompression settings
Returns
codec_result containing compressed data or error

The input pixel_data must match the format specified by params:

  • For planar_configuration=0: interleaved (RGBRGB...)
  • For planar_configuration=1: separate planes (RRR...GGG...BBB...)
Note
This is a potentially expensive operation. Consider using thread_pool_adapter for batch processing.

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

Definition at line 69 of file hevc_codec.cpp.

72 {
75 "HEVC codec not available: HEVC library not found at build time. "
76 "Build with PACS_WITH_HEVC=ON to enable.");
77}
constexpr int compression_error
Definition result.h:78

References kcenon::pacs::error_codes::compression_error, and kcenon::pacs::pacs_error().

Here is the call graph for this function:

◆ is_lossy()

bool kcenon::pacs::encoding::compression::hevc_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 27 of file hevc_codec.cpp.

27 {
28 return true;
29}

◆ is_main10_profile()

bool kcenon::pacs::encoding::compression::hevc_codec::is_main10_profile ( ) const
nodiscardnoexcept

Checks if this codec is configured for Main 10 Profile.

Returns
true if Main 10 (10-bit), false if Main (8-bit)

Definition at line 59 of file hevc_codec.cpp.

59 {
60 return main10_;
61}

References main10_.

◆ name()

std::string_view kcenon::pacs::encoding::compression::hevc_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 23 of file hevc_codec.cpp.

23 {
24 return main10_ ? "HEVC/H.265 Main 10 Profile" : "HEVC/H.265 Main Profile";
25}

References main10_.

◆ operator=() [1/2]

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

◆ operator=() [2/2]

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

◆ quality()

int kcenon::pacs::encoding::compression::hevc_codec::quality ( ) const
nodiscardnoexcept

Gets the current quality setting (CRF).

Returns
Quality value (0-51)

Definition at line 63 of file hevc_codec.cpp.

63 {
64 return quality_;
65}

References quality_.

◆ transfer_syntax_uid()

std::string_view kcenon::pacs::encoding::compression::hevc_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 19 of file hevc_codec.cpp.

19 {
21}
static constexpr std::string_view kTransferSyntaxUIDMain10
DICOM Transfer Syntax UID for HEVC/H.265 Main 10 Profile / Level 5.1.
Definition hevc_codec.h:52
static constexpr std::string_view kTransferSyntaxUIDMain
DICOM Transfer Syntax UID for HEVC/H.265 Main Profile / Level 5.1.
Definition hevc_codec.h:48

Member Data Documentation

◆ kDefaultQuality

int kcenon::pacs::encoding::compression::hevc_codec::kDefaultQuality = 23
staticconstexpr

Default quality for lossy encoding (CRF value, 0-51, lower = better)

Definition at line 56 of file hevc_codec.h.

◆ kTransferSyntaxUIDMain

std::string_view kcenon::pacs::encoding::compression::hevc_codec::kTransferSyntaxUIDMain
staticconstexpr
Initial value:
=
"1.2.840.10008.1.2.4.107"

DICOM Transfer Syntax UID for HEVC/H.265 Main Profile / Level 5.1.

Definition at line 48 of file hevc_codec.h.

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

◆ kTransferSyntaxUIDMain10

std::string_view kcenon::pacs::encoding::compression::hevc_codec::kTransferSyntaxUIDMain10
staticconstexpr
Initial value:
=
"1.2.840.10008.1.2.4.108"

DICOM Transfer Syntax UID for HEVC/H.265 Main 10 Profile / Level 5.1.

Definition at line 52 of file hevc_codec.h.

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

◆ main10_

bool kcenon::pacs::encoding::compression::hevc_codec::main10_
private

Definition at line 119 of file hevc_codec.h.

Referenced by is_main10_profile(), and name().

◆ quality_

int kcenon::pacs::encoding::compression::hevc_codec::quality_
private

Definition at line 120 of file hevc_codec.h.

Referenced by quality().


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