|
| 1 | +/* Aravis - Digital camera library |
| 2 | + * |
| 3 | + * Copyright © 2009-2019 Emmanuel Pacaud |
| 4 | + * |
| 5 | + * This library is free software; you can redistribute it and/or |
| 6 | + * modify it under the terms of the GNU Lesser General Public |
| 7 | + * License as published by the Free Software Foundation; either |
| 8 | + * version 2 of the License, or (at your option) any later version. |
| 9 | + * |
| 10 | + * This library is distributed in the hope that it will be useful, |
| 11 | + * but WITHOUT ANY WARRANTY; without even the implied warranty of |
| 12 | + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
| 13 | + * Lesser General Public License for more details. |
| 14 | + * |
| 15 | + * You should have received a copy of the GNU Lesser General |
| 16 | + * Public License along with this library; if not, write to the |
| 17 | + * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
| 18 | + * Boston, MA 02110-1301, USA. |
| 19 | + * |
| 20 | + * Author: Emmanuel Pacaud <[email protected]> |
| 21 | + */ |
| 22 | + |
| 23 | +#ifndef ARV_BUFFER_H |
| 24 | +#define ARV_BUFFER_H |
| 25 | + |
| 26 | +#if !defined (ARV_H_INSIDE) && !defined (ARAVIS_COMPILATION) |
| 27 | +#error "Only <arv.h> can be included directly." |
| 28 | +#endif |
| 29 | + |
| 30 | +#include <arvtypes.h> |
| 31 | + |
| 32 | +G_BEGIN_DECLS |
| 33 | + |
| 34 | +/** |
| 35 | + * ArvBufferStatus: |
| 36 | + * @ARV_BUFFER_STATUS_UNKNOWN: unknown status |
| 37 | + * @ARV_BUFFER_STATUS_SUCCESS: the buffer contains a valid image |
| 38 | + * @ARV_BUFFER_STATUS_CLEARED: the buffer is cleared |
| 39 | + * @ARV_BUFFER_STATUS_TIMEOUT: timeout was reached before all packets are received |
| 40 | + * @ARV_BUFFER_STATUS_MISSING_PACKETS: stream has missing packets |
| 41 | + * @ARV_BUFFER_STATUS_WRONG_PACKET_ID: stream has packet with wrong id |
| 42 | + * @ARV_BUFFER_STATUS_SIZE_MISMATCH: the received image didn't fit in the buffer data space |
| 43 | + * @ARV_BUFFER_STATUS_FILLING: the image is currently being filled |
| 44 | + * @ARV_BUFFER_STATUS_ABORTED: the filling was aborted before completion |
| 45 | + */ |
| 46 | + |
| 47 | +typedef enum { |
| 48 | + ARV_BUFFER_STATUS_UNKNOWN = -1, |
| 49 | + ARV_BUFFER_STATUS_SUCCESS = 0, |
| 50 | + ARV_BUFFER_STATUS_CLEARED, |
| 51 | + ARV_BUFFER_STATUS_TIMEOUT, |
| 52 | + ARV_BUFFER_STATUS_MISSING_PACKETS, |
| 53 | + ARV_BUFFER_STATUS_WRONG_PACKET_ID, |
| 54 | + ARV_BUFFER_STATUS_SIZE_MISMATCH, |
| 55 | + ARV_BUFFER_STATUS_FILLING, |
| 56 | + ARV_BUFFER_STATUS_ABORTED |
| 57 | +} ArvBufferStatus; |
| 58 | + |
| 59 | +/** |
| 60 | + * ArvBufferPayloadType: |
| 61 | + * @ARV_BUFFER_PAYLOAD_TYPE_UNKNOWN: unknown payload type |
| 62 | + * @ARV_BUFFER_PAYLOAD_TYPE_IMAGE: image data |
| 63 | + * @ARV_BUFFER_PAYLOAD_TYPE_RAWDATA: raw data |
| 64 | + * @ARV_BUFFER_PAYLOAD_TYPE_FILE: file |
| 65 | + * @ARV_BUFFER_PAYLOAD_TYPE_CHUNK_DATA: chunk data |
| 66 | + * @ARV_BUFFER_PAYLOAD_TYPE_EXTENDED_CHUNK_DATA: extended chunk data |
| 67 | + * @ARV_BUFFER_PAYLOAD_TYPE_JPEG: JPEG data |
| 68 | + * @ARV_BUFFER_PAYLOAD_TYPE_JPEG2000: JPEG2000 data |
| 69 | + * @ARV_BUFFER_PAYLOAD_TYPE_H264: h264 data |
| 70 | + * @ARV_BUFFER_PAYLOAD_TYPE_MULTIZONE_IMAGE: multizone image |
| 71 | + * @ARV_BUFFER_PAYLOAD_TYPE_IMAGE_EXTENDED_CHUNK: image and chunk data |
| 72 | +*/ |
| 73 | + |
| 74 | +typedef enum { |
| 75 | + ARV_BUFFER_PAYLOAD_TYPE_UNKNOWN = -1, |
| 76 | + ARV_BUFFER_PAYLOAD_TYPE_IMAGE = 0x0001, |
| 77 | + ARV_BUFFER_PAYLOAD_TYPE_RAWDATA = 0x0002, |
| 78 | + ARV_BUFFER_PAYLOAD_TYPE_FILE = 0x0003, |
| 79 | + ARV_BUFFER_PAYLOAD_TYPE_CHUNK_DATA = 0x0004, |
| 80 | + ARV_BUFFER_PAYLOAD_TYPE_EXTENDED_CHUNK_DATA = 0x0005, /* Deprecated */ |
| 81 | + ARV_BUFFER_PAYLOAD_TYPE_JPEG = 0x0006, |
| 82 | + ARV_BUFFER_PAYLOAD_TYPE_JPEG2000 = 0x0007, |
| 83 | + ARV_BUFFER_PAYLOAD_TYPE_H264 = 0x0008, |
| 84 | + ARV_BUFFER_PAYLOAD_TYPE_MULTIZONE_IMAGE = 0x0009, |
| 85 | + ARV_BUFFER_PAYLOAD_TYPE_IMAGE_EXTENDED_CHUNK = 0x4001 |
| 86 | +} ArvBufferPayloadType; |
| 87 | + |
| 88 | +#define ARV_TYPE_BUFFER (arv_buffer_get_type ()) |
| 89 | +G_DECLARE_FINAL_TYPE (ArvBuffer, arv_buffer, ARV, BUFFER, GObject) |
| 90 | + |
| 91 | +typedef void (*ArvFrameCallback) (ArvBuffer *buffer); |
| 92 | + |
| 93 | +ArvBuffer * arv_buffer_new_allocate (size_t size); |
| 94 | +ArvBuffer * arv_buffer_new (size_t size, void *preallocated); |
| 95 | +ArvBuffer * arv_buffer_new_full (size_t size, void *preallocated, |
| 96 | + void *user_data, GDestroyNotify user_data_destroy_func); |
| 97 | + |
| 98 | +ArvBufferStatus arv_buffer_get_status (ArvBuffer *buffer); |
| 99 | + |
| 100 | +const void * arv_buffer_get_user_data (ArvBuffer *buffer); |
| 101 | + |
| 102 | +ArvBufferPayloadType arv_buffer_get_payload_type (ArvBuffer *buffer); |
| 103 | +guint64 arv_buffer_get_timestamp (ArvBuffer *buffer); |
| 104 | +void arv_buffer_set_timestamp (ArvBuffer *buffer, guint64 timestamp_ns); |
| 105 | +guint64 arv_buffer_get_system_timestamp (ArvBuffer *buffer); |
| 106 | +void arv_buffer_set_system_timestamp (ArvBuffer *buffer, guint64 timestamp_ns); |
| 107 | +guint64 arv_buffer_get_frame_id (ArvBuffer *buffer); |
| 108 | +const void * arv_buffer_get_data (ArvBuffer *buffer, size_t *size); |
| 109 | + |
| 110 | +void arv_buffer_get_image_region (ArvBuffer *buffer, gint *x, gint *y, gint *width, gint *height); |
| 111 | +gint arv_buffer_get_image_width (ArvBuffer *buffer); |
| 112 | +gint arv_buffer_get_image_height (ArvBuffer *buffer); |
| 113 | +gint arv_buffer_get_image_x (ArvBuffer *buffer); |
| 114 | +gint arv_buffer_get_image_y (ArvBuffer *buffer); |
| 115 | +ArvPixelFormat arv_buffer_get_image_pixel_format (ArvBuffer *buffer); |
| 116 | + |
| 117 | +gboolean arv_buffer_has_chunks (ArvBuffer *buffer); |
| 118 | +const void * arv_buffer_get_chunk_data (ArvBuffer *buffer, guint64 chunk_id, size_t *size); |
| 119 | + |
| 120 | +G_END_DECLS |
| 121 | + |
| 122 | +#endif |
0 commit comments