1 package de.desy.video.sw;
2
3 import java.util.Date;
4 import java.lang.System;
5 import de.desy.tine.types.IMAGE;
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 public final class CVideoHeader2 {
22
23 public static final int HDRSIZE=88;
24
25 public static final long HUFFYUV_FOURCC = 0x55594648;
26
27
28 private long compression;
29
30 private int len_total;
31
32 private int len_data;
33
34 private int len_fmthdr;
35
36 private long framenumber;
37
38 private Date timestamp=null;
39
40 private int cameraport;
41
42 private int width;
43
44 private int height;
45
46 private boolean compressed;
47
48 private double framerate;
49
50 private double scale;
51
52 private int bypp;
53
54 private int effective_bpp;
55
56
57 private final long KENNUNG=0x11223344;
58
59
60 private final long MAX_INT=0x7FFFFFFF;
61
62
63
64
65
66
67 public CVideoHeader2()
68 {
69 init();
70 }
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88 public boolean packageV2BlobIntoIMAGE( String aCamPort, final byte [] aImageV2blob, IMAGE aDestImage)
89 {
90 if (import_from_bytebuf( aImageV2blob ) == false)
91 return false;
92
93 IMAGE.FrameHeader frameHeader = aDestImage.getFrameHeader();
94 IMAGE.SourceHeader sourceHeader = aDestImage.getSourceHeader();
95
96
97 frameHeader.aoiHeight = -1;
98 frameHeader.aoiWidth = -1;
99 frameHeader.bytesPerPixel = bypp;
100 frameHeader.sourceWidth = width;
101 frameHeader.sourceHeight = height;
102 frameHeader.effectiveBitsPerPixel = effective_bpp;
103
104 frameHeader.appendedFrameSize = frameHeader.sourceWidth*frameHeader.sourceHeight*frameHeader.bytesPerPixel;
105
106 frameHeader.eventNumber = -1;
107 frameHeader.frameNumber = (int) framenumber;
108 frameHeader.fspare1 = (float) -1.0;
109 frameHeader.fspare2 = (float) -1.0;
110 frameHeader.fspare3 = (float) -1.0;
111 frameHeader.horizontalBinning = 0;
112 frameHeader.imageFlags = (int) CVideoHeader3.CF_IMAGE_FLAG_IMAGE_LOSSLESS | (int) CVideoHeader3.CF_IMAGE_FLAG_LITTLE_ENDIAN_BYTE_ORDER;
113
114 frameHeader.imageFormat = (int) CVideoHeader3.CF_IMAGE_FORMAT_GRAY;
115 if (compressed == true)
116 {
117 frameHeader.imageFormat = (int) CVideoHeader3.CF_IMAGE_FORMAT_HUFFYUV;
118 frameHeader.appendedFrameSize = len_data;
119 }
120 frameHeader.imageRotation = (float) 0.0;
121 frameHeader.ispare1 = -1;
122 frameHeader.ispare2 = -1;
123 frameHeader.ispare3 = -1;
124 frameHeader.sourceFormat = (int) CVideoHeader3.CF_IMAGE_FORMAT_GRAY;
125 frameHeader.verticalBinning = 0;
126 frameHeader.xScale = (float) scale;
127 frameHeader.xStart = 0;
128 frameHeader.yScale = (float) scale;
129 frameHeader.yStart = 0;
130
131 sourceHeader.baseTag = (int) CVideoHeader3.CF_IMAGE_MAGIC_01;
132 sourceHeader.cameraPortName = aCamPort;
133 sourceHeader.cameraPortId = (int) CVideoHeader3.CF_IMAGE_NO_CAMERA_PORT_ID;
134
135 long temptime = timestamp.getTime();
136 long temptime_msec = temptime % 1000;
137 long temptime_sec = temptime / 1000;
138
139 sourceHeader.timestampMicroseconds = (int) temptime_msec*1000;
140 sourceHeader.timestampSeconds = (int) temptime_sec;
141 sourceHeader.totalLength = CVideoHeader3.HDRSIZE + frameHeader.appendedFrameSize;
142 sourceHeader.versionTag = CVideoHeader3.CF_IMAGE_VERSION;
143
144 byte[] destBuf = aDestImage.getImageFrameBuffer();
145
146 byte[] srcBuf = aImageV2blob;
147 int srcOffset = 0+HDRSIZE+len_fmthdr;
148
149 System.arraycopy(srcBuf, srcOffset, destBuf, 0, len_data );
150
151 return true;
152 }
153
154 private void init()
155 {
156 compression = 0;
157
158 len_total = HDRSIZE;
159 len_data = 0;
160 len_fmthdr = 0;
161 framenumber = -1;
162 timestamp = new Date(0L);
163 cameraport = -1;
164 width=-1;
165 height=-1;
166
167 compressed = false;
168 framerate = 5.0;
169 scale = 1.000;
170 bypp = 1;
171 effective_bpp = 8;
172 }
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347 public boolean import_from_bytebuf( byte[] buf )
348 {
349
350 long l_kennung;
351 long l_compression;
352 long l_width;
353 long l_height;
354 long l_bypp;
355 long l_effective_bpp;
356 long l_len_total;
357 long l_len_data;
358 long l_len_fmthdr;
359 long l_framenumber;
360 long l_cameraport;
361 long l_timestamp;
362 long l_compressed;
363 double l_scale;
364 double l_framerate;
365
366 if (buf.length < HDRSIZE) return false;
367
368 int off=0;
369 l_kennung = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
370
371 off = 4;
372 l_compression = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
373
374 off = 8;
375 l_len_total = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
376
377 off = 12;
378 l_len_data = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
379
380 off = 16;
381 l_len_fmthdr = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
382
383 off = 20;
384 l_framenumber = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
385
386 off = 24;
387 long l_timestamp_sec = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
388 off = 28;
389 long l_timestamp_msec = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8);
390
391 l_timestamp = (l_timestamp_sec*1000L)+l_timestamp_msec;
392
393 off = 36;
394 l_cameraport = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
395
396 off = 40;
397 l_width = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
398
399 off = 44;
400 l_height = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
401
402 off = 48;
403 l_compressed = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
404
405 off = 56;
406
407 long l_framerate_long = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|
408 ((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24)|
409 ((((long)buf[off+4])&0xFF)<<32)|((((long)buf[off+5])&0xFF)<<40)|
410 ((((long)buf[off+6])&0xFF)<<48)|((((long)buf[off+7])&0xFF)<<56);
411
412 l_framerate = Double.longBitsToDouble(l_framerate_long);
413
414 off = 64;
415 long l_scale_long = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|
416 ((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24)|
417 ((((long)buf[off+4])&0xFF)<<32)|((((long)buf[off+5])&0xFF)<<40)|
418 ((((long)buf[off+6])&0xFF)<<48)|((((long)buf[off+7])&0xFF)<<56);
419
420 l_scale = Double.longBitsToDouble(l_scale_long);
421
422 off = 72;
423 l_bypp = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
424 l_bypp /= 8;
425
426 off = 76;
427 l_effective_bpp = (((long)buf[off+0])&0xFF)|((((long)buf[off+1])&0xFF)<<8)|((((long)buf[off+2])&0xFF)<<16)|((((long)buf[off+3])&0xFF)<<24);
428
429
430 if (l_effective_bpp >= l_bypp*8) l_effective_bpp = l_bypp*8;
431
432
433
434 if ((l_kennung == KENNUNG) &&
435 ((l_width >0) && (l_width<=MAX_INT)) &&
436 ((l_height > 0) && (l_height<=MAX_INT) ) &&
437 ((l_bypp == 1) || (l_bypp == 2) || (l_bypp == 4)) &&
438 (l_effective_bpp <= l_bypp*8) &&
439 (l_len_total <= buf.length) &&
440 (l_len_data <= buf.length) &&
441 (l_len_fmthdr <= buf.length) &&
442 (l_len_total == l_len_data+l_len_fmthdr+HDRSIZE) &&
443 (l_framenumber > 0) &&
444 ((l_cameraport >= 0) && (l_cameraport <= MAX_INT)) &&
445 (l_timestamp > 0) &&
446 ((l_compressed == 0) || (l_compressed == 1)) &&
447 (l_scale > 0.0) &&
448 (l_framerate > 0.0))
449 {
450 compression = l_compression;
451 width = (int) l_width;
452 height = (int) l_height;
453 bypp = (int) l_bypp;
454 effective_bpp = (int) l_effective_bpp;
455 len_total = (int) l_len_total;
456 len_data = (int) l_len_data;
457 len_fmthdr = (int) l_len_fmthdr;
458 framenumber = l_framenumber;
459 cameraport = (int) l_cameraport;
460 timestamp = new Date(l_timestamp);
461 framerate = l_framerate;
462 scale = l_scale;
463 compressed = false;
464 if (l_compressed == 1) compressed = true;
465
466 return true;
467 }
468
469 return false;
470 }
471
472 }
473