ruby-vips 2.1.0 → 2.1.4
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 +20 -0
- data/README.md +22 -16
- data/TODO +2 -3
- data/VERSION +1 -1
- data/example/inheritance_with_refcount.rb +11 -3
- data/lib/vips/image.rb +132 -26
- data/lib/vips/methods.rb +334 -218
- data/lib/vips/mutableimage.rb +23 -4
- data/lib/vips/object.rb +4 -10
- data/lib/vips/operation.rb +15 -1
- data/lib/vips/version.rb +1 -1
- data/lib/vips.rb +8 -1
- metadata +3 -3
data/lib/vips/mutableimage.rb
CHANGED
@@ -53,8 +53,9 @@ module Vips
|
|
53
53
|
# it's the thing we return at the end of the mutate block.
|
54
54
|
copy_image = image.copy
|
55
55
|
|
56
|
-
#
|
57
|
-
# and make the ref that gobject will unref when it finishes
|
56
|
+
# Use ptr since we need the raw unwrapped pointer inside the image ...
|
57
|
+
# and make the ref that gobject will unref when it finishes.
|
58
|
+
# See also the comment on set_type! before changing this.
|
58
59
|
pointer = copy_image.ptr
|
59
60
|
::GObject.g_object_ref pointer
|
60
61
|
super pointer
|
@@ -79,7 +80,7 @@ module Vips
|
|
79
80
|
end
|
80
81
|
|
81
82
|
def respond_to_missing? name, include_all = false
|
82
|
-
#
|
83
|
+
# Respond to all vips operations by nickname.
|
83
84
|
return true if Vips.type_find("VipsOperation", name.to_s) != 0
|
84
85
|
|
85
86
|
super
|
@@ -115,7 +116,21 @@ module Vips
|
|
115
116
|
gvalue = GObject::GValue.alloc
|
116
117
|
gvalue.init gtype
|
117
118
|
gvalue.set value
|
118
|
-
|
119
|
+
|
120
|
+
# libvips 8.9.1 had a terrible misfeature which would block metadata
|
121
|
+
# modification unless the object had a ref_count of 1. MutableImage
|
122
|
+
# will always have a ref_count of at least 2 (the parent gobject keeps a
|
123
|
+
# ref, and we keep a ref to the copy ready to return to our caller),
|
124
|
+
# so we must temporarily drop the refs to 1 around metadata changes.
|
125
|
+
#
|
126
|
+
# See https://github.com/libvips/ruby-vips/issues/291
|
127
|
+
begin
|
128
|
+
::GObject.g_object_unref ptr
|
129
|
+
Vips.vips_image_set self, name, gvalue
|
130
|
+
ensure
|
131
|
+
::GObject.g_object_ref ptr
|
132
|
+
end
|
133
|
+
|
119
134
|
gvalue.unset
|
120
135
|
end
|
121
136
|
|
@@ -148,7 +163,11 @@ module Vips
|
|
148
163
|
#
|
149
164
|
# @param name [String] Metadata field to remove
|
150
165
|
def remove! name
|
166
|
+
# See set_type! for an explanation. Image#remove can't throw an
|
167
|
+
# exception, so there's no need to ensure we unref.
|
168
|
+
::GObject.g_object_unref ptr
|
151
169
|
Vips.vips_image_remove self, name
|
170
|
+
::GObject.g_object_ref ptr
|
152
171
|
end
|
153
172
|
end
|
154
173
|
end
|
data/lib/vips/object.rb
CHANGED
@@ -64,11 +64,8 @@ module Vips
|
|
64
64
|
|
65
65
|
MARSHAL_PROGRESS = proc do |handler|
|
66
66
|
FFI::Function.new(:void, [:pointer, :pointer, :pointer]) do |vi, prog, cb|
|
67
|
-
|
68
|
-
|
69
|
-
rescue Exception => e
|
70
|
-
puts "progress: #{e}"
|
71
|
-
end
|
67
|
+
# this can't throw an exception, so no catch is necessary
|
68
|
+
handler.call(Progress.new(prog))
|
72
69
|
end
|
73
70
|
end
|
74
71
|
|
@@ -113,11 +110,8 @@ module Vips
|
|
113
110
|
|
114
111
|
MARSHAL_FINISH = proc do |handler|
|
115
112
|
FFI::Function.new(:void, [:pointer, :pointer]) do |i, cb|
|
116
|
-
|
117
|
-
|
118
|
-
rescue Exception => e
|
119
|
-
puts "finish: #{e}"
|
120
|
-
end
|
113
|
+
# this can't throw an exception, so no catch is necessary
|
114
|
+
handler.call
|
121
115
|
end
|
122
116
|
end
|
123
117
|
|
data/lib/vips/operation.rb
CHANGED
@@ -48,7 +48,8 @@ module Vips
|
|
48
48
|
class Introspect
|
49
49
|
attr_reader :name, :description, :flags, :args, :required_input,
|
50
50
|
:optional_input, :required_output, :optional_output, :member_x,
|
51
|
-
:method_args, :vips_name, :destructive
|
51
|
+
:method_args, :vips_name, :destructive, :doc_optional_input,
|
52
|
+
:doc_optional_output
|
52
53
|
|
53
54
|
@@introspect_cache = {}
|
54
55
|
|
@@ -142,6 +143,8 @@ module Vips
|
|
142
143
|
@flags = Vips.vips_operation_get_flags @op
|
143
144
|
@member_x = nil
|
144
145
|
@method_args = []
|
146
|
+
@doc_optional_input = {}
|
147
|
+
@doc_optional_output = {}
|
145
148
|
|
146
149
|
@args.each do |details|
|
147
150
|
arg_name = details[:arg_name]
|
@@ -164,6 +167,17 @@ module Vips
|
|
164
167
|
end
|
165
168
|
end
|
166
169
|
end
|
170
|
+
|
171
|
+
# and make the arg sets to document by filtering out deprecated args
|
172
|
+
@optional_input.each do |arg_name, details|
|
173
|
+
next if (details[:flags] & ARGUMENT_DEPRECATED) != 0
|
174
|
+
@doc_optional_input[details[:arg_name]] = details
|
175
|
+
end
|
176
|
+
|
177
|
+
@optional_output.each do |arg_name, details|
|
178
|
+
next if (details[:flags] & ARGUMENT_DEPRECATED) != 0
|
179
|
+
@doc_optional_output[details[:arg_name]] = details
|
180
|
+
end
|
167
181
|
end
|
168
182
|
|
169
183
|
def self.get name
|
data/lib/vips/version.rb
CHANGED
data/lib/vips.rb
CHANGED
@@ -575,10 +575,17 @@ module Vips
|
|
575
575
|
LOG_DOMAIN = "VIPS"
|
576
576
|
GLib.set_log_domain LOG_DOMAIN
|
577
577
|
|
578
|
-
|
578
|
+
# we can't just use ulong, windows has different int sizing rules
|
579
|
+
if FFI::Platform::ADDRESS_SIZE == 64
|
580
|
+
typedef :uint64, :GType
|
581
|
+
else
|
582
|
+
typedef :uint32, :GType
|
583
|
+
end
|
579
584
|
|
580
585
|
attach_function :vips_error_buffer, [], :string
|
581
586
|
attach_function :vips_error_clear, [], :void
|
587
|
+
attach_function :vips_error_freeze, [], :void
|
588
|
+
attach_function :vips_error_thaw, [], :void
|
582
589
|
|
583
590
|
# The ruby-vips error class.
|
584
591
|
class Error < RuntimeError
|
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.1.
|
4
|
+
version: 2.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- John Cupitt
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-
|
11
|
+
date: 2021-11-20 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ffi
|
@@ -204,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
204
204
|
- !ruby/object:Gem::Version
|
205
205
|
version: '0'
|
206
206
|
requirements: []
|
207
|
-
rubygems_version: 3.
|
207
|
+
rubygems_version: 3.2.5
|
208
208
|
signing_key:
|
209
209
|
specification_version: 4
|
210
210
|
summary: A fast image processing library with low memory needs
|