From d6bf9b77b8a240736cf08abaacba330cc270ac66 Mon Sep 17 00:00:00 2001 From: Matteo Paonessa Date: Sun, 11 Jun 2023 19:04:27 +0200 Subject: [PATCH] Code refactoring --- src/jpeg.rs | 72 +++++++++++++++++++++++---------------------------- src/lib.rs | 4 +-- src/main.rs | 3 ++- src/png.rs | 2 +- src/resize.rs | 8 +++--- src/webp.rs | 2 +- 6 files changed, 42 insertions(+), 49 deletions(-) diff --git a/src/jpeg.rs b/src/jpeg.rs index 32c83c9..0852998 100644 --- a/src/jpeg.rs +++ b/src/jpeg.rs @@ -1,16 +1,16 @@ -use image::ImageOutputFormat::Jpeg; -use img_parts::{DynImage, ImageEXIF, ImageICC}; -use mozjpeg_sys::*; - use std::{fs, ptr}; +use std::{io, mem}; use std::fs::File; use std::io::Write; -use std::{io, mem}; use std::panic::catch_unwind; -use libc::free; -use crate::resize::resize; +use image::ImageOutputFormat::Jpeg; +use img_parts::{DynImage, ImageEXIF, ImageICC}; +use libc::free; +use mozjpeg_sys::*; + use crate::CSParameters; +use crate::resize::resize; static mut JPEG_ERROR: c_int = 0; @@ -49,7 +49,7 @@ pub fn compress_to_memory(mut in_file: Vec, parameters: &CSParameters) -> Re }) { Ok(cb) => cb, Err(_) => Err(io::Error::new(io::ErrorKind::Other, format!("Internal JPEG error: {}", JPEG_ERROR))) - } + }; } } @@ -64,12 +64,12 @@ unsafe fn lossless( let mut dst_err = mem::zeroed(); src_info.common.err = jpeg_std_error(&mut src_err); - (*src_info.common.err).error_exit = Option::Some(error_handler); - (*src_info.common.err).output_message = Option::Some(error_message_handler); + (*src_info.common.err).error_exit = Some(error_handler); + (*src_info.common.err).output_message = Some(error_message_handler); dst_info.common.err = jpeg_std_error(&mut dst_err); - (*dst_info.common.err).error_exit = Option::Some(error_handler); - (*dst_info.common.err).output_message = Option::Some(error_message_handler); + (*dst_info.common.err).error_exit = Some(error_handler); + (*dst_info.common.err).output_message = Some(error_message_handler); jpeg_create_decompress(&mut src_info); jpeg_create_compress(&mut dst_info); @@ -96,17 +96,7 @@ unsafe fn lossless( jpeg_write_coefficients(&mut dst_info, dst_coef_arrays); if parameters.keep_metadata { - let mut marker = src_info.marker_list; - - while !marker.is_null() { - jpeg_write_marker( - &mut dst_info, - (*marker).marker as i32, - (*marker).data, - (*marker).data_length, - ); - marker = (*marker).next; - } + write_metadata(&mut src_info, &mut dst_info); } jpeg_finish_compress(&mut dst_info); @@ -133,12 +123,12 @@ unsafe fn lossy(in_file: Vec, parameters: &CSParameters) -> Result, let mut dst_err = mem::zeroed(); src_info.common.err = jpeg_std_error(&mut src_err); - (*src_info.common.err).error_exit = Option::Some(error_handler); - (*src_info.common.err).output_message = Option::Some(error_message_handler); + (*src_info.common.err).error_exit = Some(error_handler); + (*src_info.common.err).output_message = Some(error_message_handler); dst_info.common.err = jpeg_std_error(&mut dst_err); - (*dst_info.common.err).error_exit = Option::Some(error_handler); - (*dst_info.common.err).output_message = Option::Some(error_message_handler); + (*dst_info.common.err).error_exit = Some(error_handler); + (*dst_info.common.err).output_message = Some(error_message_handler); jpeg_create_decompress(&mut src_info); jpeg_create_compress(&mut dst_info); @@ -200,17 +190,7 @@ unsafe fn lossy(in_file: Vec, parameters: &CSParameters) -> Result, jpeg_start_compress(&mut dst_info, true as boolean); if parameters.keep_metadata { - let mut marker = src_info.marker_list; - - while !marker.is_null() { - jpeg_write_marker( - &mut dst_info, - (*marker).marker as i32, - (*marker).data, - (*marker).data_length, - ); - marker = (*marker).next; - } + write_metadata(&mut src_info, &mut dst_info); } while dst_info.next_scanline < dst_info.image_height { @@ -275,10 +255,22 @@ fn save_metadata( } } +unsafe fn write_metadata(src_info: &mut jpeg_decompress_struct, dst_info: &mut jpeg_compress_struct) { + let mut marker = src_info.marker_list; + + while !marker.is_null() { + jpeg_write_marker( + dst_info, + (*marker).marker as i32, + (*marker).data, + (*marker).data_length, + ); + marker = (*marker).next; + } +} unsafe extern "C" fn error_handler(cinfo: &mut jpeg_common_struct) { JPEG_ERROR = (*cinfo.err).msg_code; panic!("Internal JPEG error: {}", JPEG_ERROR); } -unsafe extern "C" fn error_message_handler(_cinfo: &mut jpeg_common_struct) { -} \ No newline at end of file +unsafe extern "C" fn error_message_handler(_cinfo: &mut jpeg_common_struct) {} \ No newline at end of file diff --git a/src/lib.rs b/src/lib.rs index 8d70ed3..9d1bc6a 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,9 +4,9 @@ use alloc::ffi::CString; use std::{cmp, fs}; use std::error::Error; use std::ffi::CStr; -use std::os::raw::c_char; use std::fs::File; use std::io::Write; +use std::os::raw::c_char; use crate::utils::{get_filetype, SupportedFileTypes}; @@ -208,7 +208,7 @@ pub fn compress_to_size( input_path: String, output_path: String, parameters: &mut CSParameters, - max_output_size: usize + max_output_size: usize, ) -> Result<(), Box> { let file_type = get_filetype(&input_path); diff --git a/src/main.rs b/src/main.rs index 1f94ec4..050e3ef 100644 --- a/src/main.rs +++ b/src/main.rs @@ -1,7 +1,8 @@ -use caesium::{compress, initialize_parameters}; use std::env; use std::process::ExitCode; +use caesium::{compress, initialize_parameters}; + fn main() -> ExitCode { let args: Vec = env::args().collect(); diff --git a/src/png.rs b/src/png.rs index ac25dbb..7c095e7 100644 --- a/src/png.rs +++ b/src/png.rs @@ -2,8 +2,8 @@ use std::{fs, io}; use std::fs::File; use std::io::Write; use std::num::NonZeroU8; -use image::ImageOutputFormat; +use image::ImageOutputFormat; use oxipng::Deflaters::{Libdeflater, Zopfli}; use crate::CSParameters; diff --git a/src/resize.rs b/src/resize.rs index eec9fd0..548f916 100644 --- a/src/resize.rs +++ b/src/resize.rs @@ -1,10 +1,10 @@ -use image::imageops::FilterType; -use image::io::Reader as ImageReader; -use image::DynamicImage; - use std::io; use std::io::Cursor; +use image::DynamicImage; +use image::imageops::FilterType; +use image::io::Reader as ImageReader; + #[allow(dead_code)] pub fn resize( image_buffer: Vec, diff --git a/src/webp.rs b/src/webp.rs index 48757c6..fef5113 100644 --- a/src/webp.rs +++ b/src/webp.rs @@ -3,8 +3,8 @@ use std::io; use std::io::{Read, Write}; use std::ops::Deref; -use crate::resize::resize_image; use crate::CSParameters; +use crate::resize::resize_image; pub fn compress( input_path: String,