Fixed makefile/utils for Issue#1
This commit is contained in:
parent
1c99cefdf2
commit
4a22387e81
|
@ -2,3 +2,4 @@ output/*
|
|||
samples/*
|
||||
tmp/*
|
||||
build/*
|
||||
autom4te.cache
|
|
@ -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
|
|
@ -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:
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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);
|
||||
|
|
70
src/utils.c
70
src/utils.c
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue