Skip to content

Commit 2d85706

Browse files
authored
Merge pull request #4 from awxkee/v2
Preparing release
2 parents d272257 + 119e727 commit 2d85706

File tree

5 files changed

+33
-30
lines changed

5 files changed

+33
-30
lines changed

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@ rust-version = "1.82.0"
1818

1919
[dependencies]
2020
num-traits = "0.2.19"
21-
moxcms = "0.2.3"
21+
moxcms = "0.3.0"
2222
quick-xml = { version = "0.37.2", features = ["serde", "serde-types", "serialize"] }
2323
serde = { version = "1.0.218", features = ["derive"] }
2424

app/Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,6 @@ image = { version = "0.25.5", features = ["avif-native"] }
88
gainforge = { path = "../" }
99
turbojpeg = "1.2.2"
1010
num-traits = "0.2.19"
11-
moxcms = "0.2.3"
11+
moxcms = "0.3.0"
1212
zune-jpeg = { git = "https://github.com/etemesi254/zune-image" }
1313
pic-scale = "0.5.3"

app/src/main.rs

Lines changed: 20 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ mod mlaf;
3030
mod parse;
3131

3232
use gainforge::{
33-
create_tone_mapper_rgb, BufferStore, FilmicSplineParameters, GainHdrMetadata, GainImage,
34-
GainImageMut, GamutClipping, GamutColorSpace, HdrTransferFunction, IsoGainMap, MpfInfo,
35-
ToneMappingMethod, TransferFunction, UhdrDirectoryContainer,
33+
create_tone_mapper_rgb, create_tone_mapper_rgb16, BufferStore, FilmicSplineParameters,
34+
GainHdrMetadata, GainImage, GainImageMut, GamutClipping, GamutColorSpace, HdrTransferFunction,
35+
IsoGainMap, MpfInfo, ToneMappingMethod, TransferFunction, UhdrDirectoryContainer,
3636
};
3737
use moxcms::ColorProfile;
3838
use std::fs::File;
@@ -163,31 +163,31 @@ fn extract_images(file_path: &str) -> GainMapAssociationGroup {
163163
}
164164

165165
fn main() {
166-
let img = image::ImageReader::open("./assets/08_base_hdr.avif")
166+
let img = image::ImageReader::open("./assets/hdr.avif")
167167
.unwrap()
168168
.decode()
169169
.unwrap();
170-
let rgb = img.to_rgb8();
170+
let rgb = img.to_rgb16();
171171

172-
let tone_mapper = create_tone_mapper_rgb(
172+
let tone_mapper = create_tone_mapper_rgb16(
173173
HdrTransferFunction::Pq,
174174
GamutColorSpace::Bt2020,
175175
TransferFunction::Srgb,
176176
GamutColorSpace::Srgb,
177-
ToneMappingMethod::FilmicSpline(FilmicSplineParameters {
178-
saturation: 0f32,
179-
white_point_source: 8f32,
180-
black_point_source: -8f32,
181-
black_point_target: 0.01f32,
182-
..Default::default()
183-
}),
184-
// ToneMappingMethod::Rec2408(GainHDRMetadata::new(2000f32, 250f32)),
185-
GamutClipping::Clip,
177+
// ToneMappingMethod::FilmicSpline(FilmicSplineParameters {
178+
// saturation: 0f32,
179+
// white_point_source: 8f32,
180+
// black_point_source: -8f32,
181+
// black_point_target: 0.01f32,
182+
// ..Default::default()
183+
// }),
184+
ToneMappingMethod::Rec2408(GainHdrMetadata::new(2000f32, 250f32)),
185+
GamutClipping::NoClip,
186186
// ToneMappingMethod::Rec2408(GainHDRMetadata::new(2000f32, 250f32)),
187187
// ToneMappingMethod::Rec2408(GainHDRMetadata::new(1000f32, 250f32)),
188188
);
189189
let dims = rgb.dimensions();
190-
let mut dst = vec![0u8; rgb.len()];
190+
let mut dst = vec![0u16; rgb.len()];
191191
let work_time = Instant::now();
192192
for (src, dst) in rgb
193193
.chunks_exact(rgb.dimensions().0 as usize * 3)
@@ -227,9 +227,11 @@ fn main() {
227227
// )
228228
// .unwrap();
229229

230+
let compressed = dst.iter().map(|&x| (x >> 8) as u8).collect::<Vec<_>>();
231+
230232
image::save_buffer(
231-
"clamp1.jpg",
232-
&dst,
233+
"clamp_compress.jpg",
234+
&compressed,
233235
img.width(),
234236
img.height(),
235237
image::ExtendedColorType::Rgb8,

src/apply_gain_map.rs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -136,7 +136,7 @@ pub fn apply_gain_map_rgb10(
136136
gain_map: GainMap,
137137
weight: f32,
138138
) -> Result<(), ForgeError> {
139-
apply_gain_map::<u16, 3, 3, 1024, 8192, 10>(
139+
apply_gain_map::<u16, 3, 3, 65536, 8192, 10>(
140140
image,
141141
dst_image,
142142
image_icc_profile,
@@ -174,7 +174,7 @@ pub fn apply_gain_map_rgba10(
174174
gain_map: GainMap,
175175
weight: f32,
176176
) -> Result<(), ForgeError> {
177-
apply_gain_map::<u16, 4, 3, 1024, 8192, 10>(
177+
apply_gain_map::<u16, 4, 3, 65536, 8192, 10>(
178178
image,
179179
dst_image,
180180
image_icc_profile,
@@ -212,7 +212,7 @@ pub fn apply_gain_map_rgb12(
212212
gain_map: GainMap,
213213
weight: f32,
214214
) -> Result<(), ForgeError> {
215-
apply_gain_map::<u16, 3, 3, 4096, 16384, 12>(
215+
apply_gain_map::<u16, 3, 3, 65536, 16384, 12>(
216216
image,
217217
dst_image,
218218
image_icc_profile,
@@ -250,7 +250,7 @@ pub fn apply_gain_map_rgba12(
250250
gain_map: GainMap,
251251
weight: f32,
252252
) -> Result<(), ForgeError> {
253-
apply_gain_map::<u16, 4, 3, 4096, 16384, 12>(
253+
apply_gain_map::<u16, 4, 3, 65536, 16384, 12>(
254254
image,
255255
dst_image,
256256
image_icc_profile,
@@ -412,13 +412,13 @@ where
412412
.ok_or(ForgeError::InvalidIcc)?;
413413

414414
let image_linearize_map_r = img_profile
415-
.build_r_linearize_table::<LIN_DEPTH>()
415+
.build_r_linearize_table::<LIN_DEPTH, BIT_DEPTH>()
416416
.map_err(|_| ForgeError::InvalidIcc)?;
417417
let image_linearize_map_g = img_profile
418-
.build_g_linearize_table::<LIN_DEPTH>()
418+
.build_g_linearize_table::<LIN_DEPTH, BIT_DEPTH>()
419419
.map_err(|_| ForgeError::InvalidIcc)?;
420420
let image_linearize_map_b = img_profile
421-
.build_b_linearize_table::<LIN_DEPTH>()
421+
.build_b_linearize_table::<LIN_DEPTH, BIT_DEPTH>()
422422
.map_err(|_| ForgeError::InvalidIcc)?;
423423

424424
let gain_map_icc_profile = (if gain_map.use_base_cg {
@@ -429,13 +429,13 @@ where
429429
.ok_or(ForgeError::InvalidGainMapConfiguration)?;
430430

431431
let gain_image_linearize_map_r = gain_map_icc_profile
432-
.build_r_linearize_table::<LIN_DEPTH>()
432+
.build_r_linearize_table::<LIN_DEPTH, BIT_DEPTH>()
433433
.map_err(|_| ForgeError::InvalidIcc)?;
434434
let gain_image_linearize_map_g = gain_map_icc_profile
435-
.build_g_linearize_table::<LIN_DEPTH>()
435+
.build_g_linearize_table::<LIN_DEPTH, BIT_DEPTH>()
436436
.map_err(|_| ForgeError::InvalidIcc)?;
437437
let gain_image_linearize_map_b = gain_map_icc_profile
438-
.build_b_linearize_table::<LIN_DEPTH>()
438+
.build_b_linearize_table::<LIN_DEPTH, BIT_DEPTH>()
439439
.map_err(|_| ForgeError::InvalidIcc)?;
440440

441441
let mut linearized_image_content = vec![0f32; image.width * N];

src/iso_gain_map.rs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -990,6 +990,7 @@ impl<const N: usize> GainLUT<N> {
990990
}
991991
}
992992

993+
/// Computes gain map weight for given display boost
993994
pub fn make_gainmap_weight(gain_map: GainMap, display_boost: f32) -> f32 {
994995
let input_boost = display_boost.max(1f32);
995996
let gainmap_weight = (input_boost.log2() - gain_map.hdr_capacity_min.log2())

0 commit comments

Comments
 (0)