camcapture 0.2.0-i686-linux → 0.3.0-i686-linux
Sign up to get free protection for your applications and to get access to all the features.
- data/README +1 -4
- data/ext/ruby_camcapture.c +14 -33
- data/lib/camcapture.rb +15 -2
- data/test/test_camellia.rb +17 -0
- metadata +3 -2
data/README
CHANGED
data/ext/ruby_camcapture.c
CHANGED
@@ -49,7 +49,7 @@ static void put16(unsigned int value, FILE* outf)
|
|
49
49
|
static VALUE cam_capture_save_bmp(VALUE self, VALUE filename)
|
50
50
|
{
|
51
51
|
VALUE image,image2;
|
52
|
-
char *imageData
|
52
|
+
char *imageData;
|
53
53
|
char *fnx=RSTRING(filename)->ptr;
|
54
54
|
int width,height;
|
55
55
|
int h,w,r,g,b;
|
@@ -209,10 +209,10 @@ static VALUE cam_capture_to_bgr(VALUE self)
|
|
209
209
|
int width,height;
|
210
210
|
VALUE rwidth, rheight;
|
211
211
|
|
212
|
-
rwidth=rb_iv_get(self, "@width");
|
213
|
-
width=NUM2INT(rwidth);
|
214
|
-
rheight=rb_iv_get(self, "@height");
|
215
|
-
height=NUM2INT(rheight);
|
212
|
+
rwidth = rb_iv_get(self, "@width");
|
213
|
+
width = NUM2INT(rwidth);
|
214
|
+
rheight = rb_iv_get(self, "@height");
|
215
|
+
height = NUM2INT(rheight);
|
216
216
|
|
217
217
|
image=rb_iv_get(self, "@image");
|
218
218
|
image2=StringValue(image);
|
@@ -231,11 +231,20 @@ static VALUE cam_capture_to_bgr(VALUE self)
|
|
231
231
|
return self;
|
232
232
|
}
|
233
233
|
|
234
|
+
static VALUE cam_address(VALUE self)
|
235
|
+
{
|
236
|
+
char *ptr;
|
237
|
+
VALUE str = rb_iv_get(self, "@image");
|
238
|
+
ptr = RSTRING(str)->ptr;
|
239
|
+
return INT2FIX((int)ptr);
|
240
|
+
}
|
241
|
+
|
234
242
|
void Init_camcapture() {
|
235
243
|
cCamCapture = rb_define_class("CamCapture", rb_cIO);
|
236
244
|
rb_define_singleton_method(cCamCapture, "create", cam_capture_create, 4);
|
237
245
|
rb_define_method(cCamCapture, "save_bmp", cam_capture_save_bmp, 1);
|
238
246
|
rb_define_method(cCamCapture, "to_bgr", cam_capture_to_bgr, 0);
|
247
|
+
rb_define_method(cCamCapture, "address", cam_address, 0);
|
239
248
|
|
240
249
|
#define VIDEO_PALETTE_GREY 1 /* Linear greyscale */
|
241
250
|
#define VIDEO_PALETTE_HI240 2 /* High 240 cube (BT848) */
|
@@ -259,32 +268,4 @@ void Init_camcapture() {
|
|
259
268
|
rb_define_const(cCamCapture, "YUV422", INT2FIX(VIDEO_PALETTE_YUV422));
|
260
269
|
rb_define_const(cCamCapture, "PAL", INT2FIX(0));
|
261
270
|
rb_define_const(cCamCapture, "NTSC", INT2FIX(32));
|
262
|
-
|
263
|
-
/* The following definitions are more easily carried out in Ruby */
|
264
|
-
rb_eval_string(
|
265
|
-
"class CamCapture\n"
|
266
|
-
|
267
|
-
"attr_reader :width, :height, :image\n"
|
268
|
-
|
269
|
-
"def CamCapture.new(device_number=0, w=0, h=0, palette=0)\n"
|
270
|
-
"cap = create(device_number, w, h, palette)\n"
|
271
|
-
"return cap\n"
|
272
|
-
"end\n"
|
273
|
-
|
274
|
-
"def capture\n"
|
275
|
-
"sysread(@width*@height*3, @image)\n"
|
276
|
-
"end\n"
|
277
|
-
|
278
|
-
"end\n"
|
279
|
-
);
|
280
271
|
}
|
281
|
-
|
282
|
-
/* For CamelliaLib interfacing :
|
283
|
-
*
|
284
|
-
"def capture(image)\n"
|
285
|
-
"image.alloc_bgr(@width, @height) if image.width != @width or image.height != @height or not image.allocated?\n"
|
286
|
-
"if image.widthStep != @width*3 then image=nil; return; end\n"
|
287
|
-
"image.set_pixels(sysread(@width*@height*3,@image))\n"
|
288
|
-
"end\n"
|
289
|
-
*/
|
290
|
-
|
data/lib/camcapture.rb
CHANGED
@@ -8,9 +8,22 @@ class CamCapture
|
|
8
8
|
return cap
|
9
9
|
end
|
10
10
|
|
11
|
-
|
12
|
-
|
11
|
+
if Module.constants.include?("Camellia") then
|
12
|
+
def capture
|
13
|
+
@camimage ||= Camellia::CamImage.new
|
14
|
+
if not @camimage.allocated? or @camimage.width != @width or @camimage.height != @height
|
15
|
+
@camimage.fill_header(@width, @height, Camellia::CAM_DEPTH_8U, Camellia::CAM_CHANNELSEQ_RGB)
|
16
|
+
if @camimage.widthStep != @width*3 then @camimage = nil; return; end
|
17
|
+
end
|
18
|
+
sysread(@width*@height*3,@image)
|
19
|
+
@camimage.set_image_data(@image)
|
20
|
+
end
|
21
|
+
else
|
22
|
+
def capture
|
23
|
+
sysread(@width*@height*3, @image)
|
24
|
+
end
|
13
25
|
end
|
26
|
+
|
14
27
|
end
|
15
28
|
|
16
29
|
|
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'camellia'
|
2
|
+
begin
|
3
|
+
require 'camcapture'
|
4
|
+
puts "Successfully loaded module camcapture"
|
5
|
+
rescue LoadError
|
6
|
+
require 'rubygems'
|
7
|
+
require 'camcapture'
|
8
|
+
puts "Successfully loaded gem camcapture"
|
9
|
+
end
|
10
|
+
|
11
|
+
camera=CamCapture.new 0, 320, 240
|
12
|
+
puts "Image size is #{camera.width}x#{camera.height}"
|
13
|
+
for i in 1..10 do
|
14
|
+
image=camera.capture
|
15
|
+
puts "image #{i} : #{image.imageSize} bytes grabbed"
|
16
|
+
image.save_bmp("grab#{i}.bmp")
|
17
|
+
end
|
metadata
CHANGED
@@ -3,8 +3,8 @@ rubygems_version: 0.9.4
|
|
3
3
|
specification_version: 1
|
4
4
|
name: camcapture
|
5
5
|
version: !ruby/object:Gem::Version
|
6
|
-
version: 0.
|
7
|
-
date: 2007-
|
6
|
+
version: 0.3.0
|
7
|
+
date: 2007-11-27 00:00:00 +01:00
|
8
8
|
summary: Camera/Webcam capture using Video4Linux interface. Compatible with Ruby Threads.
|
9
9
|
require_paths:
|
10
10
|
- lib
|
@@ -35,6 +35,7 @@ files:
|
|
35
35
|
- README
|
36
36
|
test_files:
|
37
37
|
- test/test.rb
|
38
|
+
- test/test_camellia.rb
|
38
39
|
rdoc_options: []
|
39
40
|
|
40
41
|
extra_rdoc_files:
|