static void updateSetting (CCSBackend *backend, CCSContext *context, CCSPlugin *plugin, CCSSetting *setting) { if (readInit (backend, context)) { readSetting (backend, context, setting); readDone (backend, context); } }
void ReadKkit::innerRead( ifstream& fin ) { string line; string temp; lineNum_ = 0; string::size_type pos; bool clearLine = 1; ParseMode parseMode = INIT; while ( getline( fin, temp ) ) { lineNum_++; if ( clearLine ) line = ""; temp = trim(temp); if ( temp.length() == 0 ) continue; pos = temp.find_last_not_of( "\t " ); if ( pos == string::npos ) { // Nothing new in line, go with what was left earlier, // and clear out line for the next cycle. temp = ""; clearLine = 1; } else { if ( temp[pos] == '\\' ) { temp[pos] = ' '; line.append( temp ); clearLine = 0; continue; } else { line.append( temp ); clearLine = 1; } } pos = line.find_first_not_of( "\t " ); if ( pos == string::npos ) continue; else line = line.substr( pos ); if ( line.substr( 0, 2 ) == "//" ) continue; if ( (pos = line.find("//")) != string::npos ) line = line.substr( 0, pos ); if ( line.substr( 0, 2 ) == "/*" ) { parseMode = COMMENT; line = line.substr( 2 ); } if ( parseMode == COMMENT ) { pos = line.find( "*/" ); if ( pos != string::npos ) { parseMode = DATA; if ( line.length() > pos + 2 ) line = line.substr( pos + 2 ); } } if ( parseMode == DATA ) readData( line ); else if ( parseMode == INIT ) { parseMode = readInit( line ); } } /* cout << " innerRead: " << lineNum_ << " lines read, " << numCompartments_ << " compartments, " << numPools_ << " molecules, " << numReacs_ << " reacs, " << numEnz_ << " enzs, " << numMMenz_ << " MM enzs, " << numOthers_ << " others," << numPlot_ << " plots," << " PlotDt = " << plotdt_ << endl; */ }
/** initialize device */ static void deviceInit(void) { struct v4l2_capability cap; struct v4l2_cropcap cropcap; struct v4l2_crop crop; struct v4l2_format fmt; struct v4l2_streamparm frameint; unsigned int min; if (-1 == xioctl(fd, VIDIOC_QUERYCAP, &cap)) { if (EINVAL == errno) { fprintf(stderr, "%s is no V4L2 device\n",deviceName); exit(EXIT_FAILURE); } else { errno_exit("VIDIOC_QUERYCAP"); } } if (!(cap.capabilities & V4L2_CAP_VIDEO_CAPTURE)) { fprintf(stderr, "%s is no video capture device\n",deviceName); exit(EXIT_FAILURE); } switch (io) { #ifdef IO_READ case IO_METHOD_READ: if (!(cap.capabilities & V4L2_CAP_READWRITE)) { fprintf(stderr, "%s does not support read i/o\n",deviceName); exit(EXIT_FAILURE); } break; #endif #ifdef IO_MMAP case IO_METHOD_MMAP: #endif #ifdef IO_USERPTR case IO_METHOD_USERPTR: #endif #if defined(IO_MMAP) || defined(IO_USERPTR) if (!(cap.capabilities & V4L2_CAP_STREAMING)) { fprintf(stderr, "%s does not support streaming i/o\n",deviceName); exit(EXIT_FAILURE); } break; #endif } /* Select video input, video standard and tune here. */ CLEAR(cropcap); cropcap.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; if (0 == xioctl(fd, VIDIOC_CROPCAP, &cropcap)) { crop.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; crop.c = cropcap.defrect; /* reset to default */ if (-1 == xioctl(fd, VIDIOC_S_CROP, &crop)) { switch (errno) { case EINVAL: /* Cropping not supported. */ break; default: /* Errors ignored. */ break; } } } else { /* Errors ignored. */ } CLEAR(fmt); // v4l2_format fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; fmt.fmt.pix.width = width; fmt.fmt.pix.height = height; fmt.fmt.pix.field = V4L2_FIELD_INTERLACED; fmt.fmt.pix.pixelformat = V4L2_PIX_FMT_YUV420; if (-1 == xioctl(fd, VIDIOC_S_FMT, &fmt)) errno_exit("VIDIOC_S_FMT"); if (fmt.fmt.pix.pixelformat != V4L2_PIX_FMT_YUV420) { fprintf(stderr,"Libv4l didn't accept YUV420 format. Can't proceed.\n"); exit(EXIT_FAILURE); } /* Note VIDIOC_S_FMT may change width and height. */ if (width != fmt.fmt.pix.width) { width = fmt.fmt.pix.width; fprintf(stderr,"Image width set to %i by device %s.\n", width, deviceName); } if (height != fmt.fmt.pix.height) { height = fmt.fmt.pix.height; fprintf(stderr,"Image height set to %i by device %s.\n", height, deviceName); } /* If the user has set the fps to -1, don't try to set the frame interval */ if (fps != -1) { CLEAR(frameint); /* Attempt to set the frame interval. */ frameint.type = V4L2_BUF_TYPE_VIDEO_CAPTURE; frameint.parm.capture.timeperframe.numerator = 1; frameint.parm.capture.timeperframe.denominator = fps; if (-1 == xioctl(fd, VIDIOC_S_PARM, &frameint)) fprintf(stderr,"Unable to set frame interval.\n"); } /* Buggy driver paranoia. */ min = fmt.fmt.pix.width * 2; if (fmt.fmt.pix.bytesperline < min) fmt.fmt.pix.bytesperline = min; min = fmt.fmt.pix.bytesperline * fmt.fmt.pix.height; if (fmt.fmt.pix.sizeimage < min) fmt.fmt.pix.sizeimage = min; switch (io) { #ifdef IO_READ case IO_METHOD_READ: readInit(fmt.fmt.pix.sizeimage); break; #endif #ifdef IO_MMAP case IO_METHOD_MMAP: mmapInit(); break; #endif #ifdef IO_USERPTR case IO_METHOD_USERPTR: userptrInit(fmt.fmt.pix.sizeimage); break; #endif } }