camcapture 0.1.0-i686-linux → 0.2.0-i686-linux
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.
- data/ext/ruby_camcapture.c +40 -3
- data/lib/camcapture.rb +1 -1
- data/test/test.rb +4 -2
- metadata +3 -3
data/ext/ruby_camcapture.c
CHANGED
@@ -174,7 +174,11 @@ static VALUE cam_capture_create(VALUE class, VALUE device_number, VALUE width, V
|
|
174
174
|
return Qnil;
|
175
175
|
}
|
176
176
|
vid_chan.channel = 0;
|
177
|
-
|
177
|
+
if (NUM2INT(palette) & 32) {
|
178
|
+
vid_chan.norm = VIDEO_MODE_NTSC;
|
179
|
+
} else {
|
180
|
+
vid_chan.norm = VIDEO_MODE_PAL;
|
181
|
+
}
|
178
182
|
if (ioctl(fd, VIDIOCSCHAN, &(vid_chan)) == -1) {
|
179
183
|
rb_raise(rb_eIOError, "CamCapture : VIDIOCSCHAN");
|
180
184
|
return Qnil;
|
@@ -196,10 +200,42 @@ static VALUE cam_capture_create(VALUE class, VALUE device_number, VALUE width, V
|
|
196
200
|
return (VALUE) capture;
|
197
201
|
}
|
198
202
|
|
203
|
+
static VALUE cam_capture_to_bgr(VALUE self)
|
204
|
+
{
|
205
|
+
VALUE image, image2;
|
206
|
+
char *imageData;
|
207
|
+
int x, y;
|
208
|
+
char r;
|
209
|
+
int width,height;
|
210
|
+
VALUE rwidth, rheight;
|
211
|
+
|
212
|
+
rwidth=rb_iv_get(self, "@width");
|
213
|
+
width=NUM2INT(rwidth);
|
214
|
+
rheight=rb_iv_get(self, "@height");
|
215
|
+
height=NUM2INT(rheight);
|
216
|
+
|
217
|
+
image=rb_iv_get(self, "@image");
|
218
|
+
image2=StringValue(image);
|
219
|
+
if (RSTRING(image2)->len != width*height*3) {
|
220
|
+
rb_raise(rb_eRuntimeError, "image is not correct");
|
221
|
+
}
|
222
|
+
imageData=RSTRING(image2)->ptr;
|
223
|
+
for (y = 0; y < height; y++) {
|
224
|
+
for (x = 0; x < width; x++) {
|
225
|
+
r = *imageData;
|
226
|
+
*imageData = *(imageData + 2);
|
227
|
+
*(imageData + 2) = r;
|
228
|
+
imageData += 3;
|
229
|
+
}
|
230
|
+
}
|
231
|
+
return self;
|
232
|
+
}
|
233
|
+
|
199
234
|
void Init_camcapture() {
|
200
235
|
cCamCapture = rb_define_class("CamCapture", rb_cIO);
|
201
236
|
rb_define_singleton_method(cCamCapture, "create", cam_capture_create, 4);
|
202
237
|
rb_define_method(cCamCapture, "save_bmp", cam_capture_save_bmp, 1);
|
238
|
+
rb_define_method(cCamCapture, "to_bgr", cam_capture_to_bgr, 0);
|
203
239
|
|
204
240
|
#define VIDEO_PALETTE_GREY 1 /* Linear greyscale */
|
205
241
|
#define VIDEO_PALETTE_HI240 2 /* High 240 cube (BT848) */
|
@@ -220,8 +256,9 @@ void Init_camcapture() {
|
|
220
256
|
|
221
257
|
rb_define_const(cCamCapture, "GREY", INT2FIX(VIDEO_PALETTE_GREY));
|
222
258
|
rb_define_const(cCamCapture, "RGB24", INT2FIX(VIDEO_PALETTE_RGB24));
|
223
|
-
rb_define_const(cCamCapture, "RGB32", INT2FIX(VIDEO_PALETTE_RGB32));
|
224
259
|
rb_define_const(cCamCapture, "YUV422", INT2FIX(VIDEO_PALETTE_YUV422));
|
260
|
+
rb_define_const(cCamCapture, "PAL", INT2FIX(0));
|
261
|
+
rb_define_const(cCamCapture, "NTSC", INT2FIX(32));
|
225
262
|
|
226
263
|
/* The following definitions are more easily carried out in Ruby */
|
227
264
|
rb_eval_string(
|
@@ -235,7 +272,7 @@ void Init_camcapture() {
|
|
235
272
|
"end\n"
|
236
273
|
|
237
274
|
"def capture\n"
|
238
|
-
"sysread(@width*@height*3
|
275
|
+
"sysread(@width*@height*3, @image)\n"
|
239
276
|
"end\n"
|
240
277
|
|
241
278
|
"end\n"
|
data/lib/camcapture.rb
CHANGED
data/test/test.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
begin
|
2
2
|
require 'camcapture'
|
3
|
+
puts "Successfully loaded module camcapture"
|
3
4
|
rescue LoadError
|
4
5
|
require 'rubygems'
|
5
|
-
|
6
|
+
require 'camcapture'
|
7
|
+
puts "Successfully loaded gem camcapture"
|
6
8
|
end
|
7
9
|
|
8
|
-
camera=CamCapture.new 0, 320, 240
|
10
|
+
camera=CamCapture.new 0, 320, 240
|
9
11
|
puts "Image size is #{camera.width}x#{camera.height}"
|
10
12
|
for i in 1..10 do
|
11
13
|
image=camera.capture
|
metadata
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
|
-
rubygems_version: 0.9.
|
2
|
+
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:
|
6
|
+
version: 0.2.0
|
7
|
+
date: 2007-10-08 00:00:00 +02:00
|
8
8
|
summary: Camera/Webcam capture using Video4Linux interface. Compatible with Ruby Threads.
|
9
9
|
require_paths:
|
10
10
|
- lib
|