Blame dc1394/internal.h

Packit 713213
/*
Packit 713213
 * 1394-Based Digital Camera Control Library
Packit 713213
 *
Packit 713213
 * Internal functions
Packit 713213
 *
Packit 713213
 * Written by Damien Douxchamps <ddouxchamps@users.sf.net>
Packit 713213
 *
Packit 713213
 * This library is free software; you can redistribute it and/or
Packit 713213
 * modify it under the terms of the GNU Lesser General Public
Packit 713213
 * License as published by the Free Software Foundation; either
Packit 713213
 * version 2.1 of the License, or (at your option) any later version.
Packit 713213
 *
Packit 713213
 * This library is distributed in the hope that it will be useful,
Packit 713213
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
Packit 713213
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
Packit 713213
 * Lesser General Public License for more details.
Packit 713213
 *
Packit 713213
 * You should have received a copy of the GNU Lesser General Public
Packit 713213
 * License along with this library; if not, write to the Free Software
Packit 713213
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
Packit 713213
 */
Packit 713213
Packit 713213
#ifndef __DC1394_INTERNAL_H__
Packit 713213
#define __DC1394_INTERNAL_H__
Packit 713213
Packit 713213
#include "config.h"
Packit 713213
#include "offsets.h"
Packit 713213
#include "platform.h"
Packit 713213
Packit 713213
typedef struct _platform_info_t {
Packit 713213
    const platform_dispatch_t * dispatch;
Packit 713213
    const char * name;
Packit 713213
    platform_device_list_t * device_list;
Packit 713213
    platform_t * p;
Packit 713213
} platform_info_t;
Packit 713213
Packit 713213
typedef struct _dc1394camera_priv_t {
Packit 713213
    dc1394camera_t camera;
Packit 713213
Packit 713213
    platform_camera_t * pcam;
Packit 713213
    platform_info_t * platform;
Packit 713213
Packit 713213
    uint64_t allocated_channels;
Packit 713213
    int allocated_bandwidth;
Packit 713213
    int iso_persist;
Packit 713213
} dc1394camera_priv_t;
Packit 713213
Packit 713213
#define DC1394_CAMERA_PRIV(c) ((dc1394camera_priv_t *)c)
Packit 713213
Packit 713213
typedef struct _camera_info_t {
Packit 713213
    uint64_t guid;
Packit 713213
    int unit;
Packit 713213
    uint32_t unit_directory;
Packit 713213
    uint32_t unit_dependent_directory;
Packit 713213
    uint32_t unit_spec_ID;
Packit 713213
    uint32_t unit_sw_version;
Packit 713213
    char * vendor;
Packit 713213
    char * model;
Packit 713213
    uint32_t vendor_id;
Packit 713213
    uint32_t model_id;
Packit 713213
    platform_device_t * device;
Packit 713213
    platform_info_t * platform;
Packit 713213
} camera_info_t;
Packit 713213
Packit 713213
struct __dc1394_t {
Packit 713213
    int num_platforms;
Packit 713213
    platform_info_t * platforms;
Packit 713213
Packit 713213
    int num_cameras;
Packit 713213
    camera_info_t * cameras;
Packit 713213
};
Packit 713213
Packit 713213
void juju_init(dc1394_t *d);
Packit 713213
void linux_init(dc1394_t *d);
Packit 713213
void macosx_init(dc1394_t *d);
Packit 713213
void windows_init(dc1394_t *d);
Packit 713213
void dc1394_usb_init(dc1394_t *d);
Packit 713213
Packit 713213
void register_platform (dc1394_t * d, const platform_dispatch_t * dispatch,
Packit 713213
        const char * name);
Packit 713213
Packit 713213
void free_enumeration (dc1394_t * d);
Packit 713213
int refresh_enumeration (dc1394_t * d);
Packit 713213
Packit 713213
/* Definitions which application developers shouldn't care about */
Packit 713213
#define CONFIG_ROM_BASE             0xFFFFF0000000ULL
Packit 713213
Packit 713213
#define DC1394_FEATURE_ON           0x80000000UL
Packit 713213
#define DC1394_FEATURE_OFF          0x00000000UL
Packit 713213
Packit 713213
/* Maximum number of write/read retries */
Packit 713213
#define DC1394_MAX_RETRIES          20
Packit 713213
Packit 713213
/* Maximum number of ISO channels */
Packit 713213
/* Note that the maximum currently supported by a chipset is 8 so that 16 is already
Packit 713213
   a conservative number. A typical number of channels supported is 4. (TI chipset)
Packit 713213
   However, 1394b allows for more channels, hence we use 64 as the limit */
Packit 713213
#define DC1394_NUM_ISO_CHANNELS     64
Packit 713213
Packit 713213
/* A hard compiled factor that makes sure async read and writes don't happen
Packit 713213
   too fast */
Packit 713213
/* Toshiyuki Umeda: use randomize timings to avoid locking indefinitely.
Packit 713213
   If several thread are used the seed will be the same and the wait will therefor be
Packit 713213
   identical. A call to srand(getpid()) should be performed after calling the
Packit 713213
   raw1394_new_handle but I (Damien) not sure this would solve the problem as the handle
Packit 713213
   creation might have happened in the creating (as opposed to created) thread.*/
