214 struct sigaction act;
218 act.sa_flags = SA_SIGINFO;
223 if( sigaction( SIGTERM, &act, 0 ) < 0 )
225 std::cerr <<
" (" << invokedName <<
"): error setting SIGTERM handler: " << strerror( errno ) <<
"\n";
230 if( sigaction( SIGQUIT, &act, 0 ) < 0 )
232 std::cerr <<
" (" << invokedName <<
"): error setting SIGQUIT handler: " << strerror( errno ) <<
"\n";
237 if( sigaction( SIGINT, &act, 0 ) < 0 )
239 std::cerr <<
" (" << invokedName <<
"): error setting SIGINT handler: " << strerror( errno ) <<
"\n";
251 m_files = mx::ioutils::getFileNames(
m_dir,
"",
"",
".xrif" );
261 for(
size_t n = 0; n <
m_files.size(); ++n )
269 std::cerr <<
" (" << invokedName <<
"): No files found.\n";
278 std::cerr <<
" (" << invokedName <<
"): Error allocating xrif.\n";
293 char header[XRIF_HEADER_SIZE];
298 for(
long n = st; n != ed; n += stp )
301 FILE *fp_xrif = fopen(
m_files[n].c_str(),
"rb" );
305 mx::errno_report(
"xrif2shmim", errno, __FILE__, __LINE__,
"null ptr from fopen for " +
m_files[n] );
309 if( ferror( fp_xrif ) || errno != 0 )
311 mx::errno_report(
"xrif2shmim", errno, __FILE__, __LINE__,
"error from fopen for " +
m_files[n] );
315 size_t nr = fread( header, 1, XRIF_HEADER_SIZE, fp_xrif );
318 if( nr != XRIF_HEADER_SIZE )
320 std::cerr <<
" (" << invokedName <<
"): Error reading header of " <<
m_files[n] <<
"\n";
324 uint32_t header_size;
325 xrif_read_header(
m_xrif, &header_size, header );
337 std::cerr <<
" (" << invokedName <<
"): width mis-match in " <<
m_files[n] <<
"\n";
342 std::cerr <<
" (" << invokedName <<
"): height mis-match in " <<
m_files[n] <<
"\n";
347 std::cerr <<
" (" << invokedName <<
"): data type mismatch in " <<
m_files[n] <<
"\n";
353 std::cerr <<
" (" << invokedName <<
"): Cubes detected in " <<
m_files[n] <<
"\n";
359 std::cerr <<
" (" << invokedName <<
"): Only 16-bit signed integers (short) supported" <<
"\n";
363 nframes +=
m_xrif->frames;
374 std::cerr <<
" (" << invokedName <<
"): exiting.\n";
384 std::cerr <<
" (" << invokedName <<
"): Reading " <<
m_numFrames <<
" frames in " << ( ed - st ) * stp <<
" file";
385 if( ( ed - st ) * stp > 1 )
407 for(
long n = st; n != ed; n += stp )
415 FILE *fp_xrif = fopen(
m_files[n].c_str(),
"rb" );
419 mx::errno_report(
"xrif2shmim", errno, __FILE__, __LINE__,
"null ptr from fopen for " +
m_files[n] );
423 if( ferror( fp_xrif ) || errno != 0 )
425 mx::errno_report(
"xrif2shmim", errno, __FILE__, __LINE__,
"error from fopen for " +
m_files[n] );
429 size_t nr = fread( header, 1, XRIF_HEADER_SIZE, fp_xrif );
431 if( nr != XRIF_HEADER_SIZE )
433 std::cerr <<
" (" << invokedName <<
"): Error reading header of " <<
m_files[n] <<
"\n";
438 uint32_t header_size;
439 xrif_read_header(
m_xrif, &header_size, header );
441 xrif_allocate_raw(
m_xrif );
443 xrif_allocate_reordered(
m_xrif );
445 nr = fread(
m_xrif->raw_buffer, 1,
m_xrif->compressed_size, fp_xrif );
454 if( nr !=
m_xrif->compressed_size )
456 std::cerr <<
" (" << invokedName <<
"): Error reading data from " <<
m_files[n] <<
"\n";
467 mx::improc::eigenCube<uint16_t> tmpc(
472 long ped = tmpc.planes();
475 pst = tmpc.planes() - 1;
479 for(
int p = pst; p != ped; p += stp )
481 m_frames.image( findex ) = tmpc.image( p );
492 std::cerr <<
" (" << invokedName <<
"): exiting.\n";
519 CIRCULAR_BUFFER | ZAXIS_TEMPORAL,
525 uint64_t next_cnt1 = 0;
532 double lastSend = mx::sys::get_curr_time();
542 clock_gettime( CLOCK_REALTIME, &
m_imageStream.md->writetime );
573 double ct = mx::sys::get_curr_time();
574 delta += 0.1 * ( ct - lastSend - 1.0 /
m_fps );
577 if( 1. /
m_fps - delta > 0 )
584 std::cerr <<
" (" << invokedName <<
"): exited normally.\n";