예제 #1
0
bool SVSGigECard::RefreshData()
{
	if( !Camera_isCameraFeature(m_hCamera, CAMERA_FEATURE_AOI) )
	{
		Camera_getImagerWidth(m_hCamera,	reinterpret_cast<int*>(&m_roi.width));
		Camera_getImagerHeight(m_hCamera,	reinterpret_cast<int*>(&m_roi.height));
	}
	else
	{
		Camera_getSizeX(m_hCamera, reinterpret_cast<int*>(&m_roi.width));
		Camera_getSizeY(m_hCamera, reinterpret_cast<int*>(&m_roi.height));
	}
	if (SVGigE_SUCCESS != Camera_getPitch(m_hCamera, reinterpret_cast<int*>(&m_roi.bytesPerRow)))
	{
		return false;
	}
	m_roi.bytesPerPixel	= 1;
	m_roi.bitsPerPixel	= 8;
	return true;
}
예제 #2
0
static int svs_core_Camera_init(svs_core_Camera *self, PyObject *args, PyObject *kwds) {
    static char *kwlist[] = {
        "ip", "source_ip", "buffer_count", "packet_size", "queue_length", NULL
    };

    const char *ip = NULL;
    const char *source_ip = NULL;
    unsigned int buffer_count = 10;
    unsigned int packet_size = 9000;
    uint32_t ip_num, source_ip_num;
    char *manufacturer, *model;
    int ret;

    self->main_thread = PyGILState_GetThisThreadState();
    self->ready = NOT_READY;
    TAILQ_INIT(&self->images);
    self->images_length = 0;
    self->images_max = 50;

    /*
     * This means the definition is:
     * def __init__(self, ip, source_ip, buffer_count=10, packet_size=9000,
     *              queue_length=50):
     */
    if (!PyArg_ParseTupleAndKeywords(args, kwds, "ss|III", kwlist,
                &ip, &source_ip, &buffer_count, &packet_size,
                &self->images_max)) {
        return -1;
    }

    ip_num = ip_string_to_int(ip);
    source_ip_num = ip_string_to_int(source_ip);

    ret = openCamera(&self->handle, ip_num, source_ip_num, HEARTBEAT_TIMEOUT);
    if (ret != SVGigE_SUCCESS) {
        raise_general_error(ret);
        return -1;
    }

    self->ready = CONNECTED;

    manufacturer = strdup(Camera_getManufacturerName(self->handle));
    if (!manufacturer) {
        PyErr_SetString(PyExc_MemoryError, "Unable to allocate name");
        return -1;
    }

    model = strdup(Camera_getModelName(self->handle));
    if (!model) {
        free(manufacturer);
        PyErr_SetString(PyExc_MemoryError, "Unable to allocate name");
        return -1;
    }

    self->name = PyBytes_FromFormat("%s %s", manufacturer, model);
    free(manufacturer);
    free(model);
    if (!self->name) {
        return -1;
    }

    self->ready = NAME_ALLOCATED;

    ret = Camera_getTimestampTickFrequency(self->handle, &self->tick_frequency);
    if (ret != SVGigE_SUCCESS) {
        raise_general_error(ret);
        return -1;
    }

    ret = Camera_getImagerWidth(self->handle, &self->width);
    if (ret != SVGigE_SUCCESS) {
        raise_general_error(ret);
        return -1;
    }

    ret = Camera_getImagerHeight(self->handle, &self->height);
    if (ret != SVGigE_SUCCESS) {
        raise_general_error(ret);
        return -1;
    }

    /* 12-bit pixel depth */
    self->depth = 12;
    ret = Camera_setPixelDepth(self->handle, SVGIGE_PIXEL_DEPTH_12);
    if (ret != SVGigE_SUCCESS) {
        raise_general_error(ret);
        return -1;
    }

    /* Image buffer size in bytes */
    ret = Camera_getBufferSize(self->handle, &self->buffer_size);
    if (ret != SVGigE_SUCCESS) {
        raise_general_error(ret);
        return -1;
    }

    /* Open stream */
    ret = addStream(self->handle, &self->stream, &self->stream_ip,
                    &self->stream_port, self->buffer_size, buffer_count,
                    packet_size, PACKET_RESEND_TIMEOUT,
                    svs_core_Camera_stream_callback, self);
    if (ret != SVGigE_SUCCESS) {
        raise_general_error(ret);
        return -1;
    }

    ret = enableStream(self->stream, 1);
    if (ret != SVGigE_SUCCESS) {
        raise_general_error(ret);
        return -1;
    }

    self->ready = READY;

    return 0;
}