Packit 713213
#define DC1394_SLOW_DOWN            ((rand()%20)+10)
Packit 713213
Packit 713213
/* Maximum number of characters in vendor and model strings */
Packit 713213
#define MAX_CHARS                      256
Packit 713213
Packit 713213
Packit 713213
// Format_0
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT0_MIN            DC1394_VIDEO_MODE_160x120_YUV444
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT0_MAX            DC1394_VIDEO_MODE_640x480_MONO16
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT0_NUM      (DC1394_VIDEO_MODE_FORMAT0_MAX - DC1394_VIDEO_MODE_FORMAT0_MIN + 1)
Packit 713213
Packit 713213
// Format_1
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT1_MIN            DC1394_VIDEO_MODE_800x600_YUV422
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT1_MAX            DC1394_VIDEO_MODE_1024x768_MONO16
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT1_NUM      (DC1394_VIDEO_MODE_FORMAT1_MAX - DC1394_VIDEO_MODE_FORMAT1_MIN + 1)
Packit 713213
Packit 713213
// Format_2
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT2_MIN            DC1394_VIDEO_MODE_1280x960_YUV422
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT2_MAX            DC1394_VIDEO_MODE_1600x1200_MONO16
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT2_NUM           (DC1394_VIDEO_MODE_FORMAT2_MAX - DC1394_VIDEO_MODE_FORMAT2_MIN + 1)
Packit 713213
Packit 713213
// Format_6
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT6_MIN            DC1394_VIDEO_MODE_EXIF
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT6_MAX            DC1394_VIDEO_MODE_EXIF
Packit 713213
#define DC1394_VIDEO_MODE_FORMAT6_NUM           (DC1394_VIDEO_MODE_FORMAT6_MAX - DC1394_VIDEO_MODE_FORMAT6_MIN + 1)
Packit 713213
Packit 713213
/* Enumeration of camera image formats */
Packit 713213
/* This could disappear from the API I think.*/
Packit 713213
enum {
Packit 713213
    DC1394_FORMAT0= 384,
Packit 713213
    DC1394_FORMAT1,
Packit 713213
    DC1394_FORMAT2,
Packit 713213
    DC1394_FORMAT6=390,
Packit 713213
    DC1394_FORMAT7
Packit 713213
};
Packit 713213
#define DC1394_FORMAT_MIN           DC1394_FORMAT0
Packit 713213
#define DC1394_FORMAT_MAX           DC1394_FORMAT7
Packit 713213
//#define DC1394_FORMAT_NUM          (DC1394_FORMAT_MAX - DC1394_FORMAT_MIN + 1)
Packit 713213
/* DANGER: FORMAT_NUM should be 5!! FORMAT_NUM is therefor undefined to avoid problems */
Packit 713213
Packit 713213
#define FEATURE_TO_VALUE_OFFSET(feature, offset)                                 \
Packit 713213
    {                                                                            \
Packit 713213
    if ( (feature > DC1394_FEATURE_MAX) || (feature < DC1394_FEATURE_MIN) )      \
Packit 713213
      return DC1394_FAILURE;                                                     \
Packit 713213
    else if (feature < DC1394_FEATURE_ZOOM)                                      \
Packit 713213
      offset= REG_CAMERA_FEATURE_HI_BASE+(feature - DC1394_FEATURE_MIN)*0x04U;   \
Packit 713213
    else if (feature >= DC1394_FEATURE_CAPTURE_SIZE)                             \
Packit 713213
      offset= REG_CAMERA_FEATURE_LO_BASE +(feature+12-DC1394_FEATURE_ZOOM)*0x04U;\
Packit 713213
    else                                                                         \
Packit 713213
      offset= REG_CAMERA_FEATURE_LO_BASE +(feature-DC1394_FEATURE_ZOOM)*0x04U;   \
Packit 713213
                                                                                   }
Packit 713213
Packit 713213
#define FEATURE_TO_INQUIRY_OFFSET(feature, offset)                                   \
Packit 713213
    {                                                                                \
Packit 713213
    if ( (feature > DC1394_FEATURE_MAX) || (feature < DC1394_FEATURE_MIN) )          \
Packit 713213
      return DC1394_FAILURE;                                                         \
Packit 713213
    else if (feature < DC1394_FEATURE_ZOOM)                                          \
Packit 713213
      offset= REG_CAMERA_FEATURE_HI_BASE_INQ+(feature - DC1394_FEATURE_MIN)*0x04U;   \
Packit 713213
    else if (feature >= DC1394_FEATURE_CAPTURE_SIZE)                                 \
Packit 713213
      offset= REG_CAMERA_FEATURE_LO_BASE_INQ +(feature+12-DC1394_FEATURE_ZOOM)*0x04U;\
Packit 713213
    else                                                                             \
Packit 713213
      offset= REG_CAMERA_FEATURE_LO_BASE_INQ +(feature-DC1394_FEATURE_ZOOM)*0x04U;   \
Packit 713213
    }
Packit 713213
Packit 713213
/* Internal functions required by two different source files */
Packit 713213
Packit 713213
dc1394error_t
Packit 713213
get_quadlets_per_packet(uint32_t mode, uint32_t frame_rate, uint32_t *qpp);
Packit 713213
Packit 713213
dc1394error_t
Packit 713213
get_quadlets_from_format(dc1394camera_t *camera, uint32_t mode, uint32_t *quads);
Packit 713213
Packit 713213
dc1394error_t
Packit 713213
get_format_from_mode(uint32_t mode, uint32_t *format);
Packit 713213
Packit 713213
dc1394bool_t
Packit 713213
is_feature_bit_set(uint32_t value, uint32_t feature);
Packit 713213
Packit 713213
/*
Packit 713213
dc1394bool_t
Packit 713213
_dc1394_iidc_check_video_mode(dc1394camera_t *camera, dc1394video_mode_t *mode);
Packit 713213
*/
Packit 713213
dc1394error_t capture_basic_setup (dc1394camera_t * camera, dc1394video_frame_t * frame);
Packit 713213
Packit 713213
#endif /* _DC1394_INTERNAL_H */