From aa3aa911bcf3a32134bcbc38330cbde50dea66a5 Mon Sep 17 00:00:00 2001 From: Raphael Canut Date: Tue, 18 Apr 2023 21:10:38 +0200 Subject: [PATCH] version 0.3.0-rc1 Better quantization --- decoder/nhw_decoder.c | 63 ++++++++++++++++++++++++++++---------- decoder/nhw_decoder_cli.c | 6 ++-- encoder/image_processing.c | 61 ++++++++++++++++++++++++++---------- encoder/nhw_encoder_cli.c | 6 ++-- 4 files changed, 97 insertions(+), 39 deletions(-) diff --git a/decoder/nhw_decoder.c b/decoder/nhw_decoder.c index 3f63478..a695b2a 100644 --- a/decoder/nhw_decoder.c +++ b/decoder/nhw_decoder.c @@ -2,8 +2,8 @@ **************************************************************************** * NHW Image Codec * * file: nhw_decoder.c * -* version: 0.2.7 * -* last update: $ 18112022 nhw exp $ * +* version: 0.3.0-rc1 * +* last update: $ 04182023 nhw exp $ * * * **************************************************************************** **************************************************************************** @@ -657,26 +657,55 @@ void decode_image(image_buffer *im,decode_state *os,char *file_name) im->im_jpeg[count]=scan; } - - for (i=(2*IM_DIM);i<((2*IM_SIZE)-(2*IM_DIM));i+=(2*IM_DIM)) + + if (im->setup->quality_setting<=LOW4) { - for (scan=i+1,j=1;j8) + for (scan=i+1,j=1;j8) continue; - if (abs(im_nhw[scan-(2*IM_DIM)])>8) continue; - if (abs(im_nhw[scan-(2*IM_DIM-1)])>8) continue; - if (abs(im_nhw[scan-1])>8) continue; - if (abs(im_nhw[scan+1])>8) continue; - if (abs(im_nhw[scan+(2*IM_DIM-1)])>8) continue; - if (abs(im_nhw[scan+(2*IM_DIM)])>8) continue; - if (abs(im_nhw[scan+(2*IM_DIM+1)])>8) continue; + if (abs(im_nhw[scan])>8) + { + if (abs(im_nhw[scan-(2*IM_DIM+1)])>16) continue; + if (abs(im_nhw[scan-(2*IM_DIM)])>8) continue; + if (abs(im_nhw[scan-(2*IM_DIM-1)])>16) continue; + if (abs(im_nhw[scan-1])>8) continue; + if (abs(im_nhw[scan+1])>8) continue; + if (abs(im_nhw[scan+(2*IM_DIM-1)])>16) continue; + if (abs(im_nhw[scan+(2*IM_DIM)])>8) continue; + if (abs(im_nhw[scan+(2*IM_DIM+1)])>16) continue; - if (i>=IM_SIZE || j>=(IM_DIM>>1)) + if (i>=IM_SIZE || j>=(IM_DIM>>1)) + { + if (im_nhw[scan]>0) im_nhw[scan]--; + else im_nhw[scan]++; + } + } + } + } + } + else + { + for (i=(2*IM_DIM);i<((2*IM_SIZE)-(2*IM_DIM));i+=(2*IM_DIM)) + { + for (scan=i+1,j=1;j8) { - if (im_nhw[scan]>0) im_nhw[scan]--; - else im_nhw[scan]++; + if (abs(im_nhw[scan-(2*IM_DIM+1)])>8) continue; + if (abs(im_nhw[scan-(2*IM_DIM)])>8) continue; + if (abs(im_nhw[scan-(2*IM_DIM-1)])>8) continue; + if (abs(im_nhw[scan-1])>8) continue; + if (abs(im_nhw[scan+1])>8) continue; + if (abs(im_nhw[scan+(2*IM_DIM-1)])>8) continue; + if (abs(im_nhw[scan+(2*IM_DIM)])>8) continue; + if (abs(im_nhw[scan+(2*IM_DIM+1)])>8) continue; + + if (i>=IM_SIZE || j>=(IM_DIM>>1)) + { + if (im_nhw[scan]>0) im_nhw[scan]--; + else im_nhw[scan]++; + } } } } diff --git a/decoder/nhw_decoder_cli.c b/decoder/nhw_decoder_cli.c index 767f6a7..10edd89 100644 --- a/decoder/nhw_decoder_cli.c +++ b/decoder/nhw_decoder_cli.c @@ -2,8 +2,8 @@ **************************************************************************** * NHW Image Codec * * file: nhw_decoder_cli.c * -* version: 0.2.7 * -* last update: $ 18112022 nhw exp $ * +* version: 0.3.0-rc1 * +* last update: $ 04182023 nhw exp $ * * * **************************************************************************** **************************************************************************** @@ -52,7 +52,7 @@ #include "nhw_decoder.h" #define PROGRAM "nhw-dec" -#define VERSION "0.2.8" +#define VERSION "0.3.0-rc1" int setup_bmp_header(char* bmp_header, nhw_image_s* im_ctx); int write_image_bmp(decode_state *dec, image_buffer *im, char *file_name); diff --git a/encoder/image_processing.c b/encoder/image_processing.c index b200bc8..2ef60ac 100644 --- a/encoder/image_processing.c +++ b/encoder/image_processing.c @@ -2,8 +2,8 @@ **************************************************************************** * NHW Image Codec * * file: image_processing.c * -* version: 0.2.9.8 * -* last update: $ 02072023 nhw exp $ * +* version: 0.3.0-rc1 * +* last update: $ 04182023 nhw exp $ * * * **************************************************************************** **************************************************************************** @@ -1791,25 +1791,54 @@ void offsetY_recons256(image_buffer *im, encode_state *enc, int m1, int part) if (!part) { - for (i=(2*IM_DIM);i<((2*IM_SIZE)-(2*IM_DIM));i+=(2*IM_DIM)) + if (im->setup->quality_setting<=LOW4) { - for (e=i+1,j=1;jim_jpeg[e])>=8) + for (e=i+1,j=1;jim_jpeg[e-(2*IM_DIM+1)])>=8) continue; - if (abs(im->im_jpeg[e-(2*IM_DIM)])>=8) continue; - if (abs(im->im_jpeg[e-(2*IM_DIM-1)])>=8) continue; - if (abs(im->im_jpeg[e-1])>=8) continue; - if (abs(im->im_jpeg[e+1])>=8) continue; - if (abs(im->im_jpeg[e+(2*IM_DIM-1)])>=8) continue; - if (abs(im->im_jpeg[e+(2*IM_DIM)])>=8) continue; - if (abs(im->im_jpeg[e+(2*IM_DIM+1)])>=8) continue; + if (abs(im->im_jpeg[e])>=8) + { + if (abs(im->im_jpeg[e-(2*IM_DIM+1)])>=16) continue; + if (abs(im->im_jpeg[e-(2*IM_DIM)])>=8) continue; + if (abs(im->im_jpeg[e-(2*IM_DIM-1)])>=16) continue; + if (abs(im->im_jpeg[e-1])>=8) continue; + if (abs(im->im_jpeg[e+1])>=8) continue; + if (abs(im->im_jpeg[e+(2*IM_DIM-1)])>=16) continue; + if (abs(im->im_jpeg[e+(2*IM_DIM)])>=8) continue; + if (abs(im->im_jpeg[e+(2*IM_DIM+1)])>=16) continue; - if (i>=IM_SIZE || j>=(IM_DIM>>1)) + if (i>=IM_SIZE || j>=(IM_DIM>>1)) + { + if (im->im_jpeg[e]>0) im->im_jpeg[e]--; + else im->im_jpeg[e]++; + } + } + } + } + } + else + { + for (i=(2*IM_DIM);i<((2*IM_SIZE)-(2*IM_DIM));i+=(2*IM_DIM)) + { + for (e=i+1,j=1;jim_jpeg[e])>=8) { - if (im->im_jpeg[e]>0) im->im_jpeg[e]--; - else im->im_jpeg[e]++; + if (abs(im->im_jpeg[e-(2*IM_DIM+1)])>=8) continue; + if (abs(im->im_jpeg[e-(2*IM_DIM)])>=8) continue; + if (abs(im->im_jpeg[e-(2*IM_DIM-1)])>=8) continue; + if (abs(im->im_jpeg[e-1])>=8) continue; + if (abs(im->im_jpeg[e+1])>=8) continue; + if (abs(im->im_jpeg[e+(2*IM_DIM-1)])>=8) continue; + if (abs(im->im_jpeg[e+(2*IM_DIM)])>=8) continue; + if (abs(im->im_jpeg[e+(2*IM_DIM+1)])>=8) continue; + + if (i>=IM_SIZE || j>=(IM_DIM>>1)) + { + if (im->im_jpeg[e]>0) im->im_jpeg[e]--; + else im->im_jpeg[e]++; + } } } } diff --git a/encoder/nhw_encoder_cli.c b/encoder/nhw_encoder_cli.c index 548a4f9..b608ba9 100644 --- a/encoder/nhw_encoder_cli.c +++ b/encoder/nhw_encoder_cli.c @@ -2,8 +2,8 @@ **************************************************************************** * NHW Image Codec * * file: nhw_encoder_cli.c * -* version: 0.2.9.8 * -* last update: $ 02072023 nhw exp $ * +* version: 0.3.0-rc1 * +* last update: $ 04182023 nhw exp $ * * * **************************************************************************** **************************************************************************** @@ -50,7 +50,7 @@ #include "codec.h" #define PROGRAM "nhw-enc" -#define VERSION "0.2.9.8" +#define VERSION "0.3.0-rc1" #define NHW_QUALITY_MIN LOW20 #define NHW_QUALITY_MAX HIGH3