428
else if (header->pixel_size == 10) {
436
else { /*if (output_mode == IPECAMERA_MODE_16_CHAN_IO)*/
429
437
while (raw[base] != 0xAAAAAAA) {
430
438
header = (payload_header_v5 *) &raw[base];
431
439
index = header->row_number * IPECAMERA_WIDTH + header->pixel_number;
433
441
/* Skip header + two zero-filled words */
436
pixel_buffer[index + 15*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base] >> 22);
437
pixel_buffer[index + 13*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base] >> 12);
438
pixel_buffer[index + 14*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base] >> 2);
439
pixel_buffer[index + 12*IPECAMERA_PIXELS_PER_CHANNEL] = ((0x3 & raw[base]) << 8) | (0x3ff & (raw[base+1] >> 24));
440
pixel_buffer[index + 10*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+1] >> 14);
441
pixel_buffer[index + 8*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+1] >> 4);
442
pixel_buffer[index + 11*IPECAMERA_PIXELS_PER_CHANNEL] = ((0xf & raw[base+1]) << 6) | (0x3ff & (raw[base+2] >> 26));
443
pixel_buffer[index + 7*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+2] >> 16);
444
pixel_buffer[index + 9*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+2] >> 6);
445
pixel_buffer[index + 6*IPECAMERA_PIXELS_PER_CHANNEL] = ((0x3f & raw[base+2]) << 4) | (0x3ff & (raw[base+3] >> 28));
446
pixel_buffer[index + 5*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+3] >> 18);
447
pixel_buffer[index + 2*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+3] >> 8);
448
pixel_buffer[index + 4*IPECAMERA_PIXELS_PER_CHANNEL] = ((0xff & raw[base+3]) << 2) | (0x3ff & (raw[base+4] >> 30));
449
pixel_buffer[index + 3*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+4] >> 20);
450
pixel_buffer[index + 0*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+4] >> 10);
451
pixel_buffer[index + 1*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & raw[base+4];
444
pixel_buffer[index + 15*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base] >> 22);
445
pixel_buffer[index + 13*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base] >> 12);
446
pixel_buffer[index + 14*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base] >> 2);
447
pixel_buffer[index + 12*IPECAMERA_PIXELS_PER_CHANNEL] = ((0x3 & raw[base]) << 8) | (0x3ff & (raw[base+1] >> 24));
448
pixel_buffer[index + 10*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+1] >> 14);
449
pixel_buffer[index + 8*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+1] >> 4);
450
pixel_buffer[index + 11*IPECAMERA_PIXELS_PER_CHANNEL] = ((0xf & raw[base+1]) << 6) | (0x3ff & (raw[base+2] >> 26));
451
pixel_buffer[index + 7*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+2] >> 16);
452
pixel_buffer[index + 9*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+2] >> 6);
453
pixel_buffer[index + 6*IPECAMERA_PIXELS_PER_CHANNEL] = ((0x3f & raw[base+2]) << 4) | (0x3ff & (raw[base+3] >> 28));
454
pixel_buffer[index + 5*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+3] >> 18);
455
pixel_buffer[index + 2*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+3] >> 8);
456
pixel_buffer[index + 4*IPECAMERA_PIXELS_PER_CHANNEL] = ((0xff & raw[base+3]) << 2) | (0x3ff & (raw[base+4] >> 30));
457
pixel_buffer[index + 3*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+4] >> 20);
458
pixel_buffer[index + 0*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+4] >> 10);
459
pixel_buffer[index + 1*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & raw[base+4];
465
if (header->magic != 0xc0) {
466
pixel_buffer[index + 15*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base] >> 20);
467
pixel_buffer[index + 13*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base] >> 8);
468
pixel_buffer[index + 14*IPECAMERA_PIXELS_PER_CHANNEL] = (0xff & raw[base]) << 4 | (raw[base+1] >> 28);
469
pixel_buffer[index + 12*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+1] >> 16);
470
pixel_buffer[index + 10*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+1] >> 4);
471
pixel_buffer[index + 8*IPECAMERA_PIXELS_PER_CHANNEL] = ((0xf & raw[base+1]) << 8) | (raw[base+2] >> 24);
472
pixel_buffer[index + 11*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+2] >> 12);
473
pixel_buffer[index + 7*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & raw[base+2];
474
pixel_buffer[index + 9*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+3] >> 20);
475
pixel_buffer[index + 6*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+3] >> 8);
476
pixel_buffer[index + 5*IPECAMERA_PIXELS_PER_CHANNEL] = (0xff & raw[base+3]) << 4 | (raw[base+4] >> 28);
477
pixel_buffer[index + 2*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+4] >> 16);
478
pixel_buffer[index + 4*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+4] >> 4);
479
pixel_buffer[index + 3*IPECAMERA_PIXELS_PER_CHANNEL] = ((0xf & raw[base+4]) << 8) | (raw[base+5] >> 24);
480
pixel_buffer[index + 0*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & (raw[base+5] >> 12);
481
pixel_buffer[index + 1*IPECAMERA_PIXELS_PER_CHANNEL] = 0x3ff & raw[base+5];
486
if (header->magic == 0xc0)
544
584
CHECK_VALUE(raw[pos++], 0x55555555);
546
586
switch (version) {
548
CHECK_VALUE(raw[pos++], 0x56666666);
549
CHECK_VALUE(raw[pos] >> 28, 0x5);
550
meta->frame_number = raw[pos++] & 0xFFFFFFF;
551
CHECK_VALUE(raw[pos] >> 28, 0x5);
552
meta->time_stamp = raw[pos++] & 0xFFFFFFF;
557
CHECK_VALUE(raw[pos] >> 28, 0x5);
558
meta->cmosis_start_address = (raw[pos] >> 21) & 0x1FF;
559
meta->n_skipped_rows = (raw[pos] >> 15) & 0x3F;
560
meta->n_rows = rows_per_frame = raw[pos] & 0x7FF;
563
meta->frame_number = raw[pos++] & 0x1FFFFFF;
564
CHECK_VALUE(raw[pos] >> 28, 0x5);
565
meta->time_stamp = raw[pos++] & 0xFFFFFF;
566
meta->output_mode = (raw[pos] >> 24) & 0x3;
567
meta->adc_resolution = (raw[pos] >> 26) & 0x3
571
fprintf(stderr, "Unsupported data format detected\n");
588
CHECK_VALUE(raw[pos++], 0x56666666);
589
CHECK_VALUE(raw[pos] >> 28, 0x5);
590
meta->frame_number = raw[pos++] & 0xFFFFFFF;
591
CHECK_VALUE(raw[pos] >> 28, 0x5);
592
meta->time_stamp = raw[pos++] & 0xFFFFFFF;
597
CHECK_VALUE(raw[pos] >> 28, 0x5);
598
meta->cmosis_start_address = (raw[pos] >> 21) & 0x1FF;
599
meta->n_skipped_rows = (raw[pos] >> 15) & 0x3F;
600
meta->n_rows = rows_per_frame = raw[pos] & 0x7FF;
603
meta->frame_number = raw[pos++] & 0x1FFFFFF;
604
CHECK_VALUE(raw[pos] >> 28, 0x5);
605
meta->time_stamp = raw[pos] & 0xFFFFFF;
606
meta->output_mode = (raw[pos] >> 24) & 0x3;
607
meta->adc_resolution = (raw[pos] >> 26) & 0x3;
610
if ((meta->output_mode != IPECAMERA_MODE_4_CHAN_IO)&&(meta->output_mode != IPECAMERA_MODE_4_CHAN_IO)) {
612
fprintf(stderr, "Output mode 0x%lx is not supported\n", meta->output_mode);
619
fprintf(stderr, "Unsupported data format detected\n");
578
626
switch (version) {
580
meta->frame_number = raw[pos + 6] & 0xFFFFFFF;
581
meta->time_stamp = raw[pos + 7] & 0xFFFFFFF;
585
meta->frame_number = raw[pos + 6] & 0x1FFFFFF;
586
meta->time_stamp = raw[pos + 7] & 0xFFFFFF;
589
fprintf(stderr, "Unsupported data format detected\n");
628
meta->frame_number = raw[pos + 6] & 0xFFFFFFF;
629
meta->time_stamp = raw[pos + 7] & 0xFFFFFFF;
633
meta->frame_number = raw[pos + 6] & 0x1FFFFFF;
634
meta->time_stamp = raw[pos + 7] & 0xFFFFFF;
635
meta->output_mode = (raw[pos + 7] >> 24) & 0x3;
636
meta->adc_resolution = (raw[pos + 7] >> 26) & 0x3;
640
fprintf(stderr, "Unsupported data format detected\n");
596
647
switch (version) {
598
err = ufo_decode_frame_channels_v0(decoder, pixels, raw + pos, num_words - pos - 8, &advance);
601
err = ufo_decode_frame_channels_v4(decoder, pixels, raw + pos, num_words - pos - 8, rows_per_frame, &advance);
604
err = ufo_decode_frame_channels_v5(decoder, pixels, raw + pos, num_words - pos - 8, rows_per_frame, &advance);
649
err = ufo_decode_frame_channels_v0(decoder, pixels, raw + pos, num_words - pos - 8, &advance);
652
err = ufo_decode_frame_channels_v4(decoder, pixels, raw + pos, num_words - pos - 8, rows_per_frame, &advance);
655
err = ufo_decode_frame_channels_v5(decoder, pixels, raw + pos, num_words - pos - 8, rows_per_frame, &advance, meta->output_mode);