ArvBufferPayloadType arv_buffer_get_payload_type (ArvBuffer *buffer) { g_return_val_if_fail (ARV_IS_BUFFER (buffer), -1); switch (buffer->priv->gvsp_payload_type) { case ARV_GVSP_PAYLOAD_TYPE_IMAGE: return ARV_BUFFER_PAYLOAD_TYPE_IMAGE; case ARV_GVSP_PAYLOAD_TYPE_RAWDATA: return ARV_BUFFER_PAYLOAD_TYPE_RAWDATA; case ARV_GVSP_PAYLOAD_TYPE_FILE: return ARV_BUFFER_PAYLOAD_TYPE_FILE; case ARV_GVSP_PAYLOAD_TYPE_CHUNK_DATA: return ARV_BUFFER_PAYLOAD_TYPE_CHUNK_DATA; case ARV_GVSP_PAYLOAD_TYPE_EXTENDED_CHUNK_DATA: return ARV_BUFFER_PAYLOAD_TYPE_EXTENDED_CHUNK_DATA; case ARV_GVSP_PAYLOAD_TYPE_JPEG: return ARV_BUFFER_PAYLOAD_TYPE_JPEG; case ARV_GVSP_PAYLOAD_TYPE_JPEG2000: return ARV_BUFFER_PAYLOAD_TYPE_JPEG2000; case ARV_GVSP_PAYLOAD_TYPE_H264: return ARV_BUFFER_PAYLOAD_TYPE_H264; case ARV_GVSP_PAYLOAD_TYPE_MULTIZONE_IMAGE: return ARV_BUFFER_PAYLOAD_TYPE_MULTIZONE_IMAGE; default: return ARV_BUFFER_PAYLOAD_TYPE_UNKNOWN; } }
guint64 arv_buffer_get_timestamp (ArvBuffer *buffer) { g_return_val_if_fail (ARV_IS_BUFFER (buffer), 0); return buffer->priv->timestamp_ns; }
const void * arv_buffer_get_user_data (ArvBuffer *buffer) { g_return_val_if_fail (ARV_IS_BUFFER (buffer), NULL); return buffer->priv->user_data; }
ArvBufferStatus arv_buffer_get_status (ArvBuffer *buffer) { g_return_val_if_fail (ARV_IS_BUFFER (buffer), ARV_BUFFER_STATUS_UNKNOWN); return buffer->priv->status; }
void arv_buffer_clear (ArvBuffer *buffer) { g_return_if_fail (ARV_IS_BUFFER (buffer)); buffer->priv->status = ARV_BUFFER_STATUS_CLEARED; }
guint32 arv_buffer_get_frame_id (ArvBuffer *buffer) { g_return_val_if_fail (ARV_IS_BUFFER (buffer), 0); return buffer->priv->frame_id; }
void arv_stream_push_buffer (ArvStream *stream, ArvBuffer *buffer) { g_return_if_fail (ARV_IS_STREAM (stream)); g_return_if_fail (ARV_IS_BUFFER (buffer)); g_async_queue_push (stream->priv->input_queue, buffer); }
ArvPixelFormat arv_buffer_get_image_pixel_format (ArvBuffer *buffer) { g_return_val_if_fail (ARV_IS_BUFFER (buffer), 0); g_return_val_if_fail (buffer->priv->gvsp_payload_type == ARV_GVSP_PAYLOAD_TYPE_IMAGE, 0); return buffer->priv->pixel_format; }
gint arv_buffer_get_image_y (ArvBuffer *buffer) { g_return_val_if_fail (ARV_IS_BUFFER (buffer), 0); g_return_val_if_fail (buffer->priv->gvsp_payload_type == ARV_GVSP_PAYLOAD_TYPE_IMAGE, 0); return buffer->priv->y_offset; }
const void * arv_buffer_get_data (ArvBuffer *buffer, size_t *size) { g_return_val_if_fail (ARV_IS_BUFFER (buffer), NULL); if (size != NULL) *size = buffer->priv->size; return buffer->priv->data; }
void arv_stream_push_output_buffer (ArvStream *stream, ArvBuffer *buffer) { g_return_if_fail (ARV_IS_STREAM (stream)); g_return_if_fail (ARV_IS_BUFFER (buffer)); g_async_queue_push (stream->priv->output_queue, buffer); if (stream->priv->emit_signals) g_signal_emit (stream, arv_stream_signals[ARV_STREAM_SIGNAL_NEW_BUFFER], 0); }
void arv_buffer_get_image_region (ArvBuffer *buffer, gint *x, gint *y, gint *width, gint *height) { g_return_val_if_fail (ARV_IS_BUFFER (buffer), 0); g_return_val_if_fail (buffer->priv->gvsp_payload_type == ARV_GVSP_PAYLOAD_TYPE_IMAGE, 0); if (x != NULL) *x = buffer->priv->x_offset; if (y != NULL) *y = buffer->priv->y_offset; if (width != NULL) *width = buffer->priv->width; if (height != NULL) *height = buffer->priv->height; }
static void preallocated_buffer_test (void) { ArvBuffer *buffer; void *data = g_malloc (1024); buffer = arv_buffer_new (1024, data); g_assert (ARV_IS_BUFFER (buffer)); g_assert (buffer->data == data); g_assert (buffer->user_data == NULL); g_assert (buffer->user_data_destroy_func == NULL); g_assert (buffer->status == ARV_BUFFER_STATUS_CLEARED); g_object_unref (buffer); }
static void simple_buffer_test (void) { ArvBuffer *buffer; buffer = arv_buffer_new (1024, NULL); g_assert (ARV_IS_BUFFER (buffer)); g_assert (buffer->data != NULL); g_assert (buffer->size == 1024); g_assert (buffer->user_data == NULL); g_assert (buffer->user_data_destroy_func == NULL); g_assert (buffer->status == ARV_BUFFER_STATUS_CLEARED); g_object_unref (buffer); }
const char * arv_chunk_parser_get_string_value (ArvChunkParser *parser, ArvBuffer *buffer, const char *chunk) { ArvGcNode *node; const char *string = NULL; g_return_val_if_fail (ARV_IS_CHUNK_PARSER (parser), NULL); g_return_val_if_fail (ARV_IS_BUFFER (buffer), NULL); node = arv_gc_get_node (parser->priv->genicam, chunk); arv_gc_set_buffer (parser->priv->genicam, buffer); if (ARV_IS_GC_STRING (node)) string = arv_gc_string_get_value (ARV_GC_STRING (node), NULL); else arv_warning_device ("[ArvChunkParser::get_string_value] Node '%s' is not a string", chunk); return string; }
double arv_chunk_parser_get_float_value (ArvChunkParser *parser, ArvBuffer *buffer, const char *chunk) { ArvGcNode *node; double value = 0.0; g_return_val_if_fail (ARV_IS_CHUNK_PARSER (parser), 0.0); g_return_val_if_fail (ARV_IS_BUFFER (buffer), 0.0); node = arv_gc_get_node (parser->priv->genicam, chunk); arv_gc_set_buffer (parser->priv->genicam, buffer); if (ARV_IS_GC_FLOAT (node)) value = arv_gc_float_get_value (ARV_GC_FLOAT (node), NULL); else arv_warning_chunk ("[ArvChunkParser::get_float_value] Node '%s' is not a float", chunk); return value; }
gint64 arv_chunk_parser_get_integer_value (ArvChunkParser *parser, ArvBuffer *buffer, const char *chunk) { ArvGcNode *node; gint64 value = 0; g_return_val_if_fail (ARV_IS_CHUNK_PARSER (parser), 0.0); g_return_val_if_fail (ARV_IS_BUFFER (buffer), 0.0); node = arv_gc_get_node (parser->priv->genicam, chunk); arv_gc_set_buffer (parser->priv->genicam, buffer); if (ARV_IS_GC_INTEGER (node)) value = arv_gc_integer_get_value (ARV_GC_INTEGER (node), NULL); else arv_warning_device ("[ArvChunkParser::get_integer_value] Node '%s' is not an integer", chunk); return value; }
const void * arv_buffer_get_chunk_data (ArvBuffer *buffer, guint64 chunk_id, size_t *size) { ArvChunkInfos *infos; char *data; ptrdiff_t offset; if (size != NULL) *size = 0; g_return_val_if_fail (ARV_IS_BUFFER (buffer), NULL); g_return_val_if_fail (buffer->priv->data != NULL, NULL); g_return_val_if_fail (buffer->priv->gvsp_payload_type == ARV_GVSP_PAYLOAD_TYPE_CHUNK_DATA, NULL); if (buffer->priv->status != ARV_BUFFER_STATUS_SUCCESS) return NULL; data = buffer->priv->data; offset = buffer->priv->size - sizeof (ArvChunkInfos); while (offset > 0) { infos = (ArvChunkInfos *) &data[offset]; if (GUINT32_FROM_BE (infos->id) == chunk_id) { ptrdiff_t data_offset; data_offset = offset - GUINT32_FROM_BE (infos->size); if (data_offset >= 0) { if (size != NULL) *size = GUINT32_FROM_BE (infos->size); return &data[data_offset]; } else return NULL; } if (GUINT32_FROM_BE (infos->size) > 0) offset = offset - GUINT32_FROM_BE (infos->size) - sizeof (ArvChunkInfos); else offset = 0; }; return NULL; }
static void full_buffer_test (void) { ArvBuffer *buffer; int value = 1234; buffer = arv_buffer_new_full (1024, NULL, &value, full_buffer_destroy_func); g_assert (ARV_IS_BUFFER (buffer)); g_assert (buffer->data != NULL); g_assert (buffer->size == 1024); g_assert (buffer->user_data == &value); g_assert (buffer->user_data_destroy_func == full_buffer_destroy_func); g_assert (buffer->status == ARV_BUFFER_STATUS_CLEARED); g_object_unref (buffer); g_assert (value == 4321); }