From ddc148f291c2e08837c9892f25b1f08b147bb1c9 Mon Sep 17 00:00:00 2001 From: "jiyong.min" Date: Wed, 2 Oct 2019 10:50:47 +0900 Subject: [PATCH] Modify jpeg open and set parameters Change-Id: I1e0e07f2de6125e9062d3ed3bbfb191d480adaab --- jpeg/mm_util_jpeg.c | 78 ++++++++++++++++++++++++++++++++--------------------- 1 file changed, 48 insertions(+), 30 deletions(-) diff --git a/jpeg/mm_util_jpeg.c b/jpeg/mm_util_jpeg.c index 101709a..9fc21d6 100644 --- a/jpeg/mm_util_jpeg.c +++ b/jpeg/mm_util_jpeg.c @@ -138,6 +138,50 @@ static void __jpeg_convert_rgb_colorspace(mm_util_color_format_e mm_color_format *j_color_comp = pixel_depth; } +static void __jpeg_encode_open(j_compress_ptr cinfo, mm_util_jpeg_cont_format_e control_format, FILE *fp, void **mem, unsigned long *size) +{ + if (control_format == MM_UTIL_JPEG_FILE) { + jpeg_stdio_dest(cinfo, fp); + mm_util_debug("jpeg_stdio_dest"); + } else { + jpeg_mem_dest(cinfo, (unsigned char **)mem, size); + mm_util_debug("jpeg_mem_dest"); + } +} + +static void __jpeg_decode_open(j_decompress_ptr dinfo, mm_util_jpeg_cont_format_e control_format, FILE *fp, void *src, unsigned long size) +{ + /*specify data source (eg, a file) */ + if (control_format == MM_UTIL_JPEG_FILE) { + jpeg_stdio_src(dinfo, fp); + mm_util_debug("jpeg_stdio_src"); + } else { + jpeg_mem_src(dinfo, src, size); + mm_util_debug("jpeg_mem_src"); + } +} + +static void __jpeg_decode_set_common_params(j_decompress_ptr dinfo, mm_util_color_format_e color_space, mm_util_jpeg_decode_downscale downscale) +{ + mm_util_debug("image width: %d height: %d color_space: %d, downscale: %d", dinfo->image_width, dinfo->image_height, color_space, downscale); + + if (dinfo->image_width > ENC_MAX_LEN || dinfo->image_height > ENC_MAX_LEN) { + dinfo->scale_num = 1; + dinfo->scale_denom = 8; + dinfo->do_fancy_upsampling = FALSE; + dinfo->do_block_smoothing = FALSE; + dinfo->dither_mode = JDITHER_ORDERED; + } else if (downscale != MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1) { + dinfo->scale_num = 1; + dinfo->scale_denom = (unsigned int)downscale; + dinfo->do_fancy_upsampling = FALSE; + dinfo->do_block_smoothing = FALSE; + dinfo->dither_mode = JDITHER_ORDERED; + } + + dinfo->dct_method = JDCT_FASTEST; +} + static int __jpeg_decode_get_buffer_size(j_decompress_ptr dinfo, int row_stride, mm_util_color_format_e color_format, size_t *size) { *size = 0; @@ -185,14 +229,9 @@ static int _mm_util_jpeg_encode(mm_util_jpeg_cont_format_e control_format, mm_ut mm_util_retvm_if(ret != MM_UTIL_ERROR_NONE, ret, "Can't set error handler"); jpeg_create_compress(&cinfo); + mm_util_debug("jpeg_create_compress"); - if (control_format == MM_UTIL_JPEG_FILE) { - jpeg_stdio_dest(&cinfo, fp); - mm_util_debug("jpeg_stdio_dest"); - } else { - jpeg_mem_dest(&cinfo, (unsigned char **)mem, &size); - mm_util_debug("jpeg_mem_dest"); - } + __jpeg_encode_open(&cinfo, control_format, fp, mem, &size); _width = cinfo.image_width = _decoded->width; _height = cinfo.image_height = _decoded->height; @@ -350,34 +389,13 @@ static int _mm_util_jpeg_decode(mm_util_jpeg_cont_format_e control_format, FILE mm_util_debug("jpeg_create_decompress"); /*specify data source (eg, a file) */ - if (control_format == MM_UTIL_JPEG_FILE) { - jpeg_stdio_src(&dinfo, fp); - mm_util_debug("jpeg_stdio_src"); - } else { - jpeg_mem_src(&dinfo, src, (unsigned long)size); - mm_util_debug("jpeg_mem_src"); - } + __jpeg_decode_open(&dinfo, control_format, fp, src, (unsigned long)size); /*read file parameters with jpeg_read_header() */ jpeg_read_header(&dinfo, TRUE); mm_util_debug("jpeg_read_header"); - mm_util_debug("image width: %d height: %d", dinfo.image_width, dinfo.image_height); - if (dinfo.image_width > ENC_MAX_LEN || dinfo.image_height > ENC_MAX_LEN) { - dinfo.scale_num = 1; - dinfo.scale_denom = 8; - dinfo.do_fancy_upsampling = FALSE; - dinfo.do_block_smoothing = FALSE; - dinfo.dither_mode = JDITHER_ORDERED; - } else if (downscale != MM_UTIL_JPEG_DECODE_DOWNSCALE_1_1) { - dinfo.scale_num = 1; - dinfo.scale_denom = (unsigned int)downscale; - dinfo.do_fancy_upsampling = FALSE; - dinfo.do_block_smoothing = FALSE; - dinfo.dither_mode = JDITHER_ORDERED; - } - - dinfo.dct_method = JDCT_FASTEST; + __jpeg_decode_set_common_params(&dinfo, color_format, downscale); /* set parameters for decompression */ __jpeg_convert_rgb_colorspace(color_format, &dinfo.out_color_space, NULL); -- 2.7.4