Fixed makefile/utils for Issue#1

This commit is contained in:
Matteo Paonessa 2015-07-23 15:03:22 +02:00
parent 1c99cefdf2
commit 4a22387e81
8 changed files with 61 additions and 39 deletions

1
.gitignore vendored
View File

@ -2,3 +2,4 @@ output/*
samples/*
tmp/*
build/*
autom4te.cache

View File

@ -1,4 +1,4 @@
bin_PROGRAMS = caesiumclt
caesiumclt_SOURCES = main.c utils.c lossless.c compress.c
caesiumclt_CFLAGS = -Wall -D_FILE_OFFSET_BITS=64 -ljpeg -lturbojpeg -lm -std=c99
caesiumclt_OBJCFLAGS = -D_FILE_OFFSET_BITS=64 -ljpeg -lturbojpeg -lm
caesiumclt_CFLAGS = -Wall -D_FILE_OFFSET_BITS=64 -std=c99
caesiumclt_LDADD = -ljpeg -lturbojpeg -lm

View File

@ -102,7 +102,7 @@ am_caesiumclt_OBJECTS = caesiumclt-main.$(OBJEXT) \
caesiumclt-utils.$(OBJEXT) caesiumclt-lossless.$(OBJEXT) \
caesiumclt-compress.$(OBJEXT)
caesiumclt_OBJECTS = $(am_caesiumclt_OBJECTS)
caesiumclt_LDADD = $(LDADD)
caesiumclt_DEPENDENCIES =
caesiumclt_LINK = $(CCLD) $(caesiumclt_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) \
$(LDFLAGS) -o $@
AM_V_P = $(am__v_P_@AM_V@)
@ -253,8 +253,8 @@ top_build_prefix = @top_build_prefix@
top_builddir = @top_builddir@
top_srcdir = @top_srcdir@
caesiumclt_SOURCES = main.c utils.c lossless.c compress.c
caesiumclt_CFLAGS = -Wall -D_FILE_OFFSET_BITS=64 -ljpeg -lturbojpeg -lm -std=c99
caesiumclt_OBJCFLAGS = -D_FILE_OFFSET_BITS=64 -ljpeg -lturbojpeg -lm
caesiumclt_CFLAGS = -Wall -D_FILE_OFFSET_BITS=64 -std=c99
caesiumclt_LDADD = -ljpeg -lturbojpeg -lm
all: all-am
.SUFFIXES:

View File

@ -61,6 +61,7 @@ unsigned char* cclt_decompress(char* fileName, cclt_compress_parameters* pars) {
tjhandle tjDecompressHandle;
int fileWidth = 0, fileHeight = 0, jpegSubsamp = 0;
//TODO No error checks here
file = fopen(fileName, "rb");
res = fseek(file, 0, SEEK_END);
sourceJpegBufferSize = ftell(file);

View File

@ -31,7 +31,7 @@ struct jpeg_decompress_struct cclt_get_markers(char* input) {
//Save EXIF info
for (int m = 0; m < 16; m++) {
jpeg_save_markers(&einfo, JPEG_APP0 + m, 0xFFFF);
jpeg_save_markers(&einfo, JPEG_APP0 + m, 0xFFFF);
}
jpeg_read_header(&einfo, TRUE);

View File

@ -38,6 +38,7 @@ void cclt_start(char** input_files, int n, char* output_folder, cclt_compress_pa
}
while (i < n) {
off_t i_size, o_size;
int status; //Pointer for stat() call
char* output_filename = (char*) malloc ((strlen(output_folder) + 2) * sizeof(char));
@ -91,6 +92,8 @@ void cclt_start(char** input_files, int n, char* output_folder, cclt_compress_pa
continue;
}
//Get input file size
i_size = st_buf.st_size;
*(i_t_size) += i_size;
@ -187,7 +190,7 @@ int main (int argc, char *argv[]) {
cclt_start(pars.input_files, pars.input_files_count, pars.output_folder, &pars, &i_t_size, &o_t_size);
fprintf(stdout, "Compression completed.\n%ld bytes -> %ld bytes [%.2f%%]\n",
fprintf(stdout, "-------------------------------\nCompression completed.\n%ld bytes -> %ld bytes [%.2f%%]\n",
(long) i_t_size, (long) o_t_size, ((float) o_t_size - i_t_size) * 100 / i_t_size);
exit(0);

View File

@ -120,33 +120,6 @@ char* get_filename_with_extension(char* full_path) {
return dest;
}
void jcopy_markers_execute (j_decompress_ptr srcinfo, j_compress_ptr dstinfo) {
jpeg_saved_marker_ptr marker;
for (marker = srcinfo->marker_list; marker != NULL; marker = marker->next) {
if (dstinfo->write_JFIF_header &&
marker->marker == JPEG_APP0 &&
marker->data_length >= 5 &&
GETJOCTET(marker->data[0]) == 0x4A &&
GETJOCTET(marker->data[1]) == 0x46 &&
GETJOCTET(marker->data[2]) == 0x49 &&
GETJOCTET(marker->data[3]) == 0x46 &&
GETJOCTET(marker->data[4]) == 0)
continue;
if (dstinfo->write_Adobe_marker &&
marker->marker == JPEG_APP0+14 &&
marker->data_length >= 5 &&
GETJOCTET(marker->data[0]) == 0x41 &&
GETJOCTET(marker->data[1]) == 0x64 &&
GETJOCTET(marker->data[2]) == 0x6F &&
GETJOCTET(marker->data[3]) == 0x62 &&
GETJOCTET(marker->data[4]) == 0x65)
continue;
jpeg_write_marker(dstinfo, marker->marker,
marker->data, marker->data_length);
}
}
cclt_compress_parameters parse_arguments(int argc, char* argv[]) {
//Initialize default params
@ -217,8 +190,15 @@ cclt_compress_parameters parse_arguments(int argc, char* argv[]) {
}
void cclt_compress_routine(char* input, char* output, cclt_compress_parameters* pars) {
cclt_compress(output, cclt_decompress(input, pars), pars);
cclt_optimize(output, output, pars->exif_copy, input);
enum image_type type = detect_image_type(input);
if (type == JPEG) {
cclt_compress(output, cclt_decompress(input, pars), pars);
cclt_optimize(output, output, pars->exif_copy, input);
} else if (type == PNG) {
printf("PNG detected. Still to implement.\n");
} else {
return;
}
}
char** scan_folder(char* dir, int depth) {
@ -255,7 +235,7 @@ char** scan_folder(char* dir, int depth) {
chdir("..");
closedir(dp);
printf("SEG\n");
return *files;
return files;
}
void printdir(char *dir, int depth)
@ -285,3 +265,33 @@ void printdir(char *dir, int depth)
closedir(dp);
}
enum image_type detect_image_type(char* path) {
FILE* fp;
unsigned char* type_buffer = valloc(2);
fp = fopen(path, "r");
if (fp == NULL) {
fprintf(stderr, "Cannot open input file for type detection. Aborting.\n");
exit(-14);
}
if (fread(type_buffer, 1, 2, fp) < 2) {
fprintf(stderr, "Cannot read file type. Aborting.\n");
exit(-15);
}
fclose(fp);
if (((int) type_buffer[0] == 0xFF) && ((int) type_buffer[1] == 0xD8)) {
free(type_buffer);
return JPEG;
} else if (((int) type_buffer[0] == 0x89) && ((int) type_buffer[1] == 0x50)) {
free(type_buffer);
return PNG;
} else {
fprintf(stderr, "Unsupported file type. Skipping.\n");
return UNKN;
}
}

View File

@ -6,7 +6,7 @@
#include <sys/types.h>
#define APP_VERSION "1.9.9 BETA"
#define BUILD 20150519
#define BUILD 20150723
typedef struct cclt_compress_parameters {
int quality;
@ -24,6 +24,12 @@ typedef struct cclt_compress_parameters {
int recursive;
} cclt_compress_parameters;
enum image_type {
JPEG,
PNG,
UNKN,
};
cclt_compress_parameters initialize_compression_parameters();
int string_to_int(char* in_string);
@ -34,5 +40,6 @@ void jcopy_markers_execute (j_decompress_ptr srcinfo, j_compress_ptr dstinfo);
int mkpath(const char *pathname, mode_t mode);
cclt_compress_parameters parse_arguments(int argc, char* argv[]);
void cclt_compress_routine(char* input, char* output,cclt_compress_parameters* pars);
enum image_type detect_image_type(char* path);
#endif