コード例 #1
0
ファイル: arvfakestream.c プロジェクト: Will-W/aravis
ArvStream *
arv_fake_stream_new (ArvFakeCamera *camera, ArvStreamCallback callback, void *user_data)
{
	ArvFakeStream *fake_stream;
	ArvFakeStreamThreadData *thread_data;
	ArvStream *stream;

	g_return_val_if_fail (ARV_IS_FAKE_CAMERA (camera), NULL);

	g_object_ref (camera);

	fake_stream = g_object_new (ARV_TYPE_FAKE_STREAM, NULL);

	stream = ARV_STREAM (fake_stream);

	thread_data = g_new (ArvFakeStreamThreadData, 1);
	thread_data->stream = stream;
	thread_data->camera = camera;
	thread_data->callback = callback;
	thread_data->user_data = user_data;
	thread_data->cancel = FALSE;

	thread_data->n_completed_buffers = 0;
	thread_data->n_failures = 0;
	thread_data->n_underruns = 0;

	fake_stream->priv->camera = camera;
	fake_stream->priv->thread_data = thread_data;
	fake_stream->priv->thread = arv_g_thread_new ("arv_fake_stream", arv_fake_stream_thread, fake_stream->priv->thread_data);

	return ARV_STREAM (fake_stream);
}
コード例 #2
0
ファイル: arvfakecamera.c プロジェクト: xamox/aravis
gboolean
arv_fake_camera_read_memory (ArvFakeCamera *camera, guint32 address, guint32 size, void *buffer)
{
	guint32 read_size;

	g_return_val_if_fail (ARV_IS_FAKE_CAMERA (camera), FALSE);
	g_return_val_if_fail (buffer != NULL, FALSE);
	g_return_val_if_fail (size > 0, FALSE);

	/* TODO Handle read accross register space and genicam data */

	if (address < ARV_FAKE_CAMERA_MEMORY_SIZE) {
		g_return_val_if_fail (address + size < ARV_FAKE_CAMERA_MEMORY_SIZE, FALSE);

		memcpy (buffer, camera->priv->memory + address, size);

		return TRUE;
	}

	address -= ARV_FAKE_CAMERA_MEMORY_SIZE;
	read_size = MIN (address + size, camera->priv->genicam_xml_size) - address;

	memcpy (buffer, camera->priv->genicam_xml + address, read_size);

	return TRUE;
}
コード例 #3
0
ファイル: arvfakecamera.c プロジェクト: xamox/aravis
guint32
arv_fake_camera_get_acquisition_status (ArvFakeCamera *camera)
{
	g_return_val_if_fail (ARV_IS_FAKE_CAMERA (camera), 0);

	return _get_register (camera, ARV_FAKE_CAMERA_REGISTER_ACQUISITION);
}
コード例 #4
0
ファイル: arvfakecamera.c プロジェクト: Amomum/aravis
void
arv_fake_camera_set_fill_pattern (ArvFakeCamera *camera,
				  ArvFakeCameraFillPattern fill_pattern_callback,
				  void *fill_pattern_data)
{
	g_return_if_fail (ARV_IS_FAKE_CAMERA (camera));

#if GLIB_CHECK_VERSION(2,32,0)
	g_mutex_lock (&camera->priv->fill_pattern_mutex);
#else
	g_mutex_lock (camera->priv->fill_pattern_mutex);
#endif
	if (fill_pattern_callback != NULL) {
		camera->priv->fill_pattern_callback = fill_pattern_callback;
		camera->priv->fill_pattern_data = fill_pattern_data;
	} else {
		camera->priv->fill_pattern_callback = arv_fake_camera_diagonal_ramp;
		camera->priv->fill_pattern_data = NULL;
	}
#if GLIB_CHECK_VERSION(2,32,0)
	g_mutex_unlock (&camera->priv->fill_pattern_mutex);
#else
	g_mutex_unlock (camera->priv->fill_pattern_mutex);
#endif
}
コード例 #5
0
ファイル: arvfakecamera.c プロジェクト: xamox/aravis
void
arv_fake_camera_set_trigger_frequency (ArvFakeCamera *camera, double frequency)
{
	g_return_if_fail (ARV_IS_FAKE_CAMERA (camera));
	g_return_if_fail (frequency > 0.0);

	camera->priv->trigger_frequency = frequency;
}
コード例 #6
0
ファイル: arvfakecamera.c プロジェクト: xamox/aravis
size_t
arv_fake_camera_get_payload (ArvFakeCamera *camera)
{
	guint32 width, height;

	g_return_val_if_fail (ARV_IS_FAKE_CAMERA (camera), 0);

	width = _get_register (camera, ARV_FAKE_CAMERA_REGISTER_WIDTH);
	height = _get_register (camera, ARV_FAKE_CAMERA_REGISTER_HEIGHT);

	return width * height;
}
コード例 #7
0
ファイル: arvfakecamera.c プロジェクト: xamox/aravis
void
arv_fake_camera_set_inet_address (ArvFakeCamera *camera, GInetAddress *address)
{
	const guint8 *bytes;

	g_return_if_fail (ARV_IS_FAKE_CAMERA (camera));
	g_return_if_fail (G_IS_INET_ADDRESS (address));
	g_return_if_fail (g_inet_address_get_family (address) == G_SOCKET_FAMILY_IPV4);

	bytes = g_inet_address_to_bytes (address);

	arv_fake_camera_write_memory (camera, ARV_GVBS_CURRENT_IP_ADDRESS_OFFSET,
				      g_inet_address_get_native_size (address), (char *) bytes);
}
コード例 #8
0
ファイル: arvfakecamera.c プロジェクト: xamox/aravis
gboolean
arv_fake_camera_write_memory (ArvFakeCamera *camera, guint32 address, guint32 size, const void *buffer)
{
	g_return_val_if_fail (ARV_IS_FAKE_CAMERA (camera), FALSE);
	g_return_val_if_fail (address + size < ARV_FAKE_CAMERA_MEMORY_SIZE + camera->priv->genicam_xml_size, FALSE);
	g_return_val_if_fail (buffer != NULL, FALSE);
	g_return_val_if_fail (size > 0, FALSE);

	/* genicam_data are read only */
	if (address + size > ARV_FAKE_CAMERA_MEMORY_SIZE)
		return FALSE;

	memcpy (camera->priv->memory + address, buffer, size);

	return TRUE;
}
コード例 #9
0
ファイル: arvfakecamera.c プロジェクト: xamox/aravis
void
arv_fake_camera_set_fill_pattern (ArvFakeCamera *camera,
				  ArvFakeCameraFillPattern fill_pattern_callback,
				  void *fill_pattern_data)
{
	g_return_if_fail (ARV_IS_FAKE_CAMERA (camera));

	g_mutex_lock (camera->priv->fill_pattern_mutex);
	if (fill_pattern_callback != NULL) {
		camera->priv->fill_pattern_callback = fill_pattern_callback;
		camera->priv->fill_pattern_data = fill_pattern_data;
	} else {
		camera->priv->fill_pattern_callback = arv_fake_camera_diagonal_ramp;
		camera->priv->fill_pattern_data = NULL;
	}
	g_mutex_unlock (camera->priv->fill_pattern_mutex);
}
コード例 #10
0
ファイル: arvfakecamera.c プロジェクト: lu-zero/aravis
GSocketAddress *
arv_fake_camera_get_stream_address (ArvFakeCamera *camera)
{
	GSocketAddress *stream_socket_address;
	GInetAddress *inet_address;
	guint32 value;

	g_return_val_if_fail (ARV_IS_FAKE_CAMERA (camera), NULL);

	value = GUINT32_FROM_BE (_get_register (camera, ARV_GVBS_STREAM_CHANNEL_0_IP_ADDRESS_OFFSET));

	inet_address = g_inet_address_new_from_bytes ((guint8 *) &value, G_SOCKET_FAMILY_IPV4);
	stream_socket_address = g_inet_socket_address_new
		(inet_address,
		 _get_register (camera, ARV_GVBS_STREAM_CHANNEL_0_PORT_OFFSET));
	g_object_unref (inet_address);

	return stream_socket_address;
}