You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

49 lines
1.2 KiB
C++

/* ---------------------------------------------------------------------------
** This software is in the public domain, furnished "as is", without technical
** support, and with no warranty, express or implied, as to its usefulness for
** any purpose.
**
** V4l2MmapDevice.h
**
** V4L2 source using mmap API
**
** -------------------------------------------------------------------------*/
#pragma once
#include "V4l2Device.h"
#define V4L2MMAP_NBBUFFER 10
class V4l2MmapDevice : public V4l2Device
{
protected:
size_t writeInternal(char* buffer, size_t bufferSize);
bool startPartialWrite();
size_t writePartialInternal(char*, size_t);
bool endPartialWrite();
size_t readInternal(char* buffer, size_t bufferSize);
public:
V4l2MmapDevice(const V4L2DeviceParameters & params, v4l2_buf_type deviceType);
virtual ~V4l2MmapDevice();
virtual bool init(unsigned int mandatoryCapabilities);
virtual bool isReady() { return ((m_fd != -1)&& (n_buffers != 0)); }
virtual bool start();
virtual bool stop();
protected:
unsigned int n_buffers;
struct buffer
{
void * start;
size_t length;
};
buffer m_buffer[V4L2MMAP_NBBUFFER];
};