From 5e2a1bc9e56003349e533f7e5841041ba5c04e28 Mon Sep 17 00:00:00 2001 From: "N.N." Date: Tue, 4 Oct 2005 02:02:15 +0000 Subject: starting to commit gridflow 0.8.0 ... if you know how to use "cvs import" please mail me and i'll use it for 0.8.1 svn path=/trunk/; revision=3646 --- externals/gridflow/format/dc1394.c | 346 +++++++++++++++++++++++++++++++++++++ 1 file changed, 346 insertions(+) create mode 100644 externals/gridflow/format/dc1394.c (limited to 'externals/gridflow/format/dc1394.c') diff --git a/externals/gridflow/format/dc1394.c b/externals/gridflow/format/dc1394.c new file mode 100644 index 00000000..1632bef7 --- /dev/null +++ b/externals/gridflow/format/dc1394.c @@ -0,0 +1,346 @@ +/* + $Id: dc1394.c,v 1.1 2005-10-04 02:02:15 matju Exp $ + + GridFlow + Copyright (c) 2001,2002,2003,2004 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 +#include +#include "../base/grid.h.fcs" + +typedef raw1394handle_t RH; +typedef nodeid_t NID; + +static const int ruby_lineno = __LINE__; +static const char *ruby_code = +\ruby + +def choice(*)end +class CStruct + def initialize(*) end +end + +choice :name,:Speed,:start,0,:values,%w(SPEED_100 SPEED_200 SPEED_400) +choice :name,:Framerate,:start,32,:values, +%w(FRAMERATE_1_875 FRAMERATE_3_75 FRAMERATE_7_5 FRAMERATE_15 + FRAMERATE_30 FRAMERATE_60) + +choice :name,:Format0Mode,:start,64,:values,%w( + MODE_160x120_YUV444 MODE_320x240_YUV422 + MODE_640x480_YUV411 MODE_640x480_YUV422 + MODE_640x480_RGB MODE_640x480_MONO + MODE_640x480_MONO16) + +choice :name,:Format1Mode,:start,96,:values,%w( + MODE_800x600_YUV422 MODE_800x600_RGB + MODE_800x600_MONO MODE_1024x768_YUV422 + MODE_1024x768_RGB MODE_1024x768_MONO + MODE_800x600_MONO16 MODE_1024x768_MONO16) + +choice :name,:Format2Mode,:start,128,:values,%w( + MODE_1280x960_YUV422 MODE_1280x960_RGB + MODE_1280x960_MONO MODE_1600x1200_YUV422 + MODE_1600x1200_RGB MODE_1600x1200_MONO + MODE_1280x960_MONO16 MODE_1600x1200_MONO16) + +choice :name,:Format6Mode,:start,256,:values,%w(MODE_EXIF) + +choice :name,:Format7Mode,:start,288,:values,%w( + MODE_FORMAT7_0 MODE_FORMAT7_1 MODE_FORMAT7_2 MODE_FORMAT7_3 + MODE_FORMAT7_4 MODE_FORMAT7_5 MODE_FORMAT7_6 MODE_FORMAT7_7) + +choice :name,:Format7ColorMode,:start,320,:values,%w( + COLOR_FORMAT7_MONO8 COLOR_FORMAT7_YUV411 + COLOR_FORMAT7_YUV422 COLOR_FORMAT7_YUV444 + COLOR_FORMAT7_RGB8 COLOR_FORMAT7_MONO16 + COLOR_FORMAT7_RGB16) + +choice :name,:TriggerMode,:start,352,:values,%w( + TRIGGER_MODE_0 TRIGGER_MODE_1 TRIGGER_MODE_2 TRIGGER_MODE_3) + +choice :name,:CameraImageFormat,:start,384,:values,%w( + FORMAT_VGA_NONCOMPRESSED FORMAT_SVGA_NONCOMPRESSED_1 + FORMAT_SVGA_NONCOMPRESSED_2 skip 3 + FORMAT_STILL_IMAGE FORMAT_SCALABLE_IMAGE_SIZE) + +choice :name,:CameraFeatures,:start,416,:values,%w( + 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 skip 19 + FEATURE_ZOOM FEATURE_PAN + FEATURE_TILT FEATURE_OPTICAL_FILTER + skip 12 FEATURE_CAPTURE_SIZE + FEATURE_CAPTURE_QUALITY skip 14) + +choice :name,:DCBool,:start,0,:values,%w(False True) + +#define MAX_CHARS 32 +#define SUCCESS 1 +#define FAILURE -1 +#define NO_CAMERA 0xffff + +# Parameter flags for setup_format7_capture() +#define QUERY_FROM_CAMERA -1 +#define USE_MAX_AVAIL -2 +#define USE_RECOMMENDED -3 + +# all dc1394_ prefixes removed +# raw1394handle_t = RH +# nodeid_t = NID +# RH+NID = RN + +CameraInfo = CStruct.new %{ + RH rh; + NID id; + octlet_t ccr_offset; + u_int64_t euid_64; + char vendor[MAX_CHARS + 1]; + char model[MAX_CHARS + 1]; +} + +CameraCapture = CStruct.new %{ + NID node; + int channel, frame_rate, frame_width, frame_height; + int * capture_buffer; + int quadlets_per_frame, quadlets_per_packet; + const unsigned char * dma_ring_buffer; + int dma_buffer_size, dma_frame_size, num_dma_buffers, dma_last_buffer; + const char * dma_device_file; + int dma_fd, port; + struct timeval filltime; + int dma_extra_count; + unsigned char * dma_extra_buffer; + int drop_frames; +} + +MiscInfo = CStruct.new %{ + int format, mode, framerate; + bool is_iso_on; + int iso_channel, iso_speed, mem_channel_number; + int save_channel, load_channel; +} + +FeatureInfo = CStruct.new %{ + uint feature_id; + bool available, one_push, readout_capable, on_off_capable; + bool auto_capable, manual_capable, polarity_capable, one_push_active; + bool is_on, auto_active; + char trigger_mode_capable_mask; + int trigger_mode; + bool trigger_polarity; + int min, max, value, BU_value, RV_value, target_value; +} + +FeatureSet = CStruct.new %{ + FeatureInfo feature[NUM_FEATURES]; +} +#void print_feature_set(FeatureSet *features); +#extern const char *feature_desc[NUM_FEATURES]; +#void print_feature(FeatureInfo *feature); +#RawFire create_handle(int port); +#destroy_handle(RH rh); +#void print_camera_info(camerainfo *info); + +class RH; %{ + # those two: + # Return -1 in numCameras and NULL from the call if there is a problem + # otherwise the number of cameras and the NID array from the call + NID* get_camera_nodes(int *numCameras, int showCameras); + NID* get_sorted_camera_nodes(int numids, int *ids, int *numCameras, int showCameras); + release_camera(CameraCapture *camera); + single_capture(CameraCapture *camera); +# this one returns FAILURE or SUCCESS + multi_capture(CameraCapture *cams, int num); +}end + +class RN; %{ + init_camera(); + is_camera(bool *value); + get_camera_feature_set(FeatureSetFeatureInfo *features); + get_camera_feature(FeatureInfo *feature); + get_camera_misc_info(miscinfo *info); + get_sw_version(quadlet_t *value); + get_camera_info(camerainfo *info); + query_supported_formats(quadlet_t *value); + query_supported_modes(uint format, quadlet_t *value); + query_supported_framerates(uint format, uint mode, quadlet_t *value); + query_revision(int mode, quadlet_t *value); + query_basic_functionality(quadlet_t *value); + query_advanced_feature_offset(quadlet_t *value); + attr set_video_framerate(uint framerate); + attr video_mode(uint mode); + attr video_format(uint format); + double_attr iso_channel_and_speed(uint channel, uint speed); + camera_on(); + camera_off(); + start_iso_transmission(); + stop_iso_transmission(); + get_iso_status(bool *is_on); + set_one_shot(); + unset_one_shot(); + set_multi_shot(uint numFrames); + unset_multi_shot(); +# attributes : +# those are get_/set_ methods where the get has an input parameter +# and the set has an output parameter + attr uint brightness + attr uint exposure + attr uint sharpness + double_attr set_white_balance(uint u_b_value, uint v_r_value); + attr uint hue + attr uint saturation(uint saturation); + attr uint gamma(uint gamma); + attr shutter(uint shutter); + attr uint gain + attr uint iris + attr uint focus + attr uint trigger_mode + attr uint zoom + attr uint pan + attr uint tilt + attr uint optical_filter + attr uint capture_size + attr uint capture_quality + int get_temperature(uint *target_temperature, uint *temperature); + int set_temperature(uint target_temperature); + + get_memory_load_ch(uint *channel); + get_memory_save_ch(uint *channel); + is_memory_save_in_operation(bool *value); + set_memory_save_ch(uint channel); + memory_save(); + memory_load(uint channel); + attr bool trigger_polarity + trigger_has_polarity(bool *polarity); + attr bool set_trigger_on_off + +# this one returns SUCCESS on success, FAILURE otherwise + setup_capture( + int channel, int format, int mode, int speed, int frame_rate, + CameraCapture *camera); + dma_setup_capture( + int channel, int format, int mode, int speed, int frame_rate, + int num_dma_buffers, int drop_frames, const char *dma_device_file, + CameraCapture *camera); + setup_format7_capture( + int channel, int mode, int speed, int bytes_per_packet, + uint left, uint top, uint width, uint height, CameraCapture *camera); + dma_setup_format7_capture( + int channel, int mode, int speed, int bytes_per_packet, + uint left, uint top, uint width, uint height, + int num_dma_buffers, CameraCapture *camera); +}end + +#RNF = RN+uint feature +class RNF; %{ + query_feature_control(uint *availability); + query_feature_characteristics(quadlet_t *value); + attr uint feature_value + is_feature_present(bool *value); + has_one_push_auto(bool *value); + is_one_push_in_operation(bool *value); + start_one_push_operation(); + can_read_out(bool *value); + can_turn_on_off(bool *value); + is_feature_on(bool *value); + feature_on_off(uint value); + has_auto_mode(bool *value); + has_manual_mode(bool *value); + is_feature_auto(bool *value); + auto_on_off(uint value); + get_min_value(uint *value); + get_max_value(uint *value); +}end + +# DMA Capture Functions +#dma_release_camera(RH rh, CameraCapture *camera); +#dma_unlisten(RH rh, CameraCapture *camera); +#dma_single_capture(CameraCapture *camera); +#dma_multi_capture(CameraCapture *cams,int num); +#dma_done_with_buffer(CameraCapture * camera); + +# default return type is int, prolly means SUCCESS/FAILURE + +#RNM = RN+uint mode +class RNM; %{ + query_format7_max_image_size(uint *horizontal_size, uint *vertical_size); + query_format7_unit_size(uint *horizontal_unit, uint *vertical_unit); + query_format7_color_coding(quadlet_t *value); + query_format7_pixel_number(uint *pixnum); + query_format7_total_bytes(uint *total_bytes); + query_format7_packet_para(uint *min_bytes, uint *max_bytes); + query_format7_recommended_byte_per_packet(uint *bpp); + query_format7_packet_per_frame(uint *ppf); + query_format7_unit_position(uint *horizontal_pos, uint *vertical_pos); + # those were query/set pairs. + double_qattr format7_image_position(uint left, uint top); + double_qattr format7_image_size(uint width, uint height); + qattr uint format7_color_coding_id + qattr uint format7_byte_per_packet + query_format7_value_setting(uint *present, uint *setting1, uint *err_flag1, uint *err_flag2); + set_format7_value_setting(); //huh? +}end + +\end ruby +; + +\class FormatDC1394 < Format +struct FormatDC1394 : Format { + \decl void initialize (Symbol mode); + \decl void frame (); +}; + +\def void initialize(Symbol mode) { + gfpost("DC1394: hello world"); + RH rh = raw1394_new_handle(); + int numPorts = raw1394_get_port_info(rh,0,0); + raw1394_destroy_handle(rh); + gfpost("there are %d Feuerweuer ports",numPorts); + if (mode!=SYM(in)) RAISE("sorry, read-only"); + for(int port=0; port