static gboolean show_camera(gpointer data) { read_frame(); if(pixmap) { g_object_unref(pixmap); // ref count minus one } pixmap = gdk_pixmap_new (image_face->window, preview_width, preview_height, -1); unsigned char *buf2 = (unsigned char *) malloc (sizeof(unsigned char) * width * height * 3); Pyuv422torgb24((unsigned char*)framebuffer, buf2, width, height); GdkPixbuf *rgbBuf = gdk_pixbuf_new_from_data(buf2, GDK_COLORSPACE_RGB, FALSE, 8, width, height, width * 3, NULL, NULL); if(rgbBuf != NULL) { GdkPixbuf* buf = gdk_pixbuf_scale_simple(rgbBuf, preview_width, preview_height, GDK_INTERP_BILINEAR); gdk_draw_pixbuf(pixmap, image_face->style->white_gc, buf, 0, 0, 0, 0, preview_width, preview_height, GDK_RGB_DITHER_NONE, 0, 0); gdk_draw_drawable(image_face->window, image_face->style->white_gc, pixmap, 0, 0, 0, 0, preview_width, preview_height); g_object_unref(buf); g_object_unref(rgbBuf); } gtk_widget_show(image_face); free(buf2); return TRUE; }
void post_fb(struct fb_dev *dev, void *input, int w, int h, int size, int input_fmt) { int src_bpp; int dst_bpp = dev->var.bits_per_pixel / 8; void *dst, *src; int i, j; if (dev->fd < 0) return ; /* only support YUV422 now */ if (input_fmt != V4L2_PIX_FMT_YUYV) return ; switch (dev->var.bits_per_pixel) { case 32: Pyuv422torgb32(input, dev->tmpbuf, w, h); src_bpp = 4; case 24: Pyuv422torgb24(input, dev->tmpbuf, w, h); src_bpp = 3; break; case 16: Pyuv422torgb16(input, dev->tmpbuf, w, h); src_bpp = 2; break; default: return ; } for (i = 0; i < h; i++) { for (j = 0; j < w; j++) { dst = dev->fbmem + i * dev->var.xres * dst_bpp + j * dst_bpp; src = dev->tmpbuf + i * w * src_bpp + j * src_bpp; memcpy(dst, src, src_bpp); } } }
void V4RCamNode::publishCamera() { cameraInfo_.header.stamp.sec = timeLastFrame_.tv_sec, cameraInfo_.header.stamp.nsec = timeLastFrame_.tv_usec * 1000; cameraImage_.header = cameraInfo_.header; cameraImage_.height = cameraInfo_.height = height_; cameraImage_.width = cameraInfo_.width = width_; cameraImage_.is_bigendian = true; cameraImage_.step = cameraInfo_.width * 2; switch(convert_image_first_) { case CONVERT_RAW: cameraImage_.encoding = "yuv422"; cameraImage_.data.resize(width_ * height_ * 2); memcpy(&cameraImage_.data[0], pVideoIn_->framebuffer, cameraImage_.data.size()); break; case CONVERT_YUV422toRGB: cameraImage_.encoding = "rgb8"; cameraImage_.data.resize(width_ * height_ * 3); Pyuv422torgb24(pVideoIn_->framebuffer, &cameraImage_.data[0], width_, height_); break; case CONVERT_YUV422toBGR: cameraImage_.encoding = "bgr8"; cameraImage_.data.resize(width_ * height_ * 3); Pyuv422tobgr24(pVideoIn_->framebuffer, &cameraImage_.data[0], width_, height_); break; case CONVERT_YUV422toGray: cameraImage_.encoding = "mono8"; cameraImage_.data.resize(width_ * height_); Pyuv422togray8(pVideoIn_->framebuffer, &cameraImage_.data[0], width_, height_); break; default: cameraImage_.encoding = "yuv422"; cameraImage_.data.resize(width_ * height_ * 2); memcpy(&cameraImage_.data[0], pVideoIn_->framebuffer, cameraImage_.data.size()); } cameraPublisher_.publish(cameraImage_, cameraInfo_); }