Revert "clients: teach simple-dmabuf-v4l to deal with flipped input"

This reverts commit 0fee977c46.

This commit introduces a requirement on v4l2_query_ext_ctrl and
VIDIOC_QUERY_EXT_CTRL, which were introduced in kernel 3.17. Some Ubuntu
LTS releases ship with much older kernels (and, significantly, UAPI),
which don't have these.

Signed-off-by: Daniel Stone <daniels@collabora.com>
Acked-by: Pekka Paalanen <pekka.paalanen@collabora.com>
Acked-by: Derek Foreman <derekf@osg.samsung.com>
dev
Daniel Stone 8 years ago
parent a32986ecf5
commit d5fa090904
  1. 60
      clients/simple-dmabuf-v4l.c

@ -351,67 +351,21 @@ static const struct zwp_linux_buffer_params_v1_listener params_listener = {
create_failed create_failed
}; };
static bool
check_v4l2_control_bool(const int fd,
const struct v4l2_query_ext_ctrl *qectrl,
const char *control_name,
const int expected_value)
{
struct v4l2_control ctrl;
memset(&ctrl, 0, sizeof(ctrl));
ctrl.id = qectrl->id;
if (qectrl->flags & V4L2_CTRL_FLAG_DISABLED)
return false;
if (!(qectrl->type == V4L2_CTRL_TYPE_BOOLEAN))
return false;
if (strcmp(qectrl->name, control_name))
return false;
/* with the early-outs out of the way, do the actual check */
if (xioctl(fd, VIDIOC_G_CTRL, &ctrl))
return false;
if (ctrl.value != expected_value)
return false;
return true;
}
static void static void
create_dmabuf_buffer(struct display *display, struct buffer *buffer) create_dmabuf_buffer(struct display *display, struct buffer *buffer)
{ {
struct zwp_linux_buffer_params_v1 *params; struct zwp_linux_buffer_params_v1 *params;
uint64_t modifier; uint64_t modifier;
uint32_t lbp_flags; uint32_t flags;
unsigned i; unsigned i;
struct v4l2_query_ext_ctrl qectrl;
const unsigned int v4l2_qec_flags =
V4L2_CTRL_FLAG_NEXT_CTRL | V4L2_CTRL_FLAG_NEXT_COMPOUND;
const char *vflip_ctrl = "Vertical Flip";
const char *hflip_ctrl = "Horizontal Flip";
modifier = 0; modifier = 0;
lbp_flags = 0; flags = 0;
/* handle relevant v4l2 controls */ /* XXX: apparently some webcams may actually provide y-inverted images,
memset(&qectrl, 0, sizeof(qectrl)); * in which case we should set
qectrl.id |= v4l2_qec_flags; * flags = ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT
while (!xioctl(display->v4l_fd, VIDIOC_QUERY_EXT_CTRL, &qectrl)) { */
if (check_v4l2_control_bool(display->v4l_fd, &qectrl,
vflip_ctrl, 0x1)) {
lbp_flags = ZWP_LINUX_BUFFER_PARAMS_V1_FLAGS_Y_INVERT;
printf ("\"%s\" control is set, inverting Y\n", vflip_ctrl);
} else if (check_v4l2_control_bool(display->v4l_fd, &qectrl,
hflip_ctrl, 0x1)) {
printf ("\"%s\" control is set, but dmabuf output cannot"
"be flipped horizontally\n", hflip_ctrl);
}
qectrl.id |= v4l2_qec_flags;
}
params = zwp_linux_dmabuf_v1_create_params(display->dmabuf); params = zwp_linux_dmabuf_v1_create_params(display->dmabuf);
for (i = 0; i < display->format.num_planes; ++i) for (i = 0; i < display->format.num_planes; ++i)
@ -428,7 +382,7 @@ create_dmabuf_buffer(struct display *display, struct buffer *buffer)
display->format.width, display->format.width,
display->format.height, display->format.height,
display->drm_format, display->drm_format,
lbp_flags); flags);
} }
static int static int

Loading…
Cancel
Save