11#![ allow( clippy:: needless_range_loop) ]
22
3- use crate :: { my_image, Vec2d , Vec3d } ;
3+ use crate :: {
4+ my_image:: { self , MyImage } ,
5+ unwrap_arc_mutex, Vec2d , Vec3d ,
6+ } ;
47use std:: {
58 f32,
69 sync:: { Arc , Mutex } ,
@@ -94,7 +97,7 @@ impl Jpeg {
9497 }
9598 pub fn render (
9699 & mut self ,
97- my_image : & mut my_image :: MyImage ,
100+ my_image : & mut MyImage ,
98101 use_ycbcr : bool ,
99102 use_threads : bool ,
100103 subsampling_index : usize ,
@@ -121,12 +124,12 @@ impl Jpeg {
121124 if !self . use_compression_rate {
122125 let factor = if self . use_gen_qtable {
123126 if self . quality >= 50.0f32 {
124- 200.0f32 - ( self . quality as f32 * 2.0f32 )
127+ 200.0f32 - ( self . quality * 2.0f32 )
125128 } else {
126- 5000.0f32 / self . quality as f32
129+ 5000.0f32 / self . quality
127130 }
128131 } else {
129- 25.0f32 * ( ( 101.0f32 - self . quality as f32 ) * 0.01f32 )
132+ 25.0f32 * ( ( 101.0f32 - self . quality ) * 0.01f32 )
130133 } ;
131134
132135 apply_q_matrix_factor ( & mut q_matrix_luma, self . block_size , factor) ;
@@ -143,7 +146,7 @@ impl Jpeg {
143146 }
144147 pub fn encode (
145148 & mut self ,
146- my_image : & mut my_image :: MyImage ,
149+ my_image : & mut MyImage ,
147150 q_matrix_luma : Vec < f32 > ,
148151 q_matrix_chroma : Vec < f32 > ,
149152 ) {
@@ -161,6 +164,7 @@ impl Jpeg {
161164 let jpeg_steps = Arc :: new ( jpeg_steps) ;
162165
163166 let mut image_block = Vec :: with_capacity ( block_width_count * block_height_count) ;
167+ let mut result_block = Vec :: with_capacity ( block_width_count * block_height_count) ;
164168
165169 for by in 0 ..block_height_count {
166170 for bx in 0 ..block_width_count {
@@ -182,38 +186,32 @@ impl Jpeg {
182186 }
183187 }
184188
185- image_block. push ( solo_image_block) ;
186- }
187- }
188-
189- let mut result_block = Vec :: with_capacity ( block_width_count * block_height_count) ;
189+ image_block. push ( Arc :: new ( solo_image_block) ) ;
190190
191- for _ in 0 .. ( block_width_count * block_height_count ) {
192- result_block . push ( Arc :: new ( Mutex :: new ( vec ! [
193- vec! [
194- 0.0f32 ;
195- self . block_size
196- * self . block_size
197- ] ;
198- 3
199- ] ) ) ) ;
191+ result_block . push ( Arc :: new ( Mutex :: new ( vec ! [
192+ vec![
193+ 0.0f32 ;
194+ self . block_size
195+ * self . block_size
196+ ] ;
197+ 3
198+ ] ) ) ) ;
199+ }
200200 }
201201
202- let image_block = Arc :: new ( image_block) ;
203-
204202 let q_matrix_luma = Arc :: new ( q_matrix_luma) ;
205203 let q_matrix_chroma = Arc :: new ( q_matrix_chroma) ;
206204
207205 let cpu_threads = thread:: available_parallelism ( ) . unwrap ( ) . get ( ) ;
208- let pool = threadpool:: ThreadPool :: with_name ( " worker". to_string ( ) , cpu_threads) ;
206+ let pool = threadpool:: ThreadPool :: with_name ( String :: from ( "jpegview- worker") , cpu_threads) ;
209207
210208 for by in 0 ..block_height_count {
211209 for bx in 0 ..block_width_count {
212210 let start_x = bx * self . block_size ;
213211 let index = by * block_width_count + bx;
214212
215213 let arc_jpeg_steps = Arc :: clone ( & jpeg_steps) ;
216- let arc_image_block = Arc :: clone ( & image_block) ;
214+ let arc_image_block = Arc :: clone ( & image_block[ index ] ) ;
217215 let arc_result_block = Arc :: clone ( & result_block[ index] ) ;
218216 let arc_q_matrix_luma = Arc :: clone ( & q_matrix_luma) ;
219217 let arc_q_matrix_chroma = Arc :: clone ( & q_matrix_chroma) ;
@@ -222,17 +220,17 @@ impl Jpeg {
222220 let arc_locked_result_block = & mut arc_result_block. lock ( ) . unwrap ( ) ;
223221 arc_locked_result_block[ 0 ] = arc_jpeg_steps. jpeg_steps (
224222 start_x,
225- & arc_image_block[ index ] [ 0 ] ,
223+ & arc_image_block[ 0 ] ,
226224 & arc_q_matrix_luma,
227225 ) ;
228226 arc_locked_result_block[ 1 ] = arc_jpeg_steps. jpeg_steps (
229227 start_x,
230- & arc_image_block[ index ] [ 1 ] ,
228+ & arc_image_block[ 1 ] ,
231229 & arc_q_matrix_chroma,
232230 ) ;
233231 arc_locked_result_block[ 2 ] = arc_jpeg_steps. jpeg_steps (
234232 start_x,
235- & arc_image_block[ index ] [ 2 ] ,
233+ & arc_image_block[ 2 ] ,
236234 & arc_q_matrix_chroma,
237235 ) ;
238236 } ) ;
@@ -241,8 +239,8 @@ impl Jpeg {
241239 pool. join ( ) ;
242240
243241 result_block
244- . iter ( )
245- . map ( |i| i . lock ( ) . unwrap ( ) . to_vec ( ) )
242+ . into_iter ( )
243+ . map ( unwrap_arc_mutex :: < _ > )
246244 . collect ( )
247245 } else {
248246 let mut image_block: Vec3d < f32 > =
@@ -353,7 +351,7 @@ impl JpegSteps {
353351 use_gen_qtable : jpeg. use_gen_qtable ,
354352 use_compression_rate : jpeg. use_compression_rate ,
355353
356- q_control : 100.0f32 - jpeg. quality_start as f32 ,
354+ q_control : 100.0f32 - jpeg. quality_start ,
357355 two_block_size : 2.0f32 / jpeg. block_size as f32 ,
358356 }
359357 }
0 commit comments