void arv_uvcp_packet_debug (const ArvUvcpPacket *packet, ArvDebugLevel level) { char *string; if (!arv_debug_check (&arv_debug_category_cp, level)) return; string = arv_uvcp_packet_to_string (packet); switch (level) { case ARV_DEBUG_LEVEL_LOG: arv_log_cp ("%s", string); break; case ARV_DEBUG_LEVEL_DEBUG: arv_debug_cp ("%s", string); break; case ARV_DEBUG_LEVEL_WARNING: arv_warning_cp ("%s", string); break; default: break; } g_free (string); }
static void _check_frame_completion (ArvGvStreamThreadData *thread_data, guint64 time_us, ArvGvStreamFrameData *current_frame) { GSList *iter; ArvGvStreamFrameData *frame; gboolean can_close_frame = TRUE; for (iter = thread_data->frames; iter != NULL;) { frame = iter->data; if (can_close_frame && thread_data->packet_resend == ARV_GV_STREAM_PACKET_RESEND_NEVER && iter->next != NULL) { frame->buffer->status = ARV_BUFFER_STATUS_MISSING_PACKETS; arv_debug_stream_thread ("[GvStream::_check_frame_completion] Incomplete frame %u", frame->frame_id); _close_frame (thread_data, frame); thread_data->frames = iter->next; g_slist_free_1 (iter); iter = thread_data->frames; continue; } if (can_close_frame && frame->last_valid_packet == frame->n_packets - 1) { frame->buffer->status = ARV_BUFFER_STATUS_SUCCESS; arv_log_stream_thread ("[GvStream::_check_frame_completion] Completed frame %u", frame->frame_id); _close_frame (thread_data, frame); thread_data->frames = iter->next; g_slist_free_1 (iter); iter = thread_data->frames; continue; } if (can_close_frame && time_us - frame->last_packet_time_us >= thread_data->frame_retention_us) { frame->buffer->status = ARV_BUFFER_STATUS_TIMEOUT; arv_debug_stream_thread ("[GvStream::_check_frame_completion] Timeout for frame %u " "at dt = %Lu", frame->frame_id, time_us - frame->first_packet_time_us); #if 0 if (arv_debug_check (&arv_debug_category_stream_thread, ARV_DEBUG_LEVEL_LOG)) { int i; arv_log_stream_thread ("frame_id = %Lu", frame->frame_id); arv_log_stream_thread ("last_valid_packet = %d", frame->last_valid_packet); for (i = 0; i < frame->n_packets; i++) { arv_log_stream_thread ("%d - time = %Lu%s", i, frame->packet_data[i].time_us, frame->packet_data[i].received ? " - OK" : ""); } } #endif _close_frame (thread_data, frame); thread_data->frames = iter->next; g_slist_free_1 (iter); iter = thread_data->frames; continue; } can_close_frame = FALSE; if (frame != current_frame && time_us - frame->last_packet_time_us >= thread_data->packet_timeout_us) { _missing_packet_check (thread_data, frame, frame->n_packets - 1, time_us); iter = iter->next; continue; } iter = iter->next; } }
static char * _load_genicam (ArvGvDevice *gv_device, guint32 address, size_t *size) { char filename[ARV_GVBS_XML_URL_SIZE]; char **tokens; char *genicam = NULL; g_return_val_if_fail (size != NULL, NULL); *size = 0; if (!arv_device_read_memory (ARV_DEVICE (gv_device), address, ARV_GVBS_XML_URL_SIZE, filename, NULL)) return NULL; filename[ARV_GVBS_XML_URL_SIZE - 1] = '\0'; arv_debug_device ("[GvDevice::load_genicam] xml url = '%s' at 0x%x", filename, address); tokens = g_regex_split (arv_gv_device_get_url_regex (), filename, 0); if (tokens[0] != NULL) { if (g_strcmp0 (tokens[1], "File:") == 0) g_file_get_contents (filename, &genicam, NULL, NULL); else if (g_strcmp0 (tokens[1], "Local:") == 0 && tokens[2] != NULL && tokens[3] != NULL && tokens[4] != NULL) { guint32 file_address; guint32 file_size; file_address = strtoul (tokens[3], NULL, 16); file_size = strtoul (tokens[4], NULL, 16); arv_debug_device ("[GvDevice::load_genicam] Xml address = 0x%x - size = 0x%x - %s", file_address, file_size, tokens[2]); if (file_size > 0) { genicam = g_malloc (file_size); if (arv_device_read_memory (ARV_DEVICE (gv_device), file_address, file_size, genicam, NULL)) { if (arv_debug_check (&arv_debug_category_misc, ARV_DEBUG_LEVEL_LOG)) { GString *string = g_string_new (""); g_string_append_printf (string, "[GvDevice::load_genicam] Raw data size = 0x%x\n", file_size); arv_g_string_append_hex_dump (string, genicam, file_size); arv_log_misc ("%s", string->str); g_string_free (string, TRUE); } if (g_str_has_suffix (tokens[2], ".zip")) { ArvZip *zip; const GSList *zip_files; arv_debug_device ("[GvDevice::load_genicam] Zipped xml data"); zip = arv_zip_new (genicam, file_size); zip_files = arv_zip_get_file_list (zip); if (zip_files != NULL) { const char *zip_filename; void *tmp_buffer; size_t tmp_buffer_size; zip_filename = arv_zip_file_get_name (zip_files->data); tmp_buffer = arv_zip_get_file (zip, zip_filename, &tmp_buffer_size); g_free (genicam); file_size = tmp_buffer_size; genicam = tmp_buffer; } else arv_warning_device ("[GvDevice::load_genicam] Invalid format"); arv_zip_free (zip); } *size = file_size; } else { g_free (genicam); genicam = NULL; *size = 0; } } } } g_strfreev (tokens); return genicam; }