image_intensities 1.0.2 → 1.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/ext/image_intensities/Makefile +1 -1
- data/ext/image_intensities/jpeg.c +39 -50
- data/lib/image_intensities/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 464455d1063af5fd09dba024cfd681137290db2c3294d97ad36d20bef49b74a8
|
4
|
+
data.tar.gz: 2f60420eb22106e56d85d54d11f659461894ea2542dcdb6299f7ff0e4548d52f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8146a851d0d1d7f615e9f03d3b17d66dbf32d5dfafb46cededb3063da8ca4d4261625f5927d62f39ac9b7d4e4229cb31a5776ea6b580415dfb32e25e9d969a74
|
7
|
+
data.tar.gz: 77a2ccd9318bbc4f17c615f44f8b61b19689695185b1ef05ca4b16f7e7c8784c0e4a5dfcc2fe39c2193c2cfe8fdfa207bdbecef7dafe3bbf8966c399b9fe4ad8
|
@@ -8,7 +8,7 @@ all: lib/libimage_intensities.so
|
|
8
8
|
|
9
9
|
lib/libimage_intensities.so: definitions.h intensities.c png.c jpeg.c
|
10
10
|
$(MKDIR) -p lib
|
11
|
-
$(CC) intensities.c png.c jpeg.c -fPIC -shared -o lib/libimage_intensities.so -
|
11
|
+
$(CC) intensities.c png.c jpeg.c -fPIC -shared -o lib/libimage_intensities.so -lturbojpeg -lpng
|
12
12
|
|
13
13
|
clean:
|
14
14
|
rm -rf lib
|
@@ -1,71 +1,60 @@
|
|
1
|
-
#include <stdio.h>
|
2
|
-
#include <stdint.h>
|
3
|
-
#include <stdlib.h>
|
4
1
|
#include <stddef.h>
|
2
|
+
#include <stdlib.h>
|
3
|
+
#include <turbojpeg.h>
|
5
4
|
#include <fcntl.h>
|
6
|
-
#include <
|
7
|
-
#include <
|
8
|
-
#include <setjmp.h>
|
5
|
+
#include <unistd.h>
|
6
|
+
#include <sys/mman.h>
|
9
7
|
|
10
8
|
#include "definitions.h"
|
11
9
|
|
12
|
-
struct my_error_mgr {
|
13
|
-
struct jpeg_error_mgr pub;
|
14
|
-
jmp_buf setjmp_buffer;
|
15
|
-
};
|
16
|
-
|
17
|
-
static void my_error_exit(j_common_ptr cinfo)
|
18
|
-
{
|
19
|
-
struct my_error_mgr *myerr = (struct my_error_mgr *) cinfo->err;
|
20
|
-
longjmp(myerr->setjmp_buffer, 1);
|
21
|
-
}
|
22
|
-
|
23
10
|
raster_data read_jpeg_file(const char *file_name)
|
24
11
|
{
|
25
|
-
struct jpeg_decompress_struct cinfo;
|
26
|
-
struct my_error_mgr jerr;
|
27
|
-
FILE *file;
|
28
|
-
JSAMPARRAY buffer;
|
29
|
-
int row_stride;
|
30
|
-
|
31
12
|
raster_data data = {};
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
13
|
+
tjhandle decompressor = NULL;
|
14
|
+
void *input = NULL;
|
15
|
+
off_t size = 0;
|
16
|
+
int fd = -1;
|
17
|
+
int error = 0;
|
18
|
+
int jpegSubsamp;
|
19
|
+
|
20
|
+
fd = open(file_name, 0);
|
21
|
+
if (fd < 0) {
|
22
|
+
error = 1;
|
23
|
+
goto cleanup;
|
37
24
|
}
|
38
25
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
jpeg_destroy_decompress(&cinfo);
|
44
|
-
fclose(file);
|
26
|
+
if ((size = lseek(fd, 0, SEEK_END)) < 0) {
|
27
|
+
error = 1;
|
28
|
+
goto cleanup;
|
29
|
+
}
|
45
30
|
|
46
|
-
|
31
|
+
if ((input = mmap(NULL, size, PROT_READ, MAP_SHARED, fd, 0)) == NULL) {
|
32
|
+
error = 1;
|
33
|
+
goto cleanup;
|
47
34
|
}
|
48
35
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
36
|
+
if ((decompressor = tjInitDecompress()) == NULL) {
|
37
|
+
error = 1;
|
38
|
+
goto cleanup;
|
39
|
+
}
|
53
40
|
|
54
|
-
data.width
|
55
|
-
|
56
|
-
|
41
|
+
if ((tjDecompressHeader2(decompressor, input, size, &data.width, &data.height, &jpegSubsamp)) < 0) {
|
42
|
+
error = 1;
|
43
|
+
goto cleanup;
|
44
|
+
}
|
57
45
|
|
58
|
-
|
59
|
-
buffer = (*cinfo.mem->alloc_sarray)((j_common_ptr) &cinfo, JPOOL_IMAGE, row_stride, 1);
|
46
|
+
data.pixels = malloc(data.width * data.height * sizeof(rgb_pixel));
|
60
47
|
|
61
|
-
|
62
|
-
|
63
|
-
|
48
|
+
if ((tjDecompress2(decompressor, input, size, (uint8_t *) data.pixels, data.width, 0, data.height, TJPF_RGB, TJFLAG_FASTDCT)) < 0) {
|
49
|
+
error = 1;
|
50
|
+
goto cleanup;
|
64
51
|
}
|
65
52
|
|
66
|
-
|
67
|
-
|
68
|
-
|
53
|
+
cleanup:
|
54
|
+
if (decompressor) tjDestroy(decompressor);
|
55
|
+
if (input) munmap(input, size);
|
56
|
+
if (fd >= 0) close(fd);
|
69
57
|
|
58
|
+
data.error = error;
|
70
59
|
return data;
|
71
60
|
}
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: image_intensities
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.0.
|
4
|
+
version: 1.0.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Liam P. White
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-08-
|
11
|
+
date: 2019-08-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|