27#include <shared_mutex>
30#include <unordered_map>
47 std::string format{
"jpeg"};
132 std::shared_ptr<storage::index_database> database);
154 std::string_view sop_instance_uid,
166 std::string_view series_uid,
178 std::string_view study_uid,
194 void clear_cache(std::string_view sop_instance_uid);
235 size_t h = std::hash<std::string>{}(k.
uid);
236 h ^= std::hash<uint16_t>{}(k.
size) << 1;
237 h ^= std::hash<std::string>{}(k.
format) << 2;
238 h ^= std::hash<int>{}(k.
quality) << 3;
239 h ^= std::hash<uint32_t>{}(k.
frame) << 4;
248 std::unordered_map<cache_key, thumbnail_cache_entry, cache_key_hash>
cache_;
270 std::string_view file_path,
279 std::string_view series_uid);
287 std::string_view study_uid);
Thumbnail generation and caching service.
thumbnail_service(const thumbnail_service &)=delete
Non-copyable, non-movable (due to shared_mutex member)
thumbnail_service(thumbnail_service &&)=delete
std::shared_ptr< storage::index_database > database_
Database for instance lookups.
thumbnail_service & operator=(const thumbnail_service &)=delete
thumbnail_result get_thumbnail(std::string_view sop_instance_uid, const thumbnail_params ¶ms)
Get or generate thumbnail for a specific instance.
void evict_lru()
Evict least recently used entries to make room.
thumbnail_service(std::shared_ptr< storage::index_database > database)
Construct thumbnail service with database.
std::vector< uint8_t > generate_thumbnail(std::string_view file_path, const thumbnail_params ¶ms)
Generate thumbnail from DICOM file.
thumbnail_result get_series_thumbnail(std::string_view series_uid, const thumbnail_params ¶ms)
Get thumbnail for a series (representative image)
void set_max_cache_size(size_t max_bytes)
Set maximum cache size.
size_t cache_entry_count() const
Get number of cached entries.
static std::string get_content_type(std::string_view format)
Get MIME type for format.
size_t current_cache_size_
Current cache size in bytes.
size_t max_cache_size_
Maximum cache size (default: 64MB)
size_t cache_size() const
Get current cache size in bytes.
thumbnail_result get_study_thumbnail(std::string_view study_uid, const thumbnail_params ¶ms)
Get thumbnail for a study (representative image)
size_t max_cache_size() const
Get maximum cache size.
std::optional< std::string > select_representative_series(std::string_view study_uid)
Select representative series from study.
std::optional< std::string > select_representative_instance(std::string_view series_uid)
Select representative instance from series.
thumbnail_service & operator=(thumbnail_service &&)=delete
std::unordered_map< cache_key, thumbnail_cache_entry, cache_key_hash > cache_
Thumbnail cache.
~thumbnail_service()
Destructor.
void clear_cache()
Clear all cached thumbnails.
std::shared_mutex cache_mutex_
Cache mutex.
std::vector< uint8_t > data
Compressed image data.
std::chrono::system_clock::time_point created_at
When the entry was created.
std::chrono::system_clock::time_point last_accessed
When the entry was last accessed.
std::string content_type
MIME content type.
Parameters for thumbnail generation.
uint16_t size
Output size in pixels (64, 128, 256, 512)
uint32_t frame
Frame number for multi-frame images (1-indexed)
int quality
Quality for lossy compression (1-100)
Result type for thumbnail operations.
thumbnail_cache_entry entry
Thumbnail data if succeeded.
std::string error_message
Error message if failed.
bool success
Whether the operation succeeded.
static thumbnail_result ok(thumbnail_cache_entry entry)
Create a success result.
static thumbnail_result error(std::string message)
Create an error result.
Hash function for cache key.
size_t operator()(const cache_key &k) const
bool operator==(const cache_key &) const =default