aboutsummaryrefslogtreecommitdiff
path: root/externals/gridflow/format/dc1394.c
diff options
context:
space:
mode:
authorN.N. <matju@users.sourceforge.net>2009-10-18 19:53:53 +0000
committerN.N. <matju@users.sourceforge.net>2009-10-18 19:53:53 +0000
commita1fb215b39535805aa19608185d5e52c0f524b42 (patch)
tree9d8056ca9837bd03676405dc5202bdc2c041d430 /externals/gridflow/format/dc1394.c
parentd6b18994d50479d2f76041387d25db235bbda4cd (diff)
bye gridflow 0.9.4
svn path=/trunk/; revision=12610
Diffstat (limited to 'externals/gridflow/format/dc1394.c')
-rw-r--r--externals/gridflow/format/dc1394.c287
1 files changed, 0 insertions, 287 deletions
diff --git a/externals/gridflow/format/dc1394.c b/externals/gridflow/format/dc1394.c
deleted file mode 100644
index 7f107b49..00000000
--- a/externals/gridflow/format/dc1394.c
+++ /dev/null
@@ -1,287 +0,0 @@
-/*
- $Id: dc1394.c 3978 2008-07-04 20:18:01Z matju $
-
- GridFlow
- Copyright (c) 2001-2008 by Mathieu Bouchard
-
- This program is free software; you can redistribute it and/or
- modify it under the terms of the GNU General Public License
- as published by the Free Software Foundation; either version 2
- of the License, or (at your option) any later version.
-
- See file ../COPYING for further informations on licensing terms.
-
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-*/
-
-#include <libraw1394/raw1394.h>
-#include <libdc1394/dc1394_control.h>
-#include "../gridflow.h.fcs"
-
-/* speeds are numbered 0 to 5, worth 100<<speednum */
-/* framerates are numbers 32 to 39, worth 1.875<<(frameratenum-32) */
-
-#define MODE(x,y,palette) /* nothing for now */
-
-static std::map<int,string> feature_names;
-
-static void setup_modes () {
- int i=64; // format 0
- MODE(160,120,YUV444);
- MODE(320,240,YUV422);
- MODE(640,480,YUV411);
- MODE(640,480,YUV422);
- MODE(640,480,RGB);
- MODE(640,480,MONO);
- MODE(640,480,MONO16);
- i=96; // format 1
- MODE(800,600,YUV422);
- MODE(800,600,RGB);
- MODE(800,600,MONO);
- MODE(1024,768,YUV422);
- MODE(1024,768,RGB);
- MODE(1024,768,MONO);
- MODE(800,600,MONO16);
- MODE(1024,768,MONO16);
- i=128; // format 2
- MODE(1280,960,YUV422);
- MODE(1280,960,RGB);
- MODE(1280,960,MONO);
- MODE(1600,1200,YUV422);
- MODE(1600,1200,RGB);
- MODE(1600,1200,MONO);
- MODE(1280,960,MONO16);
- MODE(1600,1200,MONO16);
- i=256; // format 6
- // MODE_EXIF= 256
- i=288; // format 7
- //MODE_FORMAT7_0,
- //MODE_FORMAT7_1,
- //MODE_FORMAT7_2,
- //MODE_FORMAT7_3,
- //MODE_FORMAT7_4,
- //MODE_FORMAT7_5,
- //MODE_FORMAT7_6,
- //MODE_FORMAT7_7
-
-// format7 color modes start at #320 and are MONO8 YUV411 YUV422 YUV444 RGB8 MONO16 RGB16 MONO16S RGB16S RAW8 RAW16
-// trigger modes start at #352 and are 0 1 2 3
-// image formats start at #384 and are VGA_NONCOMPRESSED SVGA_NONCOMPRESSED_1 SVGA_NONCOMPRESSED_2
-// and continue at #390 and are STILL_IMAGE FORMAT_SCALABLE_IMAGE_SIZE
-
-#define FEATURE(foo) feature_names[i++] = #foo;
-
- i=416;
- FEATURE(BRIGHTNESS);
- FEATURE(EXPOSURE);
- FEATURE(SHARPNESS);
- FEATURE(WHITE_BALANCE);
- FEATURE(HUE);
- FEATURE(SATURATION);
- FEATURE(GAMMA);
- FEATURE(SHUTTER);
- FEATURE(GAIN);
- FEATURE(IRIS);
- FEATURE(FOCUS);
- FEATURE(TEMPERATURE);
- FEATURE(TRIGGER);
- FEATURE(TRIGGER_DELAY);
- FEATURE(WHITE_SHADING);
- FEATURE(FRAME_RATE);
- i+=16;/* 16 reserved features */
- FEATURE(ZOOM);
- FEATURE(PAN);
- FEATURE(TILT);
- FEATURE(OPTICAL_FILTER);
- i+=12;/* 12 reserved features */
- FEATURE(CAPTURE_SIZE);
- FEATURE(CAPTURE_QUALITY);
- i+=14;/* 14 reserved features */
-
- i=480; // operation modes
- //OPERATION_MODE_LEGACY
- //OPERATION_MODE_1394B
-
- i=512; // sensor layouts
- //RGGB
- //GBRG,
- //GRBG,
- //BGGR
-
- i=544; // IIDC_VERSION
-#if 0
- IIDC_VERSION(1_04);
- IIDC_VERSION(1_20);
- IIDC_VERSION(PTGREY);
- IIDC_VERSION(1_30);
- IIDC_VERSION(1_31);
- IIDC_VERSION(1_32);
- IIDC_VERSION(1_33);
- IIDC_VERSION(1_34);
- IIDC_VERSION(1_35);
- IIDC_VERSION(1_36);
- IIDC_VERSION(1_37);
- IIDC_VERSION(1_38);
- IIDC_VERSION(1_39);
-#endif
-
-// Return values are SUCCESS FAILURE NO_FRAME NO_CAMERA
-
-// Parameter flags for dc1394_setup_format7_capture()
-//#define QUERY_FROM_CAMERA -1
-//#define USE_MAX_AVAIL -2
-//#define USE_RECOMMENDED -3
-
-// The video1394 policy: blocking (wait for a frame forever) or polling (returns if no frames in buffer
-// WAIT=0 POLL=1
-};
-
-typedef raw1394handle_t RH;
-typedef nodeid_t NID;
-
-#define IO(func,args...) if (func(rh,usenode,args)!=DC1394_SUCCESS) RAISE(#func " failed");
-
-\class FormatDC1394 : Format {
- RH rh;
- int useport;
- int usenode;
- int framerate_e;
- int height;
- int width;
- dc1394_cameracapture camera;
- dc1394_feature_set features;
- std::map<int,int> feature_index;
- \constructor (t_symbol *mode) {
- bool gotone=false;
- post("DC1394: hello world");
- rh = raw1394_new_handle();
- if (!rh) RAISE("could not get a handle for /dev/raw1394 and /dev/video1394");
- int numPorts = raw1394_get_port_info(rh,0,0);
- raw1394_destroy_handle(rh);
- post("there are %d Feuerweuer ports",numPorts);
- if (mode!=gensym("in")) RAISE("sorry, read-only");
- for(int port=0; port<numPorts; port++) {
- post("trying port #%d...",port);
- RH rh = dc1394_create_handle(port);
- int numCameras=0xDEADBEEF;
- NID *nodes = dc1394_get_camera_nodes(rh,&numCameras,0);
- post("port #%d has %d cameras",port,numCameras);
- for (int i=0; i<numCameras; i++) {
- post("camera at node #%d",nodes[i]);
- if (!gotone) {gotone=true; useport=port; usenode=nodes[i];}
- }
- dc1394_destroy_handle(rh);
- }
- if (!gotone) RAISE("no cameras available");
- this->rh = dc1394_create_handle(useport);
- IO(dc1394_get_camera_feature_set,&features);
- dc1394_print_feature_set(&features);
- post("NUM_FEATURES=%d",NUM_FEATURES);
- for (int i=0; i<NUM_FEATURES; i++) {
- dc1394_feature_info &f = features.feature[i];
- int id = f.feature_id;
- string name = feature_names.find(id)==feature_names.end() ? "(unknown)" : feature_names[id];
- bool is_there = f.available;
- post(" feature %d '%s' is %s",id,name.data(),is_there?"present":"absent");
- if (!is_there) continue;
- post(" min=%u max=%u abs_min=%u abs_max=%u",f.min,f.max,f.abs_min,f.abs_max);
- }
- framerate_e = FRAMERATE_30;
- height = 480;
- width = 640;
- setup();
- }
- \decl 0 bang ();
- \attr float framerate();
- \attr unsigned brightness();
- \attr unsigned hue();
- \attr unsigned colour();
- //\attr uint16 contrast();
- //\attr uint16 whiteness();
- void setup ();
- \decl 0 get (t_symbol *s=0);
- \decl 0 size (int height, int width);
-};
-
-\def 0 get (t_symbol *s=0) {
- FObject::_0_get(argc,argv,s);
- t_atom a[2];
- if (!s) {
- SETFLOAT(a+0,camera.frame_height);
- SETFLOAT(a+1,camera.frame_width);
- outlet_anything(bself->outlets[0],gensym("size"),2,a); // abnormal (does not use nested list)
- unsigned int width,height;
- IO(dc1394_query_format7_max_image_size,MODE_FORMAT7_0,&width,&height);
- SETFLOAT(a+0,height);
- SETFLOAT(a+1,width);
- outlet_anything(bself->outlets[0],gensym("maxsize"),2,a); // abnormal (does not use nested list)
- }
-}
-\def 0 size (int height, int width) {
- IO(dc1394_set_format7_image_size,MODE_FORMAT7_0,width,height);
- this->height = height;
- this->width = width;
- setup();
-}
-
-\def unsigned brightness () {unsigned value; dc1394_get_brightness(rh,usenode,&value); return value;}
-\def 0 brightness (unsigned value) {dc1394_set_brightness(rh,usenode, value);}
-\def unsigned hue () {unsigned value; dc1394_get_hue( rh,usenode,&value); return value;}
-\def 0 hue (unsigned value) {dc1394_set_hue( rh,usenode, value);}
-\def unsigned colour () {unsigned value; dc1394_get_saturation(rh,usenode,&value); return value;}
-\def 0 colour (unsigned value) {dc1394_set_saturation(rh,usenode, value);}
-
-void FormatDC1394::setup () {
- //dc1394_set_format7_image_size(rh,usenode,0,width,height);
- IO(dc1394_setup_capture,0,FORMAT_VGA_NONCOMPRESSED,MODE_640x480_MONO,SPEED_400,framerate_e,&camera);
- //IO(dc1394_setup_format7_capture,0,MODE_FORMAT7_0,SPEED_400,QUERY_FROM_CAMERA,0,0,width,height,&camera);
- if (dc1394_set_trigger_mode(rh,usenode,TRIGGER_MODE_0) != DC1394_SUCCESS) RAISE("dc1394_set_trigger_mode error");
- if (dc1394_start_iso_transmission(rh,usenode)!=DC1394_SUCCESS) RAISE("dc1394_start_iso_transmission error");
-}
-
-\def float framerate() {
- return 1.875 * (1<<(framerate_e-FRAMERATE_1_875));
-}
-
-\def 0 framerate(float framerate) {
- framerate_e = FRAMERATE_1_875;
- while (framerate>=1.875 && framerate_e <= FRAMERATE_240) {framerate/=2; framerate_e++;}
- setup();
-}
-
-static volatile int timeout=0;
-static void rien (int) {timeout=1; post("timeout2");}
-
-\def 0 bang () {
- //struct itimerval tval;
- //tval.it_interval.tv_sec = 1;
- //tval.it_interval.tv_usec = 0;
- //tval.it_value = tval.it_interval;
- //setitimer(ITIMER_REAL,&tval,0);
- //signal(SIGALRM,rien);
- if (dc1394_single_capture(rh,&camera)!=DC1394_SUCCESS) RAISE("dc1394_single_capture error");
- //setitimer(ITIMER_REAL,0,0);
- out=new GridOutlet(this,0,new Dim(height,width,1));
- //out->send(out->dim->prod(),(uint8 *)camera.capture_buffer);
- for (int i=0; i<height; i++) out->send(out->dim->prod(1),(uint8 *)camera.capture_buffer+640*i);
- //if (dc1394_stop_iso_transmission(rh,usenode)!=DC1394_SUCCESS) RAISE("dc1394_stop_iso_transmission error");
- //post("frame_height=%d",camera.frame_height);
- //post("frame_width=%d" ,camera.frame_width);
- //post("quadlets_per_frame=%d" ,camera.quadlets_per_frame);
- //post("quadlets_per_packet=%d" ,camera.quadlets_per_packet);
-}
-
-\end class FormatDC1394 {
- install_format("#io.dc1394",4,"");
- setup_modes();
-}
-void startup_dc1394 () {
- \startall
-}