Select Git revision
virtio-camera.h
virtio-camera.h 1.41 KiB
/*
* Virtio Camera Device
*
* Copyright © 2022 Collabora, Ltd.
*
* This work is licensed under the terms of the GNU GPL, version 2.
* See the COPYING file in the top-level directory.
*/
#ifndef QEMU_VIRTIO_CAMERA_H
#define QEMU_VIRTIO_CAMERA_H
#include "qemu/queue.h"
#include "qemu/uuid.h"
#include "hw/virtio/virtio.h"
#include "qom/object.h"
#include "standard-headers/linux/virtio_camera.h"
#define TYPE_VIRTIO_CAMERA "virtio-camera-device"
OBJECT_DECLARE_SIMPLE_TYPE(VirtIOCamera, VIRTIO_CAMERA)
#define VIRTIO_CAMERA_GET_PARENT_CLASS(obj) \
OBJECT_GET_PARENT_CLASS(obj, TYPE_VIRTIO_CAMERA)
#define VIRTIO_CAMERA_NUM_V4L2_BUFFERS 3
struct virtio_camera_v4l2 {
void *buffer_data[VIRTIO_CAMERA_NUM_V4L2_BUFFERS];
size_t buffer_size[VIRTIO_CAMERA_NUM_V4L2_BUFFERS];
unsigned int queue_buffer_index;
char *dev_path;
int fd;
};
struct virtio_camera_mem_buffer {
QTAILQ_ENTRY(virtio_camera_mem_buffer) node;
QTAILQ_ENTRY(virtio_camera_mem_buffer) capture_node;
QemuUUID uuid;
VirtQueueElement *capture_elem;
unsigned int num_entries;
struct iovec iov[];
};
struct VirtIOCamera {
VirtIODevice parent_obj;
VirtQueue *ctrl_vq;
struct virtio_camera_v4l2 v4l2;
struct virtio_camera_config config;
QTAILQ_HEAD(, virtio_camera_mem_buffer) buflist;
QTAILQ_HEAD(, virtio_camera_mem_buffer) capturelist;
uint64_t mem_buf_uuid;
bool streaming;
};
#endif