mirror of
https://github.com/ZoneMinder/zoneminder.git
synced 2025-12-23 22:37:53 -05:00
standard and palette are actually unsigned in v4l2, so let's use that instead of int. Fixes some build warnings
This commit is contained in:
@@ -46,7 +46,7 @@ static int vidioctl(int fd, int request, void *arg) {
|
||||
return result;
|
||||
}
|
||||
|
||||
static _AVPIXELFORMAT getFfPixFormatFromV4lPalette(int v4l_version, int palette) {
|
||||
static _AVPIXELFORMAT getFfPixFormatFromV4lPalette(int v4l_version, unsigned int palette) {
|
||||
_AVPIXELFORMAT pixFormat = AV_PIX_FMT_NONE;
|
||||
|
||||
switch (palette) {
|
||||
@@ -139,7 +139,7 @@ static _AVPIXELFORMAT getFfPixFormatFromV4lPalette(int v4l_version, int palette)
|
||||
//case V4L2_PIX_FMT_PJPG :
|
||||
//case V4L2_PIX_FMT_YVYU :
|
||||
default : {
|
||||
Fatal("Can't find swscale format for palette %d", palette);
|
||||
Fatal("Can't find swscale format for palette %u", palette);
|
||||
break;
|
||||
#if 0
|
||||
// These are all spare and may match some of the above
|
||||
@@ -226,14 +226,14 @@ LocalCamera::LocalCamera(
|
||||
const Monitor *monitor,
|
||||
const std::string &p_device,
|
||||
int p_channel,
|
||||
int p_standard,
|
||||
v4l2_std_id p_standard,
|
||||
bool p_v4l_multi_buffer,
|
||||
unsigned int p_v4l_captures_per_frame,
|
||||
const std::string &p_method,
|
||||
int p_width,
|
||||
int p_height,
|
||||
int p_colours,
|
||||
int p_palette,
|
||||
unsigned int p_palette,
|
||||
int p_brightness,
|
||||
int p_contrast,
|
||||
int p_hue,
|
||||
@@ -512,7 +512,7 @@ void LocalCamera::Initialise() {
|
||||
}
|
||||
|
||||
if ((input.std != V4L2_STD_UNKNOWN) && ((input.std & standard) == V4L2_STD_UNKNOWN)) {
|
||||
Error("Device does not support video standard %d", standard);
|
||||
Error("Device does not support video standard %lld", standard);
|
||||
}
|
||||
|
||||
if ((vidioctl(vid_fd, VIDIOC_G_STD, &stdId) < 0)) {
|
||||
@@ -521,7 +521,7 @@ void LocalCamera::Initialise() {
|
||||
if (stdId != standard) {
|
||||
stdId = standard;
|
||||
if ((vidioctl(vid_fd, VIDIOC_S_STD, &stdId) < 0)) {
|
||||
Error("Failed to set video standard %d: %d %s", standard, errno, strerror(errno));
|
||||
Error("Failed to set video standard %lld: %d %s", standard, errno, strerror(errno));
|
||||
}
|
||||
}
|
||||
Debug(3, "Setting up video format");
|
||||
@@ -715,6 +715,7 @@ void LocalCamera::Initialise() {
|
||||
//vid_buf.memory = V4L2_MEMORY_MMAP;
|
||||
vid_buf.memory = v4l2_data.reqbufs.memory;
|
||||
vid_buf.index = i;
|
||||
Debug(1, "buf_type for %d %d =? %d, memory %d =? %d", i, vid_buf.type, V4L2_BUF_TYPE_VIDEO_CAPTURE, vid_buf.memory, V4L2_MEMORY_MMAP);
|
||||
|
||||
if (vidioctl(vid_fd, VIDIOC_QUERYBUF, &vid_buf) < 0)
|
||||
Fatal("Unable to query video buffer: %s", strerror(errno));
|
||||
@@ -726,6 +727,7 @@ void LocalCamera::Initialise() {
|
||||
Fatal("Can't map video buffer %u (%u bytes) to memory: %s(%d)",
|
||||
i, vid_buf.length, strerror(errno), errno);
|
||||
|
||||
|
||||
capturePictures[i] = av_frame_ptr{av_frame_alloc()};
|
||||
|
||||
if (!capturePictures[i])
|
||||
@@ -1229,6 +1231,31 @@ int LocalCamera::PrimeCapture() {
|
||||
if (!device_prime)
|
||||
return 1;
|
||||
|
||||
|
||||
// *** VERIFY FORMAT HASN'T CHANGED ***
|
||||
struct v4l2_format current_fmt;
|
||||
memset(¤t_fmt, 0, sizeof(current_fmt));
|
||||
current_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
|
||||
|
||||
if (vidioctl(vid_fd, VIDIOC_G_FMT, ¤t_fmt) < 0) {
|
||||
Error("Failed to get current format: %s", strerror(errno));
|
||||
} else {
|
||||
Debug(1, "Format at PrimeCapture: %dx%d, format=0x%x, bytesperline=%d, sizeimage=%d",
|
||||
current_fmt.fmt.pix. width, current_fmt.fmt. pix.height,
|
||||
current_fmt.fmt.pix. pixelformat, current_fmt. fmt.pix.bytesperline,
|
||||
current_fmt. fmt.pix.sizeimage);
|
||||
Debug(1, "Expected format: %dx%d, format=0x%x, bytesperline=%d, sizeimage=%d",
|
||||
v4l2_data.fmt.fmt. pix.width, v4l2_data.fmt.fmt. pix.height,
|
||||
v4l2_data.fmt. fmt.pix.pixelformat, v4l2_data. fmt.fmt.pix.bytesperline,
|
||||
v4l2_data.fmt.fmt.pix.sizeimage);
|
||||
|
||||
if (current_fmt.fmt.pix.sizeimage != v4l2_data.fmt.fmt.pix.sizeimage) {
|
||||
Error("FORMAT MISMATCH! Current sizeimage %d != expected %d",
|
||||
current_fmt.fmt.pix.sizeimage, v4l2_data.fmt.fmt.pix. sizeimage);
|
||||
}
|
||||
}
|
||||
// *** END DIAGNOSTIC ***
|
||||
|
||||
Debug(3, "Queueing (%d) buffers", v4l2_data.reqbufs.count);
|
||||
for (unsigned int frame = 0; frame < v4l2_data.reqbufs.count; frame++) {
|
||||
struct v4l2_buffer vid_buf;
|
||||
@@ -1242,8 +1269,16 @@ int LocalCamera::PrimeCapture() {
|
||||
vid_buf.memory = v4l2_data.reqbufs.memory;
|
||||
vid_buf.index = frame;
|
||||
|
||||
// *** ADD MORE DIAGNOSTICS FOR THE FAILING QBUF ***
|
||||
Debug(3, "Attempting QBUF: index=%d, type=%d, memory=%d, reqbufs.count=%d",
|
||||
vid_buf.index, vid_buf.type, vid_buf.memory, v4l2_data. reqbufs.count);
|
||||
|
||||
if (vidioctl(vid_fd, VIDIOC_QBUF, &vid_buf) < 0) {
|
||||
Error("Failed to queue buffer %d: %s", frame, strerror(errno));
|
||||
Error(" vid_buf: type=%d, memory=%d, index=%d", vid_buf.type, vid_buf.memory, vid_buf.index);
|
||||
Error(" reqbufs: count=%d, type=%d, memory=%d",
|
||||
v4l2_data.reqbufs.count, v4l2_data.reqbufs.type, v4l2_data.reqbufs.memory);
|
||||
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
@@ -1284,7 +1319,6 @@ int LocalCamera::Capture(std::shared_ptr<ZMPacket> &zm_packet) {
|
||||
static struct v4l2_buffer vid_buf;
|
||||
|
||||
memset(&vid_buf, 0, sizeof(vid_buf));
|
||||
|
||||
vid_buf.type = v4l2_data.fmt.type;
|
||||
vid_buf.memory = v4l2_data.reqbufs.memory;
|
||||
|
||||
|
||||
@@ -50,8 +50,8 @@ class LocalCamera : public Camera {
|
||||
protected:
|
||||
std::string device;
|
||||
int channel;
|
||||
int standard;
|
||||
int palette;
|
||||
v4l2_std_id standard;
|
||||
unsigned int palette;
|
||||
bool device_prime;
|
||||
bool channel_prime;
|
||||
int channel_index;
|
||||
@@ -86,14 +86,14 @@ class LocalCamera : public Camera {
|
||||
const Monitor *monitor,
|
||||
const std::string &device,
|
||||
int p_channel,
|
||||
int p_format,
|
||||
v4l2_std_id p_standard,
|
||||
bool v4lmultibuffer,
|
||||
unsigned int v4lcapturesperframe,
|
||||
const std::string &p_method,
|
||||
int p_width,
|
||||
int p_height,
|
||||
int p_colours,
|
||||
int p_palette,
|
||||
unsigned int p_palette,
|
||||
int p_brightness,
|
||||
int p_contrast,
|
||||
int p_hue,
|
||||
@@ -110,7 +110,7 @@ class LocalCamera : public Camera {
|
||||
|
||||
int Channel() const { return channel; }
|
||||
int Standard() const { return standard; }
|
||||
int Palette() const { return palette; }
|
||||
unsigned int Palette() const { return palette; }
|
||||
int Extras() const { return extras; }
|
||||
|
||||
int Control(int vid_id, int newvalue=-1 );
|
||||
|
||||
Reference in New Issue
Block a user