bool can_fill;
memset(&fmt, 0, sizeof(fmt));
+ fmt.fmt.pix.priv = out_priv_magic;
fmt.type = b.type;
doioctl(fd, VIDIOC_G_FMT, &fmt);
if (test_ioctl(fd, VIDIOC_G_STD, &stream_out_std)) {
if (out_fd < 0) {
out_fd = fd;
out_capabilities = capabilities;
+ out_priv_magic = priv_magic;
}
if (do_cap > 1) {
struct v4l2_format fmt;
struct v4l2_format tmp;
+ memset(&fmt, 0, sizeof(fmt));
+ fmt.fmt.pix.priv = priv_magic;
fmt.type = vidcap_buftype;
if (test_ioctl(fd, VIDIOC_G_FMT, &fmt) < 0)
return;
if (options[OptSetVideoFormat] || options[OptTryVideoFormat]) {
struct v4l2_format vfmt;
+ memset(&vfmt, 0, sizeof(vfmt));
+ vfmt.fmt.pix.priv = priv_magic;
vfmt.type = vidcap_buftype;
if (doioctl(fd, VIDIOC_G_FMT, &vfmt) == 0) {
if (options[OptGetVideoFormat]) {
struct v4l2_format vfmt;
+ memset(&vfmt, 0, sizeof(vfmt));
+ vfmt.fmt.pix.priv = priv_magic;
vfmt.type = vidcap_buftype;
if (doioctl(fd, VIDIOC_G_FMT, &vfmt) == 0)
printfmt(vfmt);
struct v4l2_format fmt;
struct v4l2_format tmp;
+ memset(&fmt, 0, sizeof(fmt));
+ fmt.fmt.pix.priv = priv_magic;
fmt.type = vidout_buftype;
if (test_ioctl(fd, VIDIOC_G_FMT, &fmt) < 0)
return;
if (options[OptSetVideoOutFormat] || options[OptTryVideoOutFormat]) {
struct v4l2_format vfmt;
+ memset(&vfmt, 0, sizeof(vfmt));
+ vfmt.fmt.pix.priv = priv_magic;
vfmt.type = vidout_buftype;
if (doioctl(fd, VIDIOC_G_FMT, &vfmt) == 0) {
if (is_multiplanar) {
if (options[OptGetVideoOutFormat]) {
struct v4l2_format vfmt;
+ memset(&vfmt, 0, sizeof(vfmt));
+ vfmt.fmt.pix.priv = priv_magic;
vfmt.type = vidout_buftype;
if (doioctl(fd, VIDIOC_G_FMT, &vfmt) == 0)
printfmt(vfmt);
unsigned capabilities;
unsigned out_capabilities;
+unsigned priv_magic;
+unsigned out_priv_magic;
bool is_multiplanar;
__u32 vidcap_buftype;
__u32 vidout_buftype;
}
+static const flag_def pixflags_def[] = {
+ { V4L2_PIX_FMT_FLAG_PREMUL_ALPHA, "premultiplied-alpha" },
+ { 0, NULL }
+};
+
+std::string pixflags2s(unsigned flags)
+{
+ return flags2s(flags, pixflags_def);
+}
+
static const flag_def service_def[] = {
{ V4L2_SLICED_TELETEXT_B, "teletext" },
{ V4L2_SLICED_VPS, "vps" },
printf("\tBytes per Line: %u\n", vfmt.fmt.pix.bytesperline);
printf("\tSize Image : %u\n", vfmt.fmt.pix.sizeimage);
printf("\tColorspace : %s\n", colorspace2s(vfmt.fmt.pix.colorspace).c_str());
- if (vfmt.fmt.pix.priv)
- printf("\tCustom Info : %08x\n", vfmt.fmt.pix.priv);
+ if (vfmt.fmt.pix.priv == V4L2_PIX_FMT_PRIV_MAGIC)
+ printf("\tFlags : %s\n", pixflags2s(vfmt.fmt.pix.flags).c_str());
break;
case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
printf("\tPixel Format : '%s'\n", fcc2s(vfmt.fmt.pix_mp.pixelformat).c_str());
printf("\tField : %s\n", field2s(vfmt.fmt.pix_mp.field).c_str());
printf("\tNumber of planes : %u\n", vfmt.fmt.pix_mp.num_planes);
+ printf("\tFlags : %s\n", pixflags2s(vfmt.fmt.pix_mp.flags).c_str());
printf("\tColorspace : %s\n", colorspace2s(vfmt.fmt.pix_mp.colorspace).c_str());
for (int i = 0; i < vfmt.fmt.pix_mp.num_planes && i < VIDEO_MAX_PLANES; i++) {
printf("\tPlane %d :\n", i);
if (capabilities & V4L2_CAP_DEVICE_CAPS)
capabilities = vcap.device_caps;
+ priv_magic = (capabilities & V4L2_CAP_EXT_PIX_FORMAT) ?
+ V4L2_PIX_FMT_PRIV_MAGIC : 0;
is_multiplanar = capabilities & (V4L2_CAP_VIDEO_CAPTURE_MPLANE |
V4L2_CAP_VIDEO_M2M_MPLANE |
V4L2_CAP_VIDEO_OUTPUT_MPLANE);
out_capabilities = vcap.capabilities;
if (out_capabilities & V4L2_CAP_DEVICE_CAPS)
out_capabilities = vcap.device_caps;
+ out_priv_magic = (out_capabilities & V4L2_CAP_EXT_PIX_FORMAT) ?
+ V4L2_PIX_FMT_PRIV_MAGIC : 0;
}
common_process_controls(fd);
extern char options[OptLast];
extern unsigned capabilities;
extern unsigned out_capabilities;
+extern unsigned priv_magic;
+extern unsigned out_priv_magic;
extern bool is_multiplanar;
extern __u32 vidcap_buftype;
extern __u32 vidout_buftype;