Skip to content

Commit 4873683

Browse files
Merge pull request #1548 from knnniggett/libjpegturbo
fix jpeg buffer too small
2 parents 257ce2b + 75a9860 commit 4873683

File tree

2 files changed

+26
-16
lines changed

2 files changed

+26
-16
lines changed

src/zm_image.cpp

Lines changed: 22 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,10 @@ static short *g_u_table;
3535
static short *b_u_table;
3636
__attribute__((aligned(16))) static const uint8_t movemask[16] = {0,4,8,12,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF,0xFF};
3737

38-
jpeg_compress_struct *Image::jpg_ccinfo[101] = { 0 };
39-
jpeg_decompress_struct *Image::jpg_dcinfo = 0;
38+
jpeg_compress_struct *Image::writejpg_ccinfo[101] = { 0 };
39+
jpeg_compress_struct *Image::encodejpg_ccinfo[101] = { 0 };
40+
jpeg_decompress_struct *Image::readjpg_dcinfo = 0;
41+
jpeg_decompress_struct *Image::decodejpg_dcinfo = 0;
4042
struct zm_error_mgr Image::jpg_err;
4143

4244
/* Pointer to blend function. */
@@ -151,11 +153,17 @@ Image::~Image()
151153
delete[] b_u_table;
152154
initialised = false;
153155
}
154-
if ( jpg_dcinfo )
156+
if ( readjpg_dcinfo )
155157
{
156-
jpeg_destroy_decompress( jpg_dcinfo );
157-
delete jpg_dcinfo;
158-
jpg_dcinfo = 0;
158+
jpeg_destroy_decompress( readjpg_dcinfo );
159+
delete readjpg_dcinfo;
160+
readjpg_dcinfo = 0;
161+
}
162+
if ( decodejpg_dcinfo )
163+
{
164+
jpeg_destroy_decompress( decodejpg_dcinfo );
165+
delete decodejpg_dcinfo;
166+
decodejpg_dcinfo = 0;
159167
}
160168
}
161169

@@ -653,11 +661,11 @@ bool Image::WriteRaw( const char *filename ) const
653661
bool Image::ReadJpeg( const char *filename, unsigned int p_colours, unsigned int p_subpixelorder)
654662
{
655663
unsigned int new_width, new_height, new_colours, new_subpixelorder;
656-
struct jpeg_decompress_struct *cinfo = jpg_dcinfo;
664+
struct jpeg_decompress_struct *cinfo = readjpg_dcinfo;
657665

658666
if ( !cinfo )
659667
{
660-
cinfo = jpg_dcinfo = new jpeg_decompress_struct;
668+
cinfo = readjpg_dcinfo = new jpeg_decompress_struct;
661669
cinfo->err = jpeg_std_error( &jpg_err.pub );
662670
jpg_err.pub.error_exit = zm_jpeg_error_exit;
663671
jpg_err.pub.emit_message = zm_jpeg_emit_message;
@@ -814,11 +822,11 @@ bool Image::WriteJpeg( const char *filename, int quality_override, struct timeva
814822
}
815823
int quality = quality_override?quality_override:config.jpeg_file_quality;
816824

817-
struct jpeg_compress_struct *cinfo = jpg_ccinfo[quality];
825+
struct jpeg_compress_struct *cinfo = writejpg_ccinfo[quality];
818826

819827
if ( !cinfo )
820828
{
821-
cinfo = jpg_ccinfo[quality] = new jpeg_compress_struct;
829+
cinfo = writejpg_ccinfo[quality] = new jpeg_compress_struct;
822830
cinfo->err = jpeg_std_error( &jpg_err.pub );
823831
jpg_err.pub.error_exit = zm_jpeg_error_exit;
824832
jpg_err.pub.emit_message = zm_jpeg_emit_message;
@@ -945,11 +953,11 @@ bool Image::WriteJpeg( const char *filename, int quality_override, struct timeva
945953
bool Image::DecodeJpeg( const JOCTET *inbuffer, int inbuffer_size, unsigned int p_colours, unsigned int p_subpixelorder)
946954
{
947955
unsigned int new_width, new_height, new_colours, new_subpixelorder;
948-
struct jpeg_decompress_struct *cinfo = jpg_dcinfo;
956+
struct jpeg_decompress_struct *cinfo = decodejpg_dcinfo;
949957

950958
if ( !cinfo )
951959
{
952-
cinfo = jpg_dcinfo = new jpeg_decompress_struct;
960+
cinfo = decodejpg_dcinfo = new jpeg_decompress_struct;
953961
cinfo->err = jpeg_std_error( &jpg_err.pub );
954962
jpg_err.pub.error_exit = zm_jpeg_error_exit;
955963
jpg_err.pub.emit_message = zm_jpeg_emit_message;
@@ -1079,11 +1087,11 @@ bool Image::EncodeJpeg( JOCTET *outbuffer, int *outbuffer_size, int quality_over
10791087

10801088
int quality = quality_override?quality_override:config.jpeg_stream_quality;
10811089

1082-
struct jpeg_compress_struct *cinfo = jpg_ccinfo[quality];
1090+
struct jpeg_compress_struct *cinfo = encodejpg_ccinfo[quality];
10831091

10841092
if ( !cinfo )
10851093
{
1086-
cinfo = jpg_ccinfo[quality] = new jpeg_compress_struct;
1094+
cinfo = encodejpg_ccinfo[quality] = new jpeg_compress_struct;
10871095
cinfo->err = jpeg_std_error( &jpg_err.pub );
10881096
jpg_err.pub.error_exit = zm_jpeg_error_exit;
10891097
jpg_err.pub.emit_message = zm_jpeg_emit_message;

src/zm_image.h

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,8 +131,10 @@ class Image
131131
static unsigned char *y_r_table;
132132
static unsigned char *y_g_table;
133133
static unsigned char *y_b_table;
134-
static jpeg_compress_struct *jpg_ccinfo[101];
135-
static jpeg_decompress_struct *jpg_dcinfo;
134+
static jpeg_compress_struct *writejpg_ccinfo[101];
135+
static jpeg_compress_struct *encodejpg_ccinfo[101];
136+
static jpeg_decompress_struct *readjpg_dcinfo;
137+
static jpeg_decompress_struct *decodejpg_dcinfo;
136138
static struct zm_error_mgr jpg_err;
137139

138140
protected:

0 commit comments

Comments
 (0)