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); }
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; }
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); }
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 }
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; }
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; }
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); }
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; }
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); }
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; }