ruby-vips 2.0.1 → 2.0.2
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/CHANGELOG.md +41 -39
- data/VERSION +1 -1
- data/example/example1.rb +4 -76
- data/example/example2.rb +5 -2
- data/example/example3.rb +3 -3
- data/lib/vips/gobject.rb +8 -7
- data/lib/vips/gvalue.rb +7 -3
- data/lib/vips/object.rb +12 -2
- data/lib/vips/operation.rb +5 -4
- data/lib/vips/version.rb +1 -1
- data/lib/vips.rb +125 -31
- data/ruby-vips.gemspec +0 -1
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA1:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: bc07fdb1e2def0cb74571c3662c1a7cc568505c8
|
|
4
|
+
data.tar.gz: 2302be93ac930c25b90eacade712c8fbe685abeb
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 59b7246675bb70923a0df56fe3ea1a2f5d9de71040377c74851d911e982555961bd3fc280f290f5714666479726e766b8c63c30a58b0c3146280ffe972ef266b
|
|
7
|
+
data.tar.gz: f325a99c620ca792ff0380292312020edbfc7faf5e6f7ee6436646fc6fe89d2acf7e2fbd3ef7c624bcc08c0ed6d6ada149d894ba2a15662fb02e8ef08197a45a
|
data/CHANGELOG.md
CHANGED
|
@@ -1,20 +1,28 @@
|
|
|
1
|
-
#
|
|
1
|
+
# Changelog
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
## master
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
## Version 2.0.2 (2017-08-26)
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
* switch to `logger` for all logging output
|
|
8
|
+
* add libvips cache control functions `Vips::cache_set_max()` etc.
|
|
9
|
+
* fix a ref leak
|
|
10
|
+
|
|
11
|
+
## Version 2.0.1 (2017-08-23)
|
|
12
|
+
|
|
13
|
+
* add support for `VipsRefStr` in gvalue, thanks tomasc
|
|
14
|
+
|
|
15
|
+
## Version 2.0.0 (2017-08-22)
|
|
8
16
|
|
|
9
17
|
* rewrite on top of 'ffi' [John Cupitt, Kleis Auke Wolthuizen]
|
|
10
18
|
|
|
11
|
-
|
|
19
|
+
## Version 1.0.6 (2017-07-17)
|
|
12
20
|
|
|
13
21
|
* remove lazy load, fixing a race with multi-threading [felixbuenemann]
|
|
14
22
|
* make `Image#to_a` much faster [John Cupitt]
|
|
15
23
|
* remove the `at_exit` handler [John Cupitt]
|
|
16
24
|
|
|
17
|
-
|
|
25
|
+
## Version 1.0.5 (2017-04-29)
|
|
18
26
|
|
|
19
27
|
* fix `_const` for libvips 8.5 [John Cupitt]
|
|
20
28
|
* add `scaleimage`, the scale operation renamed to avoid a clash with the
|
|
@@ -24,7 +32,7 @@
|
|
|
24
32
|
* update generated docs for libvips 8.5 [John Cupitt]
|
|
25
33
|
* added docs for new libvips 8.5 enums [John Cupitt]
|
|
26
34
|
|
|
27
|
-
|
|
35
|
+
## Version 1.0.4 (2017-02-07)
|
|
28
36
|
|
|
29
37
|
* remove stray comma from some docs lines [John Cupitt]
|
|
30
38
|
* update generated docs for libvips 8.5 [John Cupitt]
|
|
@@ -32,52 +40,52 @@
|
|
|
32
40
|
* update for gobject-introspection 3.1 [John Cupitt]
|
|
33
41
|
* support ruby 2.4 [John Cupitt]
|
|
34
42
|
|
|
35
|
-
|
|
43
|
+
## Version 1.0.3 (2016-08-18)
|
|
36
44
|
|
|
37
45
|
* doc improvements [John Cupitt]
|
|
38
|
-
* add #size to get [width, height] [John Cupitt]
|
|
39
|
-
* only ask for ruby 2.0 to help OS X [John Cupitt]
|
|
40
|
-
* break up Image.call to make it easier to understand [John Cupitt]
|
|
46
|
+
* add `Image#size` to get `[width, height]` [John Cupitt]
|
|
47
|
+
* only ask for ruby 2.0 to help OS X [John Cupitt]
|
|
48
|
+
* break up `Image.call` to make it easier to understand [John Cupitt]
|
|
41
49
|
* detect operation build fail correctly [John Cupitt]
|
|
42
50
|
* lock gobject-introspection at 3.0.8 to avoid breakage [John Cupitt]
|
|
43
51
|
|
|
44
|
-
|
|
52
|
+
## Version 1.0.2 (2016-07-07)
|
|
45
53
|
|
|
46
|
-
* add
|
|
54
|
+
* add `.yardopts` to fix ruby-gems docs [John Cupitt]
|
|
47
55
|
|
|
48
|
-
|
|
56
|
+
## Version 1.0.1 (2016-07-07)
|
|
49
57
|
|
|
50
58
|
* simplify gemspec [sandstrom]
|
|
51
59
|
* remove jeweler dependency [John Cupitt]
|
|
52
60
|
* add `.to_a` to Image [John Cupitt]
|
|
53
61
|
|
|
54
|
-
|
|
62
|
+
## Version 1.0.0 (2016-06-07)
|
|
55
63
|
|
|
56
64
|
* complete rewrite, API break [John Cupitt]
|
|
57
65
|
|
|
58
|
-
|
|
66
|
+
## Version 0.3.14 (2016-01-25)
|
|
59
67
|
|
|
60
68
|
* more GC tuning [felixbuenemann]
|
|
61
69
|
* add `write.rb` example program [felixbuenemann]
|
|
62
70
|
|
|
63
|
-
|
|
71
|
+
## Version 0.3.13 (2016-01-18)
|
|
64
72
|
|
|
65
73
|
* don't use generational GC options on old Rubys [John Cupitt]
|
|
66
74
|
|
|
67
|
-
|
|
75
|
+
## Version 0.3.12 (2016-01-17)
|
|
68
76
|
|
|
69
77
|
* incremental GC every 10 writes [felixbuenemann]
|
|
70
78
|
* updated bundle [John Cupitt]
|
|
71
79
|
|
|
72
|
-
|
|
80
|
+
## Version 0.3.11 (2015-10-15)
|
|
73
81
|
|
|
74
82
|
* added magick load from buffer [John Cupitt]
|
|
75
83
|
|
|
76
|
-
|
|
84
|
+
## Version 0.3.10 (2015-06-24)
|
|
77
85
|
|
|
78
86
|
* added webp write [John Cupitt]
|
|
79
87
|
|
|
80
|
-
|
|
88
|
+
## Version 0.3.9 (2014-07-17)
|
|
81
89
|
|
|
82
90
|
* removed a stray file from gemspec [Alessandro Tagliapietra]
|
|
83
91
|
* updated bundle [John Cupitt]
|
|
@@ -89,16 +97,16 @@
|
|
|
89
97
|
* add .size, see issue #58 [John Cupitt]
|
|
90
98
|
* add rdoc-data dep, maybe it will help ruby-gems docs [John Cupitt]
|
|
91
99
|
|
|
92
|
-
|
|
100
|
+
## Version 0.3.8 (2014-05-11)
|
|
93
101
|
|
|
94
102
|
* add VIPS::thread_shutdown(), must be called on foreign thread exit [John Cupitt]
|
|
95
103
|
|
|
96
|
-
|
|
104
|
+
## Version 0.3.7 (2014-02-04)
|
|
97
105
|
|
|
98
106
|
* update build dependencies [John Cupitt]
|
|
99
107
|
* README updated [John Cupitt]
|
|
100
108
|
|
|
101
|
-
|
|
109
|
+
## Version 0.3.6 (2013-06-25)
|
|
102
110
|
|
|
103
111
|
* add png and jpg load from memory buffer [John Cupitt]
|
|
104
112
|
* README updated to include buffer read/write example [John Cupitt]
|
|
@@ -107,30 +115,30 @@
|
|
|
107
115
|
* fix rdoc build to include C sources [John Cupitt]
|
|
108
116
|
* better compat with older libvips [John Cupitt]
|
|
109
117
|
|
|
110
|
-
|
|
118
|
+
## Version 0.3.5 (2013-01-15)
|
|
111
119
|
|
|
112
120
|
* rb_raise() in mask.c no longer passes a string pointer as the fmt arg, stopping gcc bailing out on some platforms [John Cupitt]
|
|
113
121
|
* Image.magick() now calls im_magick2vips() directly rather than relying on libvips file type sniffing [John Cupitt]
|
|
114
122
|
|
|
115
|
-
|
|
123
|
+
## Version 0.3.4 (2012-09-11)
|
|
116
124
|
|
|
117
125
|
* Update specs for lcms changes, thanks Stanislaw [John Cupitt]
|
|
118
126
|
* VIPS::Reader supports .exif() / .exif?() methods for better back compat, thanks Jeremy [John Cupitt]
|
|
119
127
|
* VIPS::Reader fallbacks load the image if its not been loaded [John Cupitt]
|
|
120
128
|
* VIPS::Reader no longer allows VIPS::Header methods [John Cupitt]
|
|
121
129
|
|
|
122
|
-
|
|
130
|
+
## Version 0.3.3 (2012-08-31)
|
|
123
131
|
|
|
124
132
|
* Typo in workaround in 0.3.2 [John Cupitt]
|
|
125
133
|
|
|
126
|
-
|
|
134
|
+
## Version 0.3.2 (2012-08-31)
|
|
127
135
|
|
|
128
136
|
### Fixed
|
|
129
137
|
|
|
130
138
|
* Workaround helps ruby-vips compile (and run) against 7.26.3 [John Cupitt and
|
|
131
139
|
James Harrison]
|
|
132
140
|
|
|
133
|
-
|
|
141
|
+
## Version 0.3.1 (2012-08-30)
|
|
134
142
|
|
|
135
143
|
### Fixed
|
|
136
144
|
|
|
@@ -139,9 +147,7 @@ James Harrison]
|
|
|
139
147
|
* Image read now runs GC and retries on fail [John Cupitt]
|
|
140
148
|
* Image write GCs every 100 images [John Cupitt]
|
|
141
149
|
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
Release date: 2012-07-20
|
|
150
|
+
## Version 0.3.0 (2012-07-20)
|
|
145
151
|
|
|
146
152
|
### Added
|
|
147
153
|
|
|
@@ -161,9 +167,7 @@ Release date: 2012-07-20
|
|
|
161
167
|
* Now passes rspec test suite cleanly in valgrind [John Cupitt]
|
|
162
168
|
* Fixed check of sequential mode support [Stanislaw Pankevich]
|
|
163
169
|
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
Release date: 2012-06-29
|
|
170
|
+
## Version 0.2.0 (2012-06-29)
|
|
167
171
|
|
|
168
172
|
### Added
|
|
169
173
|
|
|
@@ -183,9 +187,7 @@ Release date: 2012-06-29
|
|
|
183
187
|
|
|
184
188
|
* #8: Memory allocation-free issues [Grigoriy Chudnov]
|
|
185
189
|
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
Release date: 2012-06-22
|
|
190
|
+
## Version 0.1.1 (2012-06-22)
|
|
189
191
|
|
|
190
192
|
### Changed
|
|
191
193
|
|
|
@@ -197,6 +199,6 @@ Release date: 2012-06-22
|
|
|
197
199
|
* Added Gemfile with the only 'rspec' dependency. [Stanislaw Pankevich]
|
|
198
200
|
* Added Jeweler Rakefile contents to release ruby-vips as a gem. [Stanislaw Pankevich]
|
|
199
201
|
|
|
200
|
-
|
|
202
|
+
## Before (initial unreleased version 0.1.0)
|
|
201
203
|
|
|
202
204
|
Long-long history here undocumented...
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
2.0.
|
|
1
|
+
2.0.2
|
data/example/example1.rb
CHANGED
|
@@ -1,84 +1,12 @@
|
|
|
1
|
-
#!/usr/bin/ruby
|
|
1
|
+
#!/usr/bin/env ruby
|
|
2
2
|
|
|
3
|
+
require 'logger'
|
|
3
4
|
require 'vips'
|
|
4
|
-
$vips_debug = true
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
puts "starting up:"
|
|
6
|
+
GLib::logger.level = Logger::DEBUG
|
|
8
7
|
|
|
9
|
-
# this makes vips keep a list of all active objects which we can print out
|
|
10
|
-
Vips::leak_set true
|
|
11
|
-
|
|
12
|
-
# disable the operation cache
|
|
13
|
-
Vips::cache_set_max 0
|
|
14
|
-
|
|
15
|
-
puts ""
|
|
16
|
-
puts "creating object:"
|
|
17
|
-
x = Vips::Image.new
|
|
18
|
-
Vips::Object::print_all
|
|
19
|
-
|
|
20
|
-
puts ""
|
|
21
|
-
puts "freeing object:"
|
|
22
|
-
x = nil
|
|
23
|
-
GC.start
|
|
24
|
-
Vips::Object::print_all
|
|
25
|
-
|
|
26
|
-
puts ""
|
|
27
|
-
puts "creating operation:"
|
|
28
8
|
op = Vips::Operation.new "black"
|
|
29
|
-
Vips::Object::print_all
|
|
30
|
-
op.set_property "width", 200
|
|
31
|
-
op.set_property "height", 300
|
|
32
9
|
|
|
33
|
-
puts ""
|
|
34
|
-
puts "after operation init:"
|
|
35
|
-
GC.start
|
|
36
|
-
Vips::Object::print_all
|
|
37
|
-
|
|
38
|
-
puts ""
|
|
39
|
-
puts "operation lookup:"
|
|
40
|
-
op2 = Vips::cache_operation_lookup op
|
|
41
|
-
if op2
|
|
42
|
-
puts "cache hit"
|
|
43
|
-
op = op2
|
|
44
|
-
op2 = nil
|
|
45
|
-
else
|
|
46
|
-
puts "cache miss ... building"
|
|
47
|
-
if not op.build
|
|
48
|
-
puts "*** build error"
|
|
49
|
-
end
|
|
50
|
-
Vips::cache_operation_add op
|
|
51
|
-
end
|
|
52
|
-
|
|
53
|
-
puts ""
|
|
54
|
-
puts "after build:"
|
|
55
|
-
GC.start
|
|
56
|
-
Vips::Object::print_all
|
|
57
|
-
|
|
58
|
-
puts ""
|
|
59
|
-
puts "fetching output:"
|
|
60
|
-
im = op.get_property "out"
|
|
61
|
-
GC.start
|
|
62
|
-
Vips::Object::print_all
|
|
63
|
-
|
|
64
|
-
puts ""
|
|
65
|
-
puts "fetching output again:"
|
|
66
|
-
im2 = op.get_property "out"
|
|
67
|
-
GC.start
|
|
68
|
-
Vips::Object::print_all
|
|
69
|
-
|
|
70
|
-
puts ""
|
|
71
|
-
puts "freeing operation:"
|
|
72
|
-
op.unref_outputs
|
|
73
10
|
op = nil
|
|
74
|
-
op2 = nil
|
|
75
|
-
GC.start
|
|
76
|
-
Vips::Object::print_all
|
|
77
|
-
|
|
78
|
-
puts ""
|
|
79
|
-
puts "shutting down:"
|
|
80
|
-
im = nil
|
|
81
|
-
im2 = nil
|
|
82
|
-
GC.start
|
|
83
|
-
Vips::shutdown
|
|
84
11
|
GC.start
|
|
12
|
+
Vips::Operation.print_all
|
data/example/example2.rb
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
#!/usr/bin/ruby
|
|
2
2
|
|
|
3
|
+
require 'logger'
|
|
3
4
|
require 'vips'
|
|
4
5
|
|
|
5
6
|
puts ""
|
|
@@ -11,12 +12,14 @@ Vips::leak_set true
|
|
|
11
12
|
# disable the operation cache
|
|
12
13
|
Vips::cache_set_max 0
|
|
13
14
|
|
|
14
|
-
|
|
15
|
+
# GLib::logger.level = Logger::DEBUG
|
|
16
|
+
|
|
17
|
+
n = 10000
|
|
15
18
|
|
|
16
19
|
n.times do |i|
|
|
17
20
|
puts ""
|
|
18
21
|
puts "call #{i} ..."
|
|
19
|
-
out = Vips::call "black", 200, 300
|
|
22
|
+
out = Vips::Operation.call "black", [200, 300]
|
|
20
23
|
if out.width != 200 or out.height != 300
|
|
21
24
|
puts "bad image result from black"
|
|
22
25
|
end
|
data/example/example3.rb
CHANGED
|
@@ -3,15 +3,15 @@
|
|
|
3
3
|
require 'vips'
|
|
4
4
|
|
|
5
5
|
# this makes vips keep a list of all active objects
|
|
6
|
-
|
|
6
|
+
Vips::leak_set true
|
|
7
7
|
|
|
8
8
|
# disable the operation cache
|
|
9
9
|
# Vips::cache_set_max 0
|
|
10
10
|
|
|
11
11
|
# turn on debug logging
|
|
12
|
-
|
|
12
|
+
GLib::logger.level = Logger::DEBUG
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
1.times do |i|
|
|
15
15
|
puts "loop #{i} ..."
|
|
16
16
|
im = Vips::Image.new_from_file ARGV[0]
|
|
17
17
|
im = im.embed 100, 100, 3000, 3000, :extend => :mirror
|
data/lib/vips/gobject.rb
CHANGED
|
@@ -54,9 +54,10 @@ module GObject
|
|
|
54
54
|
include GObjectLayout
|
|
55
55
|
|
|
56
56
|
def self.release ptr
|
|
57
|
-
#
|
|
57
|
+
# GLib::logger.debug("GObject::GObject::ManagedStruct.release") {
|
|
58
58
|
# "unreffing #{ptr}"
|
|
59
|
-
|
|
59
|
+
# }
|
|
60
|
+
::GObject::g_object_unref ptr
|
|
60
61
|
end
|
|
61
62
|
end
|
|
62
63
|
|
|
@@ -72,7 +73,7 @@ module GObject
|
|
|
72
73
|
# here we use ManagedStruct, not Struct, since this is the ref that will
|
|
73
74
|
# need the unref
|
|
74
75
|
def initialize ptr
|
|
75
|
-
#
|
|
76
|
+
# GLib::logger.debug("GObject::GObject.initialize") {"ptr = #{ptr}"}
|
|
76
77
|
@struct = ffi_managed_struct.new ptr
|
|
77
78
|
end
|
|
78
79
|
|
|
@@ -109,13 +110,13 @@ module GObject
|
|
|
109
110
|
:owner_type, :GType
|
|
110
111
|
end
|
|
111
112
|
|
|
113
|
+
class GParamSpecPtr < FFI::Struct
|
|
114
|
+
layout :value, GParamSpec.ptr
|
|
115
|
+
end
|
|
116
|
+
|
|
112
117
|
attach_function :g_param_spec_get_blurb, [GParamSpec.ptr], :string
|
|
113
118
|
|
|
114
119
|
attach_function :g_object_ref, [:pointer], :void
|
|
115
120
|
attach_function :g_object_unref, [:pointer], :void
|
|
116
121
|
|
|
117
|
-
class GParamSpecPtr < FFI::Struct
|
|
118
|
-
layout :value, GParamSpec.ptr
|
|
119
|
-
end
|
|
120
|
-
|
|
121
122
|
end
|
data/lib/vips/gvalue.rb
CHANGED
|
@@ -24,7 +24,7 @@ module GObject
|
|
|
24
24
|
:data, [:ulong_long, 2]
|
|
25
25
|
|
|
26
26
|
def self.release ptr
|
|
27
|
-
#
|
|
27
|
+
# GLib::logger.debug("GObject::GValue::release") {"ptr = #{ptr}"}
|
|
28
28
|
::GObject::g_value_unset ptr
|
|
29
29
|
end
|
|
30
30
|
|
|
@@ -58,7 +58,9 @@ module GObject
|
|
|
58
58
|
#
|
|
59
59
|
# @param value [Any] The value to set
|
|
60
60
|
def set value
|
|
61
|
-
#
|
|
61
|
+
# GLib::logger.debug("GObject::GValue.set") {
|
|
62
|
+
# "value = #{value.inspect[0..50]}"
|
|
63
|
+
# }
|
|
62
64
|
|
|
63
65
|
gtype = self[:gtype]
|
|
64
66
|
fundamental = ::GObject::g_type_fundamental gtype
|
|
@@ -221,7 +223,9 @@ module GObject
|
|
|
221
223
|
end
|
|
222
224
|
end
|
|
223
225
|
|
|
224
|
-
#
|
|
226
|
+
# GLib::logger.debug("GObject::GValue.get") {
|
|
227
|
+
# "result = #{result.inspect[0..50]}"
|
|
228
|
+
# }
|
|
225
229
|
|
|
226
230
|
return result
|
|
227
231
|
|
data/lib/vips/object.rb
CHANGED
|
@@ -9,6 +9,9 @@ require 'ffi'
|
|
|
9
9
|
module Vips
|
|
10
10
|
private
|
|
11
11
|
|
|
12
|
+
# debugging support
|
|
13
|
+
attach_function :vips_object_print_all, [], :void
|
|
14
|
+
|
|
12
15
|
# we must init these by hand, since they are usually made on first image
|
|
13
16
|
# create
|
|
14
17
|
attach_function :vips_band_format_get_type, [], :GType
|
|
@@ -69,6 +72,13 @@ module Vips
|
|
|
69
72
|
|
|
70
73
|
class Object < GObject::GObject
|
|
71
74
|
|
|
75
|
+
# print all active VipsObjects, with their reference counts. Handy for
|
|
76
|
+
# debugging ruby-vips.
|
|
77
|
+
def self.print_all
|
|
78
|
+
GC.start
|
|
79
|
+
Vips::vips_object_print_all
|
|
80
|
+
end
|
|
81
|
+
|
|
72
82
|
# the layout of the VipsObject struct
|
|
73
83
|
module ObjectLayout
|
|
74
84
|
def self.included base
|
|
@@ -117,13 +127,13 @@ module Vips
|
|
|
117
127
|
GObject::g_object_get_property self, name, gvalue
|
|
118
128
|
result = gvalue.get
|
|
119
129
|
|
|
120
|
-
|
|
130
|
+
GLib::logger.debug("Vips::Object.get") {"#{name} == #{result}"}
|
|
121
131
|
|
|
122
132
|
return result
|
|
123
133
|
end
|
|
124
134
|
|
|
125
135
|
def set name, value
|
|
126
|
-
|
|
136
|
+
GLib::logger.debug("Vips::Object.set") {"#{name} = #{value}"}
|
|
127
137
|
|
|
128
138
|
gtype = get_typeof name
|
|
129
139
|
gvalue = GObject::GValue.alloc
|
data/lib/vips/operation.rb
CHANGED
|
@@ -223,9 +223,10 @@ module Vips
|
|
|
223
223
|
# the constant value 255.
|
|
224
224
|
|
|
225
225
|
def self.call name, supplied, optional = {}, option_string = ""
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
226
|
+
GLib::logger.debug("Vips::VipsOperation.call") {
|
|
227
|
+
"name = #{name}, supplied = #{supplied}, " +
|
|
228
|
+
"optional = #{optional}, option_string = #{option_string}"
|
|
229
|
+
}
|
|
229
230
|
|
|
230
231
|
op = Operation.new name
|
|
231
232
|
|
|
@@ -351,7 +352,7 @@ module Vips
|
|
|
351
352
|
result = nil
|
|
352
353
|
end
|
|
353
354
|
|
|
354
|
-
|
|
355
|
+
GLib::logger.debug("Vips::Operation.call") {"result = #{result}"}
|
|
355
356
|
|
|
356
357
|
Vips::vips_object_unref_outputs op
|
|
357
358
|
|
data/lib/vips/version.rb
CHANGED
data/lib/vips.rb
CHANGED
|
@@ -5,11 +5,18 @@
|
|
|
5
5
|
# License:: MIT
|
|
6
6
|
|
|
7
7
|
require 'ffi'
|
|
8
|
+
require 'logger'
|
|
8
9
|
|
|
9
10
|
# This module uses FFI to make a simple layer over the glib and gobject
|
|
10
11
|
# libraries.
|
|
11
12
|
|
|
12
13
|
module GLib
|
|
14
|
+
class << self
|
|
15
|
+
attr_accessor :logger
|
|
16
|
+
end
|
|
17
|
+
@logger = Logger.new(STDOUT)
|
|
18
|
+
@logger.level = Logger::WARN
|
|
19
|
+
|
|
13
20
|
extend FFI::Library
|
|
14
21
|
|
|
15
22
|
if FFI::Platform.windows?
|
|
@@ -20,19 +27,83 @@ module GLib
|
|
|
20
27
|
|
|
21
28
|
ffi_lib glib_libname
|
|
22
29
|
|
|
23
|
-
# nil being the default
|
|
24
|
-
glib_log_domain = nil
|
|
25
|
-
|
|
26
|
-
def self.set_log_domain domain
|
|
27
|
-
glib_log_domain = domain
|
|
28
|
-
end
|
|
29
|
-
|
|
30
30
|
attach_function :g_malloc, [:size_t], :pointer
|
|
31
31
|
|
|
32
32
|
# save the FFI::Function that attach will return ... we can use it directly
|
|
33
33
|
# as a param for callbacks
|
|
34
34
|
G_FREE = attach_function :g_free, [:pointer], :void
|
|
35
35
|
|
|
36
|
+
callback :g_log_func, [:string, :int, :string, :pointer], :void
|
|
37
|
+
attach_function :g_log_set_handler,
|
|
38
|
+
[:string, :int, :g_log_func, :pointer], :int
|
|
39
|
+
attach_function :g_log_remove_handler, [:string, :int], :void
|
|
40
|
+
|
|
41
|
+
# log flags
|
|
42
|
+
LOG_FLAG_RECURSION = 1 << 0
|
|
43
|
+
LOG_FLAG_FATAL = 1 << 1
|
|
44
|
+
|
|
45
|
+
# GLib log levels
|
|
46
|
+
LOG_LEVEL_ERROR = 1 << 2 # always fatal
|
|
47
|
+
LOG_LEVEL_CRITICAL = 1 << 3
|
|
48
|
+
LOG_LEVEL_WARNING = 1 << 4
|
|
49
|
+
LOG_LEVEL_MESSAGE = 1 << 5
|
|
50
|
+
LOG_LEVEL_INFO = 1 << 6
|
|
51
|
+
LOG_LEVEL_DEBUG = 1 << 7
|
|
52
|
+
|
|
53
|
+
# map glib levels to Logger::Severity
|
|
54
|
+
GLIB_TO_SEVERITY = {
|
|
55
|
+
LOG_LEVEL_ERROR => Logger::ERROR,
|
|
56
|
+
LOG_LEVEL_CRITICAL => Logger::FATAL,
|
|
57
|
+
LOG_LEVEL_WARNING => Logger::WARN,
|
|
58
|
+
LOG_LEVEL_MESSAGE => Logger::UNKNOWN,
|
|
59
|
+
LOG_LEVEL_INFO => Logger::INFO,
|
|
60
|
+
LOG_LEVEL_DEBUG => Logger::DEBUG
|
|
61
|
+
}
|
|
62
|
+
GLIB_TO_SEVERITY.default = Logger::UNKNOWN
|
|
63
|
+
|
|
64
|
+
# nil being the default
|
|
65
|
+
@glib_log_domain = nil
|
|
66
|
+
@glib_log_handler_id = 0
|
|
67
|
+
|
|
68
|
+
# module-level, so it's not GCd away
|
|
69
|
+
LOG_HANDLER = Proc.new do |domain, level, message, user_data|
|
|
70
|
+
@logger.log(GLIB_TO_SEVERITY[level], message, domain)
|
|
71
|
+
end
|
|
72
|
+
|
|
73
|
+
def self.remove_log_handler
|
|
74
|
+
if @glib_log_handler_id and @glib_log_domain
|
|
75
|
+
g_log_remove_handler @glib_log_domain, @glib_log_handler_id
|
|
76
|
+
@glib_log_handler_id = nil
|
|
77
|
+
end
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def self.set_log_domain domain
|
|
81
|
+
GLib::remove_log_handler
|
|
82
|
+
|
|
83
|
+
@glib_log_domain = domain
|
|
84
|
+
|
|
85
|
+
# forward all glib logging output from this domain to a Ruby logger
|
|
86
|
+
if @glib_log_domain
|
|
87
|
+
@glib_log_handler_id = g_log_set_handler @glib_log_domain,
|
|
88
|
+
LOG_LEVEL_DEBUG |
|
|
89
|
+
LOG_LEVEL_INFO |
|
|
90
|
+
LOG_LEVEL_MESSAGE |
|
|
91
|
+
LOG_LEVEL_WARNING |
|
|
92
|
+
LOG_LEVEL_ERROR |
|
|
93
|
+
LOG_LEVEL_CRITICAL |
|
|
94
|
+
LOG_FLAG_FATAL | LOG_FLAG_RECURSION,
|
|
95
|
+
LOG_HANDLER, nil
|
|
96
|
+
|
|
97
|
+
# we must remove any handlers on exit, since libvips may log stuff
|
|
98
|
+
# on shutdown and we don't want LOG_HANDLER to be invoked
|
|
99
|
+
# after Ruby has gone
|
|
100
|
+
at_exit {
|
|
101
|
+
GLib::remove_log_handler
|
|
102
|
+
}
|
|
103
|
+
end
|
|
104
|
+
|
|
105
|
+
end
|
|
106
|
+
|
|
36
107
|
end
|
|
37
108
|
|
|
38
109
|
module GObject
|
|
@@ -292,6 +363,19 @@ require 'vips/gvalue'
|
|
|
292
363
|
# ```
|
|
293
364
|
#
|
|
294
365
|
# and so on.
|
|
366
|
+
#
|
|
367
|
+
# # Logging
|
|
368
|
+
#
|
|
369
|
+
# The wrapper uses `logger` to log debug, info, warning, and error messages. By
|
|
370
|
+
# default, it will send messages of level `Logger::WARN` and above to `STDOUT`.
|
|
371
|
+
#
|
|
372
|
+
# You can use the {GLib::logger} accessor to change the log level, or to
|
|
373
|
+
# redirect logging somewhere else. For example:
|
|
374
|
+
#
|
|
375
|
+
# ```ruby
|
|
376
|
+
# GLib.logger.level = Logger::ERROR
|
|
377
|
+
# GLib.logger = Rails.logger
|
|
378
|
+
# ```
|
|
295
379
|
#
|
|
296
380
|
# # Automatic YARD documentation
|
|
297
381
|
#
|
|
@@ -378,22 +462,6 @@ module Vips
|
|
|
378
462
|
LOG_DOMAIN = "VIPS"
|
|
379
463
|
GLib::set_log_domain LOG_DOMAIN
|
|
380
464
|
|
|
381
|
-
@@debug = false
|
|
382
|
-
|
|
383
|
-
# Turn debug logging on and off.
|
|
384
|
-
#
|
|
385
|
-
# @param dbg [Boolean] Set true to print debug log messages
|
|
386
|
-
def self.set_debug dbg
|
|
387
|
-
@@debug = dbg
|
|
388
|
-
end
|
|
389
|
-
|
|
390
|
-
# Print a log message to the output. See {Vips::set_debug}.
|
|
391
|
-
def self.log str
|
|
392
|
-
if @@debug
|
|
393
|
-
puts str
|
|
394
|
-
end
|
|
395
|
-
end
|
|
396
|
-
|
|
397
465
|
typedef :ulong, :GType
|
|
398
466
|
|
|
399
467
|
attach_function :vips_error_buffer, [], :string
|
|
@@ -435,18 +503,44 @@ module Vips
|
|
|
435
503
|
# don't use at_exit to call vips_shutdown, it causes problems with fork, and
|
|
436
504
|
# in any case libvips does this for us
|
|
437
505
|
|
|
438
|
-
attach_function :vips_object_print_all, [], :void
|
|
439
506
|
attach_function :vips_leak_set, [:int], :void
|
|
440
507
|
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
508
|
+
# Turn libvips leak testing on and off. Handy for debugging ruby-vips, not
|
|
509
|
+
# very useful for user code.
|
|
510
|
+
def self.leak_set leak
|
|
511
|
+
vips_leak_set (leak ? 1 : 0)
|
|
512
|
+
end
|
|
513
|
+
|
|
514
|
+
attach_function :vips_cache_set_max, [:int], :void
|
|
515
|
+
attach_function :vips_cache_set_max_mem, [:int], :void
|
|
516
|
+
attach_function :vips_cache_set_max_files, [:int], :void
|
|
517
|
+
|
|
518
|
+
# Set the maximum number of operations that libvips should cache. Set 0 to
|
|
519
|
+
# disable the operation cache. The default is 1000.
|
|
520
|
+
def self.cache_set_max size
|
|
521
|
+
vips_cache_set_max size
|
|
522
|
+
end
|
|
523
|
+
|
|
524
|
+
# Set the maximum amount of memory that libvips should use for the operation
|
|
525
|
+
# cache. Set 0 to disable the operation cache. The default is 100mb.
|
|
526
|
+
def self.cache_set_max_mem size
|
|
527
|
+
vips_cache_set_max_mem size
|
|
528
|
+
end
|
|
529
|
+
|
|
530
|
+
# Set the maximum number of files libvips should keep open in the
|
|
531
|
+
# operation cache. Set 0 to disable the operation cache. The default is
|
|
532
|
+
# 100.
|
|
533
|
+
def self.cache_set_max_files size
|
|
534
|
+
vips_cache_set_max_files size
|
|
446
535
|
end
|
|
447
536
|
|
|
448
|
-
|
|
449
|
-
|
|
537
|
+
# Deprecated compatibility function.
|
|
538
|
+
#
|
|
539
|
+
# Don't use this, instead change {GLib::logger.level}.
|
|
540
|
+
def self.set_debug debug
|
|
541
|
+
if debug
|
|
542
|
+
GLib::logger.level = Logger::DEBUG
|
|
543
|
+
end
|
|
450
544
|
end
|
|
451
545
|
|
|
452
546
|
attach_function :version, :vips_version, [:int], :int
|
data/ruby-vips.gemspec
CHANGED
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: ruby-vips
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 2.0.
|
|
4
|
+
version: 2.0.2
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- John Cupitt
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2017-
|
|
11
|
+
date: 2017-08-29 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: ffi
|