bool yarp::dev::GazeboYarpMultiCameraDriver::getImage(yarp::sig::ImageOf<yarp::sig::PixelRgb>& _image) { for (unsigned int i = 0; i < m_camera_count; ++i) { m_dataMutex[i]->wait(); } if (m_vertical) { _image.resize(m_max_width, m_max_height * m_camera_count); } else { _image.resize(m_max_width * m_camera_count, m_max_height); } unsigned char *pBuffer = _image.getRawImage(); memset(pBuffer, 0, _image.getRawImageSize()); for (unsigned int i = 0; i < m_camera_count; ++i) { int rowsize = 3 * m_width[i]; int rowoffset = i * 3 * m_max_width; if (m_vertical) { if (m_max_width == m_width[i] && m_max_height == m_height[i]) { memcpy(pBuffer + (3 * m_max_width * m_max_height * i), m_imageBuffer[i], m_bufferSize[i]); } else { for (int r = 0; r < m_height[i]; r++) { memcpy(pBuffer + (3 * m_max_width) * (m_max_height * i + r), m_imageBuffer[i] + rowsize * r, rowsize); } } } else { for (int r = 0; r < m_height[i]; r++) { memcpy(pBuffer + (3 * m_max_width * m_camera_count * r) + rowoffset, m_imageBuffer[i] + rowsize * r, rowsize); } } } if (m_display_time_box) { m_counter = (++m_counter % 10); for (int c = m_counter*30; c < 30 + m_counter*30; c++) { for (int r=0; r<30; r++) { for (unsigned int i = 0; i < m_camera_count; ++i) { unsigned char *pixel; if (m_vertical) { pixel = _image.getPixelAddress(m_width[i]-c-1, m_max_height * i + m_height[i]-r-1); } else { pixel = _image.getPixelAddress(m_max_width * i + m_width[i]-c-1, m_height[i]-r-1); } pixel[0] = (m_counter % 2 == 0) ? 255 : 0; pixel[1] = (m_counter % 2 == 0) ? 0 : 255; pixel[2] = 0; } } } } for (unsigned int i = 0; i < m_camera_count; ++i) { m_dataMutex[i]->post(); } return true; }
virtual bool threadInit() override { p.open("/readWriteTest_writer"); image.resize(100, 100); image.zero(); return true; }
bool USBCameraDriverRgb::getImage(yarp::sig::ImageOf<yarp::sig::PixelRgb>& image) { if( (image.width() != _width) || (image.height() != _height) ) image.resize(_width, _height); deviceRgb->getRgbBuffer(image.getRawImage()); return true; }
bool MapGrid2D::getMapImage(yarp::sig::ImageOf<PixelRgb>& image) const { image.setQuantum(1); image.resize(m_width, m_height); image.zero(); for (size_t y = 0; y < m_height; y++) { for (size_t x = 0; x < m_width; x++) { image.safePixel(x, y) = CellDataToPixel(m_map_flags.safePixel(x, y)); } } return true; }
void copyImage(Magick::Image& src, yarp::sig::ImageOf<yarp::sig::PixelRgb>& dest) { Magick::Geometry g = src.size(); int h = g.height(); int w = g.width(); src.depth(8); dest.resize(w,h); for (int i=0; i<h; i++) { // must transfer row by row, since YARP may use padding in representation Magick::PixelPacket *packet = src.getPixels(0,i,w,1); src.writePixels(Magick::RGBQuantum,(unsigned char *)(&dest.pixel(0,i))); } src.syncPixels(); }
bool realsense2Driver::getImage(yarp::sig::ImageOf<yarp::sig::PixelMono>& image) { if (!m_stereoMode) { yError()<<"realsense2Driver: infrared stereo stream not enabled"; return false; } image.resize(width(), height()); std::lock_guard<std::mutex> guard(m_mutex); rs2::frameset data = m_pipeline.wait_for_frames(); rs2::video_frame frm1 = data.get_infrared_frame(1); rs2::video_frame frm2 = data.get_infrared_frame(2); int pixCode = pixFormatToCode(frm1.get_profile().format()); if (pixCode != VOCAB_PIXEL_MONO && pixCode != VOCAB_PIXEL_MONO16) { yError() << "realsense2Driver: expecting Pixel Format MONO or MONO16"; return false; } size_t singleImage_rowSizeByte = image.getRowSize()/2; unsigned char * pixelLeft = (unsigned char*) (frm1.get_data()); unsigned char * pixelRight = (unsigned char*) (frm2.get_data()); unsigned char * pixelOutLeft = image.getRawImage(); unsigned char * pixelOutRight = image.getRawImage() + singleImage_rowSizeByte; for (size_t h=0; h< image.height(); h++) { memcpy(pixelOutLeft, pixelLeft, singleImage_rowSizeByte); memcpy(pixelOutRight, pixelRight, singleImage_rowSizeByte); pixelOutLeft += 2*singleImage_rowSizeByte; pixelOutRight += 2*singleImage_rowSizeByte; pixelLeft += singleImage_rowSizeByte; pixelRight += singleImage_rowSizeByte; } return true; }
bool FfmpegGrabber::getAudioVisual(yarp::sig::ImageOf<yarp::sig::PixelRgb>& image, yarp::sig::Sound& sound) { FfmpegHelper& helper = HELPER(system_resource); DecoderState& videoDecoder = helper.videoDecoder; DecoderState& audioDecoder = helper.audioDecoder; bool tryAgain = false; bool triedAgain = false; do { bool gotAudio = false; bool gotVideo = false; if (startTime<0.5) { startTime = Time::now(); } double time_target = 0; while(av_read_frame(pFormatCtx, &packet)>=0) { // Is this a packet from the video stream? DBG printf("frame "); bool done = false; if (packet.stream_index==videoDecoder.getIndex()) { DBG printf("video "); done = videoDecoder.getVideo(packet); image.resize(1,1); if (done) { //printf("got a video frame\n"); gotVideo = true; } } if (packet.stream_index==audioDecoder.getIndex()) { DBG printf("audio "); done = audioDecoder.getAudio(packet,sound); if (done) { //printf("got an audio frame\n"); gotAudio = true; } } else { DBG printf("other "); } AVRational& time_base = pFormatCtx->streams[packet.stream_index]->time_base; double rbase = av_q2d(time_base); DBG printf(" time=%g ", packet.pts*rbase); time_target = packet.pts*rbase; av_free_packet(&packet); DBG printf(" %d\n", done); if (((imageSync?gotVideo:videoDecoder.haveFrame())||!_hasVideo)&& ((imageSync?1:gotAudio)||!_hasAudio)) { if (_hasVideo) { videoDecoder.getVideo(image); } else { image.resize(0,0); } if (needRateControl) { double now = (Time::now()-startTime)*pace; double delay = time_target-now; if (delay>0) { DBG printf("DELAY %g ", delay); Time::delay(delay); } else { DBG printf("NODELAY %g ", delay); } } DBG printf("IMAGE size %dx%d ", image.width(), image.height()); DBG printf("SOUND size %d\n", sound.getSamples()); if (!_hasAudio) { sound.resize(0,0); } return true; } } tryAgain = !triedAgain; if (tryAgain) { if (!shouldLoop) { return false; } av_seek_frame(pFormatCtx,-1,0,AVSEEK_FLAG_BACKWARD); startTime = Time::now(); } } while (tryAgain); return false; }
void TestFrameGrabber::createTestImage(yarp::sig::ImageOf<yarp::sig::PixelRgb>& image) { // to test IPreciselyTimed, make timestamps be mysteriously NNN.NNN42 double t = Time::now(); t -= ((t*1000)-(int)t)/1000; t+= 0.00042; stamp.update(t); if (background.width()>0) { image.copy(background); } else { image.zero(); image.resize(w,h); } switch (mode) { case VOCAB_BALL: { addCircle(image,PixelRgb(0,255,0),bx,by,15); addCircle(image,PixelRgb(0,255,255),bx,by,8); if (ct%5!=0) { rnd *= 65537; rnd += 17; bx += (rnd%5)-2; rnd *= 65537; rnd += 17; by += (rnd%5)-2; } else { int dx = w/2 - bx; int dy = h/2 - by; if (dx>0) { bx++; } if (dx<0) { bx--; } if (dy>0) { by++; } if (dy<0) { by--; } } } break; case VOCAB_GRID: { int ww = image.width(); int hh = image.height(); if (ww>1&&hh>1) { for (int x=0; x<ww; x++) { for (int y=0; y<hh; y++) { double xx = ((double)x)/(ww-1); double yy = ((double)y)/(hh-1); int r = int(0.5+255*xx); int g = int(0.5+255*yy); bool act = (y==ct); image.pixel(x,y) = PixelRgb(r,g,act*255); } } } } break; case VOCAB_LINE: default: { for (int i=0; i<image.width(); i++) { image.pixel(i,ct).r = 255; } } break; case VOCAB_RAND: { // from Alessandro Scalzo static unsigned char r=128,g=128,b=128; int ww = image.width(); int hh = image.height(); if (ww>1&&hh>1) { for (int x=0; x<ww; x++) { for (int y=0; y<hh; y++) { //r+=(rand()%3)-1; //g+=(rand()%3)-1; //b+=(rand()%3)-1; r += Random::uniform(-1,1); g += Random::uniform(-1,1); b += Random::uniform(-1,1); image.pixel(x,y) = PixelRgb(r,g,b); } } } } break; case VOCAB_NONE: break; } ct++; if (ct>=image.height()) { ct = 0; } if (by>=image.height()) { by = image.height()-1; } if (bx>=image.width()) { bx = image.width()-1; } if (bx<0) bx = 0; if (by<0) by = 0; }