Esempio n. 1
0
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;
}
Esempio n. 2
0
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);
        }
    }
}
Esempio n. 3
0
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_);
}