Revert "TODO epan/dissectors/asn1/kerberos/packet-kerberos-template.c new GSS flags"
[wireshark-sm.git] / epan / dissectors / packet-gvsp.c
blob95cb49d91d5fc084711c4f1f66847f7c8fd5c66d
1 /* packet-gvsp.c
2 * Routines for AIA GigE Vision (TM) Streaming Protocol dissection
3 * Copyright 2012, AIA <www.visiononline.org> All rights reserved
5 * GigE Vision (TM): GigE Vision a standard developed under the sponsorship of the AIA for
6 * the benefit of the machine vision industry. GVSP stands for GigE Vision (TM) Streaming
7 * Protocol.
9 * Wireshark - Network traffic analyzer
10 * By Gerald Combs <gerald@wireshark.org>
11 * Copyright 1998 Gerald Combs
13 * SPDX-License-Identifier: GPL-2.0-or-later
16 #include "config.h"
17 #include <epan/packet.h>
18 #include <epan/tfs.h>
19 #include <epan/conversation.h>
20 #include <epan/prefs.h>
22 void proto_register_gvsp(void);
23 void proto_reg_handoff_gvsp(void);
26 * For all GenICam standards, including GenDC 1.0 and 1.1:
28 * https://www.emva.org/standards-technology/genicam/genicam-downloads/
31 #define GVSP_MIN_PACKET_SIZE 8
32 #define GVSP_V2_MIN_PACKET_SIZE 20
33 #define GVSP_EXTENDED_ID_BIT 0x80
34 #define GVSP_EXTENDED_CHUNK_BIT 0x4000
36 #define GVSP_SIZE_OF_PART_INFO_LEADER ( 48 )
37 #define GVSP_SIZE_OF_PART_INFO_TRAILER ( 16 )
40 Payload types
43 #define GVSP_PAYLOAD_IMAGE ( 0x0001 )
44 #define GVSP_PAYLOAD_RAWDATA ( 0x0002 )
45 #define GVSP_PAYLOAD_FILE ( 0x0003 )
46 #define GVSP_PAYLOAD_CHUNKDATA ( 0x0004 )
47 #define GVSP_PAYLOAD_EXTENDEDCHUNKDATA ( 0x0005 ) /* Deprecated with GEV 2.0 */
48 #define GVSP_PAYLOAD_JPEG ( 0x0006 ) /* GEV 2.0 */
49 #define GVSP_PAYLOAD_JPEG2000 ( 0x0007 ) /* GEV 2.0 */
50 #define GVSP_PAYLOAD_H264 ( 0x0008 ) /* GEV 2.0 */
51 #define GVSP_PAYLOAD_MULTIZONEIMAGE ( 0x0009 ) /* GEV 2.0, deprecated with GEV 2.2 */
52 #define GVSP_PAYLOAD_MULTIPART ( 0x000A ) /* GEV 2.1 */
53 #define GVSP_PAYLOAD_GENDC ( 0x000B ) /* GEV 2.2 */
54 #define GVSP_PAYLOAD_DEVICE_SPECIFIC_START ( 0x8000 )
57 GenDC data flag masks (GEV 2.2)
60 #define GENDC_DESCRIPTOR_FLAG ( 0xC0 )
61 #define GENDC_DESCRIPTOR_START_FLAG ( 0x20 )
62 #define GENDC_DESCRIPTOR_END_FLAG ( 0x10 )
65 GenDC header types(GEV 2.2)
68 #define GENDC_HEADER_TYPE_CONTAINER ( 0x1000 )
69 #define GENDC_HEADER_TYPE_COMPONENT_HEADER ( 0x2000 )
70 #define GENDC_HEADER_TYPE_PART_CHUNK ( 0x4000 )
71 #define GENDC_HEADER_TYPE_PART_XML ( 0x4001 ) /* GenDC 1.1 */
72 #define GENDC_HEADER_TYPE_PART_1D ( 0x4100 )
73 #define GENDC_HEADER_TYPE_PART_2D ( 0x4200 )
74 #define GENDC_HEADER_TYPE_PART_2D_JPEG ( 0x4201 )
75 #define GENDC_HEADER_TYPE_PART_2D_JPEG2000 ( 0x4202 )
76 #define GENDC_HEADER_TYPE_PART_2D_H264 ( 0x4203 )
80 GenDC component types (GEV 2.2)
83 #define GENDC_COMPONENT_TYPEID_UNDEFINED ( 0x0000 )
84 #define GENDC_COMPONENT_TYPEID_INTENSITY ( 0x0001 )
85 #define GENDC_COMPONENT_TYPEID_INFRARED ( 0x0002 )
86 #define GENDC_COMPONENT_TYPEID_ULTRAVIOLET ( 0x0003 )
87 #define GENDC_COMPONENT_TYPEID_RANGE ( 0x0004 )
88 #define GENDC_COMPONENT_TYPEID_REFLECTANCE ( 0x0005 )
89 #define GENDC_COMPONENT_TYPEID_CONFIDENCE ( 0x0006 )
90 #define GENDC_COMPONENT_TYPEID_SCATTER ( 0x0007 )
91 #define GENDC_COMPONENT_TYPEID_DISPARITY ( 0x0008 )
92 #define GENDC_COMPONENT_TYPEID_MULTISPECTRAL ( 0x0009 )
93 #define GENDC_COMPONENT_TYPEID_METADATA ( 0x8001 )
94 #define GENDC_COMPONENT_TYPEID_RESERVED ( 0xFFFF )
97 GVSP packet types
100 #define GVSP_PACKET_LEADER ( 1 )
101 #define GVSP_PACKET_TRAILER ( 2 )
102 #define GVSP_PACKET_PAYLOAD ( 3 )
103 #define GVSP_PACKET_ALLIN ( 4 )
104 #define GVSP_PACKET_PAYLOAD_H264 ( 5 )
105 #define GVSP_PACKET_PAYLOAD_MULTIZONE ( 6 )
106 #define GVSP_PACKET_PAYLOAD_MULTIPART ( 7 ) /* GEV 2.1 */
107 #define GVSP_PACKET_PAYLOAD_GENDC ( 8 ) /* GEV 2.2 */
108 #define GVSP_PACKET_PAYLOAD_LAST ( 8 )
111 GVSP Multi-Part data types (GEV 2.1)
114 #define GVSP_MULTIPART_DATA_TYPE_2DIMAGE ( 0x0001 )
115 #define GVSP_MULTIPART_DATA_TYPE_2DPLANEBIPLANAR ( 0x0002 )
116 #define GVSP_MULTIPART_DATA_TYPE_2DPLANETRIPLANAR ( 0x0003 )
117 #define GVSP_MULTIPART_DATA_TYPE_2DPLANEQUADPLANAR ( 0x0004 )
118 #define GVSP_MULTIPART_DATA_TYPE_3DIMAGE ( 0x0005 )
119 #define GVSP_MULTIPART_DATA_TYPE_3DPLANEBIPLANAR ( 0x0006 )
120 #define GVSP_MULTIPART_DATA_TYPE_3DPLANETRIPLANAR ( 0x0007 )
121 #define GVSP_MULTIPART_DATA_TYPE_3DPLANEQUADPLANAR ( 0x0008 )
122 #define GVSP_MULTIPART_DATA_TYPE_CONFIDENCEMAP ( 0x0009 )
123 #define GVSP_MULTIPART_DATA_TYPE_CHUNKDATA ( 0x000A )
124 #define GVSP_MULTIPART_DATA_TYPE_JPEG ( 0x000B )
125 #define GVSP_MULTIPART_DATA_TYPE_JPEG2000 ( 0x000C )
126 #define GVSP_MULTIPART_DATA_TYPE_DEVICESPECIFIC ( 0x8000 )
129 GVSP statuses
132 #define GEV_STATUS_SUCCESS ( 0x0000 )
133 #define GEV_STATUS_PACKET_RESEND ( 0x0100 )
134 #define GEV_STATUS_NOT_IMPLEMENTED ( 0x8001 )
135 #define GEV_STATUS_INVALID_PARAMETER ( 0x8002 )
136 #define GEV_STATUS_INVALID_ADDRESS ( 0x8003 )
137 #define GEV_STATUS_WRITE_PROTECT ( 0x8004 )
138 #define GEV_STATUS_BAD_ALIGNMENT ( 0x8005 )
139 #define GEV_STATUS_ACCESS_DENIED ( 0x8006 )
140 #define GEV_STATUS_BUSY ( 0x8007 )
141 #define GEV_STATUS_LOCAL_PROBLEM ( 0x8008 ) /* deprecated */
142 #define GEV_STATUS_MSG_MISMATCH ( 0x8009 ) /* deprecated */
143 #define GEV_STATUS_INVALID_PROTOCOL ( 0x800A ) /* deprecated */
144 #define GEV_STATUS_NO_MSG ( 0x800B ) /* deprecated */
145 #define GEV_STATUS_PACKET_UNAVAILABLE ( 0x800C )
146 #define GEV_STATUS_DATA_OVERRUN ( 0x800D )
147 #define GEV_STATUS_INVALID_HEADER ( 0x800E )
148 #define GEV_STATUS_WRONG_CONFIG ( 0x800F ) /* deprecated */
149 #define GEV_STATUS_PACKET_NOT_YET_AVAILABLE ( 0x8010 )
150 #define GEV_STATUS_PACKET_AND_PREV_REMOVED_FROM_MEMORY ( 0x8011 )
151 #define GEV_STATUS_PACKET_REMOVED_FROM_MEMORY ( 0x8012 )
152 #define GEV_STATUS_NO_REF_TIME ( 0x8013 ) /* GEV 2.0 */
153 #define GEV_STATUS_PACKET_TEMPORARILY_UNAVAILABLE ( 0x8014 ) /* GEV 2.0 */
154 #define GEV_STATUS_OVERFLOW ( 0x8015 ) /* GEV 2.0 */
155 #define GEV_STATUS_ACTION_LATE ( 0x8016 ) /* GEV 2.0 */
156 #define GEV_STATUS_LEADER_TRAILER_OVERFLOW ( 0x8017 ) /* GEV 2.1 */
157 #define GEV_STATUS_LAST ( 0x8017 )
158 #define GEV_STATUS_ERROR ( 0x8FFF )
161 Pixel type color
164 #define GVSP_PIX_MONO ( 0x01000000 )
165 #define GVSP_PIX_COLOR ( 0x02000000 )
166 #define GVSP_PIX_CUSTOM ( 0x80000000 )
169 Pixel types
171 #define GVSP_PIX_MONO1P 0x01010037
172 #define GVSP_PIX_MONO2P 0x01020038
173 #define GVSP_PIX_MONO4P 0x01040039
174 #define GVSP_PIX_MONO8 0x01080001
175 #define GVSP_PIX_MONO8S 0x01080002
176 #define GVSP_PIX_MONO10 0x01100003
177 #define GVSP_PIX_MONO10P 0x010A0046
178 #define GVSP_PIX_MONO12 0x01100005
179 #define GVSP_PIX_MONO12P 0x010C0047
180 #define GVSP_PIX_MONO14 0x01100025
181 #define GVSP_PIX_MONO14P 0x010E0104
182 #define GVSP_PIX_MONO16 0x01100007
183 #define GVSP_PIX_MONO32 0x01200111
184 #define GVSP_PIX_BAYERBG4P 0x01040110
185 #define GVSP_PIX_BAYERBG8 0x0108000B
186 #define GVSP_PIX_BAYERBG10 0x0110000F
187 #define GVSP_PIX_BAYERBG10P 0x010A0052
188 #define GVSP_PIX_BAYERBG12 0x01100013
189 #define GVSP_PIX_BAYERBG12P 0x010C0053
190 #define GVSP_PIX_BAYERBG14 0x0110010C
191 #define GVSP_PIX_BAYERBG14P 0x010E0108
192 #define GVSP_PIX_BAYERBG16 0x01100031
193 #define GVSP_PIX_BAYERGB4P 0x0104010F
194 #define GVSP_PIX_BAYERGB8 0x0108000A
195 #define GVSP_PIX_BAYERGB10 0x0110000E
196 #define GVSP_PIX_BAYERGB10P 0x010A0054
197 #define GVSP_PIX_BAYERGB12 0x01100012
198 #define GVSP_PIX_BAYERGB12P 0x010C0055
199 #define GVSP_PIX_BAYERGB14 0x0110010B
200 #define GVSP_PIX_BAYERGB14P 0x010E0107
201 #define GVSP_PIX_BAYERGB16 0x01100030
202 #define GVSP_PIX_BAYERGR4P 0x0104010D
203 #define GVSP_PIX_BAYERGR8 0x01080008
204 #define GVSP_PIX_BAYERGR10 0x0110000C
205 #define GVSP_PIX_BAYERGR10P 0x010A0056
206 #define GVSP_PIX_BAYERGR12 0x01100010
207 #define GVSP_PIX_BAYERGR12P 0x010C0057
208 #define GVSP_PIX_BAYERGR14 0x01100109
209 #define GVSP_PIX_BAYERGR14P 0x010E0105
210 #define GVSP_PIX_BAYERGR16 0x0110002E
211 #define GVSP_PIX_BAYERRG4P 0x0104010E
212 #define GVSP_PIX_BAYERRG8 0x01080009
213 #define GVSP_PIX_BAYERRG10 0x0110000D
214 #define GVSP_PIX_BAYERRG10P 0x010A0058
215 #define GVSP_PIX_BAYERRG12 0x01100011
216 #define GVSP_PIX_BAYERRG12P 0x010C0059
217 #define GVSP_PIX_BAYERRG14 0x0110010A
218 #define GVSP_PIX_BAYERRG14P 0x010E0106
219 #define GVSP_PIX_BAYERRG16 0x0110002F
220 #define GVSP_PIX_RGBA8 0x02200016
221 #define GVSP_PIX_RGBA10 0x0240005F
222 #define GVSP_PIX_RGBA10P 0x02280060
223 #define GVSP_PIX_RGBA12 0x02400061
224 #define GVSP_PIX_RGBA12P 0x02300062
225 #define GVSP_PIX_RGBA14 0x02400063
226 #define GVSP_PIX_RGBA16 0x02400064
227 #define GVSP_PIX_RGB8 0x02180014
228 #define GVSP_PIX_RGB8_PLANAR 0x02180021
229 #define GVSP_PIX_RGB10 0x02300018
230 #define GVSP_PIX_RGB10_PLANAR 0x02300022
231 #define GVSP_PIX_RGB10P 0x021E005C
232 #define GVSP_PIX_RGB10P32 0x0220001D
233 #define GVSP_PIX_RGB12 0x0230001A
234 #define GVSP_PIX_RGB12_PLANAR 0x02300023
235 #define GVSP_PIX_RGB12P 0x0224005D
236 #define GVSP_PIX_RGB14 0x0230005E
237 #define GVSP_PIX_RGB16 0x02300033
238 #define GVSP_PIX_RGB16_PLANAR 0x02300024
239 #define GVSP_PIX_RGB565P 0x02100035
240 #define GVSP_PIX_BGRA8 0x02200017
241 #define GVSP_PIX_BGRA10 0x0240004C
242 #define GVSP_PIX_BGRA10P 0x0228004D
243 #define GVSP_PIX_BGRA12 0x0240004E
244 #define GVSP_PIX_BGRA12P 0x0230004F
245 #define GVSP_PIX_BGRA14 0x02400050
246 #define GVSP_PIX_BGRA16 0x02400051
247 #define GVSP_PIX_BGR8 0x02180015
248 #define GVSP_PIX_BGR10 0x02300019
249 #define GVSP_PIX_BGR10P 0x021E0048
250 #define GVSP_PIX_BGR12 0x0230001B
251 #define GVSP_PIX_BGR12P 0x02240049
252 #define GVSP_PIX_BGR14 0x0230004A
253 #define GVSP_PIX_BGR16 0x0230004B
254 #define GVSP_PIX_BGR565P 0x02100036
255 #define GVSP_PIX_R8 0x010800C9
256 #define GVSP_PIX_R10 0x01100120
257 #define GVSP_PIX_R10_DEPRECATED 0x010A00CA
258 #define GVSP_PIX_R12 0x01100121
259 #define GVSP_PIX_R12_DEPRECATED 0x010C00CB
260 #define GVSP_PIX_R16 0x011000CC
261 #define GVSP_PIX_G8 0x010800CD
262 #define GVSP_PIX_G10 0x01100122
263 #define GVSP_PIX_G10_DEPRECATED 0x010A00CE
264 #define GVSP_PIX_G12 0x01100123
265 #define GVSP_PIX_G12_DEPRECATED 0x010C00CF
266 #define GVSP_PIX_G16 0x011000D0
267 #define GVSP_PIX_B8 0x010800D1
268 #define GVSP_PIX_B10 0x01100124
269 #define GVSP_PIX_B10_DEPRECATED 0x010A00D2
270 #define GVSP_PIX_B12 0x01100125
271 #define GVSP_PIX_B12_DEPRECATED 0x010C00D3
272 #define GVSP_PIX_B16 0x011000D4
273 #define GVSP_PIX_COORD3D_ABC8 0x021800B2
274 #define GVSP_PIX_COORD3D_ABC8_PLANAR 0x021800B3
275 #define GVSP_PIX_COORD3D_ABC10P 0x021E00DB
276 #define GVSP_PIX_COORD3D_ABC10P_PLANAR 0x021E00DC
277 #define GVSP_PIX_COORD3D_ABC12P 0x022400DE
278 #define GVSP_PIX_COORD3D_ABC12P_PLANAR 0x022400DF
279 #define GVSP_PIX_COORD3D_ABC16 0x023000B9
280 #define GVSP_PIX_COORD3D_ABC16_PLANAR 0x023000BA
281 #define GVSP_PIX_COORD3D_ABC32F 0x026000C0
282 #define GVSP_PIX_COORD3D_ABC32F_PLANAR 0x026000C1
283 #define GVSP_PIX_COORD3D_AC8 0x021000B4
284 #define GVSP_PIX_COORD3D_AC8_PLANAR 0x021000B5
285 #define GVSP_PIX_COORD3D_AC10P 0x021400F0
286 #define GVSP_PIX_COORD3D_AC10P_PLANAR 0x021400F1
287 #define GVSP_PIX_COORD3D_AC12P 0x021800F2
288 #define GVSP_PIX_COORD3D_AC12P_PLANAR 0x021800F3
289 #define GVSP_PIX_COORD3D_AC16 0x022000BB
290 #define GVSP_PIX_COORD3D_AC16_PLANAR 0x022000BC
291 #define GVSP_PIX_COORD3D_AC32F 0x024000C2
292 #define GVSP_PIX_COORD3D_AC32F_PLANAR 0x024000C3
293 #define GVSP_PIX_COORD3D_A8 0x010800AF
294 #define GVSP_PIX_COORD3D_A10P 0x010A00D5
295 #define GVSP_PIX_COORD3D_A12P 0x010C00D8
296 #define GVSP_PIX_COORD3D_A16 0x011000B6
297 #define GVSP_PIX_COORD3D_A32F 0x012000BD
298 #define GVSP_PIX_COORD3D_B8 0x010800B0
299 #define GVSP_PIX_COORD3D_B10P 0x010A00D6
300 #define GVSP_PIX_COORD3D_B12P 0x010C00D9
301 #define GVSP_PIX_COORD3D_B16 0x011000B7
302 #define GVSP_PIX_COORD3D_B32F 0x012000BE
303 #define GVSP_PIX_COORD3D_C8 0x010800B1
304 #define GVSP_PIX_COORD3D_C10P 0x010A00D7
305 #define GVSP_PIX_COORD3D_C12P 0x010C00DA
306 #define GVSP_PIX_COORD3D_C16 0x011000B8
307 #define GVSP_PIX_COORD3D_C32F 0x012000BF
308 #define GVSP_PIX_CONFIDENCE1 0x010800C4
309 #define GVSP_PIX_CONFIDENCE1P 0x010100C5
310 #define GVSP_PIX_CONFIDENCE8 0x010800C6
311 #define GVSP_PIX_CONFIDENCE16 0x011000C7
312 #define GVSP_PIX_CONFIDENCE32F 0x012000C8
313 #define GVSP_PIX_BICOLORBGRG8 0x021000A6
314 #define GVSP_PIX_BICOLORBGRG10 0x022000A9
315 #define GVSP_PIX_BICOLORBGRG10P 0x021400AA
316 #define GVSP_PIX_BICOLORBGRG12 0x022000AD
317 #define GVSP_PIX_BICOLORBGRG12P 0x021800AE
318 #define GVSP_PIX_BICOLORRGBG8 0x021000A5
319 #define GVSP_PIX_BICOLORRGBG10 0x022000A7
320 #define GVSP_PIX_BICOLORRGBG10P 0x021400A8
321 #define GVSP_PIX_BICOLORRGBG12 0x022000AB
322 #define GVSP_PIX_BICOLORRGBG12P 0x021800AC
323 #define GVSP_PIX_DATA8 0x01080116
324 #define GVSP_PIX_DATA8S 0x01080117
325 #define GVSP_PIX_DATA16 0x01100118
326 #define GVSP_PIX_DATA16S 0x01100119
327 #define GVSP_PIX_DATA32 0x0120011A
328 #define GVSP_PIX_DATA32F 0x0120011C
329 #define GVSP_PIX_DATA32S 0x0120011B
330 #define GVSP_PIX_DATA64 0x0140011D
331 #define GVSP_PIX_DATA64F 0x0140011F
332 #define GVSP_PIX_DATA64S 0x0140011E
333 #define GVSP_PIX_SCF1WBWG8 0x01080067
334 #define GVSP_PIX_SCF1WBWG10 0x01100068
335 #define GVSP_PIX_SCF1WBWG10P 0x010A0069
336 #define GVSP_PIX_SCF1WBWG12 0x0110006A
337 #define GVSP_PIX_SCF1WBWG12P 0x010C006B
338 #define GVSP_PIX_SCF1WBWG14 0x0110006C
339 #define GVSP_PIX_SCF1WBWG16 0x0110006D
340 #define GVSP_PIX_SCF1WGWB8 0x0108006E
341 #define GVSP_PIX_SCF1WGWB10 0x0110006F
342 #define GVSP_PIX_SCF1WGWB10P 0x010A0070
343 #define GVSP_PIX_SCF1WGWB12 0x01100071
344 #define GVSP_PIX_SCF1WGWB12P 0x010C0072
345 #define GVSP_PIX_SCF1WGWB14 0x01100073
346 #define GVSP_PIX_SCF1WGWB16 0x01100074
347 #define GVSP_PIX_SCF1WGWR8 0x01080075
348 #define GVSP_PIX_SCF1WGWR10 0x01100076
349 #define GVSP_PIX_SCF1WGWR10P 0x010A0077
350 #define GVSP_PIX_SCF1WGWR12 0x01100078
351 #define GVSP_PIX_SCF1WGWR12P 0x010C0079
352 #define GVSP_PIX_SCF1WGWR14 0x0110007A
353 #define GVSP_PIX_SCF1WGWR16 0x0110007B
354 #define GVSP_PIX_SCF1WRWG8 0x0108007C
355 #define GVSP_PIX_SCF1WRWG10 0x0110007D
356 #define GVSP_PIX_SCF1WRWG10P 0x010A007E
357 #define GVSP_PIX_SCF1WRWG12 0x0110007F
358 #define GVSP_PIX_SCF1WRWG12P 0x010C0080
359 #define GVSP_PIX_SCF1WRWG14 0x01100081
360 #define GVSP_PIX_SCF1WRWG16 0x01100082
361 #define GVSP_PIX_YCBCR8 0x0218005B
362 #define GVSP_PIX_YCBCR8_CBYCR 0x0218003A
363 #define GVSP_PIX_YCBCR10_CBYCR 0x02300083
364 #define GVSP_PIX_YCBCR10P_CBYCR 0x021E0084
365 #define GVSP_PIX_YCBCR12_CBYCR 0x02300085
366 #define GVSP_PIX_YCBCR12P_CBYCR 0x02240086
367 #define GVSP_PIX_YCBCR411_8 0x020C005A
368 #define GVSP_PIX_YCBCR411_8_CBYYCRYY 0x020C003C
369 #define GVSP_PIX_YCBCR420_8_YY_CBCR_SEMIPLANAR 0x020C0112
370 #define GVSP_PIX_YCBCR420_8_YY_CRCB_SEMIPLANAR 0x020C0114
371 #define GVSP_PIX_YCBCR422_8 0x0210003B
372 #define GVSP_PIX_YCBCR422_8_CBYCRY 0x02100043
373 #define GVSP_PIX_YCBCR422_8_YY_CBCR_SEMIPLANAR 0x02100113
374 #define GVSP_PIX_YCBCR422_8_YY_CRCB_SEMIPLANAR 0x02100115
375 #define GVSP_PIX_YCBCR422_10 0x02200065
376 #define GVSP_PIX_YCBCR422_10_CBYCRY 0x02200099
377 #define GVSP_PIX_YCBCR422_10P 0x02140087
378 #define GVSP_PIX_YCBCR422_10P_CBYCRY 0x0214009A
379 #define GVSP_PIX_YCBCR422_12 0x02200066
380 #define GVSP_PIX_YCBCR422_12_CBYCRY 0x0220009B
381 #define GVSP_PIX_YCBCR422_12P 0x02180088
382 #define GVSP_PIX_YCBCR422_12P_CBYCRY 0x0218009C
383 #define GVSP_PIX_YCBCR601_8_CBYCR 0x0218003D
384 #define GVSP_PIX_YCBCR601_10_CBYCR 0x02300089
385 #define GVSP_PIX_YCBCR601_10P_CBYCR 0x021E008A
386 #define GVSP_PIX_YCBCR601_12_CBYCR 0x0230008B
387 #define GVSP_PIX_YCBCR601_12P_CBYCR 0x0224008C
388 #define GVSP_PIX_YCBCR601_411_8_CBYYCRYY 0x020C003F
389 #define GVSP_PIX_YCBCR601_422_8 0x0210003E
390 #define GVSP_PIX_YCBCR601_422_8_CBYCRY 0x02100044
391 #define GVSP_PIX_YCBCR601_422_10 0x0220008D
392 #define GVSP_PIX_YCBCR601_422_10_CBYCRY 0x0220009D
393 #define GVSP_PIX_YCBCR601_422_10P 0x0214008E
394 #define GVSP_PIX_YCBCR601_422_10P_CBYCRY 0x0214009E
395 #define GVSP_PIX_YCBCR601_422_12 0x0220008F
396 #define GVSP_PIX_YCBCR601_422_12_CBYCRY 0x0220009F
397 #define GVSP_PIX_YCBCR601_422_12P 0x02180090
398 #define GVSP_PIX_YCBCR601_422_12P_CBYCRY 0x021800A0
399 #define GVSP_PIX_YCBCR709_8_CBYCR 0x02180040
400 #define GVSP_PIX_YCBCR709_10_CBYCR 0x02300091
401 #define GVSP_PIX_YCBCR709_10P_CBYCR 0x021E0092
402 #define GVSP_PIX_YCBCR709_12_CBYCR 0x02300093
403 #define GVSP_PIX_YCBCR709_12P_CBYCR 0x02240094
404 #define GVSP_PIX_YCBCR709_411_8_CBYYCRYY 0x020C0042
405 #define GVSP_PIX_YCBCR709_422_8 0x02100041
406 #define GVSP_PIX_YCBCR709_422_8_CBYCRY 0x02100045
407 #define GVSP_PIX_YCBCR709_422_10 0x02200095
408 #define GVSP_PIX_YCBCR709_422_10_CBYCRY 0x022000A1
409 #define GVSP_PIX_YCBCR709_422_10P 0x02140096
410 #define GVSP_PIX_YCBCR709_422_10P_CBYCRY 0x021400A2
411 #define GVSP_PIX_YCBCR709_422_12 0x02200097
412 #define GVSP_PIX_YCBCR709_422_12_CBYCRY 0x022000A3
413 #define GVSP_PIX_YCBCR709_422_12P 0x02180098
414 #define GVSP_PIX_YCBCR709_422_12P_CBYCRY 0x021800A4
415 #define GVSP_PIX_YCBCR2020_8_CBYCR 0x021800F4
416 #define GVSP_PIX_YCBCR2020_10_CBYCR 0x023000F5
417 #define GVSP_PIX_YCBCR2020_10P_CBYCR 0x021E00F6
418 #define GVSP_PIX_YCBCR2020_12_CBYCR 0x023000F7
419 #define GVSP_PIX_YCBCR2020_12P_CBYCR 0x022400F8
420 #define GVSP_PIX_YCBCR2020_411_8_CBYYCRYY 0x020C00F9
421 #define GVSP_PIX_YCBCR2020_422_8 0x021000FA
422 #define GVSP_PIX_YCBCR2020_422_8_CBYCRY 0x021000FB
423 #define GVSP_PIX_YCBCR2020_422_10 0x022000FC
424 #define GVSP_PIX_YCBCR2020_422_10_CBYCRY 0x022000FD
425 #define GVSP_PIX_YCBCR2020_422_10P 0x021400FE
426 #define GVSP_PIX_YCBCR2020_422_10P_CBYCRY 0x021400FF
427 #define GVSP_PIX_YCBCR2020_422_12 0x02200100
428 #define GVSP_PIX_YCBCR2020_422_12_CBYCRY 0x02200101
429 #define GVSP_PIX_YCBCR2020_422_12P 0x02180102
430 #define GVSP_PIX_YCBCR2020_422_12P_CBYCRY 0x02180103
431 #define GVSP_PIX_YUV8_UYV 0x02180020
432 #define GVSP_PIX_YUV411_8_UYYVYY 0x020C001E
433 #define GVSP_PIX_YUV422_8 0x02100032
434 #define GVSP_PIX_YUV422_8_UYVY 0x0210001F
435 #define GVSP_PIX_MONO10PACKED 0x010C0004
436 #define GVSP_PIX_MONO12PACKED 0x010C0006
437 #define GVSP_PIX_BAYERBG10PACKED 0x010C0029
438 #define GVSP_PIX_BAYERBG12PACKED 0x010C002D
439 #define GVSP_PIX_BAYERGB10PACKED 0x010C0028
440 #define GVSP_PIX_BAYERGB12PACKED 0x010C002C
441 #define GVSP_PIX_BAYERGR10PACKED 0x010C0026
442 #define GVSP_PIX_BAYERGR12PACKED 0x010C002A
443 #define GVSP_PIX_BAYERRG10PACKED 0x010C0027
444 #define GVSP_PIX_BAYERRG12PACKED 0x010C002B
445 #define GVSP_PIX_RGB10V1PACKED 0x0220001C
446 #define GVSP_PIX_RGB12V1PACKED 0x02240034
449 /* Structure to hold GVSP packet information */
450 typedef struct _gvsp_packet_info
452 int chunk;
453 uint8_t format;
454 uint16_t status;
455 uint16_t payloadtype;
456 uint64_t blockid;
457 uint32_t packetid;
458 int enhanced;
459 int flag_resendrangeerror;
460 int flag_previousblockdropped;
461 int flag_packetresend;
462 } gvsp_packet_info;
465 /*Define the gvsp proto */
466 static int proto_gvsp;
467 /*static int global_gvsp_port = 20202;*/
468 static dissector_handle_t gvsp_handle;
471 /* Define the tree for gvsp */
472 static int ett_gvsp;
473 static int ett_gvsp_flags;
474 static int ett_gvsp_header;
475 static int ett_gvsp_payload;
476 static int ett_gvsp_trailer;
477 static int ett_gvsp_pixelformat;
478 static int ett_gvsp_fieldinfo;
479 static int ett_gvsp_cs;
480 static int ett_gvsp_sc_zone_direction;
481 static int ett_gvsp_zoneinfo;
482 static int ett_gvsp_zoneinfo_multipart;
483 static int ett_gvsp_partinfo_leader;
484 static int ett_gvsp_partinfo_trailer;
485 static int ett_gvsp_gendc_leader_flags;
486 static int ett_gvsp_gendc_payload_data_flags;
487 static int ett_gvsp_gendc_payload_flow_flags;
488 static int ett_gvsp_gendc_container_descriptor;
489 static int ett_gvsp_gendc_container_header_flags;
490 static int ett_gvsp_gendc_container_header_variable_fields;
491 static int ett_gvsp_gendc_container_header_component_offsets;
492 static int ett_gvsp_gendc_component_header;
493 static int ett_gvsp_gendc_part_offsets;
494 static int ett_gvsp_gendc_part_header;
495 static int ett_gvsp_gendc_component_header_flags;
496 static int ett_gvsp_gendc_part_header_flags;
498 static const value_string statusnames[] = {
499 { GEV_STATUS_SUCCESS, "GEV_STATUS_SUCCESS" },
500 { GEV_STATUS_PACKET_RESEND, "GEV_STATUS_PACKET_RESEND" },
501 { GEV_STATUS_NOT_IMPLEMENTED, "GEV_STATUS_NOT_IMPLEMENTED" },
502 { GEV_STATUS_INVALID_PARAMETER, "GEV_STATUS_INVALID_PARAMETER" },
503 { GEV_STATUS_INVALID_ADDRESS, "GEV_STATUS_INVALID_ADDRESS" },
504 { GEV_STATUS_WRITE_PROTECT, "GEV_STATUS_WRITE_PROTECT" },
505 { GEV_STATUS_BAD_ALIGNMENT, "GEV_STATUS_BAD_ALIGNMENT" },
506 { GEV_STATUS_ACCESS_DENIED, "GEV_STATUS_ACCESS_DENIED" },
507 { GEV_STATUS_BUSY, "GEV_STATUS_BUSY" },
508 { GEV_STATUS_LOCAL_PROBLEM, "GEV_STATUS_LOCAL_PROBLEM (deprecated)" },
509 { GEV_STATUS_MSG_MISMATCH, "GEV_STATUS_MSG_MISMATCH (deprecated)" },
510 { GEV_STATUS_INVALID_PROTOCOL, "GEV_STATUS_INVALID_PROTOCOL (deprecated)" },
511 { GEV_STATUS_NO_MSG, "GEV_STATUS_NO_MSG (deprecated)" },
512 { GEV_STATUS_PACKET_UNAVAILABLE, "GEV_STATUS_PACKET_UNAVAILABLE" },
513 { GEV_STATUS_DATA_OVERRUN, "GEV_STATUS_DATA_OVERRUN" },
514 { GEV_STATUS_INVALID_HEADER, "GEV_STATUS_INVALID_HEADER" },
515 { GEV_STATUS_WRONG_CONFIG, "GEV_STATUS_WRONG_CONFIG (deprecated)" },
516 { GEV_STATUS_PACKET_NOT_YET_AVAILABLE, "GEV_STATUS_PACKET_NOT_YET_AVAILABLE" },
517 { GEV_STATUS_PACKET_AND_PREV_REMOVED_FROM_MEMORY, "GEV_STATUS_PACKET_AND_PREV_REMOVED_FROM_MEMORY" },
518 { GEV_STATUS_PACKET_REMOVED_FROM_MEMORY, "GEV_STATUS_PACKET_REMOVED_FROM_MEMORY" },
519 { GEV_STATUS_NO_REF_TIME, "GEV_STATUS_NO_REF_TIME" },
520 { GEV_STATUS_PACKET_TEMPORARILY_UNAVAILABLE, "GEV_STATUS_PACKET_TEMPORARILY_UNAVAILABLE" },
521 { GEV_STATUS_OVERFLOW, "GEV_STATUS_OVERFLOW" },
522 { GEV_STATUS_ACTION_LATE, "GEV_STATUS_ACTION_LATE" },
523 { GEV_STATUS_LEADER_TRAILER_OVERFLOW, "GEV_STATUS_LEADER_TRAILER_OVERFLOW" },
524 { GEV_STATUS_ERROR, "GEV_STATUS_ERROR" },
525 { 0, NULL }
528 static value_string_ext statusnames_ext = VALUE_STRING_EXT_INIT(statusnames);
530 static const value_string formatnames[] = {
531 { GVSP_PACKET_LEADER, "LEADER" },
532 { GVSP_PACKET_TRAILER, "TRAILER" },
533 { GVSP_PACKET_PAYLOAD, "PAYLOAD" },
534 { GVSP_PACKET_ALLIN, "ALLIN" },
535 { GVSP_PACKET_PAYLOAD_H264, "H264" },
536 { GVSP_PACKET_PAYLOAD_MULTIZONE, "MULTI-ZONE" },
537 { GVSP_PACKET_PAYLOAD_MULTIPART, "MULTI-PART" },
538 { GVSP_PACKET_PAYLOAD_GENDC, "GENDC" },
539 { GVSP_EXTENDED_ID_BIT | GVSP_PACKET_LEADER, "LEADER (ext IDs)" },
540 { GVSP_EXTENDED_ID_BIT | GVSP_PACKET_TRAILER, "TRAILER (ext IDs)" },
541 { GVSP_EXTENDED_ID_BIT | GVSP_PACKET_PAYLOAD, "PAYLOAD (ext IDs)" },
542 { GVSP_EXTENDED_ID_BIT | GVSP_PACKET_ALLIN, "ALL-IN (ext IDs)" },
543 { GVSP_EXTENDED_ID_BIT | GVSP_PACKET_PAYLOAD_H264, "H264 (ext IDs)" },
544 { GVSP_EXTENDED_ID_BIT | GVSP_PACKET_PAYLOAD_MULTIZONE, "MULTI-ZONE (ext IDs)" },
545 { GVSP_EXTENDED_ID_BIT | GVSP_PACKET_PAYLOAD_MULTIPART, "MULTI-PART (ext IDs)" },
546 { GVSP_EXTENDED_ID_BIT | GVSP_PACKET_PAYLOAD_GENDC, "GENDC (ext IDs)" },
547 { 0, NULL }
550 static const value_string payloadtypenames[] = {
551 { GVSP_PAYLOAD_IMAGE, "IMAGE" },
552 { GVSP_PAYLOAD_RAWDATA, "RAW DATA" },
553 { GVSP_PAYLOAD_FILE, "FILE" },
554 { GVSP_PAYLOAD_CHUNKDATA, "CHUNK DATA" },
555 { GVSP_PAYLOAD_EXTENDEDCHUNKDATA, "EXTENDED CHUNK DATA (obsolete with v2.0)" },
556 { GVSP_PAYLOAD_JPEG, "JPEG" },
557 { GVSP_PAYLOAD_JPEG2000, "JPEG 2000" },
558 { GVSP_PAYLOAD_H264, "H264" },
559 { GVSP_PAYLOAD_MULTIZONEIMAGE, "MULTI-ZONE IMAGE" },
560 { GVSP_PAYLOAD_MULTIPART, "MULTI-PART" },
561 { GVSP_PAYLOAD_GENDC, "GENDC" },
562 { GVSP_EXTENDED_CHUNK_BIT | GVSP_PAYLOAD_IMAGE, "IMAGE (v2.0 chunks)" },
563 { GVSP_EXTENDED_CHUNK_BIT | GVSP_PAYLOAD_RAWDATA, "RAW DATA (v2.0 Chunks)" },
564 { GVSP_EXTENDED_CHUNK_BIT | GVSP_PAYLOAD_FILE, "FILE (v2.0 Chunks)" },
565 { GVSP_EXTENDED_CHUNK_BIT | GVSP_PAYLOAD_CHUNKDATA, "CHUNK DATA (v2.0 Chunks)" },
566 { GVSP_EXTENDED_CHUNK_BIT | GVSP_PAYLOAD_EXTENDEDCHUNKDATA, "EXTENDED CHUNK DATA (v2.0 chunks?)" },
567 { GVSP_EXTENDED_CHUNK_BIT | GVSP_PAYLOAD_JPEG, "JPEG (v2.0 Chunks)" },
568 { GVSP_EXTENDED_CHUNK_BIT | GVSP_PAYLOAD_JPEG2000, "JPEG 2000 (v2.0 Chunks)" },
569 { GVSP_EXTENDED_CHUNK_BIT | GVSP_PAYLOAD_H264, "H264 (v2.0 Chunks)" },
570 { GVSP_EXTENDED_CHUNK_BIT | GVSP_PAYLOAD_MULTIZONEIMAGE, "MULTI-ZONE IMAGE (v2.0 Chunks)" },
571 { GVSP_EXTENDED_CHUNK_BIT | GVSP_PAYLOAD_MULTIPART, "MULTI-PART (v2.0 Chunks)" },
572 { 0, NULL }
575 static value_string_ext payloadtypenames_ext = VALUE_STRING_EXT_INIT(payloadtypenames);
577 static const value_string multipartdatatypenames[] = {
578 { GVSP_MULTIPART_DATA_TYPE_2DIMAGE, "2D IMAGE" },
579 { GVSP_MULTIPART_DATA_TYPE_2DPLANEBIPLANAR, "2D PLANE BI-PLANAR" },
580 { GVSP_MULTIPART_DATA_TYPE_2DPLANETRIPLANAR, "2D PLANE TRI-PLANAR" },
581 { GVSP_MULTIPART_DATA_TYPE_2DPLANEQUADPLANAR, "2D PLANE QUAD-PLANAR" },
582 { GVSP_MULTIPART_DATA_TYPE_3DIMAGE, "3D IMAGE" },
583 { GVSP_MULTIPART_DATA_TYPE_3DPLANEBIPLANAR, "3D PLANE BI-PLANAR" },
584 { GVSP_MULTIPART_DATA_TYPE_3DPLANETRIPLANAR, "3D PLANE TRI-PLANAR" },
585 { GVSP_MULTIPART_DATA_TYPE_3DPLANEQUADPLANAR, "3D PLANE QUAD-PLANAR" },
586 { GVSP_MULTIPART_DATA_TYPE_CONFIDENCEMAP, "CONFIDENCE MAP" },
587 { GVSP_MULTIPART_DATA_TYPE_CHUNKDATA, "CHUNK DATA" },
588 { GVSP_MULTIPART_DATA_TYPE_JPEG, "JPEG" },
589 { GVSP_MULTIPART_DATA_TYPE_JPEG2000, "JPEG 2000" },
590 { GVSP_MULTIPART_DATA_TYPE_DEVICESPECIFIC, "DEVICE SPECIFIC" },
591 { 0, NULL }
594 static value_string_ext multipartdatatypenames_ext = VALUE_STRING_EXT_INIT(multipartdatatypenames);
596 static const value_string pixeltypenames[] =
598 { GVSP_PIX_MONO1P, "Mono1p (Monochrome 1-bit packed)" },
599 { GVSP_PIX_CONFIDENCE1P, "Confidence1p (Confidence 1-bit packed)" },
600 { GVSP_PIX_MONO2P, "Mono2p (Monochrome 2-bit packed)" },
601 { GVSP_PIX_MONO4P, "Mono4p (Monochrome 4-bit packed)" },
602 { GVSP_PIX_BAYERGR4P, "BayerGR4p (Bayer Green-Red 4-bit packed)" },
603 { GVSP_PIX_BAYERRG4P, "BayerRG4p (Bayer Red-Green 4-bit packed)" },
604 { GVSP_PIX_BAYERGB4P, "BayerGB4p (Bayer Green-Blue 4-bit packed)" },
605 { GVSP_PIX_BAYERBG4P, "BayerBG4p (Bayer Blue-Green 4-bit packed)" },
606 { GVSP_PIX_MONO8, "Mono8 (Monochrome 8-bit)" },
607 { GVSP_PIX_MONO8S, "Mono8s (Monochrome 8-bit signed)" },
608 { GVSP_PIX_BAYERGR8, "BayerGR8 (Bayer Green-Red 8-bit)" },
609 { GVSP_PIX_BAYERRG8, "BayerRG8 (Bayer Red-Green 8-bit)" },
610 { GVSP_PIX_BAYERGB8, "BayerGB8 (Bayer Green-Blue 8-bit)" },
611 { GVSP_PIX_BAYERBG8, "BayerBG8 (Bayer Blue-Green 8-bit)" },
612 { GVSP_PIX_SCF1WBWG8, "SCF1WBWG8 (Sparse Color Filter #1 White-Blue-White-Green 8-bit)" },
613 { GVSP_PIX_SCF1WGWB8, "SCF1WGWB8 (Sparse Color Filter #1 White-Green-White-Blue 8-bit)" },
614 { GVSP_PIX_SCF1WGWR8, "SCF1WGWR8 (Sparse Color Filter #1 White-Green-White-Red 8-bit)" },
615 { GVSP_PIX_SCF1WRWG8, "SCF1WRWG8 (Sparse Color Filter #1 White-Red-White-Green 8-bit)" },
616 { GVSP_PIX_COORD3D_A8, "Coord3D_A8 (3D coordinate A 8-bit)" },
617 { GVSP_PIX_COORD3D_B8, "Coord3D_B8 (3D coordinate B 8-bit)" },
618 { GVSP_PIX_COORD3D_C8, "Coord3D_C8 (3D coordinate C 8-bit)" },
619 { GVSP_PIX_CONFIDENCE1, "Confidence1 (Confidence 1-bit unpacked)" },
620 { GVSP_PIX_CONFIDENCE8, "Confidence8 (Confidence 8-bit)" },
621 { GVSP_PIX_R8, "R8 (Red 8-bit)" },
622 { GVSP_PIX_G8, "G8 (Green 8-bit)" },
623 { GVSP_PIX_B8, "B8 (Blue 8-bit)" },
624 { GVSP_PIX_DATA8, "Data8 (Data 8-bit)" },
625 { GVSP_PIX_DATA8S, "Data8s (Data 8-bit signed)" },
626 { GVSP_PIX_MONO10P, "Mono10p (Monochrome 10-bit packed)" },
627 { GVSP_PIX_BAYERBG10P, "BayerBG10p (Bayer Blue-Green 10-bit packed)" },
628 { GVSP_PIX_BAYERGB10P, "BayerGB10p (Bayer Green-Blue 10-bit packed)" },
629 { GVSP_PIX_BAYERGR10P, "BayerGR10p (Bayer Green-Red 10-bit packed)" },
630 { GVSP_PIX_BAYERRG10P, "BayerRG10p (Bayer Red-Green 10-bit packed)" },
631 { GVSP_PIX_SCF1WBWG10P, "SCF1WBWG10p (Sparse Color Filter #1 White-Blue-White-Green 10-bit packed)" },
632 { GVSP_PIX_SCF1WGWB10P, "SCF1WGWB10p (Sparse Color Filter #1 White-Green-White-Blue 10-bit packed)" },
633 { GVSP_PIX_SCF1WGWR10P, "SCF1WGWR10p (Sparse Color Filter #1 White-Green-White-Red 10-bit packed)" },
634 { GVSP_PIX_SCF1WRWG10P, "SCF1WRWG10p (Sparse Color Filter #1 White-Red-White-Green 10-bit packed)" },
635 { GVSP_PIX_R10_DEPRECATED, "R10_Deprecated (Deprecated because size field is wrong)" },
636 { GVSP_PIX_G10_DEPRECATED, "G10_Deprecated (Deprecated because size field is wrong)" },
637 { GVSP_PIX_B10_DEPRECATED, "B10_Deprecated (Deprecated because size field is wrong)" },
638 { GVSP_PIX_COORD3D_A10P, "Coord3D_A10p (3D coordinate A 10-bit packed)" },
639 { GVSP_PIX_COORD3D_B10P, "Coord3D_B10p (3D coordinate B 10-bit packed)" },
640 { GVSP_PIX_COORD3D_C10P, "Coord3D_C10p (3D coordinate C 10-bit packed)" },
641 { GVSP_PIX_MONO10PACKED, "GVSP_Mono10Packed (GigE Vision specific format, Monochrome 10-bit packed)" },
642 { GVSP_PIX_MONO12PACKED, "GVSP_Mono12Packed (GigE Vision specific format, Monochrome 12-bit packed)" },
643 { GVSP_PIX_BAYERGR10PACKED, "GVSP_BayerGR10Packed (GigE Vision specific format, Bayer Green-Red 10-bit packed)" },
644 { GVSP_PIX_BAYERRG10PACKED, "GVSP_BayerRG10Packed (GigE Vision specific format, Bayer Red-Green 10-bit packed)" },
645 { GVSP_PIX_BAYERGB10PACKED, "GVSP_BayerGB10Packed (GigE Vision specific format, Bayer Green-Blue 10-bit packed)" },
646 { GVSP_PIX_BAYERBG10PACKED, "GVSP_BayerBG10Packed (GigE Vision specific format, Bayer Blue-Green 10-bit packed)" },
647 { GVSP_PIX_BAYERGR12PACKED, "GVSP_BayerGR12Packed (GigE Vision specific format, Bayer Green-Red 12-bit packed)" },
648 { GVSP_PIX_BAYERRG12PACKED, "GVSP_BayerRG12Packed (GigE Vision specific format, Bayer Red-Green 12-bit packed)" },
649 { GVSP_PIX_BAYERGB12PACKED, "GVSP_BayerGB12Packed (GigE Vision specific format, Bayer Green-Blue 12-bit packed)" },
650 { GVSP_PIX_BAYERBG12PACKED, "GVSP_BayerBG12Packed (GigE Vision specific format, Bayer Blue-Green 12-bit packed)" },
651 { GVSP_PIX_MONO12P, "Mono12p (Monochrome 12-bit packed)" },
652 { GVSP_PIX_BAYERBG12P, "BayerBG12p (Bayer Blue-Green 12-bit packed)" },
653 { GVSP_PIX_BAYERGB12P, "BayerGB12p (Bayer Green-Blue 12-bit packed)" },
654 { GVSP_PIX_BAYERGR12P, "BayerGR12p (Bayer Green-Red 12-bit packed)" },
655 { GVSP_PIX_BAYERRG12P, "BayerRG12p (Bayer Red-Green 12-bit packed)" },
656 { GVSP_PIX_SCF1WBWG12P, "SCF1WBWG12p (Sparse Color Filter #1 White-Blue-White-Green 12-bit packed)" },
657 { GVSP_PIX_SCF1WGWB12P, "SCF1WGWB12p (Sparse Color Filter #1 White-Green-White-Blue 12-bit packed)" },
658 { GVSP_PIX_SCF1WGWR12P, "SCF1WGWR12p (Sparse Color Filter #1 White-Green-White-Red 12-bit packed)" },
659 { GVSP_PIX_SCF1WRWG12P, "SCF1WRWG12p (Sparse Color Filter #1 White-Red-White-Green 12-bit packed)" },
660 { GVSP_PIX_R12_DEPRECATED, "R12_Deprecated (Deprecated because size field is wrong)" },
661 { GVSP_PIX_G12_DEPRECATED, "G12_Deprecated (Deprecated because size field is wrong)" },
662 { GVSP_PIX_B12_DEPRECATED, "B12_Deprecated (Deprecated because size field is wrong)" },
663 { GVSP_PIX_COORD3D_A12P, "Coord3D_A12p (3D coordinate A 12-bit packed)" },
664 { GVSP_PIX_COORD3D_B12P, "Coord3D_B12p (3D coordinate B 12-bit packed)" },
665 { GVSP_PIX_COORD3D_C12P, "Coord3D_C12p (3D coordinate C 12-bit packed)" },
666 { GVSP_PIX_MONO14P, "Mono14p (Monochrome 14-bit packed)" },
667 { GVSP_PIX_BAYERGR14P, "BayerGR14p (Bayer Green-Red 14-bit packed)" },
668 { GVSP_PIX_BAYERRG14P, "BayerRG14p (Bayer Red-Green 14-bit packed)" },
669 { GVSP_PIX_BAYERGB14P, "BayerGB14p (Bayer Green-Blue 14-bit packed)" },
670 { GVSP_PIX_BAYERBG14P, "BayerBG14p (Bayer Blue-Green 14-bit packed)" },
671 { GVSP_PIX_MONO10, "Mono10 (Monochrome 10-bit unpacked)" },
672 { GVSP_PIX_MONO12, "Mono12 (Monochrome 12-bit unpacked)" },
673 { GVSP_PIX_MONO16, "Mono16 (Monochrome 16-bit)" },
674 { GVSP_PIX_BAYERGR10, "BayerGR10 (Bayer Green-Red 10-bit unpacked)" },
675 { GVSP_PIX_BAYERRG10, "BayerRG10 (Bayer Red-Green 10-bit unpacked)" },
676 { GVSP_PIX_BAYERGB10, "BayerGB10 (Bayer Green-Blue 10-bit unpacked)" },
677 { GVSP_PIX_BAYERBG10, "BayerBG10 (Bayer Blue-Green 10-bit unpacked)" },
678 { GVSP_PIX_BAYERGR12, "BayerGR12 (Bayer Green-Red 12-bit unpacked)" },
679 { GVSP_PIX_BAYERRG12, "BayerRG12 (Bayer Red-Green 12-bit unpacked)" },
680 { GVSP_PIX_BAYERGB12, "BayerGB12 (Bayer Green-Blue 12-bit unpacked)" },
681 { GVSP_PIX_BAYERBG12, "BayerBG12 (Bayer Blue-Green 12-bit unpacked)" },
682 { GVSP_PIX_MONO14, "Mono14 (Monochrome 14-bit unpacked)" },
683 { GVSP_PIX_BAYERGR16, "BayerGR16 (Bayer Green-Red 16-bit)" },
684 { GVSP_PIX_BAYERRG16, "BayerRG16 (Bayer Red-Green 16-bit)" },
685 { GVSP_PIX_BAYERGB16, "BayerGB16 (Bayer Green-Blue 16-bit)" },
686 { GVSP_PIX_BAYERBG16, "BayerBG16 (Bayer Blue-Green 16-bit)" },
687 { GVSP_PIX_SCF1WBWG10, "SCF1WBWG10 (Sparse Color Filter #1 White-Blue-White-Green 10-bit unpacked)" },
688 { GVSP_PIX_SCF1WBWG12, "SCF1WBWG12 (Sparse Color Filter #1 White-Blue-White-Green 12-bit unpacked)" },
689 { GVSP_PIX_SCF1WBWG14, "SCF1WBWG14 (Sparse Color Filter #1 White-Blue-White-Green 14-bit unpacked)" },
690 { GVSP_PIX_SCF1WBWG16, "SCF1WBWG16 (Sparse Color Filter #1 White-Blue-White-Green 16-bit unpacked)" },
691 { GVSP_PIX_SCF1WGWB10, "SCF1WGWB10 (Sparse Color Filter #1 White-Green-White-Blue 10-bit unpacked)" },
692 { GVSP_PIX_SCF1WGWB12, "SCF1WGWB12 (Sparse Color Filter #1 White-Green-White-Blue 12-bit unpacked)" },
693 { GVSP_PIX_SCF1WGWB14, "SCF1WGWB14 (Sparse Color Filter #1 White-Green-White-Blue 14-bit unpacked)" },
694 { GVSP_PIX_SCF1WGWB16, "SCF1WGWB16 (Sparse Color Filter #1 White-Green-White-Blue 16-bit)" },
695 { GVSP_PIX_SCF1WGWR10, "SCF1WGWR10 (Sparse Color Filter #1 White-Green-White-Red 10-bit unpacked)" },
696 { GVSP_PIX_SCF1WGWR12, "SCF1WGWR12 (Sparse Color Filter #1 White-Green-White-Red 12-bit unpacked)" },
697 { GVSP_PIX_SCF1WGWR14, "SCF1WGWR14 (Sparse Color Filter #1 White-Green-White-Red 14-bit unpacked)" },
698 { GVSP_PIX_SCF1WGWR16, "SCF1WGWR16 (Sparse Color Filter #1 White-Green-White-Red 16-bit)" },
699 { GVSP_PIX_SCF1WRWG10, "SCF1WRWG10 (Sparse Color Filter #1 White-Red-White-Green 10-bit unpacked)" },
700 { GVSP_PIX_SCF1WRWG12, "SCF1WRWG12 (Sparse Color Filter #1 White-Red-White-Green 12-bit unpacked)" },
701 { GVSP_PIX_SCF1WRWG14, "SCF1WRWG14 (Sparse Color Filter #1 White-Red-White-Green 14-bit unpacked)" },
702 { GVSP_PIX_SCF1WRWG16, "SCF1WRWG16 (Sparse Color Filter #1 White-Red-White-Green 16-bit)" },
703 { GVSP_PIX_COORD3D_A16, "Coord3D_A16 (3D coordinate A 16-bit)" },
704 { GVSP_PIX_COORD3D_B16, "Coord3D_B16 (3D coordinate B 16-bit)" },
705 { GVSP_PIX_COORD3D_C16, "Coord3D_C16 (3D coordinate C 16-bit)" },
706 { GVSP_PIX_CONFIDENCE16, "Confidence16 (Confidence 16-bit)" },
707 { GVSP_PIX_R16, "R16 (Red 16-bit)" },
708 { GVSP_PIX_G16, "G16 (Green 16-bit)" },
709 { GVSP_PIX_B16, "B16 (Blue 16-bit)" },
710 { GVSP_PIX_BAYERGR14, "BayerGR14 (Bayer Green-Red 14-bit)" },
711 { GVSP_PIX_BAYERRG14, "BayerRG14 (Bayer Red-Green 14-bit)" },
712 { GVSP_PIX_BAYERGB14, "BayerGB14 (Bayer Green-Blue 14-bit)" },
713 { GVSP_PIX_BAYERBG14, "BayerBG14 (Bayer Blue-Green 14-bit)" },
714 { GVSP_PIX_DATA16, "Data16 (Data 16-bit)" },
715 { GVSP_PIX_DATA16S, "Data16s (Data 16-bit signed)" },
716 { GVSP_PIX_R10, "R10 (Red 10-bit)" },
717 { GVSP_PIX_R12, "R12 (Red 12-bit)" },
718 { GVSP_PIX_G10, "G10 (Green 10-bit)" },
719 { GVSP_PIX_G12, "G12 (Green 12-bit)" },
720 { GVSP_PIX_B10, "B10 (Blue 10-bit)" },
721 { GVSP_PIX_B12, "B12 (Blue 12-bit)" },
722 { GVSP_PIX_COORD3D_A32F, "Coord3D_A32f (3D coordinate A 32-bit floating point)" },
723 { GVSP_PIX_COORD3D_B32F, "Coord3D_B32f (3D coordinate B 32-bit floating point)" },
724 { GVSP_PIX_COORD3D_C32F, "Coord3D_C32f (3D coordinate C 32-bit floating point)" },
725 { GVSP_PIX_CONFIDENCE32F, "Confidence32f (Confidence 32-bit floating point)" },
726 { GVSP_PIX_MONO32, "Mono32 (Monochrome 32-bit)" },
727 { GVSP_PIX_DATA32, "Data32 (Data 32-bit)" },
728 { GVSP_PIX_DATA32S, "Data32s (Data 32-bit signed)" },
729 { GVSP_PIX_DATA32F, "Data32f (Data 32-bit floating point)" },
730 { GVSP_PIX_DATA64, "Data64 (Data 64-bit)" },
731 { GVSP_PIX_DATA64S, "Data64s (Data 64-bit signed)" },
732 { GVSP_PIX_DATA64F, "Data64f (Data 64-bit floating point)" },
733 { GVSP_PIX_YUV411_8_UYYVYY, "YUV411_8_UYYVYY (YUV 4:1:1 8-bit)" },
734 { GVSP_PIX_YCBCR411_8_CBYYCRYY, "YCbCr411_8_CbYYCrYY (YCbCr 4:1:1 8-bit)" },
735 { GVSP_PIX_YCBCR601_411_8_CBYYCRYY, "YCbCr601_411_8_CbYYCrYY (YCbCr 4:1:1 8-bit BT.601)" },
736 { GVSP_PIX_YCBCR709_411_8_CBYYCRYY, "YCbCr709_411_8_CbYYCrYY (YCbCr 4:1:1 8-bit BT.709)" },
737 { GVSP_PIX_YCBCR411_8, "YCbCr411_8 (YCbCr 4:1:1 8-bit)" },
738 { GVSP_PIX_YCBCR2020_411_8_CBYYCRYY, "YCbCr2020_411_8_CbYYCrYY (YCbCr 4:1:1 8-bit BT.2020)" },
739 { GVSP_PIX_YCBCR420_8_YY_CBCR_SEMIPLANAR, "YCbCr420_8_YY_CbCr_Semiplanar (YCbCr 4:2:0 8-bit YY/CbCr Semiplanar)" },
740 { GVSP_PIX_YCBCR420_8_YY_CRCB_SEMIPLANAR, "YCbCr420_8_YY_CrCb_Semiplanar (YCbCr 4:2:0 8-bit YY/CrCb Semiplanar)" },
741 { GVSP_PIX_YUV422_8_UYVY, "YUV422_8_UYVY (YUV 4:2:2 8-bit)" },
742 { GVSP_PIX_YUV422_8, "YUV422_8 (YUV 4:2:2 8-bit)" },
743 { GVSP_PIX_RGB565P, "RGB565p (Red-Green-Blue 5/6/5-bit packed)" },
744 { GVSP_PIX_BGR565P, "BGR565p (Blue-Green-Red 5/6/5-bit packed)" },
745 { GVSP_PIX_YCBCR422_8, "YCbCr422_8 (YCbCr 4:2:2 8-bit)" },
746 { GVSP_PIX_YCBCR601_422_8, "YCbCr601_422_8 (YCbCr 4:2:2 8-bit BT.601)" },
747 { GVSP_PIX_YCBCR709_422_8, "YCbCr709_422_8 (YCbCr 4:2:2 8-bit BT.709)" },
748 { GVSP_PIX_YCBCR422_8_CBYCRY, "YCbCr422_8_CbYCrY (YCbCr 4:2:2 8-bit)" },
749 { GVSP_PIX_YCBCR601_422_8_CBYCRY, "YCbCr601_422_8_CbYCrY (YCbCr 4:2:2 8-bit BT.601)" },
750 { GVSP_PIX_YCBCR709_422_8_CBYCRY, "YCbCr709_422_8_CbYCrY (YCbCr 4:2:2 8-bit BT.709)" },
751 { GVSP_PIX_BICOLORRGBG8, "BiColorRGBG8 (Bi-color Red/Green - Blue/Green 8-bit)" },
752 { GVSP_PIX_BICOLORBGRG8, "BiColorBGRG8 (Bi-color Blue/Green - Red/Green 8-bit)" },
753 { GVSP_PIX_COORD3D_AC8, "Coord3D_AC8 (3D coordinate A-C 8-bit)" },
754 { GVSP_PIX_COORD3D_AC8_PLANAR, "Coord3D_AC8_Planar (3D coordinate A-C 8-bit planar)" },
755 { GVSP_PIX_YCBCR2020_422_8, "YCbCr2020_422_8 (YCbCr 4:2:2 8-bit BT.2020)" },
756 { GVSP_PIX_YCBCR2020_422_8_CBYCRY, "YCbCr2020_422_8_CbYCrY (YCbCr 4:2:2 8-bit BT.2020)" },
757 { GVSP_PIX_YCBCR422_8_YY_CBCR_SEMIPLANAR, "YCbCr422_8_YY_CbCr_Semiplanar (YCbCr 4:2:2 8-bit YY/CbCr Semiplanar)" },
758 { GVSP_PIX_YCBCR422_8_YY_CRCB_SEMIPLANAR, "YCbCr422_8_YY_CrCb_Semiplanar (YCbCr 4:2:2 8-bit YY/CrCb Semiplanar)" },
759 { GVSP_PIX_YCBCR422_10P, "YCbCr422_10p (YCbCr 4:2:2 10-bit packed)" },
760 { GVSP_PIX_YCBCR601_422_10P, "YCbCr601_422_10p (YCbCr 4:2:2 10-bit packed BT.601)" },
761 { GVSP_PIX_YCBCR709_422_10P, "YCbCr709_422_10p (YCbCr 4:2:2 10-bit packed BT.709)" },
762 { GVSP_PIX_YCBCR422_10P_CBYCRY, "YCbCr422_10p_CbYCrY (YCbCr 4:2:2 10-bit packed)" },
763 { GVSP_PIX_YCBCR601_422_10P_CBYCRY, "YCbCr601_422_10p_CbYCrY (YCbCr 4:2:2 10-bit packed BT.601)" },
764 { GVSP_PIX_YCBCR709_422_10P_CBYCRY, "YCbCr709_422_10p_CbYCrY (YCbCr 4:2:2 10-bit packed BT.709)" },
765 { GVSP_PIX_BICOLORRGBG10P, "BiColorRGBG10p (Bi-color Red/Green - Blue/Green 10-bit packed)" },
766 { GVSP_PIX_BICOLORBGRG10P, "BiColorBGRG10p (Bi-color Blue/Green - Red/Green 10-bit packed)" },
767 { GVSP_PIX_COORD3D_AC10P, "Coord3D_AC10p (3D coordinate A-C 10-bit packed)" },
768 { GVSP_PIX_COORD3D_AC10P_PLANAR, "Coord3D_AC10p_Planar (3D coordinate A-C 10-bit packed planar)" },
769 { GVSP_PIX_YCBCR2020_422_10P, "YCbCr2020_422_10p (YCbCr 4:2:2 10-bit packed BT.2020)" },
770 { GVSP_PIX_YCBCR2020_422_10P_CBYCRY, "YCbCr2020_422_10p_CbYCrY (YCbCr 4:2:2 10-bit packed BT.2020)" },
771 { GVSP_PIX_RGB8, "RGB8 (Red-Green-Blue 8-bit)" },
772 { GVSP_PIX_BGR8, "BGR8 (Blue-Green-Red 8-bit)" },
773 { GVSP_PIX_YUV8_UYV, "YUV8_UYV (YUV 4:4:4 8-bit)" },
774 { GVSP_PIX_RGB8_PLANAR, "RGB8_Planar (Red-Green-Blue 8-bit planar)" },
775 { GVSP_PIX_YCBCR8_CBYCR, "YCbCr8_CbYCr (YCbCr 4:4:4 8-bit)" },
776 { GVSP_PIX_YCBCR601_8_CBYCR, "YCbCr601_8_CbYCr (YCbCr 4:4:4 8-bit BT.601)" },
777 { GVSP_PIX_YCBCR709_8_CBYCR, "YCbCr709_8_CbYCr (YCbCr 4:4:4 8-bit BT.709)" },
778 { GVSP_PIX_YCBCR8, "YCbCr8 (YCbCr 4:4:4 8-bit)" },
779 { GVSP_PIX_YCBCR422_12P, "YCbCr422_12p (YCbCr 4:2:2 12-bit packed)" },
780 { GVSP_PIX_YCBCR601_422_12P, "YCbCr601_422_12p (YCbCr 4:2:2 12-bit packed BT.601)" },
781 { GVSP_PIX_YCBCR709_422_12P, "YCbCr709_422_12p (YCbCr 4:2:2 12-bit packed BT.709)" },
782 { GVSP_PIX_YCBCR422_12P_CBYCRY, "YCbCr422_12p_CbYCrY (YCbCr 4:2:2 12-bit packed)" },
783 { GVSP_PIX_YCBCR601_422_12P_CBYCRY, "YCbCr601_422_12p_CbYCrY (YCbCr 4:2:2 12-bit packed BT.601)" },
784 { GVSP_PIX_YCBCR709_422_12P_CBYCRY, "YCbCr709_422_12p_CbYCrY (YCbCr 4:2:2 12-bit packed BT.709)" },
785 { GVSP_PIX_BICOLORRGBG12P, "BiColorRGBG12p (Bi-color Red/Green - Blue/Green 12-bit packed)" },
786 { GVSP_PIX_BICOLORBGRG12P, "BiColorBGRG12p (Bi-color Blue/Green - Red/Green 12-bit packed)" },
787 { GVSP_PIX_COORD3D_ABC8, "Coord3D_ABC8 (3D coordinate A-B-C 8-bit)" },
788 { GVSP_PIX_COORD3D_ABC8_PLANAR, "Coord3D_ABC8_Planar (3D coordinate A-B-C 8-bit planar)" },
789 { GVSP_PIX_COORD3D_AC12P, "Coord3D_AC12p (3D coordinate A-C 12-bit packed)" },
790 { GVSP_PIX_COORD3D_AC12P_PLANAR, "Coord3D_AC12p_Planar (3D coordinate A-C 12-bit packed planar)" },
791 { GVSP_PIX_YCBCR2020_8_CBYCR, "YCbCr2020_8_CbYCr (YCbCr 4:4:4 8-bit BT.2020)" },
792 { GVSP_PIX_YCBCR2020_422_12P, "YCbCr2020_422_12p (YCbCr 4:2:2 12-bit packed BT.2020)" },
793 { GVSP_PIX_YCBCR2020_422_12P_CBYCRY, "YCbCr2020_422_12p_CbYCrY (YCbCr 4:2:2 12-bit packed BT.2020)" },
794 { GVSP_PIX_BGR10P, "BGR10p (Blue-Green-Red 10-bit packed)" },
795 { GVSP_PIX_RGB10P, "RGB10p (Red-Green-Blue 10-bit packed)" },
796 { GVSP_PIX_YCBCR10P_CBYCR, "YCbCr10p_CbYCr (YCbCr 4:4:4 10-bit packed)" },
797 { GVSP_PIX_YCBCR601_10P_CBYCR, "YCbCr601_10p_CbYCr (YCbCr 4:4:4 10-bit packed BT.601)" },
798 { GVSP_PIX_YCBCR709_10P_CBYCR, "YCbCr709_10p_CbYCr (YCbCr 4:4:4 10-bit packed BT.709)" },
799 { GVSP_PIX_COORD3D_ABC10P, "Coord3D_ABC10p (3D coordinate A-B-C 10-bit packed)" },
800 { GVSP_PIX_COORD3D_ABC10P_PLANAR, "Coord3D_ABC10p_Planar (3D coordinate A-B-C 10-bit packed planar)" },
801 { GVSP_PIX_YCBCR2020_10P_CBYCR, "YCbCr2020_10p_CbYCr (YCbCr 4:4:4 10-bit packed BT.2020)" },
802 { GVSP_PIX_RGBA8, "RGBa8 (Red-Green-Blue-alpha 8-bit)" },
803 { GVSP_PIX_BGRA8, "BGRa8 (Blue-Green-Red-alpha 8-bit)" },
804 { GVSP_PIX_RGB10V1PACKED, "GVSP_RGB10V1Packed (GigE Vision specific format, Red-Green-Blue 10-bit packed - variant 1)" },
805 { GVSP_PIX_RGB10P32, "RGB10p32 (Red-Green-Blue 10-bit packed into 32-bit)" },
806 { GVSP_PIX_YCBCR422_10, "YCbCr422_10 (YCbCr 4:2:2 10-bit unpacked)" },
807 { GVSP_PIX_YCBCR422_12, "YCbCr422_12 (YCbCr 4:2:2 12-bit unpacked)" },
808 { GVSP_PIX_YCBCR601_422_10, "YCbCr601_422_10 (YCbCr 4:2:2 10-bit unpacked BT.601)" },
809 { GVSP_PIX_YCBCR601_422_12, "YCbCr601_422_12 (YCbCr 4:2:2 12-bit unpacked BT.601)" },
810 { GVSP_PIX_YCBCR709_422_10, "YCbCr709_422_10 (YCbCr 4:2:2 10-bit unpacked BT.709)" },
811 { GVSP_PIX_YCBCR709_422_12, "YCbCr709_422_12 (YCbCr 4:2:2 12-bit unpacked BT.709)" },
812 { GVSP_PIX_YCBCR422_10_CBYCRY, "YCbCr422_10_CbYCrY (YCbCr 4:2:2 10-bit unpacked)" },
813 { GVSP_PIX_YCBCR422_12_CBYCRY, "YCbCr422_12_CbYCrY (YCbCr 4:2:2 12-bit unpacked)" },
814 { GVSP_PIX_YCBCR601_422_10_CBYCRY, "YCbCr601_422_10_CbYCrY (YCbCr 4:2:2 10-bit unpacked BT.601)" },
815 { GVSP_PIX_YCBCR601_422_12_CBYCRY, "YCbCr601_422_12_CbYCrY (YCbCr 4:2:2 12-bit unpacked BT.601)" },
816 { GVSP_PIX_YCBCR709_422_10_CBYCRY, "YCbCr709_422_10_CbYCrY (YCbCr 4:2:2 10-bit unpacked BT.709)" },
817 { GVSP_PIX_YCBCR709_422_12_CBYCRY, "YCbCr709_422_12_CbYCrY (YCbCr 4:2:2 12-bit unpacked BT.709)" },
818 { GVSP_PIX_BICOLORRGBG10, "BiColorRGBG10 (Bi-color Red/Green - Blue/Green 10-bit unpacked)" },
819 { GVSP_PIX_BICOLORBGRG10, "BiColorBGRG10 (Bi-color Blue/Green - Red/Green 10-bit unpacked)" },
820 { GVSP_PIX_BICOLORRGBG12, "BiColorRGBG12 (Bi-color Red/Green - Blue/Green 12-bit unpacked)" },
821 { GVSP_PIX_BICOLORBGRG12, "BiColorBGRG12 (Bi-color Blue/Green - Red/Green 12-bit unpacked)" },
822 { GVSP_PIX_COORD3D_AC16, "Coord3D_AC16 (3D coordinate A-C 16-bit)" },
823 { GVSP_PIX_COORD3D_AC16_PLANAR, "Coord3D_AC16_Planar (3D coordinate A-C 16-bit planar)" },
824 { GVSP_PIX_YCBCR2020_422_10, "YCbCr2020_422_10 (YCbCr 4:2:2 10-bit unpacked BT.2020)" },
825 { GVSP_PIX_YCBCR2020_422_10_CBYCRY, "YCbCr2020_422_10_CbYCrY (YCbCr 4:2:2 10-bit unpacked BT.2020)" },
826 { GVSP_PIX_YCBCR2020_422_12, "YCbCr2020_422_12 (YCbCr 4:2:2 12-bit unpacked BT.2020)" },
827 { GVSP_PIX_YCBCR2020_422_12_CBYCRY, "YCbCr2020_422_12_CbYCrY (YCbCr 4:2:2 12-bit unpacked BT.2020)" },
828 { GVSP_PIX_RGB12V1PACKED, "GVSP_RGB12V1Packed (GigE Vision specific format, Red-Green-Blue 12-bit packed - variant 1)" },
829 { GVSP_PIX_BGR12P, "BGR12p (Blue-Green-Red 12-bit packed)" },
830 { GVSP_PIX_RGB12P, "RGB12p (Red-Green-Blue 12-bit packed)" },
831 { GVSP_PIX_YCBCR12P_CBYCR, "YCbCr12p_CbYCr (YCbCr 4:4:4 12-bit packed)" },
832 { GVSP_PIX_YCBCR601_12P_CBYCR, "YCbCr601_12p_CbYCr (YCbCr 4:4:4 12-bit packed BT.601)" },
833 { GVSP_PIX_YCBCR709_12P_CBYCR, "YCbCr709_12p_CbYCr (YCbCr 4:4:4 12-bit packed BT.709)" },
834 { GVSP_PIX_COORD3D_ABC12P, "Coord3D_ABC12p (3D coordinate A-B-C 12-bit packed)" },
835 { GVSP_PIX_COORD3D_ABC12P_PLANAR, "Coord3D_ABC12p_Planar (3D coordinate A-B-C 12-bit packed planar)" },
836 { GVSP_PIX_YCBCR2020_12P_CBYCR, "YCbCr2020_12p_CbYCr (YCbCr 4:4:4 12-bit packed BT.2020)" },
837 { GVSP_PIX_BGRA10P, "BGRa10p (Blue-Green-Red-alpha 10-bit packed)" },
838 { GVSP_PIX_RGBA10P, "RGBa10p (Red-Green-Blue-alpha 10-bit packed)" },
839 { GVSP_PIX_RGB10, "RGB10 (Red-Green-Blue 10-bit unpacked)" },
840 { GVSP_PIX_BGR10, "BGR10 (Blue-Green-Red 10-bit unpacked)" },
841 { GVSP_PIX_RGB12, "RGB12 (Red-Green-Blue 12-bit unpacked)" },
842 { GVSP_PIX_BGR12, "BGR12 (Blue-Green-Red 12-bit unpacked)" },
843 { GVSP_PIX_RGB10_PLANAR, "RGB10_Planar (Red-Green-Blue 10-bit unpacked planar)" },
844 { GVSP_PIX_RGB12_PLANAR, "RGB12_Planar (Red-Green-Blue 12-bit unpacked planar)" },
845 { GVSP_PIX_RGB16_PLANAR, "RGB16_Planar (Red-Green-Blue 16-bit planar)" },
846 { GVSP_PIX_RGB16, "RGB16 (Red-Green-Blue 16-bit)" },
847 { GVSP_PIX_BGR14, "BGR14 (Blue-Green-Red 14-bit unpacked)" },
848 { GVSP_PIX_BGR16, "BGR16 (Blue-Green-Red 16-bit)" },
849 { GVSP_PIX_BGRA12P, "BGRa12p (Blue-Green-Red-alpha 12-bit packed)" },
850 { GVSP_PIX_RGB14, "RGB14 (Red-Green-Blue 14-bit unpacked)" },
851 { GVSP_PIX_RGBA12P, "RGBa12p (Red-Green-Blue-alpha 12-bit packed)" },
852 { GVSP_PIX_YCBCR10_CBYCR, "YCbCr10_CbYCr (YCbCr 4:4:4 10-bit unpacked)" },
853 { GVSP_PIX_YCBCR12_CBYCR, "YCbCr12_CbYCr (YCbCr 4:4:4 12-bit unpacked)" },
854 { GVSP_PIX_YCBCR601_10_CBYCR, "YCbCr601_10_CbYCr (YCbCr 4:4:4 10-bit unpacked BT.601)" },
855 { GVSP_PIX_YCBCR601_12_CBYCR, "YCbCr601_12_CbYCr (YCbCr 4:4:4 12-bit unpacked BT.601)" },
856 { GVSP_PIX_YCBCR709_10_CBYCR, "YCbCr709_10_CbYCr (YCbCr 4:4:4 10-bit unpacked BT.709)" },
857 { GVSP_PIX_YCBCR709_12_CBYCR, "YCbCr709_12_CbYCr (YCbCr 4:4:4 12-bit unpacked BT.709)" },
858 { GVSP_PIX_COORD3D_ABC16, "Coord3D_ABC16 (3D coordinate A-B-C 16-bit)" },
859 { GVSP_PIX_COORD3D_ABC16_PLANAR, "Coord3D_ABC16_Planar (3D coordinate A-B-C 16-bit planar)" },
860 { GVSP_PIX_YCBCR2020_10_CBYCR, "YCbCr2020_10_CbYCr (YCbCr 4:4:4 10-bit unpacked BT.2020)" },
861 { GVSP_PIX_YCBCR2020_12_CBYCR, "YCbCr2020_12_CbYCr (YCbCr 4:4:4 12-bit unpacked BT.2020)" },
862 { GVSP_PIX_BGRA10, "BGRa10 (Blue-Green-Red-alpha 10-bit unpacked)" },
863 { GVSP_PIX_BGRA12, "BGRa12 (Blue-Green-Red-alpha 12-bit unpacked)" },
864 { GVSP_PIX_BGRA14, "BGRa14 (Blue-Green-Red-alpha 14-bit unpacked)" },
865 { GVSP_PIX_BGRA16, "BGRa16 (Blue-Green-Red-alpha 16-bit)" },
866 { GVSP_PIX_RGBA10, "RGBa10 (Red-Green-Blue-alpha 10-bit unpacked)" },
867 { GVSP_PIX_RGBA12, "RGBa12 (Red-Green-Blue-alpha 12-bit unpacked)" },
868 { GVSP_PIX_RGBA14, "RGBa14 (Red-Green-Blue-alpha 14-bit unpacked)" },
869 { GVSP_PIX_RGBA16, "RGBa16 (Red-Green-Blue-alpha 16-bit)" },
870 { GVSP_PIX_COORD3D_AC32F, "Coord3D_AC32f (3D coordinate A-C 32-bit floating point)" },
871 { GVSP_PIX_COORD3D_AC32F_PLANAR, "Coord3D_AC32f_Planar (3D coordinate A-C 32-bit floating point planar)" },
872 { GVSP_PIX_COORD3D_ABC32F, "Coord3D_ABC32f (3D coordinate A-B-C 32-bit floating point)" },
873 { GVSP_PIX_COORD3D_ABC32F_PLANAR, "Coord3D_ABC32f_Planar (3D coordinate A-B-C 32-bit floating point planar)" },
874 { 0, NULL }
877 static value_string_ext pixeltypenames_ext = VALUE_STRING_EXT_INIT(pixeltypenames);
879 static const value_string colornames[] = {
880 { GVSP_PIX_MONO >> 24, "Mono" },
881 { GVSP_PIX_COLOR >> 24, "Color" },
882 { GVSP_PIX_CUSTOM >> 24, "Custom" },
883 { 0, NULL }
886 static const true_false_string zonedirectionnames = {
887 "Bottom Up",
888 "Top-Down"
891 /* GEV 2.2 */
892 static const value_string gendc_payload_descriptor_flag_values[] = {
893 { 0, "No Descriptor Data" },
894 { 1, "Final Descriptor Data" },
895 { 2, "Final Descriptor Data With Non-Descriptor Data" },
896 { 3, "Preliminary Descriptor Data" },
897 { 0, NULL }
900 /* GEV 2.2 */
901 static const value_string gendc_header_type_values[] = {
902 { GENDC_HEADER_TYPE_CONTAINER , "Container" },
903 { GENDC_HEADER_TYPE_COMPONENT_HEADER , "Component Header" },
904 { GENDC_HEADER_TYPE_PART_CHUNK, "Chunk" },
905 { GENDC_HEADER_TYPE_PART_XML, "GenICam XML" },
906 { GENDC_HEADER_TYPE_PART_1D, "1D Array" },
907 { GENDC_HEADER_TYPE_PART_2D, "2D Array" },
908 { GENDC_HEADER_TYPE_PART_2D_JPEG, "JPEG Image" },
909 { GENDC_HEADER_TYPE_PART_2D_JPEG2000, "JPEG 2000 Image" },
910 { GENDC_HEADER_TYPE_PART_2D_H264, "H.264 Image" },
911 { 0, NULL }
914 /* GEV 2.2 */
915 static const val64_string gendc_component_typeid_values[] = {
916 { GENDC_COMPONENT_TYPEID_UNDEFINED , "Undefined" },
917 { GENDC_COMPONENT_TYPEID_INTENSITY , "Intensity" },
918 { GENDC_COMPONENT_TYPEID_INFRARED , "Infrared" },
919 { GENDC_COMPONENT_TYPEID_ULTRAVIOLET , "Ultraviolet" },
920 { GENDC_COMPONENT_TYPEID_RANGE , "Range" },
921 { GENDC_COMPONENT_TYPEID_REFLECTANCE , "Reflectance" },
922 { GENDC_COMPONENT_TYPEID_CONFIDENCE , "Confidence" },
923 { GENDC_COMPONENT_TYPEID_SCATTER , "Scatter" },
924 { GENDC_COMPONENT_TYPEID_DISPARITY , "Disparity" },
925 { GENDC_COMPONENT_TYPEID_MULTISPECTRAL , "Multispectral" },
926 { GENDC_COMPONENT_TYPEID_METADATA , "Metadata" },
927 { GENDC_COMPONENT_TYPEID_RESERVED , "Reserved" },
928 { 0, NULL }
931 static int hf_gvsp_status;
932 static int hf_gvsp_blockid16;
933 static int hf_gvsp_flags;
934 static int hf_gvsp_flagdevicespecific0;
935 static int hf_gvsp_flagdevicespecific1;
936 static int hf_gvsp_flagdevicespecific2;
937 static int hf_gvsp_flagdevicespecific3;
938 static int hf_gvsp_flagdevicespecific4;
939 static int hf_gvsp_flagdevicespecific5;
940 static int hf_gvsp_flagdevicespecific6;
941 static int hf_gvsp_flagdevicespecific7;
942 static int hf_gvsp_flagresendrangeerror;
943 static int hf_gvsp_flagpreviousblockdropped;
944 static int hf_gvsp_flagpacketresend;
945 static int hf_gvsp_format;
946 static int hf_gvsp_packetid24;
947 static int hf_gvsp_blockid64;
948 static int hf_gvsp_packetid32;
949 static int hf_gvsp_payloadtype;
950 static int hf_gvsp_payloaddata;
951 static int hf_gvsp_timestamp;
952 static int hf_gvsp_pixelformat;
953 static int hf_gvsp_sizex;
954 static int hf_gvsp_sizey;
955 static int hf_gvsp_offsetx;
956 static int hf_gvsp_offsety;
957 static int hf_gvsp_paddingx;
958 static int hf_gvsp_paddingy;
959 static int hf_gvsp_payloaddatasize;
960 static int hf_gvsp_pixelcolor;
961 static int hf_gvsp_pixeloccupy;
962 static int hf_gvsp_pixelid;
963 static int hf_gvsp_filename;
964 static int hf_gvsp_payloadlength;
965 static int hf_gvsp_fieldinfo;
966 static int hf_gvsp_fieldid;
967 static int hf_gvsp_fieldcount;
968 static int hf_gvsp_genericflags;
969 static int hf_gvsp_timestamptickfrequency;
970 static int hf_gvsp_dataformat;
971 static int hf_gvsp_packetizationmode;
972 static int hf_gvsp_packetsize;
973 static int hf_gvsp_profileidc;
974 static int hf_gvsp_cs;
975 static int hf_gvsp_cs0;
976 static int hf_gvsp_cs1;
977 static int hf_gvsp_cs2;
978 static int hf_gvsp_cs3;
979 static int hf_gvsp_levelidc;
980 static int hf_gvsp_sropinterleavingdepth;
981 static int hf_gvsp_sropmaxdondiff;
982 static int hf_gvsp_sropdeintbufreq;
983 static int hf_gvsp_sropinitbuftime;
984 static int hf_gvsp_add_zones;
985 static int hf_gvsp_zoneinfo;
986 static int hf_gvsp_zoneid;
987 static int hf_gvsp_endofzone;
988 static int hf_gvsp_addressoffset;
989 static int hf_gvsp_sc_zone_direction;
990 static int hf_gvsp_sc_zone0_direction;
991 static int hf_gvsp_sc_zone1_direction;
992 static int hf_gvsp_sc_zone2_direction;
993 static int hf_gvsp_sc_zone3_direction;
994 static int hf_gvsp_sc_zone4_direction;
995 static int hf_gvsp_sc_zone5_direction;
996 static int hf_gvsp_sc_zone6_direction;
997 static int hf_gvsp_sc_zone7_direction;
998 static int hf_gvsp_sc_zone8_direction;
999 static int hf_gvsp_sc_zone9_direction;
1000 static int hf_gvsp_sc_zone10_direction;
1001 static int hf_gvsp_sc_zone11_direction;
1002 static int hf_gvsp_sc_zone12_direction;
1003 static int hf_gvsp_sc_zone13_direction;
1004 static int hf_gvsp_sc_zone14_direction;
1005 static int hf_gvsp_sc_zone15_direction;
1006 static int hf_gvsp_sc_zone16_direction;
1007 static int hf_gvsp_sc_zone17_direction;
1008 static int hf_gvsp_sc_zone18_direction;
1009 static int hf_gvsp_sc_zone19_direction;
1010 static int hf_gvsp_sc_zone20_direction;
1011 static int hf_gvsp_sc_zone21_direction;
1012 static int hf_gvsp_sc_zone22_direction;
1013 static int hf_gvsp_sc_zone23_direction;
1014 static int hf_gvsp_sc_zone24_direction;
1015 static int hf_gvsp_sc_zone25_direction;
1016 static int hf_gvsp_sc_zone26_direction;
1017 static int hf_gvsp_sc_zone27_direction;
1018 static int hf_gvsp_sc_zone28_direction;
1019 static int hf_gvsp_sc_zone29_direction;
1020 static int hf_gvsp_sc_zone30_direction;
1021 static int hf_gvsp_sc_zone31_direction;
1022 static int hf_gvsp_numparts;
1023 static int hf_gvsp_multipart_data_type;
1024 static int hf_gvsp_partlength;
1025 static int hf_gvsp_multi_part_source_id;
1026 static int hf_gvsp_data_purpose_id;
1027 static int hf_gvsp_region_id;
1028 static int hf_gvsp_endofpart;
1029 static int hf_gvsp_add_zones_multipart;
1030 static int hf_gvsp_zoneinfo_multipart;
1031 static int hf_gvsp_multi_part_part_id;
1032 static int hf_gvsp_data_type_specific;
1033 static int hf_gvsp_chunk_data_payload_length_hex;
1034 static int hf_gvsp_chunk_layout_id_hex;
1036 /* Added for 2.2 support */
1037 static int hf_gvsp_gendc_leader_descriptor_size_v2_2;
1038 static int hf_gvsp_gendc_leader_flags_v2_2;
1039 static int hf_gvsp_gendc_leader_flags_preliminary_descriptor_v2_2;
1040 static int hf_gvsp_gendc_leader_flags_reserved_v2_2;
1041 static int hf_gvsp_gendc_payload_data_size_v2_2;
1042 static int hf_gvsp_gendc_payload_data_destination_offset_v2_2;
1043 static int hf_gvsp_gendc_payload_data_flags_v2_2;
1044 static int hf_gvsp_gendc_payload_data_flag_descriptor_flags_v2_2;
1045 static int hf_gvsp_gendc_payload_data_flag_start_of_descriptor_data_v2_2;
1046 static int hf_gvsp_gendc_payload_data_flag_end_of_descriptor_data_v2_2;
1047 static int hf_gvsp_gendc_payload_data_flags_reserved_v2_2;
1048 static int hf_gvsp_gendc_payload_flow_flags_v2_2;
1049 static int hf_gvsp_gendc_payload_flow_flag_first_packet_v2_2;
1050 static int hf_gvsp_gendc_payload_flow_flag_last_packet_v2_2;
1051 static int hf_gvsp_gendc_payload_flow_id_v2_2;
1052 static int hf_gvsp_gendc_header_size_v2_2;
1053 static int hf_gvsp_gendc_header_type_v2_2;
1054 static int hf_gvsp_gendc_header_reserved_1_byte_v2_2;
1055 static int hf_gvsp_gendc_header_reserved_2_bytes_v2_2;
1056 static int hf_gvsp_gendc_header_reserved_4_bytes_v2_2;
1057 static int hf_gvsp_gendc_container_header_signature_v2_2;
1058 static int hf_gvsp_gendc_container_header_version_major_v2_2;
1059 static int hf_gvsp_gendc_container_header_version_minor_v2_2;
1060 static int hf_gvsp_gendc_container_header_version_sub_minor_v2_2;
1061 static int hf_gvsp_gendc_container_header_flags_v2_2;
1062 static int hf_gvsp_gendc_container_header_flags_timestamp_ptp_v2_2;
1063 static int hf_gvsp_gendc_container_header_flags_component_invalid_v2_2;
1064 static int hf_gvsp_gendc_container_header_flags_reserved_v2_2;
1065 static int hf_gvsp_gendc_container_header_id_v2_2;
1066 static int hf_gvsp_gendc_container_header_variable_fields_v2_2;
1067 static int hf_gvsp_gendc_container_header_variable_fields_data_size_v2_2;
1068 static int hf_gvsp_gendc_container_header_variable_fields_size_x_v2_2;
1069 static int hf_gvsp_gendc_container_header_variable_fields_size_y_v2_2;
1070 static int hf_gvsp_gendc_container_header_variable_fields_region_offset_v2_2;
1071 static int hf_gvsp_gendc_container_header_variable_fields_format_v2_2;
1072 static int hf_gvsp_gendc_container_header_variable_fields_timestamp_v2_2;
1073 static int hf_gvsp_gendc_container_header_variable_fields_component_count_v2_2;
1074 static int hf_gvsp_gendc_container_header_variable_fields_component_invalid_v2_2;
1075 static int hf_gvsp_gendc_container_header_variable_fields_reserved_v2_2;
1076 static int hf_gvsp_gendc_container_header_data_size_v2_2;
1077 static int hf_gvsp_gendc_container_header_data_offset_v2_2;
1078 static int hf_gvsp_gendc_container_header_descriptor_size_v2_2;
1079 static int hf_gvsp_gendc_container_header_component_count_v2_2;
1080 static int hf_gvsp_gendc_container_header_component_offset_v2_2;
1081 static int hf_gvsp_gendc_component_header_flags_v2_2;
1082 static int hf_gvsp_gendc_component_header_flags_invalid_v2_2;
1083 static int hf_gvsp_gendc_component_header_flags_reserved_v2_2;
1084 static int hf_gvsp_gendc_component_header_group_id_v2_2;
1085 static int hf_gvsp_gendc_component_header_source_id_v2_2;
1086 static int hf_gvsp_gendc_component_header_region_id_v2_2;
1087 static int hf_gvsp_gendc_component_header_type_id_v2_2;
1088 static int hf_gvsp_gendc_component_header_part_count_v2_2;
1089 static int hf_gvsp_gendc_component_header_part_offset_v2_2;
1090 static int hf_gvsp_gendc_part_header_flags_xml_reserved1_v2_2;
1091 static int hf_gvsp_gendc_part_header_flags_xml_zip_v2_2;
1092 static int hf_gvsp_gendc_part_header_flags_xml_chunk_v2_2;
1093 static int hf_gvsp_gendc_part_header_flags_xml_reserved2_v2_2;
1094 static int hf_gvsp_gendc_part_header_flags_v2_2;
1095 static int hf_gvsp_gendc_part_header_flow_offset_v2_2;
1096 static int hf_gvsp_gendc_part_header_type_specific_info_v2_2;
1097 static int hf_gvsp_gendc_part_header_1D_size_v2_2;
1098 static int hf_gvsp_gendc_part_header_1D_padding_v2_2;
1100 static int * const pixelformat_fields[] = {
1101 &hf_gvsp_pixelcolor,
1102 &hf_gvsp_pixeloccupy,
1103 &hf_gvsp_pixelid,
1104 NULL
1107 static int * const fieldinfo_fields[] = {
1108 &hf_gvsp_fieldid,
1109 &hf_gvsp_fieldcount,
1110 NULL
1113 static int * const cs_fields[] = {
1114 &hf_gvsp_cs0,
1115 &hf_gvsp_cs1,
1116 &hf_gvsp_cs2,
1117 &hf_gvsp_cs3,
1118 NULL
1121 static int * const sc_zone_direction_fields[] = {
1122 &hf_gvsp_sc_zone0_direction,
1123 &hf_gvsp_sc_zone1_direction,
1124 &hf_gvsp_sc_zone2_direction,
1125 &hf_gvsp_sc_zone3_direction,
1126 &hf_gvsp_sc_zone4_direction,
1127 &hf_gvsp_sc_zone5_direction,
1128 &hf_gvsp_sc_zone6_direction,
1129 &hf_gvsp_sc_zone7_direction,
1130 &hf_gvsp_sc_zone8_direction,
1131 &hf_gvsp_sc_zone9_direction,
1132 &hf_gvsp_sc_zone10_direction,
1133 &hf_gvsp_sc_zone11_direction,
1134 &hf_gvsp_sc_zone12_direction,
1135 &hf_gvsp_sc_zone13_direction,
1136 &hf_gvsp_sc_zone14_direction,
1137 &hf_gvsp_sc_zone15_direction,
1138 &hf_gvsp_sc_zone16_direction,
1139 &hf_gvsp_sc_zone17_direction,
1140 &hf_gvsp_sc_zone18_direction,
1141 &hf_gvsp_sc_zone19_direction,
1142 &hf_gvsp_sc_zone20_direction,
1143 &hf_gvsp_sc_zone21_direction,
1144 &hf_gvsp_sc_zone22_direction,
1145 &hf_gvsp_sc_zone23_direction,
1146 &hf_gvsp_sc_zone24_direction,
1147 &hf_gvsp_sc_zone25_direction,
1148 &hf_gvsp_sc_zone26_direction,
1149 &hf_gvsp_sc_zone27_direction,
1150 &hf_gvsp_sc_zone28_direction,
1151 &hf_gvsp_sc_zone29_direction,
1152 &hf_gvsp_sc_zone30_direction,
1153 &hf_gvsp_sc_zone31_direction,
1154 NULL
1157 static int * const zoneinfo_fields[] = {
1158 &hf_gvsp_zoneid,
1159 &hf_gvsp_endofzone,
1160 NULL
1163 static int * const zoneinfo_multipart_fields[] = {
1164 &hf_gvsp_endofpart,
1165 &hf_gvsp_zoneid,
1166 &hf_gvsp_endofzone,
1167 NULL
1170 static int * const flags_fields[] = {
1171 &hf_gvsp_flagdevicespecific0,
1172 &hf_gvsp_flagdevicespecific1,
1173 &hf_gvsp_flagdevicespecific2,
1174 &hf_gvsp_flagdevicespecific3,
1175 &hf_gvsp_flagdevicespecific4,
1176 &hf_gvsp_flagdevicespecific5,
1177 &hf_gvsp_flagdevicespecific6,
1178 &hf_gvsp_flagdevicespecific7,
1179 &hf_gvsp_flagresendrangeerror,
1180 &hf_gvsp_flagpreviousblockdropped,
1181 &hf_gvsp_flagpacketresend,
1182 NULL
1185 static int * const gendc_leader_flags_fields[] = {
1186 &hf_gvsp_gendc_leader_flags_reserved_v2_2,
1187 &hf_gvsp_gendc_leader_flags_preliminary_descriptor_v2_2,
1188 NULL
1191 static int * const gendc_payload_data_flags_fields[] = {
1192 &hf_gvsp_gendc_payload_data_flag_descriptor_flags_v2_2,
1193 &hf_gvsp_gendc_payload_data_flag_start_of_descriptor_data_v2_2,
1194 &hf_gvsp_gendc_payload_data_flag_end_of_descriptor_data_v2_2,
1195 &hf_gvsp_gendc_payload_data_flags_reserved_v2_2,
1196 NULL
1199 static int * const gendc_payload_flow_flags_fields[] = {
1200 &hf_gvsp_gendc_payload_flow_flag_first_packet_v2_2,
1201 &hf_gvsp_gendc_payload_flow_flag_last_packet_v2_2,
1202 NULL
1205 static int * const gendc_container_header_flags_fields[] = {
1206 &hf_gvsp_gendc_container_header_flags_timestamp_ptp_v2_2,
1207 &hf_gvsp_gendc_container_header_flags_component_invalid_v2_2,
1208 &hf_gvsp_gendc_container_header_flags_reserved_v2_2,
1209 NULL
1212 static int * const gendc_container_header_variable_fields_fields[] = {
1213 &hf_gvsp_gendc_container_header_variable_fields_data_size_v2_2,
1214 &hf_gvsp_gendc_container_header_variable_fields_size_x_v2_2,
1215 &hf_gvsp_gendc_container_header_variable_fields_size_y_v2_2,
1216 &hf_gvsp_gendc_container_header_variable_fields_region_offset_v2_2,
1217 &hf_gvsp_gendc_container_header_variable_fields_format_v2_2,
1218 &hf_gvsp_gendc_container_header_variable_fields_timestamp_v2_2,
1219 &hf_gvsp_gendc_container_header_variable_fields_component_count_v2_2,
1220 &hf_gvsp_gendc_container_header_variable_fields_component_invalid_v2_2,
1221 &hf_gvsp_gendc_container_header_variable_fields_reserved_v2_2,
1222 NULL
1225 static int * const gendc_component_header_flags_fields[] = {
1226 &hf_gvsp_gendc_component_header_flags_invalid_v2_2,
1227 &hf_gvsp_gendc_component_header_flags_reserved_v2_2,
1228 NULL
1231 static int * const gendc_part_header_flags_fields[] = {
1232 &hf_gvsp_gendc_part_header_flags_xml_reserved1_v2_2,
1233 &hf_gvsp_gendc_part_header_flags_xml_zip_v2_2,
1234 &hf_gvsp_gendc_part_header_flags_xml_chunk_v2_2,
1235 &hf_gvsp_gendc_part_header_flags_xml_reserved2_v2_2,
1236 NULL
1240 \brief Dissects the image dimensions
1243 static void dissect_image_dimensions(proto_tree *gvsp_tree, tvbuff_t *tvb, int offset, const unsigned encoding)
1245 /* Size X */
1246 proto_tree_add_item(gvsp_tree, hf_gvsp_sizex, tvb, offset, 4, encoding);
1248 /* Size Y */
1249 proto_tree_add_item(gvsp_tree, hf_gvsp_sizey, tvb, offset + 4, 4, encoding);
1251 /* Padding X */
1252 proto_tree_add_item(gvsp_tree, hf_gvsp_paddingx, tvb, offset + 8, 2, encoding);
1254 /* Padding Y */
1255 proto_tree_add_item(gvsp_tree, hf_gvsp_paddingy, tvb, offset + 10, 2, encoding);
1259 \brief Dissects the image AOI
1262 static void dissect_image_aoi(proto_tree *gvsp_tree, tvbuff_t *tvb, int offset)
1264 /* Size X */
1265 proto_tree_add_item(gvsp_tree, hf_gvsp_sizex, tvb, offset, 4, ENC_BIG_ENDIAN);
1267 /* Size Y */
1268 proto_tree_add_item(gvsp_tree, hf_gvsp_sizey, tvb, offset + 4, 4, ENC_BIG_ENDIAN);
1270 /* Offset X */
1271 proto_tree_add_item(gvsp_tree, hf_gvsp_offsetx, tvb, offset + 8, 4, ENC_BIG_ENDIAN);
1273 /* Offset Y */
1274 proto_tree_add_item(gvsp_tree, hf_gvsp_offsety, tvb, offset + 12, 4, ENC_BIG_ENDIAN);
1276 /* Padding X */
1277 proto_tree_add_item(gvsp_tree, hf_gvsp_paddingx, tvb, offset + 16, 2, ENC_BIG_ENDIAN);
1279 /* Padding Y */
1280 proto_tree_add_item(gvsp_tree, hf_gvsp_paddingy, tvb, offset + 18, 2, ENC_BIG_ENDIAN);
1284 \brief Dissects the image leader
1287 static int dissect_image_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1289 /* Field info */
1290 proto_tree_add_bitmask(gvsp_tree, tvb, offset, hf_gvsp_fieldinfo,
1291 ett_gvsp_fieldinfo, fieldinfo_fields, ENC_BIG_ENDIAN);
1293 /* Payload type */
1294 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1296 /* Timestamp */
1297 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamp, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1299 /* Pixel format */
1300 proto_tree_add_bitmask(gvsp_tree, tvb, offset + 12, hf_gvsp_pixelformat, ett_gvsp_pixelformat,
1301 pixelformat_fields, ENC_BIG_ENDIAN);
1303 /* AOI */
1304 dissect_image_aoi(gvsp_tree, tvb, offset + 16);
1306 /* Return dissected byte count (for all-in dissection) */
1307 return 36;
1312 \brief Dissects the image trailer
1315 static int dissect_image_trailer(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1317 /* Payload type */
1318 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1320 /* Size Y */
1321 proto_tree_add_item(gvsp_tree, hf_gvsp_sizey, tvb, offset + 4, 4, ENC_BIG_ENDIAN);
1323 /* Return dissected byte count (for all-in and extended chunk mode dissection) */
1324 return 8;
1329 \brief Dissects the multi-part trailer
1332 static int dissect_multi_part_trailer(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1334 int part_count = tvb_reported_length_remaining(tvb, offset + 4) / GVSP_SIZE_OF_PART_INFO_TRAILER;
1335 int i = 0;
1336 int j = 0;
1338 /* Payload type */
1339 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1341 for (i = 0; i < part_count; i++)
1343 uint16_t multi_part_data_type = tvb_get_ntohs(tvb, offset + 4 + i * GVSP_SIZE_OF_PART_INFO_TRAILER);
1345 /* Add a tree per part */
1346 proto_tree* gvsp_part_tree = proto_tree_add_subtree(gvsp_tree, tvb, offset + 4 + i * GVSP_SIZE_OF_PART_INFO_TRAILER, GVSP_SIZE_OF_PART_INFO_TRAILER, ett_gvsp_partinfo_trailer, NULL, "Part Specific Data");
1348 /* Multi-Part data type */
1349 proto_tree_add_item(gvsp_part_tree, hf_gvsp_multipart_data_type, tvb, offset + 4 + i * GVSP_SIZE_OF_PART_INFO_TRAILER, 2, ENC_BIG_ENDIAN);
1351 /* Part Length */
1352 proto_tree_add_item(gvsp_part_tree, hf_gvsp_partlength, tvb, offset + 6 + i * GVSP_SIZE_OF_PART_INFO_TRAILER, 6, ENC_BIG_ENDIAN);
1354 switch( multi_part_data_type )
1356 case GVSP_MULTIPART_DATA_TYPE_2DIMAGE:
1357 case GVSP_MULTIPART_DATA_TYPE_2DPLANEBIPLANAR:
1358 case GVSP_MULTIPART_DATA_TYPE_2DPLANETRIPLANAR:
1359 case GVSP_MULTIPART_DATA_TYPE_2DPLANEQUADPLANAR:
1360 case GVSP_MULTIPART_DATA_TYPE_3DIMAGE:
1361 case GVSP_MULTIPART_DATA_TYPE_3DPLANEBIPLANAR:
1362 case GVSP_MULTIPART_DATA_TYPE_3DPLANETRIPLANAR:
1363 case GVSP_MULTIPART_DATA_TYPE_3DPLANEQUADPLANAR:
1364 case GVSP_MULTIPART_DATA_TYPE_CONFIDENCEMAP:
1365 /* Size Y */
1366 proto_tree_add_item(gvsp_part_tree, hf_gvsp_sizey, tvb, offset + 12 + i * GVSP_SIZE_OF_PART_INFO_TRAILER, 4, ENC_BIG_ENDIAN);
1367 break;
1368 default:
1369 /* 2 DWORDS of data type specific data */
1370 for (j = 0; j < 2; j++)
1372 proto_tree_add_item(gvsp_part_tree, hf_gvsp_data_type_specific, tvb, offset + 12 + i * GVSP_SIZE_OF_PART_INFO_TRAILER + 4 * j, 4, ENC_BIG_ENDIAN);
1374 break;
1378 /* Return dissected byte count (for all-in and extended chunk mode dissection) */
1379 return 4 + part_count * GVSP_SIZE_OF_PART_INFO_TRAILER;
1384 \brief Dissects the raw data leader
1387 static int dissect_raw_data_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1389 /* Payload type */
1390 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1392 /* Timestamp */
1393 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamp, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1395 /* Payload data size */
1396 proto_tree_add_item(gvsp_tree, hf_gvsp_payloaddatasize, tvb, offset + 12, 8, ENC_BIG_ENDIAN);
1398 /* Return dissected byte count (for all-in dissection) */
1399 return 20;
1404 \brief Dissects a file leader
1407 static int dissect_file_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1409 unsigned file_length = 0;
1411 /* Payload type */
1412 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1414 /* Timestamp */
1415 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamp, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1417 /* Payload data size */
1418 proto_tree_add_item(gvsp_tree, hf_gvsp_payloaddatasize, tvb, offset + 12, 8, ENC_BIG_ENDIAN);
1420 /* Filename */
1421 file_length = tvb_strsize(tvb, offset + 20);
1422 proto_tree_add_item(gvsp_tree, hf_gvsp_filename, tvb, offset + 20, file_length, ENC_ASCII);
1424 if (20 + file_length > INT_MAX)
1425 return -1;
1427 /* Return dissected byte count (for all-in dissection) */
1428 return (int)(20 + file_length);
1433 \brief Dissects a chunk data leader
1436 static int dissect_chunk_data_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1438 /* Payload type */
1439 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1441 /* Timestamp */
1442 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamp, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1444 /* Return dissected byte count (for all-in dissection) */
1445 return 12;
1450 \brief Dissects a chunk data trailer
1453 static int dissect_chunk_data_trailer(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1455 /* Payload type */
1456 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1458 /* Payload data length */
1459 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadlength, tvb, offset + 4, 4, ENC_BIG_ENDIAN);
1461 /* Return dissected byte count (for all-in dissection) */
1462 return 8;
1467 \brief Dissects extended chunk data leader
1470 static int dissect_extended_chunk_data_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1472 /* Field info */
1473 proto_tree_add_bitmask(gvsp_tree, tvb, offset, hf_gvsp_fieldinfo,
1474 ett_gvsp_fieldinfo, fieldinfo_fields, ENC_BIG_ENDIAN);
1475 /* Generic flags */
1476 proto_tree_add_item(gvsp_tree, hf_gvsp_genericflags, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
1478 /* Payload type */
1479 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1481 /* Timestamp */
1482 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamp, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1484 /* Pixel format */
1485 proto_tree_add_bitmask(gvsp_tree, tvb, offset + 12, hf_gvsp_pixelformat, ett_gvsp_pixelformat,
1486 pixelformat_fields, ENC_BIG_ENDIAN);
1488 /* AOI */
1489 dissect_image_aoi(gvsp_tree, tvb, offset + 16);
1491 /* Return dissected byte count (for all-in dissection) */
1492 return 36;
1497 \brief Dissects extended chunk data trailer
1500 static int dissect_extended_chunk_data_trailer(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1502 /* Payload type */
1503 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1505 /* Payload data length */
1506 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadlength, tvb, offset + 4, 4, ENC_BIG_ENDIAN);
1508 /* Size Y */
1509 proto_tree_add_item(gvsp_tree, hf_gvsp_sizey, tvb, offset + 8, 4, ENC_BIG_ENDIAN);
1511 /* Chunk layout ID */
1512 proto_tree_add_item(gvsp_tree, hf_gvsp_chunk_layout_id_hex, tvb, offset + 12, 4, ENC_BIG_ENDIAN);
1514 /* Return dissected byte count (for all-in dissection) */
1515 return 16;
1520 \brief Dissects a JPEG leader
1523 static int dissect_jpeg_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1525 /* Field info */
1526 proto_tree_add_bitmask(gvsp_tree, tvb, offset, hf_gvsp_fieldinfo,
1527 ett_gvsp_fieldinfo, fieldinfo_fields, ENC_BIG_ENDIAN);
1529 /* Generic flags */
1530 proto_tree_add_item(gvsp_tree, hf_gvsp_genericflags, tvb, offset + 1, 1, ENC_BIG_ENDIAN);
1532 /* Payload type */
1533 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1535 /* Timestamp */
1536 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamp, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1538 /* Payload data size */
1539 proto_tree_add_item(gvsp_tree, hf_gvsp_payloaddatasize, tvb, offset + 12, 8, ENC_BIG_ENDIAN);
1541 /* Timestamp tick frequency */
1542 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamptickfrequency, tvb, offset + 20, 8, ENC_BIG_ENDIAN);
1544 /* Data format */
1545 proto_tree_add_item(gvsp_tree, hf_gvsp_dataformat, tvb, offset + 28, 4, ENC_BIG_ENDIAN);
1547 /* Return dissected byte count (for all-in dissection) */
1548 return 32;
1553 \brief Dissects a H264 leader
1556 static void dissect_h264_leader_common(proto_tree *gvsp_tree, tvbuff_t *tvb, int offset, const unsigned encoding)
1558 /* profile_idc */
1559 proto_tree_add_item(gvsp_tree, hf_gvsp_profileidc, tvb, offset, 1, encoding);
1561 /* cs0, 1, 2 ,3 */
1562 proto_tree_add_bitmask(gvsp_tree, tvb, offset + 1, hf_gvsp_cs, ett_gvsp_cs,
1563 cs_fields, encoding);
1565 /* level_idc */
1566 proto_tree_add_item(gvsp_tree, hf_gvsp_levelidc, tvb, offset + 2, 1, encoding);
1568 /* srop_interleaving_depth */
1569 proto_tree_add_item(gvsp_tree, hf_gvsp_sropinterleavingdepth, tvb, offset + 3, 2, encoding);
1571 /* srop_max_don_diff */
1572 proto_tree_add_item(gvsp_tree, hf_gvsp_sropmaxdondiff, tvb, offset + 5, 2, encoding);
1574 /* srop_deint_buf_req */
1575 proto_tree_add_item(gvsp_tree, hf_gvsp_sropdeintbufreq, tvb, offset + 7, 4, encoding);
1577 /* srop_init_buf_time */
1578 proto_tree_add_item(gvsp_tree, hf_gvsp_sropinitbuftime, tvb, offset + 11, 4, encoding);
1581 static int dissect_h264_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1583 /* Field info */
1584 proto_tree_add_bitmask(gvsp_tree, tvb, offset, hf_gvsp_fieldinfo,
1585 ett_gvsp_fieldinfo, fieldinfo_fields, ENC_BIG_ENDIAN);
1587 /* Payload type */
1588 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1590 /* Payload data size */
1591 proto_tree_add_item(gvsp_tree, hf_gvsp_payloaddatasize, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1593 /* packetization_mode */
1594 proto_tree_add_item(gvsp_tree, hf_gvsp_packetizationmode, tvb, offset + 13, 1, ENC_BIG_ENDIAN);
1596 /* packet_size */
1597 proto_tree_add_item(gvsp_tree, hf_gvsp_packetsize, tvb, offset + 14, 2, ENC_BIG_ENDIAN);
1599 dissect_h264_leader_common(gvsp_tree, tvb, offset + 17, ENC_BIG_ENDIAN);
1601 /* Return dissected byte count (for all-in dissection) */
1602 return 32;
1607 \brief Dissects the multi-zone image leader
1610 static int dissect_multizone_image_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1612 /* Field info */
1613 proto_tree_add_bitmask(gvsp_tree, tvb, offset, hf_gvsp_fieldinfo,
1614 ett_gvsp_fieldinfo, fieldinfo_fields, ENC_BIG_ENDIAN);
1615 /* Payload type */
1616 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1618 /* Timestamp */
1619 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamp, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1621 /* Zone direction */
1622 proto_tree_add_bitmask(gvsp_tree, tvb, offset + 12, hf_gvsp_sc_zone_direction,
1623 ett_gvsp_sc_zone_direction, sc_zone_direction_fields, ENC_BIG_ENDIAN);
1625 /* Pixel format */
1626 proto_tree_add_bitmask(gvsp_tree, tvb, offset + 16, hf_gvsp_pixelformat, ett_gvsp_pixelformat,
1627 pixelformat_fields, ENC_BIG_ENDIAN);
1629 /* AOI */
1630 dissect_image_aoi(gvsp_tree, tvb, offset + 20);
1632 /* Return dissected byte count (for all-in dissection) */
1633 return 40;
1638 \brief Dissects the multi-part leader
1641 static int dissect_multi_part_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1643 /* Get the number of parts from the header. As we are already looking at the beginning of the sixth DWORD here we must step back */
1644 int part_count_from_leader = tvb_get_uint8(tvb, offset - 13);
1645 int part_count_from_remaining_bytes = tvb_reported_length_remaining(tvb, offset + 12) / GVSP_SIZE_OF_PART_INFO_LEADER;
1646 /* In case the leader contains incorrect data rely on the number of reported bytes instead */
1647 int part_count = part_count_from_leader <= part_count_from_remaining_bytes ? part_count_from_leader : part_count_from_remaining_bytes;
1648 int i = 0;
1649 int j = 0;
1651 /* Payload type */
1652 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1654 /* Timestamp */
1655 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamp, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1657 for (i = 0; i < part_count; i++)
1659 uint16_t multi_part_data_type = tvb_get_ntohs(tvb, offset + 12 + i * GVSP_SIZE_OF_PART_INFO_LEADER);
1660 /* Add a tree per part */
1661 proto_tree* gvsp_part_tree = proto_tree_add_subtree(gvsp_tree, tvb, offset + 12 + i * GVSP_SIZE_OF_PART_INFO_LEADER, GVSP_SIZE_OF_PART_INFO_LEADER,
1662 ett_gvsp_partinfo_leader, NULL, "Part Specific Data");
1664 /* Multi-Part data type */
1665 proto_tree_add_item(gvsp_part_tree, hf_gvsp_multipart_data_type, tvb, offset + 12 + i * GVSP_SIZE_OF_PART_INFO_LEADER, 2, ENC_BIG_ENDIAN);
1667 /* Part Length */
1668 proto_tree_add_item(gvsp_part_tree, hf_gvsp_partlength, tvb, offset + 14 + i * GVSP_SIZE_OF_PART_INFO_LEADER, 6, ENC_BIG_ENDIAN);
1670 switch( multi_part_data_type )
1672 case GVSP_MULTIPART_DATA_TYPE_2DIMAGE:
1673 case GVSP_MULTIPART_DATA_TYPE_2DPLANEBIPLANAR:
1674 case GVSP_MULTIPART_DATA_TYPE_2DPLANETRIPLANAR:
1675 case GVSP_MULTIPART_DATA_TYPE_2DPLANEQUADPLANAR:
1676 case GVSP_MULTIPART_DATA_TYPE_3DIMAGE:
1677 case GVSP_MULTIPART_DATA_TYPE_3DPLANEBIPLANAR:
1678 case GVSP_MULTIPART_DATA_TYPE_3DPLANETRIPLANAR:
1679 case GVSP_MULTIPART_DATA_TYPE_3DPLANEQUADPLANAR:
1680 case GVSP_MULTIPART_DATA_TYPE_CONFIDENCEMAP:
1681 /* Pixel format */
1682 proto_tree_add_bitmask(gvsp_part_tree, tvb, offset + 20 + i * GVSP_SIZE_OF_PART_INFO_LEADER, hf_gvsp_pixelformat, ett_gvsp_pixelformat, pixelformat_fields, ENC_BIG_ENDIAN);
1683 break;
1684 case GVSP_MULTIPART_DATA_TYPE_JPEG:
1685 case GVSP_MULTIPART_DATA_TYPE_JPEG2000:
1686 default:
1687 /* Data Format */
1688 proto_tree_add_item(gvsp_part_tree, hf_gvsp_dataformat, tvb, offset + 20 + i * GVSP_SIZE_OF_PART_INFO_LEADER, 4, ENC_BIG_ENDIAN);
1689 break;
1692 /* Source ID */
1693 proto_tree_add_item(gvsp_part_tree, hf_gvsp_multi_part_source_id, tvb, offset + 26 + i * GVSP_SIZE_OF_PART_INFO_LEADER, 1, ENC_BIG_ENDIAN);
1695 /* Additional Zones */
1696 proto_tree_add_item(gvsp_part_tree, hf_gvsp_add_zones_multipart, tvb, offset + 27 + i * GVSP_SIZE_OF_PART_INFO_LEADER, 1, ENC_BIG_ENDIAN);
1698 /* Zone direction */
1699 proto_tree_add_bitmask(gvsp_part_tree, tvb, offset + 28 + i * GVSP_SIZE_OF_PART_INFO_LEADER, hf_gvsp_sc_zone_direction,
1700 ett_gvsp_sc_zone_direction, sc_zone_direction_fields, ENC_BIG_ENDIAN);
1702 /* Data Purpose */
1703 proto_tree_add_item(gvsp_part_tree, hf_gvsp_data_purpose_id, tvb, offset + 32 + i * GVSP_SIZE_OF_PART_INFO_LEADER, 2, ENC_BIG_ENDIAN);
1705 /* Region ID */
1706 proto_tree_add_item(gvsp_part_tree, hf_gvsp_region_id, tvb, offset + 34 + i * GVSP_SIZE_OF_PART_INFO_LEADER, 2, ENC_BIG_ENDIAN);
1708 switch( multi_part_data_type )
1710 case GVSP_MULTIPART_DATA_TYPE_2DIMAGE:
1711 case GVSP_MULTIPART_DATA_TYPE_2DPLANEBIPLANAR:
1712 case GVSP_MULTIPART_DATA_TYPE_2DPLANETRIPLANAR:
1713 case GVSP_MULTIPART_DATA_TYPE_2DPLANEQUADPLANAR:
1714 case GVSP_MULTIPART_DATA_TYPE_3DIMAGE:
1715 case GVSP_MULTIPART_DATA_TYPE_3DPLANEBIPLANAR:
1716 case GVSP_MULTIPART_DATA_TYPE_3DPLANETRIPLANAR:
1717 case GVSP_MULTIPART_DATA_TYPE_3DPLANEQUADPLANAR:
1718 case GVSP_MULTIPART_DATA_TYPE_CONFIDENCEMAP:
1719 dissect_image_aoi(gvsp_part_tree, tvb, offset + 36 + i * GVSP_SIZE_OF_PART_INFO_LEADER);
1720 break;
1721 case GVSP_MULTIPART_DATA_TYPE_JPEG:
1722 case GVSP_MULTIPART_DATA_TYPE_JPEG2000:
1723 /* Generic flags */
1724 proto_tree_add_item(gvsp_part_tree, hf_gvsp_genericflags, tvb, offset + 36 + i * GVSP_SIZE_OF_PART_INFO_LEADER, 1, ENC_BIG_ENDIAN);
1726 /* Timestamp tick frequency */
1727 proto_tree_add_item(gvsp_part_tree, hf_gvsp_timestamptickfrequency, tvb, offset + 36 + i * GVSP_SIZE_OF_PART_INFO_LEADER + 4, 8, ENC_BIG_ENDIAN);
1729 /* Data format */
1730 proto_tree_add_item(gvsp_part_tree, hf_gvsp_dataformat, tvb, offset + 36 + i * GVSP_SIZE_OF_PART_INFO_LEADER + 12, 4, ENC_BIG_ENDIAN);
1731 break;
1732 default:
1733 /* 6 DWORDS of data type specific data */
1734 for (j = 0; j < 6; j++)
1736 proto_tree_add_item(gvsp_part_tree, hf_gvsp_data_type_specific, tvb, offset + 36 + i * GVSP_SIZE_OF_PART_INFO_LEADER + 4 * j, 4, ENC_BIG_ENDIAN);
1738 break;
1742 /* Return dissected byte count (for all-in dissection) */
1743 return 12 + part_count * GVSP_SIZE_OF_PART_INFO_LEADER;
1747 \brief Dissects the GenDC leader
1750 static int dissect_gendc_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1752 /* Payload type */
1753 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1755 /* Timestamp */
1756 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamp, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1758 /* Payload data size */
1759 proto_tree_add_item(gvsp_tree, hf_gvsp_payloaddatasize, tvb, offset + 12, 8, ENC_BIG_ENDIAN);
1761 /* Payload specific flags */
1762 proto_tree_add_bitmask(gvsp_tree, tvb, offset + 20, hf_gvsp_gendc_leader_flags_v2_2,
1763 ett_gvsp_gendc_leader_flags, gendc_leader_flags_fields, ENC_BIG_ENDIAN);
1765 /* GenDC descriptor size */
1766 proto_tree_add_item(gvsp_tree, hf_gvsp_gendc_leader_descriptor_size_v2_2, tvb, offset + 24, 4, ENC_BIG_ENDIAN);
1768 /* Return dissected byte count (for all-in dissection) */
1769 return 28;
1774 \brief Dissects a generic trailer (contains just the payload type)
1777 static int dissect_generic_trailer(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1779 /* Payload type */
1780 proto_tree_add_item(gvsp_tree, hf_gvsp_payloadtype, tvb, offset + 2, 2, ENC_BIG_ENDIAN);
1782 /* Return dissected byte count (for all-in dissection) */
1783 return 4;
1788 \brief Dissects a generic trailer (contains just the payload type)
1791 static int dissect_extra_chunk_info(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset)
1793 /* Chunk data payload length */
1794 proto_tree_add_item(gvsp_tree, hf_gvsp_chunk_data_payload_length_hex, tvb, offset, 4, ENC_BIG_ENDIAN);
1796 /* Chunk layout id */
1797 proto_tree_add_item(gvsp_tree, hf_gvsp_chunk_layout_id_hex, tvb, offset + 4, 4, ENC_BIG_ENDIAN);
1799 /* Return dissected byte count (for all-in dissection) */
1800 return 8;
1805 \brief Check if a packet with given status has payload
1807 static bool status_with_payload(gvsp_packet_info *info){
1808 return info->status == GEV_STATUS_SUCCESS || ( info->enhanced && info->status == GEV_STATUS_PACKET_RESEND);
1812 \brief Dissects a packet payload
1815 static void dissect_packet_payload(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset, gvsp_packet_info *info)
1817 if (status_with_payload(info) && tvb_reported_length_remaining(tvb, offset))
1819 proto_tree_add_item(gvsp_tree, hf_gvsp_payloaddata, tvb, offset, -1, ENC_NA);
1825 \brief Dissects a packet payload for H264
1828 static void dissect_packet_payload_h264(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset, gvsp_packet_info *info)
1830 if (status_with_payload(info) && tvb_reported_length_remaining(tvb, offset))
1832 /* Timestamp */
1833 proto_tree_add_item(gvsp_tree, hf_gvsp_timestamp, tvb, offset, 8, ENC_BIG_ENDIAN);
1835 /* Data */
1836 proto_tree_add_item(gvsp_tree, hf_gvsp_payloaddata, tvb, offset + 8, -1, ENC_NA);
1842 \brief Dissects a packet payload for multi-zone
1845 static void dissect_packet_payload_multizone(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset, gvsp_packet_info *info)
1847 if (status_with_payload(info) && tvb_reported_length_remaining(tvb, offset))
1849 /* Zone information */
1850 proto_tree_add_bitmask(gvsp_tree, tvb, offset + 1, hf_gvsp_zoneinfo,
1851 ett_gvsp_zoneinfo, zoneinfo_fields, ENC_BIG_ENDIAN);
1853 /* Address offset */
1854 proto_tree_add_item(gvsp_tree, hf_gvsp_addressoffset, tvb, offset + 2, 6, ENC_BIG_ENDIAN);
1856 /* Data */
1857 proto_tree_add_item(gvsp_tree, hf_gvsp_payloaddata, tvb, offset + 8, -1, ENC_NA);
1863 \brief Dissects a packet payload for multi-part
1866 static void dissect_packet_payload_multipart(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset, gvsp_packet_info *info)
1868 if (status_with_payload(info) && tvb_reported_length_remaining(tvb, offset))
1870 /* Part ID */
1871 proto_tree_add_item(gvsp_tree, hf_gvsp_multi_part_part_id, tvb, offset, 1, ENC_BIG_ENDIAN);
1873 /* Zone information */
1874 proto_tree_add_bitmask(gvsp_tree, tvb, offset + 1, hf_gvsp_zoneinfo_multipart,
1875 ett_gvsp_zoneinfo_multipart, zoneinfo_multipart_fields, ENC_BIG_ENDIAN);
1877 /* Address offset */
1878 proto_tree_add_item(gvsp_tree, hf_gvsp_addressoffset, tvb, offset + 2, 6, ENC_BIG_ENDIAN);
1880 /* Data */
1881 proto_tree_add_item(gvsp_tree, hf_gvsp_payloaddata, tvb, offset + 8, -1, ENC_NA);
1886 \brief Dissects a payload packet for GenDC
1889 static void dissect_packet_payload_gendc(proto_tree *gvsp_tree, tvbuff_t *tvb, packet_info *pinfo _U_, int offset, gvsp_packet_info *info)
1891 if (status_with_payload(info) && tvb_reported_length_remaining(tvb, offset))
1893 const uint8_t data_flags = tvb_get_uint8(tvb, offset + 12);
1895 /* Data size */
1896 proto_tree_add_item(gvsp_tree, hf_gvsp_gendc_payload_data_size_v2_2, tvb, offset, 4, ENC_BIG_ENDIAN);
1898 /* Data destination offset */
1899 proto_tree_add_item(gvsp_tree, hf_gvsp_gendc_payload_data_destination_offset_v2_2, tvb, offset + 4, 8, ENC_BIG_ENDIAN);
1901 /* Data flags */
1902 proto_tree_add_bitmask(gvsp_tree, tvb, offset + 12, hf_gvsp_gendc_payload_data_flags_v2_2,
1903 ett_gvsp_gendc_payload_data_flags, gendc_payload_data_flags_fields, ENC_BIG_ENDIAN);
1905 /* Flow flags */
1906 proto_tree_add_bitmask(gvsp_tree, tvb, offset + 13, hf_gvsp_gendc_payload_flow_flags_v2_2,
1907 ett_gvsp_gendc_payload_flow_flags, gendc_payload_flow_flags_fields, ENC_BIG_ENDIAN);
1909 /* Flow ID */
1910 proto_tree_add_item(gvsp_tree, hf_gvsp_gendc_payload_flow_id_v2_2, tvb, offset + 14, 2, ENC_BIG_ENDIAN);
1912 if ((data_flags & GENDC_DESCRIPTOR_FLAG) && (data_flags & GENDC_DESCRIPTOR_START_FLAG))
1914 const uint32_t component_count = tvb_get_uint32(tvb, offset + 68, ENC_LITTLE_ENDIAN);
1915 proto_tree* gvsp_gendc_container_descriptor_tree = proto_tree_add_subtree(gvsp_tree, tvb, offset + 16, -1, ett_gvsp_gendc_container_descriptor, NULL, "GenDC Container Descriptor");
1916 proto_tree* gvsp_gendc_container_header_component_offsets_tree = 0;
1918 /* GenDC container header signature */
1919 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_container_header_signature_v2_2, tvb, offset + 16, 4, ENC_ASCII);
1921 /* GenDC container header major version */
1922 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_container_header_version_major_v2_2, tvb, offset + 20, 1, ENC_LITTLE_ENDIAN);
1924 /* GenDC container header minor version */
1925 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_container_header_version_minor_v2_2, tvb, offset + 21, 1, ENC_LITTLE_ENDIAN);
1927 /* GenDC container header sub minor version */
1928 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_container_header_version_sub_minor_v2_2, tvb, offset + 22, 1, ENC_LITTLE_ENDIAN);
1930 /* GenDC 1 reserved byte */
1931 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_header_reserved_1_byte_v2_2, tvb, offset + 23, 1, ENC_LITTLE_ENDIAN);
1933 /* GenDC container header type */
1934 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_header_type_v2_2, tvb, offset + 24, 2, ENC_LITTLE_ENDIAN);
1936 /* GenDC container header flags */
1937 proto_tree_add_bitmask(gvsp_gendc_container_descriptor_tree, tvb, offset + 26, hf_gvsp_gendc_container_header_flags_v2_2,
1938 ett_gvsp_gendc_container_header_flags, gendc_container_header_flags_fields, ENC_LITTLE_ENDIAN);
1940 /* GenDC container header size */
1941 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_header_size_v2_2, tvb, offset + 28, 4, ENC_LITTLE_ENDIAN);
1943 /* GenDC container header id */
1944 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_container_header_id_v2_2, tvb, offset + 32, 8, ENC_LITTLE_ENDIAN);
1946 /* GenDC container header variable fields */
1947 proto_tree_add_bitmask(gvsp_gendc_container_descriptor_tree, tvb, offset + 40, hf_gvsp_gendc_container_header_variable_fields_v2_2,
1948 ett_gvsp_gendc_container_header_variable_fields, gendc_container_header_variable_fields_fields, ENC_LITTLE_ENDIAN);
1950 /* GenDC 2 reserved bytes */
1951 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_header_reserved_2_bytes_v2_2, tvb, offset + 42, 2, ENC_LITTLE_ENDIAN);
1953 /* GenDC 4 reserved bytes */
1954 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_header_reserved_4_bytes_v2_2, tvb, offset + 44, 4, ENC_LITTLE_ENDIAN);
1956 /* GenDC container header data size */
1957 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_container_header_data_size_v2_2, tvb, offset + 48, 8, ENC_LITTLE_ENDIAN);
1959 /* GenDC container header data offset */
1960 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_container_header_data_offset_v2_2, tvb, offset + 56, 8, ENC_LITTLE_ENDIAN);
1962 /* GenDC container header descriptor size */
1963 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_container_header_descriptor_size_v2_2, tvb, offset + 64, 4, ENC_LITTLE_ENDIAN);
1965 /* GenDC container header component count */
1966 proto_tree_add_item(gvsp_gendc_container_descriptor_tree, hf_gvsp_gendc_container_header_component_count_v2_2, tvb, offset + 68, 4, ENC_LITTLE_ENDIAN);
1968 gvsp_gendc_container_header_component_offsets_tree = proto_tree_add_subtree(gvsp_gendc_container_descriptor_tree, tvb, offset + 72, 8 * component_count, ett_gvsp_gendc_container_header_component_offsets, NULL, "Component Offsets");
1970 for (uint32_t i = 0; i < component_count; i++)
1972 unsigned component_offset = offset + 16 + (int)tvb_get_uint64(tvb, offset + 72 + 8 * i, ENC_LITTLE_ENDIAN);
1973 uint16_t part_count = tvb_get_uint16(tvb, component_offset + 46, ENC_LITTLE_ENDIAN);
1975 proto_tree* gvsp_gendc_component_header_tree = proto_tree_add_subtree(gvsp_gendc_container_descriptor_tree, tvb, offset + 16 + component_offset, -1, ett_gvsp_gendc_component_header, NULL, "Component Header");
1976 proto_tree* gvsp_gendc_component_header_part_offsets_tree = 0;
1978 /* GenDC container header component offset */
1979 proto_tree_add_item(gvsp_gendc_container_header_component_offsets_tree, hf_gvsp_gendc_container_header_component_offset_v2_2, tvb, offset + 72 + 8 * i, 8, ENC_LITTLE_ENDIAN);
1981 /* component layout (size:offset)
1982 2 : 0 type
1983 2 : 2 flags
1984 4 : 4 header size
1985 2 : 8 reserved
1986 2 : 10 group id
1987 2 : 12 source id
1988 2 : 14 region id
1989 4 : 16 region offset x
1990 4 : 20 region offset y
1991 8 : 24 timestamp
1992 8 : 32 type id
1993 4 : 40 format
1994 2 : 44 reserved
1995 2 : 46 part count
1998 /* GenDC component header type */
1999 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_gendc_header_type_v2_2, tvb, component_offset, 2, ENC_LITTLE_ENDIAN);
2001 /* GenDC component header flags */
2002 proto_tree_add_bitmask(gvsp_gendc_component_header_tree, tvb, component_offset + 2, hf_gvsp_gendc_component_header_flags_v2_2,
2003 ett_gvsp_gendc_component_header_flags, gendc_component_header_flags_fields, ENC_LITTLE_ENDIAN);
2005 /* GenDC component header size */
2006 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_gendc_header_size_v2_2, tvb, component_offset + 4, 4, ENC_LITTLE_ENDIAN);
2008 /* GenDC 2 reserved bytes */
2009 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_gendc_header_reserved_2_bytes_v2_2, tvb, component_offset + 8, 2, ENC_LITTLE_ENDIAN);
2011 /* GenDC component header group id */
2012 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_gendc_component_header_group_id_v2_2, tvb, component_offset + 10, 2, ENC_LITTLE_ENDIAN);
2014 /* GenDC component header source id */
2015 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_gendc_component_header_source_id_v2_2, tvb, component_offset + 12, 2, ENC_LITTLE_ENDIAN);
2017 /* GenDC component header region id */
2018 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_gendc_component_header_region_id_v2_2, tvb, component_offset + 14, 2, ENC_LITTLE_ENDIAN);
2020 /* GenDC component header offset X */
2021 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_offsetx, tvb, component_offset + 16, 4, ENC_LITTLE_ENDIAN);
2023 /* GenDC component header offset Y */
2024 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_offsety, tvb, component_offset + 20, 4, ENC_LITTLE_ENDIAN);
2026 /* Timestamp */
2027 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_timestamp, tvb, component_offset + 24, 8, ENC_LITTLE_ENDIAN);
2029 /* GenDC component header type id */
2030 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_gendc_component_header_type_id_v2_2, tvb, component_offset + 32, 8, ENC_LITTLE_ENDIAN);
2032 /* GenDC component header format */
2033 proto_tree_add_bitmask(gvsp_gendc_component_header_tree, tvb, component_offset + 40, hf_gvsp_pixelformat, ett_gvsp_pixelformat,
2034 pixelformat_fields, ENC_LITTLE_ENDIAN);
2036 /* GenDC 2 reserved bytes */
2037 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_gendc_header_reserved_2_bytes_v2_2, tvb, component_offset + 44, 2, ENC_LITTLE_ENDIAN);
2039 /* GenDC component header part count */
2040 proto_tree_add_item(gvsp_gendc_component_header_tree, hf_gvsp_gendc_component_header_part_count_v2_2, tvb, component_offset + 46, 2, ENC_LITTLE_ENDIAN);
2042 gvsp_gendc_component_header_part_offsets_tree = proto_tree_add_subtree(gvsp_gendc_component_header_tree, tvb, component_offset + 48, 8 * part_count, ett_gvsp_gendc_part_offsets, NULL, "Part Offsets");
2044 for (uint16_t j = 0; j < part_count; j++)
2046 unsigned part_offset = offset + 16 + (int)tvb_get_uint64(tvb, component_offset + 48 + 8 * j, ENC_LITTLE_ENDIAN);
2047 uint16_t part_type = tvb_get_uint16(tvb, part_offset, ENC_LITTLE_ENDIAN);
2049 proto_tree* gvsp_gendc_part_header_tree = proto_tree_add_subtree(gvsp_gendc_component_header_tree, tvb, offset + 16 + part_offset, -1, ett_gvsp_gendc_part_header, NULL, "Part Header");
2051 /* GenDC component header part offset */
2052 proto_tree_add_item(gvsp_gendc_component_header_part_offsets_tree, hf_gvsp_gendc_component_header_part_offset_v2_2, tvb, component_offset + 48 + 8 * j, 8, ENC_LITTLE_ENDIAN);
2054 /* common part layout (size:offset)
2055 2:0 type
2056 2:2 flags
2057 4:4 header size
2058 4:8 format
2059 2:12 reserved
2060 2:14 flow id
2061 8:16 flow offset
2062 8:24 data size
2063 8:32 data offset
2066 /* GenDC part header type */
2067 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_header_type_v2_2, tvb, part_offset, 2, ENC_LITTLE_ENDIAN);
2069 /* GenDC part header flags */
2070 if( part_type == GENDC_HEADER_TYPE_PART_XML )
2072 proto_tree_add_bitmask(gvsp_gendc_part_header_tree, tvb, part_offset + 2, hf_gvsp_gendc_part_header_flags_v2_2,
2073 ett_gvsp_gendc_part_header_flags, gendc_part_header_flags_fields, ENC_LITTLE_ENDIAN);
2075 else
2077 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_part_header_flags_v2_2, tvb, part_offset + 2, 2, ENC_LITTLE_ENDIAN);
2080 /* GenDC part header size */
2081 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_header_size_v2_2, tvb, part_offset + 4, 4, ENC_LITTLE_ENDIAN);
2083 /* GenDC part header format */
2084 proto_tree_add_bitmask(gvsp_gendc_part_header_tree, tvb, part_offset + 8, hf_gvsp_pixelformat, ett_gvsp_pixelformat, pixelformat_fields, ENC_LITTLE_ENDIAN);
2086 /* GenDC 2 reserved bytes */
2087 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_header_reserved_2_bytes_v2_2, tvb, part_offset + 12, 2, ENC_LITTLE_ENDIAN);
2089 /* Flow ID */
2090 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_payload_flow_id_v2_2, tvb, part_offset + 14, 2, ENC_LITTLE_ENDIAN);
2092 /* GenDC container header data offset */
2093 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_part_header_flow_offset_v2_2, tvb, part_offset + 16, 8, ENC_LITTLE_ENDIAN);
2095 /* GenDC part header data size */
2096 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_container_header_data_size_v2_2, tvb, part_offset + 24, 8, ENC_LITTLE_ENDIAN);
2098 /* GenDC part header data offset */
2099 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_container_header_data_offset_v2_2, tvb, part_offset + 32, 8, ENC_LITTLE_ENDIAN);
2101 switch (part_type)
2103 case GENDC_HEADER_TYPE_PART_CHUNK:
2104 case GENDC_HEADER_TYPE_PART_XML:
2105 case GENDC_HEADER_TYPE_PART_1D:
2106 /* GenDC part header size */
2107 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_part_header_1D_size_v2_2, tvb, part_offset + 40, 8, ENC_LITTLE_ENDIAN);
2109 /* GenDC part header padding */
2110 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_part_header_1D_padding_v2_2, tvb, part_offset + 48, 4, ENC_LITTLE_ENDIAN);
2112 /* GenDC 4 reserved bytes */
2113 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_header_reserved_4_bytes_v2_2, tvb, part_offset + 52, 4, ENC_LITTLE_ENDIAN);
2115 /* GenDC part header type specific */
2116 proto_tree_add_item(gvsp_gendc_part_header_tree, hf_gvsp_gendc_part_header_type_specific_info_v2_2, tvb, part_offset + 56, 8, ENC_LITTLE_ENDIAN);
2117 break;
2118 case GENDC_HEADER_TYPE_PART_2D:
2119 case GENDC_HEADER_TYPE_PART_2D_JPEG:
2120 case GENDC_HEADER_TYPE_PART_2D_JPEG2000:
2121 dissect_image_dimensions(gvsp_gendc_part_header_tree, tvb, part_offset + 40, ENC_LITTLE_ENDIAN);
2122 break;
2123 case GENDC_HEADER_TYPE_PART_2D_H264:
2124 dissect_image_dimensions(gvsp_gendc_part_header_tree, tvb, part_offset + 40, ENC_LITTLE_ENDIAN);
2125 dissect_h264_leader_common(gvsp_gendc_part_header_tree, tvb, part_offset + 52, ENC_LITTLE_ENDIAN);
2126 break;
2131 else
2133 /* Data */
2134 proto_tree_add_item(gvsp_tree, hf_gvsp_payloaddata, tvb, offset + 16, -1, ENC_NA);
2140 \brief Dissects an all in packet
2143 static void dissect_packet_all_in(proto_tree *gvsp_tree, tvbuff_t *tvb, int offset, packet_info *pinfo, gvsp_packet_info *info)
2145 int ret;
2147 switch (info->payloadtype)
2149 case GVSP_PAYLOAD_IMAGE:
2150 offset += dissect_image_leader(gvsp_tree, tvb, pinfo, offset);
2151 offset += dissect_image_trailer(gvsp_tree, tvb, pinfo, offset);
2152 if (info->chunk != 0)
2154 offset += dissect_extra_chunk_info(gvsp_tree, tvb, pinfo, offset);
2156 dissect_packet_payload(gvsp_tree, tvb, pinfo, offset, info);
2157 break;
2159 case GVSP_PAYLOAD_RAWDATA:
2160 offset += dissect_raw_data_leader(gvsp_tree, tvb, pinfo, offset);
2161 offset += dissect_generic_trailer(gvsp_tree, tvb, pinfo, offset);
2162 if (info->chunk != 0)
2164 offset += dissect_extra_chunk_info(gvsp_tree, tvb, pinfo, offset);
2166 dissect_packet_payload(gvsp_tree, tvb, pinfo, offset, info);
2167 break;
2169 case GVSP_PAYLOAD_FILE:
2170 ret = dissect_file_leader(gvsp_tree, tvb, pinfo, offset);
2171 if (ret < 0)
2172 break;
2173 offset += ret;
2174 offset += dissect_generic_trailer(gvsp_tree, tvb, pinfo, offset);
2175 if (info->chunk != 0)
2177 offset += dissect_extra_chunk_info(gvsp_tree, tvb, pinfo, offset);
2179 dissect_packet_payload(gvsp_tree, tvb, pinfo, offset, info);
2180 break;
2182 case GVSP_PAYLOAD_CHUNKDATA:
2183 offset += dissect_chunk_data_leader(gvsp_tree, tvb, pinfo, offset);
2184 offset += dissect_chunk_data_trailer(gvsp_tree, tvb, pinfo, offset);
2185 if (info->chunk != 0)
2187 offset += dissect_extra_chunk_info(gvsp_tree, tvb, pinfo, offset);
2189 dissect_packet_payload(gvsp_tree, tvb, pinfo, offset, info);
2190 break;
2192 case GVSP_PAYLOAD_EXTENDEDCHUNKDATA:
2193 offset += dissect_extended_chunk_data_leader(gvsp_tree, tvb, pinfo, offset);
2194 offset += dissect_extended_chunk_data_trailer(gvsp_tree, tvb, pinfo, offset);
2195 if (info->chunk != 0)
2197 offset += dissect_extra_chunk_info(gvsp_tree, tvb, pinfo, offset);
2199 dissect_packet_payload(gvsp_tree, tvb, pinfo, offset, info);
2200 break;
2202 case GVSP_PAYLOAD_JPEG:
2203 case GVSP_PAYLOAD_JPEG2000:
2204 offset += dissect_jpeg_leader(gvsp_tree, tvb, pinfo, offset);
2205 offset += dissect_generic_trailer(gvsp_tree, tvb, pinfo, offset);
2206 if (info->chunk != 0)
2208 offset += dissect_extra_chunk_info(gvsp_tree, tvb, pinfo, offset);
2210 dissect_packet_payload(gvsp_tree, tvb, pinfo, offset, info);
2211 break;
2213 case GVSP_PAYLOAD_H264:
2214 offset += dissect_h264_leader(gvsp_tree, tvb, pinfo, offset);
2215 offset += dissect_generic_trailer(gvsp_tree, tvb, pinfo, offset);
2216 if (info->chunk != 0)
2218 offset += dissect_extra_chunk_info(gvsp_tree, tvb, pinfo, offset);
2220 dissect_packet_payload_h264(gvsp_tree, tvb, pinfo, offset, info);
2221 break;
2223 case GVSP_PAYLOAD_MULTIZONEIMAGE:
2224 offset += dissect_multizone_image_leader(gvsp_tree, tvb, pinfo, offset);
2225 offset += dissect_image_trailer(gvsp_tree, tvb, pinfo, offset);
2226 if (info->chunk != 0)
2228 offset += dissect_extra_chunk_info(gvsp_tree, tvb, pinfo, offset);
2230 dissect_packet_payload_multizone(gvsp_tree, tvb, pinfo, offset, info);
2231 break;
2233 /* case GVSP_PAYLOAD_MULTIPART: */
2234 /* By definition, Multi-part cannot support the all-in packet since it requires at least one data packet per part. */
2235 /* Therefore, it is not possible to use all-in transmission mode for the multi-part payload type. */
2237 /* case GVSP_PAYLOAD_GENDC: */
2238 /* By definition, GenDC cannot support the all-in packet since it requires at least one data packet containing the GenDC descriptor. */
2239 /* Therefore, it is not possible to use all-in transmission mode for the GenDC payload type. */
2246 \brief Dissects a leader packet
2249 static void dissect_packet_leader(proto_tree *gvsp_tree, tvbuff_t *tvb, int offset, packet_info *pinfo, gvsp_packet_info *info)
2251 switch (info->payloadtype)
2253 case GVSP_PAYLOAD_IMAGE:
2254 dissect_image_leader(gvsp_tree, tvb, pinfo, offset);
2255 break;
2257 case GVSP_PAYLOAD_RAWDATA:
2258 dissect_raw_data_leader(gvsp_tree, tvb, pinfo, offset);
2259 break;
2261 case GVSP_PAYLOAD_FILE:
2262 dissect_file_leader(gvsp_tree, tvb, pinfo, offset);
2263 break;
2265 case GVSP_PAYLOAD_CHUNKDATA:
2266 dissect_chunk_data_leader(gvsp_tree, tvb, pinfo, offset);
2267 break;
2269 case GVSP_PAYLOAD_EXTENDEDCHUNKDATA:
2270 dissect_extended_chunk_data_leader(gvsp_tree, tvb, pinfo, offset);
2271 break;
2273 case GVSP_PAYLOAD_JPEG:
2274 case GVSP_PAYLOAD_JPEG2000:
2275 dissect_jpeg_leader(gvsp_tree, tvb, pinfo, offset);
2276 break;
2278 case GVSP_PAYLOAD_H264:
2279 dissect_h264_leader(gvsp_tree, tvb, pinfo, offset);
2280 break;
2282 case GVSP_PAYLOAD_MULTIZONEIMAGE:
2283 dissect_multizone_image_leader(gvsp_tree, tvb, pinfo, offset);
2284 break;
2286 case GVSP_PAYLOAD_MULTIPART:
2287 dissect_multi_part_leader(gvsp_tree, tvb, pinfo, offset);
2288 break;
2290 case GVSP_PAYLOAD_GENDC:
2291 dissect_gendc_leader(gvsp_tree, tvb, pinfo, offset);
2292 break;
2294 default:
2295 break;
2301 \brief Dissects a trailer packet
2304 static void dissect_packet_trailer(proto_tree *gvsp_tree, tvbuff_t *tvb, int offset, packet_info *pinfo, gvsp_packet_info *info)
2306 switch (info->payloadtype)
2308 case GVSP_PAYLOAD_IMAGE:
2309 case GVSP_PAYLOAD_MULTIZONEIMAGE:
2310 offset += dissect_image_trailer(gvsp_tree, tvb, pinfo, offset);
2311 break;
2313 case GVSP_PAYLOAD_CHUNKDATA:
2314 offset += dissect_chunk_data_trailer(gvsp_tree, tvb, pinfo, offset);
2315 break;
2317 case GVSP_PAYLOAD_EXTENDEDCHUNKDATA:
2318 offset += dissect_extended_chunk_data_trailer(gvsp_tree, tvb, pinfo, offset);
2319 break;
2321 case GVSP_PAYLOAD_RAWDATA:
2322 case GVSP_PAYLOAD_FILE:
2323 case GVSP_PAYLOAD_JPEG:
2324 case GVSP_PAYLOAD_JPEG2000:
2325 case GVSP_PAYLOAD_H264:
2326 case GVSP_PAYLOAD_GENDC:
2327 offset += dissect_generic_trailer(gvsp_tree, tvb, pinfo, offset);
2328 break;
2330 case GVSP_PAYLOAD_MULTIPART:
2331 offset += dissect_multi_part_trailer(gvsp_tree, tvb, pinfo, offset);
2332 break;
2334 default:
2335 break;
2338 if (info->chunk != 0)
2340 dissect_extra_chunk_info(gvsp_tree, tvb, pinfo, offset);
2346 \brief Point of entry of all GVSP dissection
2349 static int dissect_gvsp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data _U_)
2351 proto_item *ti = NULL;
2352 int offset = 0;
2353 proto_tree *gvsp_tree = NULL;
2354 gvsp_packet_info info;
2356 if ((tvb_reported_length(tvb) < GVSP_MIN_PACKET_SIZE) ||
2357 (tvb_captured_length(tvb) < 5))
2359 return 0;
2362 memset(&info, 0x00, sizeof(info));
2364 info.format = tvb_get_uint8(tvb, 4);
2366 if ((info.format & GVSP_EXTENDED_ID_BIT) && tvb_reported_length(tvb) < GVSP_V2_MIN_PACKET_SIZE)
2368 return 0;
2371 /* Set the protocol column */
2372 col_set_str(pinfo->cinfo, COL_PROTOCOL, "GVSP");
2374 /* Clear out stuff in the info column */
2375 col_clear(pinfo->cinfo, COL_INFO);
2377 /* Adds "Gigabit-Ethernet Streaming Protocol" heading to protocol tree */
2378 /* We will add fields to this using the gvsp_tree pointer */
2379 ti = proto_tree_add_item(tree, proto_gvsp, tvb, offset, -1, ENC_NA);
2380 gvsp_tree = proto_item_add_subtree(ti, ett_gvsp);
2382 /* Look for extended ID flag and then clear it */
2383 info.enhanced = info.format & GVSP_EXTENDED_ID_BIT;
2384 info.format &= 0x7F;
2386 /* Add packet format to info string */
2387 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str(info.format, formatnames, "Unknown Format (0x%x)"));
2389 /* Dissect status */
2390 info.status = tvb_get_ntohs(tvb, offset);
2391 proto_tree_add_item(gvsp_tree, hf_gvsp_status, tvb, offset, 2, ENC_BIG_ENDIAN);
2392 offset += 2;
2394 if (info.enhanced == 0)
2396 info.blockid = tvb_get_ntohs(tvb, offset);
2397 proto_tree_add_item(gvsp_tree, hf_gvsp_blockid16, tvb, offset, 2, ENC_BIG_ENDIAN);
2399 else
2401 uint8_t flags;
2402 flags = tvb_get_uint8(tvb, offset + 1);
2403 info.flag_resendrangeerror = flags & 0x04;
2404 info.flag_previousblockdropped = flags & 0x02;
2405 info.flag_packetresend = flags & 0x01;
2407 proto_tree_add_bitmask(gvsp_tree, tvb, offset, hf_gvsp_flags,
2408 ett_gvsp_flags, flags_fields, ENC_BIG_ENDIAN);
2411 offset += 2;
2413 proto_tree_add_item(gvsp_tree, hf_gvsp_format, tvb, offset, 1, ENC_BIG_ENDIAN);
2414 offset++;
2416 info.packetid = tvb_get_ntohl(tvb, offset - 1);
2417 info.packetid &= 0x00FFFFFF;
2418 if (info.enhanced == 0)
2420 proto_tree_add_item(gvsp_tree, hf_gvsp_packetid24, tvb, offset, 3, ENC_BIG_ENDIAN);
2421 offset += 3;
2423 else
2425 offset += 2;
2426 if (info.format == GVSP_PACKET_LEADER)
2428 if (tvb_get_uint8(tvb, 23) == GVSP_PAYLOAD_MULTIZONEIMAGE)
2430 /* packet id contains the number of additional zones for multi-zone */
2431 proto_tree_add_item(gvsp_tree, hf_gvsp_add_zones, tvb, offset, 1, ENC_BIG_ENDIAN);
2433 else if (tvb_get_uint8(tvb, 23) == GVSP_PAYLOAD_MULTIPART)
2435 /* packet id contains the number of parts for multi-part */
2436 proto_tree_add_item(gvsp_tree, hf_gvsp_numparts, tvb, offset, 1, ENC_BIG_ENDIAN);
2439 offset += 1;
2442 if (info.enhanced != 0)
2444 info.blockid = tvb_get_ntoh64(tvb, offset);
2446 /* Dissect 64 bit block ID */
2447 proto_tree_add_item(gvsp_tree, hf_gvsp_blockid64, tvb, offset, 8, ENC_BIG_ENDIAN);
2448 offset += 8;
2450 /* Dissect 32 bit packet ID */
2451 info.packetid = tvb_get_ntohl(tvb, offset);
2452 proto_tree_add_item(gvsp_tree, hf_gvsp_packetid32, tvb, offset, 4, ENC_BIG_ENDIAN);
2453 offset += 4;
2456 /* At this point offset is pointing to end of packet */
2458 col_append_fstr(pinfo->cinfo, COL_INFO, "[Block ID: %" PRIu64 " Packet ID: %d] ", (uint64_t)info.blockid, info.packetid);
2460 if (info.flag_resendrangeerror != 0)
2462 /* Add range error to info string */
2463 col_append_str(pinfo->cinfo, COL_INFO, "[RANGE_ERROR] ");
2466 if (info.flag_previousblockdropped != 0)
2468 /* Add block dropped to info string */
2469 col_append_str(pinfo->cinfo, COL_INFO, "[BLOCK_DROPPED] ");
2472 if (info.flag_packetresend != 0)
2474 /* Add packet resend to info string */
2475 col_append_str(pinfo->cinfo, COL_INFO, "[PACKET_RESEND] ");
2478 /* Process packet types that are payload agnostic */
2479 switch (info.format)
2481 case GVSP_PACKET_PAYLOAD:
2482 dissect_packet_payload(gvsp_tree, tvb, pinfo, offset, &info);
2483 return tvb_captured_length(tvb);
2485 case GVSP_PACKET_PAYLOAD_H264:
2486 dissect_packet_payload_h264(gvsp_tree, tvb, pinfo, offset, &info);
2487 return tvb_captured_length(tvb);
2489 case GVSP_PACKET_PAYLOAD_MULTIZONE:
2490 dissect_packet_payload_multizone(gvsp_tree, tvb, pinfo, offset, &info);
2491 return tvb_captured_length(tvb);
2493 case GVSP_PACKET_PAYLOAD_MULTIPART:
2494 dissect_packet_payload_multipart(gvsp_tree, tvb, pinfo, offset, &info);
2495 return tvb_captured_length(tvb);
2497 case GVSP_PACKET_PAYLOAD_GENDC:
2498 dissect_packet_payload_gendc(gvsp_tree, tvb, pinfo, offset, &info);
2499 return tvb_captured_length(tvb);
2501 default:
2502 break;
2505 /* Get payload type, clear chunk bit */
2506 if (tvb_captured_length_remaining(tvb, offset) >= 2)
2508 info.payloadtype = tvb_get_ntohs(tvb, offset + 2);
2511 info.chunk = info.payloadtype & 0x4000;
2512 info.payloadtype &= 0x3FFF;
2515 /* Add payload type to information string */
2516 col_append_fstr(pinfo->cinfo, COL_INFO, "%s ", val_to_str_ext(info.payloadtype, &payloadtypenames_ext, "Unknown Payload Type (0x%x)"));
2518 /* Process packet types for specific payload types */
2519 switch (info.format)
2521 case GVSP_PACKET_ALLIN:
2522 dissect_packet_all_in(gvsp_tree, tvb, offset, pinfo, &info);
2523 break;
2524 case GVSP_PACKET_LEADER:
2525 dissect_packet_leader(gvsp_tree, tvb, offset, pinfo, &info);
2526 break;
2527 case GVSP_PACKET_TRAILER:
2528 dissect_packet_trailer(gvsp_tree, tvb, offset, pinfo, &info);
2529 break;
2530 default:
2531 break;
2533 return tvb_captured_length(tvb);
2536 static bool dissect_gvsp_heur(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree, void *data)
2538 conversation_t *conversation = NULL;
2539 uint16_t status_code = 0;
2540 uint8_t format = 0;
2542 /* Verify packet size */
2543 if ((tvb_reported_length(tvb) < GVSP_MIN_PACKET_SIZE) ||
2544 (tvb_captured_length(tvb) < 5))
2546 return false;
2549 /* Larger packet size if Extended ID flag is set */
2550 format = tvb_get_uint8(tvb, 4);
2552 if ((format & GVSP_EXTENDED_ID_BIT) && tvb_reported_length(tvb) < GVSP_V2_MIN_PACKET_SIZE)
2554 return false;
2557 /* Check for valid status codes */
2558 status_code = tvb_get_ntohs(tvb, 0);
2560 if (status_code == GEV_STATUS_SUCCESS ||
2561 status_code == GEV_STATUS_PACKET_RESEND ||
2562 (status_code >= GEV_STATUS_NOT_IMPLEMENTED && status_code <= GEV_STATUS_LAST) ||
2563 status_code == GEV_STATUS_ERROR)
2565 format &= 0x7F;
2567 /* Check for valid format types */
2568 if (format >= GVSP_PACKET_LEADER && format <= GVSP_PACKET_PAYLOAD_LAST)
2570 if(format == GVSP_PACKET_LEADER && tvb_captured_length_remaining(tvb, 8) >= 2)
2572 uint32_t payloadtype;
2573 payloadtype = tvb_get_ntohs(tvb, 8);
2574 payloadtype &= 0x3FFF;
2575 if (try_val_to_str_ext(payloadtype, &payloadtypenames_ext) == NULL ){
2576 return false;
2580 conversation = find_or_create_conversation(pinfo);
2581 conversation_set_dissector(conversation, gvsp_handle);
2582 dissect_gvsp(tvb, pinfo, tree, data);
2583 return true;
2587 return false;
2591 \brief Registers the dissector. Invoked at program startup.
2594 void proto_register_gvsp(void)
2596 module_t *gvsp_module;
2598 static hf_register_info hfgvsp[] =
2600 {&hf_gvsp_status,
2601 { "Status", "gvsp.status",
2602 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &statusnames_ext, 0x0,
2603 NULL, HFILL
2606 {&hf_gvsp_blockid16,
2607 { "Block ID (16 bits)", "gvsp.blockid16",
2608 FT_UINT16, BASE_DEC, NULL, 0x0,
2609 NULL, HFILL
2612 {&hf_gvsp_flags,
2613 { "Flags", "gvsp.flags",
2614 FT_UINT16, BASE_HEX, NULL, 0,
2615 NULL, HFILL
2618 {&hf_gvsp_flagdevicespecific0,
2619 { "Flag Device Specific 0", "gvsp.flag.devicespecific0",
2620 FT_UINT16, BASE_HEX, NULL, 0x8000,
2621 NULL, HFILL
2624 {&hf_gvsp_flagdevicespecific1,
2625 { "Flag Device Specific 1", "gvsp.flag.devicespecific1",
2626 FT_UINT16, BASE_HEX, NULL, 0x4000,
2627 NULL, HFILL
2630 {&hf_gvsp_flagdevicespecific2,
2631 { "Flag Device Specific 2", "gvsp.flag.devicespecific2",
2632 FT_UINT16, BASE_HEX, NULL, 0x2000,
2633 NULL, HFILL
2636 {&hf_gvsp_flagdevicespecific3,
2637 { "Flag Device Specific 3", "gvsp.flag.devicespecific3",
2638 FT_UINT16, BASE_HEX, NULL, 0x1000,
2639 NULL, HFILL
2642 {&hf_gvsp_flagdevicespecific4,
2643 { "Flag Device Specific 4", "gvsp.flag.devicespecific4",
2644 FT_UINT16, BASE_HEX, NULL, 0x0800,
2645 NULL, HFILL
2648 {&hf_gvsp_flagdevicespecific5,
2649 { "Flag Device Specific 5", "gvsp.flag.devicespecific5",
2650 FT_UINT16, BASE_HEX, NULL, 0x0400,
2651 NULL, HFILL
2654 {&hf_gvsp_flagdevicespecific6,
2655 { "Flag Device Specific 6", "gvsp.flag.devicespecific6",
2656 FT_UINT16, BASE_HEX, NULL, 0x0200,
2657 NULL, HFILL
2660 {&hf_gvsp_flagdevicespecific7,
2661 { "Flag Device Specific 7", "gvsp.flag.devicespecific7",
2662 FT_UINT16, BASE_HEX, NULL, 0x0100,
2663 NULL, HFILL
2666 {&hf_gvsp_flagresendrangeerror,
2667 { "Flag Resend Range Error", "gvsp.flag.resendrangeerror",
2668 FT_UINT16, BASE_HEX, NULL, 0x0004,
2669 NULL, HFILL
2672 {&hf_gvsp_flagpreviousblockdropped,
2673 { "Flag Previous Block Dropped", "gvsp.flag.previousblockdropped",
2674 FT_UINT16, BASE_HEX, NULL, 0x0002,
2675 NULL, HFILL
2678 {&hf_gvsp_flagpacketresend,
2679 { "Flag Packet Resend", "gvsp.flag.packetresend",
2680 FT_UINT16, BASE_HEX, NULL, 0x0001,
2681 NULL, HFILL
2684 {&hf_gvsp_format,
2685 { "Format", "gvsp.format",
2686 FT_UINT8, BASE_HEX, VALS(formatnames), 0,
2687 NULL, HFILL
2690 {&hf_gvsp_packetid24,
2691 { "Packet ID (24 bits)", "gvsp.packetid24",
2692 FT_UINT32, BASE_DEC, NULL, 0,
2693 NULL, HFILL
2696 {&hf_gvsp_blockid64,
2697 { "Block ID (64 bits v2.0)", "gvsp.blockid64",
2698 FT_UINT64, BASE_DEC, NULL, 0x0,
2699 NULL, HFILL
2702 {&hf_gvsp_packetid32,
2703 { "Packet ID (32 bits v2.0)", "gvsp.packetid32",
2704 FT_UINT32, BASE_DEC, NULL, 0x0,
2705 NULL, HFILL
2708 {&hf_gvsp_payloadtype,
2709 { "Payload Type", "gvsp.payloadtype",
2710 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &payloadtypenames_ext, 0x0,
2711 NULL, HFILL
2714 {&hf_gvsp_payloaddata,
2715 { "Payload Data", "gvsp.payloaddata",
2716 FT_BYTES, BASE_NONE, NULL, 0x0,
2717 NULL, HFILL
2720 {&hf_gvsp_timestamp,
2721 { "Timestamp", "gvsp.timestamp",
2722 FT_UINT64, BASE_HEX, NULL, 0x0,
2723 NULL, HFILL
2726 {&hf_gvsp_pixelformat,
2727 { "Pixel Format", "gvsp.pixel",
2728 FT_UINT32, BASE_HEX|BASE_EXT_STRING, &pixeltypenames_ext, 0x0,
2729 NULL, HFILL
2732 {&hf_gvsp_sizex,
2733 { "Size X", "gvsp.sizex",
2734 FT_UINT32, BASE_DEC, NULL, 0x0,
2735 NULL, HFILL
2738 {&hf_gvsp_sizey,
2739 { "Size Y", "gvsp.sizey",
2740 FT_UINT32, BASE_DEC, NULL, 0x0,
2741 NULL, HFILL
2744 {&hf_gvsp_offsetx,
2745 { "Offset X", "gvsp.offsetx",
2746 FT_UINT32, BASE_DEC, NULL, 0x0,
2747 NULL, HFILL
2750 {&hf_gvsp_offsety,
2751 { "Offset Y", "gvsp.offsety",
2752 FT_UINT32, BASE_DEC, NULL, 0x0,
2753 NULL, HFILL
2756 {&hf_gvsp_paddingx,
2757 { "Padding X", "gvsp.paddingx",
2758 FT_UINT16, BASE_DEC, NULL, 0x0,
2759 NULL, HFILL
2762 {&hf_gvsp_paddingy,
2763 { "Padding Y", "gvsp.paddingy",
2764 FT_UINT16, BASE_DEC, NULL, 0x0,
2765 NULL, HFILL
2768 {&hf_gvsp_payloaddatasize,
2769 { "Payload Data Size", "gvsp.payloaddatasize",
2770 FT_UINT64, BASE_DEC, NULL, 0x0,
2771 NULL, HFILL
2774 {&hf_gvsp_pixelcolor,
2775 { "Monochrome or Color", "gvsp.pixel.color",
2776 FT_UINT32, BASE_HEX, VALS(colornames), 0xFF000000,
2777 NULL, HFILL
2780 {&hf_gvsp_pixeloccupy,
2781 { "Occupy Bits", "gvsp.pixel.occupy",
2782 FT_UINT32, BASE_DEC, NULL, 0x00FF0000,
2783 NULL, HFILL
2786 {&hf_gvsp_pixelid,
2787 { "ID", "gvsp.pixel.id",
2788 FT_UINT32, BASE_HEX, NULL, 0x0000FFFF,
2789 NULL, HFILL
2792 {&hf_gvsp_filename,
2793 { "Filename", "gvsp.filename",
2794 FT_STRINGZ, BASE_NONE, NULL, 0,
2795 NULL, HFILL
2798 {&hf_gvsp_payloadlength,
2799 { "Payload Length", "gvsp.payloadlength",
2800 FT_UINT32, BASE_DEC, NULL, 0,
2801 NULL, HFILL
2804 {&hf_gvsp_fieldinfo,
2805 { "Field Info", "gvsp.fieldinfo",
2806 FT_UINT8, BASE_HEX, NULL, 0,
2807 NULL, HFILL
2810 {&hf_gvsp_fieldid,
2811 { "Field ID", "gvsp.fieldid",
2812 FT_UINT8, BASE_HEX, NULL, 0xF0,
2813 NULL, HFILL
2816 {&hf_gvsp_fieldcount,
2817 { "Field Count", "gvsp.fieldcount",
2818 FT_UINT8, BASE_HEX, NULL, 0x0F,
2819 NULL, HFILL
2822 {&hf_gvsp_genericflags,
2823 { "Generic Flag", "gvsp.genericflag",
2824 FT_UINT8, BASE_HEX, NULL, 0,
2825 NULL, HFILL
2828 {&hf_gvsp_timestamptickfrequency ,
2829 { "Timestamp Tick Frequency", "gvsp.timestamptickfrequency",
2830 FT_UINT64, BASE_HEX_DEC, NULL, 0x0,
2831 NULL, HFILL
2834 {&hf_gvsp_dataformat,
2835 { "Data Format", "gvsp.dataformat",
2836 FT_UINT32, BASE_HEX, NULL, 0,
2837 NULL, HFILL
2840 {&hf_gvsp_packetizationmode,
2841 { "packetization_mode", "gvsp.packetizationmode",
2842 FT_UINT8, BASE_HEX, NULL, 0,
2843 NULL, HFILL
2846 {&hf_gvsp_packetsize,
2847 { "packet_size", "gvsp.packetsize",
2848 FT_UINT16, BASE_DEC, NULL, 0,
2849 NULL, HFILL
2852 {&hf_gvsp_profileidc,
2853 { "profile_idc", "gvsp.profileidc",
2854 FT_UINT8, BASE_HEX, NULL, 0,
2855 NULL, HFILL
2858 {&hf_gvsp_cs,
2859 { "cs", "gvsp.cs",
2860 FT_UINT8, BASE_HEX, NULL, 0,
2861 NULL, HFILL
2864 {&hf_gvsp_cs0,
2865 { "cs0", "gvsp.cs0",
2866 FT_UINT8, BASE_HEX, NULL, 0x80,
2867 NULL, HFILL
2870 {&hf_gvsp_cs1,
2871 { "cs1", "gvsp.cs1",
2872 FT_UINT8, BASE_HEX, NULL, 0x40,
2873 NULL, HFILL
2876 {&hf_gvsp_cs2,
2877 { "cs2", "gvsp.cs2",
2878 FT_UINT8, BASE_HEX, NULL, 0x20,
2879 NULL, HFILL
2882 {&hf_gvsp_cs3,
2883 { "cs3", "gvsp.cs3",
2884 FT_UINT8, BASE_HEX, NULL, 0x10,
2885 NULL, HFILL
2888 {&hf_gvsp_levelidc,
2889 { "level_idc", "gvsp.levelidc",
2890 FT_UINT8, BASE_HEX, NULL, 0,
2891 NULL, HFILL
2894 {&hf_gvsp_sropinterleavingdepth,
2895 { "srop_interleaving_depth", "gvsp.sropinterleavingdepth",
2896 FT_UINT16, BASE_HEX, NULL, 0,
2897 NULL, HFILL
2900 {&hf_gvsp_sropmaxdondiff,
2901 { "srop_max_don_diff", "gvsp.sropmaxdondiff",
2902 FT_UINT16, BASE_HEX, NULL, 0,
2903 NULL, HFILL
2906 {&hf_gvsp_sropdeintbufreq,
2907 { "srop_deint_buf_req", "gvsp.sropdeintbufreq",
2908 FT_UINT32, BASE_HEX, NULL, 0,
2909 NULL, HFILL
2912 {&hf_gvsp_sropinitbuftime,
2913 { "srop_init_buf_time", "gvsp.sropinitbuftime",
2914 FT_UINT32, BASE_HEX, NULL, 0,
2915 NULL, HFILL
2918 {&hf_gvsp_add_zones,
2919 { "Additional Zones (Multi-Zone)", "gvsp.addzones",
2920 FT_UINT8, BASE_HEX, NULL, 0x1F,
2921 NULL, HFILL
2924 {&hf_gvsp_zoneinfo,
2925 { "Zone Info (Multi-Zone)", "gvsp.multizoneinfo",
2926 FT_UINT8, BASE_HEX, NULL, 0,
2927 NULL, HFILL
2930 {&hf_gvsp_zoneid,
2931 { "Zone ID", "gvsp.zoneid",
2932 FT_UINT8, BASE_HEX, NULL, 0x3E,
2933 NULL, HFILL
2936 {&hf_gvsp_endofzone,
2937 { "End of Zone", "gvsp.endofzone",
2938 FT_BOOLEAN, 8, NULL, 0x01,
2939 NULL, HFILL
2942 {&hf_gvsp_addressoffset,
2943 { "Address Offset", "gvsp.addressoffset",
2944 FT_UINT64, BASE_HEX_DEC, NULL, 0,
2945 NULL, HFILL
2948 {&hf_gvsp_sc_zone_direction,
2949 { "Zone Directions Mask", "gvsp.zonedirection",
2950 FT_UINT32, BASE_HEX_DEC, NULL, 0,
2951 NULL, HFILL
2954 {&hf_gvsp_sc_zone0_direction,
2955 { "Zone 0 Direction", "gvsp.zone0direction",
2956 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x80000000,
2957 NULL, HFILL
2960 {&hf_gvsp_sc_zone1_direction,
2961 { "Zone 1 Direction", "gvsp.zone1direction",
2962 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x40000000,
2963 NULL, HFILL
2966 {&hf_gvsp_sc_zone2_direction,
2967 { "Zone 2 Direction", "gvsp.zone2direction",
2968 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x20000000,
2969 NULL, HFILL
2972 {&hf_gvsp_sc_zone3_direction,
2973 { "Zone 3 Direction", "gvsp.zone3direction",
2974 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x10000000,
2975 NULL, HFILL
2978 {&hf_gvsp_sc_zone4_direction,
2979 { "Zone 4 Direction", "gvsp.zone4direction",
2980 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x08000000,
2981 NULL, HFILL
2984 {&hf_gvsp_sc_zone5_direction,
2985 { "Zone 5 Direction", "gvsp.zone5direction",
2986 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x04000000,
2987 NULL, HFILL
2990 {&hf_gvsp_sc_zone6_direction,
2991 { "Zone 6 Direction", "gvsp.zone6direction",
2992 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x02000000,
2993 NULL, HFILL
2996 {&hf_gvsp_sc_zone7_direction,
2997 { "Zone 7 Direction", "gvsp.zone7direction",
2998 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x01000000,
2999 NULL, HFILL
3002 {&hf_gvsp_sc_zone8_direction,
3003 { "Zone 8 Direction", "gvsp.zone8direction",
3004 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00800000,
3005 NULL, HFILL
3008 {&hf_gvsp_sc_zone9_direction,
3009 { "Zone 9 Direction", "gvsp.zone9direction",
3010 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00400000,
3011 NULL, HFILL
3014 {&hf_gvsp_sc_zone10_direction,
3015 { "Zone 10 Direction", "gvsp.zone10direction",
3016 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00200000,
3017 NULL, HFILL
3020 {&hf_gvsp_sc_zone11_direction,
3021 { "Zone 11 Direction", "gvsp.zone11direction",
3022 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00100000,
3023 NULL, HFILL
3026 {&hf_gvsp_sc_zone12_direction,
3027 { "Zone 12 Direction", "gvsp.zone12direction",
3028 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00080000,
3029 NULL, HFILL
3032 {&hf_gvsp_sc_zone13_direction,
3033 { "Zone 13 Direction", "gvsp.zone13direction",
3034 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00040000,
3035 NULL, HFILL
3038 {&hf_gvsp_sc_zone14_direction,
3039 { "Zone 14 Direction", "gvsp.zone14direction",
3040 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00020000,
3041 NULL, HFILL
3044 {&hf_gvsp_sc_zone15_direction,
3045 { "Zone 15 Direction", "gvsp.zone15direction",
3046 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00010000,
3047 NULL, HFILL
3050 {&hf_gvsp_sc_zone16_direction,
3051 { "Zone 16 Direction", "gvsp.zone16direction",
3052 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00008000,
3053 NULL, HFILL
3056 {&hf_gvsp_sc_zone17_direction,
3057 { "Zone 17 Direction", "gvsp.zone17direction",
3058 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00004000,
3059 NULL, HFILL
3062 {&hf_gvsp_sc_zone18_direction,
3063 { "Zone 18 Direction", "gvsp.zone18direction",
3064 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00002000,
3065 NULL, HFILL
3068 {&hf_gvsp_sc_zone19_direction,
3069 { "Zone 19 Direction", "gvsp.zone19direction",
3070 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00001000,
3071 NULL, HFILL
3074 {&hf_gvsp_sc_zone20_direction,
3075 { "Zone 20 Direction", "gvsp.zone20direction",
3076 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000800,
3077 NULL, HFILL
3080 {&hf_gvsp_sc_zone21_direction,
3081 { "Zone 21 Direction", "gvsp.zone21direction",
3082 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000400,
3083 NULL, HFILL
3086 {&hf_gvsp_sc_zone22_direction,
3087 { "Zone 22 Direction", "gvsp.zone22direction",
3088 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000200,
3089 NULL, HFILL
3092 {&hf_gvsp_sc_zone23_direction,
3093 { "Zone 23 Direction", "gvsp.zone23direction",
3094 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000100,
3095 NULL, HFILL
3098 {&hf_gvsp_sc_zone24_direction,
3099 { "Zone 24 Direction", "gvsp.zone24direction",
3100 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000080,
3101 NULL, HFILL
3104 {&hf_gvsp_sc_zone25_direction,
3105 { "Zone 25 Direction", "gvsp.zone25direction",
3106 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000040,
3107 NULL, HFILL
3110 {&hf_gvsp_sc_zone26_direction,
3111 { "Zone 26 Direction", "gvsp.zone26direction",
3112 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000020,
3113 NULL, HFILL
3116 {&hf_gvsp_sc_zone27_direction,
3117 { "Zone 27 Direction", "gvsp.zone27direction",
3118 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000010,
3119 NULL, HFILL
3122 {&hf_gvsp_sc_zone28_direction,
3123 { "Zone 28 Direction", "gvsp.zone28direction",
3124 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000008,
3125 NULL, HFILL
3128 {&hf_gvsp_sc_zone29_direction,
3129 { "Zone 29 Direction", "gvsp.zone29direction",
3130 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000004,
3131 NULL, HFILL
3134 {&hf_gvsp_sc_zone30_direction,
3135 { "Zone 30 Direction", "gvsp.zone30direction",
3136 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000002,
3137 NULL, HFILL
3140 {&hf_gvsp_sc_zone31_direction,
3141 { "Zone 31 Direction", "gvsp.zone31direction",
3142 FT_BOOLEAN, 32, TFS(&zonedirectionnames), 0x00000001,
3143 NULL, HFILL
3146 {&hf_gvsp_numparts,
3147 { "Multi-part number of parts", "gvsp.numparts",
3148 FT_UINT8, BASE_DEC, NULL, 0,
3149 NULL, HFILL
3152 {&hf_gvsp_multipart_data_type,
3153 { "Data Type", "gvsp.multipartdatatype",
3154 FT_UINT16, BASE_HEX|BASE_EXT_STRING, &multipartdatatypenames_ext, 0,
3155 NULL, HFILL
3158 {&hf_gvsp_partlength,
3159 { "Part Length", "gvsp.partlength",
3160 FT_UINT64, BASE_HEX_DEC, NULL, 0,
3161 NULL, HFILL
3164 {&hf_gvsp_multi_part_source_id,
3165 { "Source ID", "gvsp.sourceid",
3166 FT_UINT8, BASE_HEX_DEC, NULL, 0,
3167 NULL, HFILL
3170 {&hf_gvsp_data_purpose_id,
3171 { "Data Purpose ID", "gvsp.datapurposeid",
3172 FT_UINT16, BASE_HEX_DEC, NULL, 0,
3173 NULL, HFILL
3176 {&hf_gvsp_region_id,
3177 { "Region ID", "gvsp.regionid",
3178 FT_UINT16, BASE_HEX_DEC, NULL, 0,
3179 NULL, HFILL
3182 {&hf_gvsp_data_type_specific,
3183 { "Data Type Specific", "gvsp.datatypespecific",
3184 FT_UINT32, BASE_HEX_DEC, NULL, 0,
3185 NULL, HFILL
3188 {&hf_gvsp_endofpart,
3189 { "End of Part", "gvsp.endofpart",
3190 FT_BOOLEAN, 8, NULL, 0x40,
3191 NULL, HFILL
3194 {&hf_gvsp_add_zones_multipart,
3195 { "Additional Zones (Multi-Part)", "gvsp.multipartaddzones",
3196 FT_UINT8, BASE_HEX, NULL, 0x1F,
3197 NULL, HFILL
3200 {&hf_gvsp_zoneinfo_multipart,
3201 { "Zone Info (Multi-Part)", "gvsp.multipartzoneinfo",
3202 FT_UINT8, BASE_HEX, NULL, 0,
3203 NULL, HFILL
3206 {&hf_gvsp_multi_part_part_id,
3207 { "Part ID", "gvsp.partid",
3208 FT_UINT8, BASE_HEX_DEC, NULL, 0,
3209 NULL, HFILL
3212 {&hf_gvsp_chunk_data_payload_length_hex,
3213 { "Chunk Data Payload Length", "gvsp.chunkdatapayloadlengthhex",
3214 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
3215 NULL, HFILL
3218 {&hf_gvsp_chunk_layout_id_hex,
3219 { "Chunk Layout ID", "gvsp.chunklayoutidhex",
3220 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
3221 NULL, HFILL
3224 /* GEV 2.2 */
3225 { &hf_gvsp_gendc_leader_descriptor_size_v2_2,
3226 { "GenDC Descriptor Size", "gvsp.gendcdescriptorsize",
3227 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
3228 NULL, HFILL
3229 } },
3231 { &hf_gvsp_gendc_leader_flags_v2_2,
3232 { "Flags", "gvsp.gendc.leader.flags",
3233 FT_UINT8, BASE_HEX, NULL, 0,
3234 NULL, HFILL
3235 } },
3237 { &hf_gvsp_gendc_leader_flags_preliminary_descriptor_v2_2,
3238 { "Preliminary Descriptor", "gvsp.gendc.leader.flags.preliminarydescriptor",
3239 FT_UINT8, BASE_HEX, NULL, 0x80,
3240 NULL, HFILL
3241 } },
3243 { &hf_gvsp_gendc_leader_flags_reserved_v2_2,
3244 { "Reserved", "gvsp.gendc.leader.flags.reserved",
3245 FT_UINT8, BASE_HEX, NULL, 0x7F,
3246 NULL, HFILL
3247 } },
3249 { &hf_gvsp_gendc_payload_data_size_v2_2,
3250 { "Data Size", "gvsp.gendc.payload.datasize",
3251 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
3252 NULL, HFILL
3253 } },
3255 { &hf_gvsp_gendc_payload_data_destination_offset_v2_2,
3256 { "Data Destination Offset", "gvsp.gendc.payload.datadestinationoffset",
3257 FT_UINT64, BASE_HEX_DEC, NULL, 0x0,
3258 NULL, HFILL
3259 } },
3261 { &hf_gvsp_gendc_payload_data_flags_v2_2,
3262 { "Data Flags", "gvsp.gendc.payload.dataflags",
3263 FT_UINT8, BASE_HEX, NULL, 0xFF,
3264 NULL, HFILL
3265 } },
3267 { &hf_gvsp_gendc_payload_data_flag_descriptor_flags_v2_2,
3268 { "Descriptor Data Present", "gvsp.gendc.payload.dataflags.descriptordatapresent",
3269 FT_UINT8, BASE_HEX, VALS(gendc_payload_descriptor_flag_values), GENDC_DESCRIPTOR_FLAG,
3270 NULL, HFILL
3271 } },
3273 { &hf_gvsp_gendc_payload_data_flag_start_of_descriptor_data_v2_2,
3274 { "Start Of Descriptor Data", "gvsp.gendc.payload.dataflags.startofdescriptordata",
3275 FT_UINT8, BASE_HEX, NULL, GENDC_DESCRIPTOR_START_FLAG,
3276 NULL, HFILL
3277 } },
3279 { &hf_gvsp_gendc_payload_data_flag_end_of_descriptor_data_v2_2,
3280 { "End Of Descriptor Data", "gvsp.gendc.payload.dataflags.endofdescriptordata",
3281 FT_UINT8, BASE_HEX, NULL, GENDC_DESCRIPTOR_END_FLAG,
3282 NULL, HFILL
3283 } },
3285 { &hf_gvsp_gendc_payload_data_flags_reserved_v2_2,
3286 { "Reserved", "gvsp.gendc.payload.dataflags.reserved",
3287 FT_UINT8, BASE_HEX, NULL, 0x0F,
3288 NULL, HFILL
3289 } },
3291 { &hf_gvsp_gendc_payload_flow_flags_v2_2,
3292 { "Flow Flags", "gvsp.gendc.payload.flowflags",
3293 FT_UINT8, BASE_HEX, NULL, 0xFF,
3294 NULL, HFILL
3295 } },
3297 { &hf_gvsp_gendc_payload_flow_flag_first_packet_v2_2,
3298 { "First Packet With Current Flow ID", "gvsp.gendc.payload.flowflags.firstpacketwithcurrentflow",
3299 FT_UINT8, BASE_HEX, NULL, 0x80,
3300 NULL, HFILL
3301 } },
3303 { &hf_gvsp_gendc_payload_flow_flag_last_packet_v2_2,
3304 { "Last Packet With Current Flow ID", "gvsp.gendc.payload.flowflags.lastpacketwithcurrentflow",
3305 FT_UINT8, BASE_HEX, NULL, 0x40,
3306 NULL, HFILL
3307 } },
3309 { &hf_gvsp_gendc_payload_flow_id_v2_2,
3310 { "Flow ID", "gvsp.gendc.payload.flowid",
3311 FT_UINT16, BASE_DEC, NULL, 0x0,
3312 NULL, HFILL
3313 } },
3315 { &hf_gvsp_gendc_header_type_v2_2,
3316 { "Header Type", "gvsp.gendc.header.type",
3317 FT_UINT16, BASE_HEX, VALS(gendc_header_type_values), 0x0,
3318 NULL, HFILL
3319 } },
3321 { &hf_gvsp_gendc_header_size_v2_2,
3322 { "Size", "gvsp.gendc.header.size",
3323 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
3324 NULL, HFILL
3325 } },
3327 { &hf_gvsp_gendc_header_reserved_1_byte_v2_2,
3328 { "Reserved (1 Byte)", "gvsp.gendc.header.reserved1",
3329 FT_UINT8, BASE_HEX, NULL, 0x0,
3330 NULL, HFILL
3331 } },
3333 { &hf_gvsp_gendc_header_reserved_2_bytes_v2_2,
3334 { "Reserved (2 Bytes)", "gvsp.gendc.header.reserved2",
3335 FT_UINT16, BASE_HEX, NULL, 0x0,
3336 NULL, HFILL
3337 } },
3339 { &hf_gvsp_gendc_header_reserved_4_bytes_v2_2,
3340 { "Reserved (4 Bytes)", "gvsp.gendc.header.reserved4",
3341 FT_UINT32, BASE_HEX, NULL, 0x0,
3342 NULL, HFILL
3343 } },
3345 { &hf_gvsp_gendc_container_header_signature_v2_2,
3346 { "Signature", "gvsp.gendc.container.header.signature",
3347 FT_STRING, BASE_NONE, NULL, 0x0,
3348 NULL, HFILL
3349 } },
3351 { &hf_gvsp_gendc_container_header_version_major_v2_2,
3352 { "Major Version", "gvsp.gendc.container.header.majorversion",
3353 FT_UINT8, BASE_DEC, NULL, 0x0,
3354 NULL, HFILL
3355 } },
3357 { &hf_gvsp_gendc_container_header_version_minor_v2_2,
3358 { "Minor Version", "gvsp.gendc.container.header.minorversion",
3359 FT_UINT8, BASE_DEC, NULL, 0x0,
3360 NULL, HFILL
3361 } },
3363 { &hf_gvsp_gendc_container_header_version_sub_minor_v2_2,
3364 { "Sub Minor Version", "gvsp.gendc.container.header.subminorversion",
3365 FT_UINT8, BASE_DEC, NULL, 0x0,
3366 NULL, HFILL
3367 } },
3369 { &hf_gvsp_gendc_container_header_flags_v2_2,
3370 { "Flags", "gvsp.gendc.container.header.flags",
3371 FT_UINT16, BASE_HEX, NULL, 0x0,
3372 NULL, HFILL
3373 } },
3375 { &hf_gvsp_gendc_container_header_flags_timestamp_ptp_v2_2,
3376 { "Timestamp PTP", "gvsp.gendc.container.header.flags.timestampptp",
3377 FT_UINT16, BASE_HEX, NULL, 0x0001,
3378 NULL, HFILL
3379 } },
3381 { &hf_gvsp_gendc_container_header_flags_component_invalid_v2_2,
3382 { "Component Invalid", "gvsp.gendc.container.header.flags.componentinvalid",
3383 FT_UINT16, BASE_HEX, NULL, 0x0002,
3384 NULL, HFILL
3385 } },
3387 { &hf_gvsp_gendc_container_header_flags_reserved_v2_2,
3388 { "Reserved", "gvsp.gendc.container.header.flags.reserved",
3389 FT_UINT16, BASE_HEX, NULL, 0xFFFC,
3390 NULL, HFILL
3391 } },
3393 { &hf_gvsp_gendc_container_header_id_v2_2,
3394 { "ID", "gvsp.gendc.container.header.id",
3395 FT_UINT64, BASE_HEX_DEC, NULL, 0x0,
3396 NULL, HFILL
3397 } },
3399 { &hf_gvsp_gendc_container_header_variable_fields_v2_2,
3400 { "Variable Fields", "gvsp.gendc.container.header.variablefields",
3401 FT_UINT16, BASE_HEX, NULL, 0x0,
3402 NULL, HFILL
3403 } },
3405 { &hf_gvsp_gendc_container_header_variable_fields_data_size_v2_2,
3406 { "Data Size", "gvsp.gendc.container.header.variablefields.datasize",
3407 FT_UINT16, BASE_HEX, NULL, 0x0001,
3408 NULL, HFILL
3409 } },
3411 { &hf_gvsp_gendc_container_header_variable_fields_size_x_v2_2,
3412 { "Size X", "gvsp.gendc.container.header.variablefields.sizex",
3413 FT_UINT16, BASE_HEX, NULL, 0x0002,
3414 NULL, HFILL
3415 } },
3417 { &hf_gvsp_gendc_container_header_variable_fields_size_y_v2_2,
3418 { "Size Y", "gvsp.gendc.container.header.variablefields.sizey",
3419 FT_UINT16, BASE_HEX, NULL, 0x0004,
3420 NULL, HFILL
3421 } },
3423 { &hf_gvsp_gendc_container_header_variable_fields_region_offset_v2_2,
3424 { "Region Offset", "gvsp.gendc.container.header.variablefields.regionoffset",
3425 FT_UINT16, BASE_HEX, NULL, 0x0008,
3426 NULL, HFILL
3427 } },
3429 { &hf_gvsp_gendc_container_header_variable_fields_format_v2_2,
3430 { "Format", "gvsp.gendc.container.header.variablefields.format",
3431 FT_UINT16, BASE_HEX, NULL, 0x0010,
3432 NULL, HFILL
3433 } },
3435 { &hf_gvsp_gendc_container_header_variable_fields_timestamp_v2_2,
3436 { "Timestamp", "gvsp.gendc.container.header.variablefields.timestamp",
3437 FT_UINT16, BASE_HEX, NULL, 0x0020,
3438 NULL, HFILL
3439 } },
3441 { &hf_gvsp_gendc_container_header_variable_fields_component_count_v2_2,
3442 { "Component Count", "gvsp.gendc.container.header.variablefields.componentcount",
3443 FT_UINT16, BASE_HEX, NULL, 0x0040,
3444 NULL, HFILL
3445 } },
3447 { &hf_gvsp_gendc_container_header_variable_fields_component_invalid_v2_2,
3448 { "Component Invalid", "gvsp.gendc.container.header.variablefields.componentinvalid",
3449 FT_UINT16, BASE_HEX, NULL, 0x0080,
3450 NULL, HFILL
3451 } },
3453 { &hf_gvsp_gendc_container_header_variable_fields_reserved_v2_2,
3454 { "Reserved", "gvsp.gendc.container.header.variablefields.reserved",
3455 FT_UINT16, BASE_HEX, NULL, 0xFF00,
3456 NULL, HFILL
3457 } },
3459 { &hf_gvsp_gendc_container_header_data_size_v2_2,
3460 { "Data Size", "gvsp.gendc.container.header.datasize",
3461 FT_UINT64, BASE_HEX_DEC, NULL, 0x0,
3462 NULL, HFILL
3463 } },
3465 { &hf_gvsp_gendc_container_header_data_offset_v2_2,
3466 { "Data Offset", "gvsp.gendc.container.header.dataoffset",
3467 FT_UINT64, BASE_HEX_DEC, NULL, 0x0,
3468 NULL, HFILL
3469 } },
3471 { &hf_gvsp_gendc_container_header_descriptor_size_v2_2,
3472 { "Descriptor Size", "gvsp.gendc.container.header.descriptorsize",
3473 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
3474 NULL, HFILL
3475 } },
3477 { &hf_gvsp_gendc_container_header_component_count_v2_2,
3478 { "Component Count", "gvsp.gendc.container.header.componentcount",
3479 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
3480 NULL, HFILL
3481 } },
3483 { &hf_gvsp_gendc_container_header_component_offset_v2_2,
3484 { "Component Offset", "gvsp.gendc.container.header.componentoffset",
3485 FT_UINT64, BASE_HEX_DEC, NULL, 0x0,
3486 NULL, HFILL
3487 } },
3489 { &hf_gvsp_gendc_component_header_flags_v2_2,
3490 { "Flags", "gvsp.gendc.component.header.flags",
3491 FT_UINT16, BASE_HEX, NULL, 0x0,
3492 NULL, HFILL
3493 } },
3495 { &hf_gvsp_gendc_component_header_flags_invalid_v2_2,
3496 { "Invalid", "gvsp.gendc.container.header.flags.invalid",
3497 FT_UINT16, BASE_HEX, NULL, 0x0001,
3498 NULL, HFILL
3499 } },
3501 { &hf_gvsp_gendc_component_header_flags_reserved_v2_2,
3502 { "Reserved", "gvsp.gendc.component.header.flags.reserved",
3503 FT_UINT16, BASE_HEX, NULL, 0xFFFE,
3504 NULL, HFILL
3505 } },
3507 { &hf_gvsp_gendc_component_header_group_id_v2_2,
3508 { "Group ID", "gvsp.gendc.component.header.groupid",
3509 FT_UINT16, BASE_HEX_DEC, NULL, 0,
3510 NULL, HFILL
3511 } },
3513 { &hf_gvsp_gendc_component_header_source_id_v2_2,
3514 { "Source ID", "gvsp.gendc.component.header.sourceid",
3515 FT_UINT16, BASE_HEX_DEC, NULL, 0,
3516 NULL, HFILL
3517 } },
3519 { &hf_gvsp_gendc_component_header_region_id_v2_2,
3520 { "Region ID", "gvsp.gendc.component.header.regionid",
3521 FT_UINT16, BASE_HEX_DEC, NULL, 0,
3522 NULL, HFILL
3523 } },
3525 { &hf_gvsp_gendc_component_header_type_id_v2_2,
3526 { "Type ID", "gvsp.gendc.component.header.typeid",
3527 FT_UINT64, BASE_HEX | BASE_VAL64_STRING, VALS64(gendc_component_typeid_values), 0x0,
3528 NULL, HFILL
3529 } },
3531 { &hf_gvsp_gendc_component_header_part_count_v2_2,
3532 { "Part Count", "gvsp.gendc.component.header.partcount",
3533 FT_UINT16, BASE_HEX_DEC, NULL, 0x0,
3534 NULL, HFILL
3535 } },
3537 { &hf_gvsp_gendc_component_header_part_offset_v2_2,
3538 { "Part Offset", "gvsp.gendc.container.header.partoffset",
3539 FT_UINT64, BASE_HEX_DEC, NULL, 0x0,
3540 NULL, HFILL
3541 } },
3543 { &hf_gvsp_gendc_part_header_flags_xml_reserved1_v2_2,
3544 { "Reserved", "gvsp.gendc.part.header.flags.xml.reserved1",
3545 FT_UINT16, BASE_HEX, NULL, 0x00FF,
3546 NULL, HFILL
3547 } },
3549 { &hf_gvsp_gendc_part_header_flags_xml_zip_v2_2,
3550 { "ZIP", "gvsp.gendc.part.header.flags.xml.zip",
3551 FT_UINT16, BASE_HEX, NULL, 0x0100,
3552 NULL, HFILL
3553 } },
3555 { &hf_gvsp_gendc_part_header_flags_xml_chunk_v2_2,
3556 { "Chunk", "gvsp.gendc.part.header.flags.xml.chunk",
3557 FT_UINT16, BASE_HEX, NULL, 0x0200,
3558 NULL, HFILL
3559 } },
3561 { &hf_gvsp_gendc_part_header_flags_xml_reserved2_v2_2,
3562 { "Reserved", "gvsp.gendc.part.header.flags.xml.reserved2",
3563 FT_UINT16, BASE_HEX, NULL, 0xFC00,
3564 NULL, HFILL
3565 } },
3567 { &hf_gvsp_gendc_part_header_flags_v2_2,
3568 { "Flags", "gvsp.gendc.part.header.flags",
3569 FT_UINT16, BASE_HEX, NULL, 0x0,
3570 NULL, HFILL
3571 } },
3573 { &hf_gvsp_gendc_part_header_flow_offset_v2_2,
3574 { "Flow Offset", "gvsp.gendc.part.header.flowoffset",
3575 FT_UINT64, BASE_HEX_DEC, NULL, 0x0,
3576 NULL, HFILL
3577 } },
3579 { &hf_gvsp_gendc_part_header_type_specific_info_v2_2,
3580 { "Type Specific Info", "gvsp.gendc.part.header.typespecificinfo",
3581 FT_UINT64, BASE_HEX_DEC, NULL, 0x0,
3582 NULL, HFILL
3583 } },
3585 { &hf_gvsp_gendc_part_header_1D_size_v2_2,
3586 { "Size (1D Data)", "gvsp.gendc.part.header.1d.size",
3587 FT_UINT64, BASE_HEX_DEC, NULL, 0x0,
3588 NULL, HFILL
3589 } },
3591 { &hf_gvsp_gendc_part_header_1D_padding_v2_2,
3592 { "Padding (1D Data)", "gvsp.gendc.part.header.1d.padding",
3593 FT_UINT32, BASE_HEX_DEC, NULL, 0x0,
3594 NULL, HFILL
3595 } },
3598 static int *ett[] = {
3599 &ett_gvsp,
3600 &ett_gvsp_flags,
3601 &ett_gvsp_header,
3602 &ett_gvsp_payload,
3603 &ett_gvsp_trailer,
3604 &ett_gvsp_pixelformat,
3605 &ett_gvsp_fieldinfo,
3606 &ett_gvsp_cs,
3607 &ett_gvsp_sc_zone_direction,
3608 &ett_gvsp_zoneinfo,
3609 &ett_gvsp_zoneinfo_multipart,
3610 &ett_gvsp_partinfo_leader,
3611 &ett_gvsp_partinfo_trailer,
3612 &ett_gvsp_gendc_leader_flags,
3613 &ett_gvsp_gendc_payload_data_flags,
3614 &ett_gvsp_gendc_payload_flow_flags,
3615 &ett_gvsp_gendc_container_descriptor,
3616 &ett_gvsp_gendc_container_header_flags,
3617 &ett_gvsp_gendc_container_header_variable_fields,
3618 &ett_gvsp_gendc_container_header_component_offsets,
3619 &ett_gvsp_gendc_component_header,
3620 &ett_gvsp_gendc_component_header_flags,
3621 &ett_gvsp_gendc_part_offsets,
3622 &ett_gvsp_gendc_part_header,
3623 &ett_gvsp_gendc_part_header_flags
3626 proto_gvsp = proto_register_protocol("GigE Vision Streaming Protocol", "GVSP", "gvsp");
3628 gvsp_handle = register_dissector("gvsp", dissect_gvsp, proto_gvsp);
3630 proto_register_field_array(proto_gvsp, hfgvsp, array_length(hfgvsp));
3631 proto_register_subtree_array(ett, array_length(ett));
3633 gvsp_module = prefs_register_protocol(proto_gvsp, NULL);
3634 prefs_register_obsolete_preference(gvsp_module, "enable_heuristic");
3637 void proto_reg_handoff_gvsp(void)
3639 dissector_add_for_decode_as_with_preference("udp.port", gvsp_handle);
3640 heur_dissector_add("udp", dissect_gvsp_heur, "GigE Vision over UDP", "gvsp_udp", proto_gvsp, HEURISTIC_DISABLE);
3644 * Editor modelines - https://www.wireshark.org/tools/modelines.html
3646 * Local variables:
3647 * c-basic-offset: 4
3648 * tab-width: 8
3649 * indent-tabs-mode: nil
3650 * End:
3652 * vi: set shiftwidth=4 tabstop=8 expandtab:
3653 * :indentSize=4:tabSize=8:noTabs=true: