v4l2-ctl: fix regression in ability to set/get private controls

Message ID 412bdbff1003111609m72fc7e65he84a9791502cac7d@mail.gmail.com (mailing list archive)
State Rejected, archived
Headers

Commit Message

Devin Heitmueller March 12, 2010, 12:09 a.m. UTC
  From 3dbab2e437c4a1673c1966937faec6e0fc56be01 Mon Sep 17 00:00:00 2001
From: Devin Heitmueller <dheitmueller@kernellabs.com>
Date: Wed, 10 Mar 2010 23:01:53 -0500
Subject: [PATCH] v4l2-ctl: fix regression in ability to set/get private controls

From: Devin Heitmueller <dheitmueller@kernellabs.com>

In hg revision 12546, a regression was introduced which resulted in the
ability to get/set private controls.  The change resulted in all attempts
to set private controls going through the extended controls interface, and
the extended controls interface explicitly denies ability to use private
control CIDs (it's enforced in the check_ext_ctl function in v4l2-ioctl.c.

Fix the code such that it goes back to using the older g_ctrl/s_ctrl if the
control ID is a private control.

Priority: high

Signed-off-by: Devin Heitmueller <dheitmueller@kernellabs.com>
Acked-by: Hans Verkuil <hverkuil@xs4all.nl>
---
 utils/v4l2-ctl/v4l2-ctl.cpp |    6 ++++--
 1 files changed, 4 insertions(+), 2 deletions(-)


@@ -2881,7 +2882,8 @@ set_vid_fmt_error:
                }
                for (class2ctrls_map::iterator iter = class2ctrls.begin();
                                iter != class2ctrls.end(); ++iter) {
-                       if (iter->first == V4L2_CTRL_CLASS_USER) {
+                       if (iter->first == V4L2_CTRL_CLASS_USER ||
+                           iter->first == V4L2_CID_PRIVATE_BASE) {
                                for (unsigned i = 0; i <
iter->second.size(); i++) {
                                        struct v4l2_control ctrl;
  

Patch

diff --git a/utils/v4l2-ctl/v4l2-ctl.cpp b/utils/v4l2-ctl/v4l2-ctl.cpp
index 26d3996..c88bf6e 100644
--- a/utils/v4l2-ctl/v4l2-ctl.cpp
+++ b/utils/v4l2-ctl/v4l2-ctl.cpp
@@ -2589,7 +2589,8 @@  set_vid_fmt_error:
                }
                for (class2ctrls_map::iterator iter = class2ctrls.begin();
                                iter != class2ctrls.end(); ++iter) {
-                       if (iter->first == V4L2_CTRL_CLASS_USER) {
+                       if (iter->first == V4L2_CTRL_CLASS_USER ||
+                           iter->first == V4L2_CID_PRIVATE_BASE) {
                                for (unsigned i = 0; i <
iter->second.size(); i++) {
                                        struct v4l2_control ctrl;