* [PATCH] qv4l2: avoid empty titles for the video control tabs
@ 2012-10-09 14:46 Frank Schäfer
2012-10-09 15:24 ` Hans Verkuil
0 siblings, 1 reply; 3+ messages in thread
From: Frank Schäfer @ 2012-10-09 14:46 UTC (permalink / raw)
To: hverkuil; +Cc: linux-media, Frank Schäfer
The video control class names are used as titles for the GUI-tabs.
The current code relies on the driver enumerating the control classes
properly when using V4L2_CTRL_FLAG_NEXT_CTRL.
But the UVC-driver (and likely others, too) don't do that, so we can end
up with an empty class name string.
Make sure we always have a control class title:
If the driver didn't enumrate a class along with the controls, call
VIDIOC_QUERYCTRL for the class explicitly.
If that fails, fall back to an internal string list.
Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
---
utils/qv4l2/ctrl-tab.cpp | 15 ++++++++++++++-
utils/qv4l2/v4l2-api.cpp | 25 +++++++++++++++++++++++++
utils/qv4l2/v4l2-api.h | 3 +++
3 files changed, 42 insertions(+), 1 deletions(-)
diff --git a/utils/qv4l2/ctrl-tab.cpp b/utils/qv4l2/ctrl-tab.cpp
index 5bafbbd..6a4b630 100644
--- a/utils/qv4l2/ctrl-tab.cpp
+++ b/utils/qv4l2/ctrl-tab.cpp
@@ -133,7 +133,20 @@ void ApplicationWindow::addTabs()
m_col = m_row = 0;
m_cols = 4;
- const v4l2_queryctrl &qctrl = m_ctrlMap[id];
+ v4l2_queryctrl &qctrl = m_ctrlMap[id];
+ /* No real control, it's just the control class description.
+ Verify that the driver did enumerate the class properly
+ and add the class name if missing */
+ if (!strlen((char *)qctrl.name))
+ {
+ /* Try to request control class name from API */
+ qctrl.id = id;
+ qctrl.type = V4L2_CTRL_TYPE_CTRL_CLASS;
+ if (!queryctrl(qctrl) || !strlen((char *)qctrl.name))
+ /* Fall back to a local string list */
+ strcpy((char *)qctrl.name, ctrl_class_name(ctrl_class).toAscii());
+ }
+
QWidget *t = new QWidget(m_tabs);
QVBoxLayout *vbox = new QVBoxLayout(t);
QWidget *w = new QWidget(t);
diff --git a/utils/qv4l2/v4l2-api.cpp b/utils/qv4l2/v4l2-api.cpp
index 86cf388..5811cd7 100644
--- a/utils/qv4l2/v4l2-api.cpp
+++ b/utils/qv4l2/v4l2-api.cpp
@@ -638,3 +638,28 @@ bool v4l2::get_interval(v4l2_fract &interval)
return false;
}
+
+QString v4l2::ctrl_class_name(__u32 ctrl_class)
+{
+ switch (ctrl_class) {
+ case V4L2_CTRL_CLASS_USER:
+ return "User Controls";
+ case V4L2_CTRL_CLASS_MPEG:
+ return "MPEG-compression Controls";
+ case V4L2_CTRL_CLASS_CAMERA:
+ return "Camera Controls";
+ case V4L2_CTRL_CLASS_FM_TX:
+ return "FM Transmitter Controls";
+ case V4L2_CTRL_CLASS_FLASH:
+ return "Flash Device Controls";
+ case V4L2_CTRL_CLASS_JPEG:
+ return "JPEG-compression Controls";
+ case V4L2_CTRL_CLASS_IMAGE_SOURCE:
+ return "Image Source Controls";
+ case V4L2_CTRL_CLASS_IMAGE_PROC:
+ return "Image Processing Controls";
+ case V4L2_CTRL_CLASS_DV:
+ return "Digital Video Controls";
+ }
+ return "Controls (unknown class)";
+}
diff --git a/utils/qv4l2/v4l2-api.h b/utils/qv4l2/v4l2-api.h
index 4c10466..74e69a8 100644
--- a/utils/qv4l2/v4l2-api.h
+++ b/utils/qv4l2/v4l2-api.h
@@ -163,6 +163,9 @@ public:
bool set_interval(v4l2_fract interval);
bool get_interval(v4l2_fract &interval);
+
+ QString ctrl_class_name(__u32 ctrl_class);
+
private:
void clear() { error(QString()); }
--
1.7.7
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] qv4l2: avoid empty titles for the video control tabs
2012-10-09 14:46 [PATCH] qv4l2: avoid empty titles for the video control tabs Frank Schäfer
@ 2012-10-09 15:24 ` Hans Verkuil
2012-10-10 15:22 ` Frank Schäfer
0 siblings, 1 reply; 3+ messages in thread
From: Hans Verkuil @ 2012-10-09 15:24 UTC (permalink / raw)
To: Frank Schäfer; +Cc: linux-media
On Tue October 9 2012 16:46:04 Frank Schäfer wrote:
> The video control class names are used as titles for the GUI-tabs.
> The current code relies on the driver enumerating the control classes
> properly when using V4L2_CTRL_FLAG_NEXT_CTRL.
> But the UVC-driver (and likely others, too) don't do that, so we can end
> up with an empty class name string.
>
> Make sure we always have a control class title:
> If the driver didn't enumrate a class along with the controls, call
> VIDIOC_QUERYCTRL for the class explicitly.
> If that fails, fall back to an internal string list.
NACK.
qv4l2 is for testing drivers, so I *want* to see if a driver doesn't provide
the control class name. They really should provide it, and it is not something
that should be papered over.
Regards,
Hans
>
> Signed-off-by: Frank Schäfer <fschaefer.oss@googlemail.com>
> ---
> utils/qv4l2/ctrl-tab.cpp | 15 ++++++++++++++-
> utils/qv4l2/v4l2-api.cpp | 25 +++++++++++++++++++++++++
> utils/qv4l2/v4l2-api.h | 3 +++
> 3 files changed, 42 insertions(+), 1 deletions(-)
>
> diff --git a/utils/qv4l2/ctrl-tab.cpp b/utils/qv4l2/ctrl-tab.cpp
> index 5bafbbd..6a4b630 100644
> --- a/utils/qv4l2/ctrl-tab.cpp
> +++ b/utils/qv4l2/ctrl-tab.cpp
> @@ -133,7 +133,20 @@ void ApplicationWindow::addTabs()
> m_col = m_row = 0;
> m_cols = 4;
>
> - const v4l2_queryctrl &qctrl = m_ctrlMap[id];
> + v4l2_queryctrl &qctrl = m_ctrlMap[id];
> + /* No real control, it's just the control class description.
> + Verify that the driver did enumerate the class properly
> + and add the class name if missing */
> + if (!strlen((char *)qctrl.name))
> + {
> + /* Try to request control class name from API */
> + qctrl.id = id;
> + qctrl.type = V4L2_CTRL_TYPE_CTRL_CLASS;
> + if (!queryctrl(qctrl) || !strlen((char *)qctrl.name))
> + /* Fall back to a local string list */
> + strcpy((char *)qctrl.name, ctrl_class_name(ctrl_class).toAscii());
> + }
> +
> QWidget *t = new QWidget(m_tabs);
> QVBoxLayout *vbox = new QVBoxLayout(t);
> QWidget *w = new QWidget(t);
> diff --git a/utils/qv4l2/v4l2-api.cpp b/utils/qv4l2/v4l2-api.cpp
> index 86cf388..5811cd7 100644
> --- a/utils/qv4l2/v4l2-api.cpp
> +++ b/utils/qv4l2/v4l2-api.cpp
> @@ -638,3 +638,28 @@ bool v4l2::get_interval(v4l2_fract &interval)
>
> return false;
> }
> +
> +QString v4l2::ctrl_class_name(__u32 ctrl_class)
> +{
> + switch (ctrl_class) {
> + case V4L2_CTRL_CLASS_USER:
> + return "User Controls";
> + case V4L2_CTRL_CLASS_MPEG:
> + return "MPEG-compression Controls";
> + case V4L2_CTRL_CLASS_CAMERA:
> + return "Camera Controls";
> + case V4L2_CTRL_CLASS_FM_TX:
> + return "FM Transmitter Controls";
> + case V4L2_CTRL_CLASS_FLASH:
> + return "Flash Device Controls";
> + case V4L2_CTRL_CLASS_JPEG:
> + return "JPEG-compression Controls";
> + case V4L2_CTRL_CLASS_IMAGE_SOURCE:
> + return "Image Source Controls";
> + case V4L2_CTRL_CLASS_IMAGE_PROC:
> + return "Image Processing Controls";
> + case V4L2_CTRL_CLASS_DV:
> + return "Digital Video Controls";
> + }
> + return "Controls (unknown class)";
> +}
> diff --git a/utils/qv4l2/v4l2-api.h b/utils/qv4l2/v4l2-api.h
> index 4c10466..74e69a8 100644
> --- a/utils/qv4l2/v4l2-api.h
> +++ b/utils/qv4l2/v4l2-api.h
> @@ -163,6 +163,9 @@ public:
>
> bool set_interval(v4l2_fract interval);
> bool get_interval(v4l2_fract &interval);
> +
> + QString ctrl_class_name(__u32 ctrl_class);
> +
> private:
> void clear() { error(QString()); }
>
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] qv4l2: avoid empty titles for the video control tabs
2012-10-09 15:24 ` Hans Verkuil
@ 2012-10-10 15:22 ` Frank Schäfer
0 siblings, 0 replies; 3+ messages in thread
From: Frank Schäfer @ 2012-10-10 15:22 UTC (permalink / raw)
To: Hans Verkuil; +Cc: linux-media
Am 09.10.2012 17:24, schrieb Hans Verkuil:
> On Tue October 9 2012 16:46:04 Frank Schäfer wrote:
>> The video control class names are used as titles for the GUI-tabs.
>> The current code relies on the driver enumerating the control classes
>> properly when using V4L2_CTRL_FLAG_NEXT_CTRL.
>> But the UVC-driver (and likely others, too) don't do that, so we can end
>> up with an empty class name string.
>>
>> Make sure we always have a control class title:
>> If the driver didn't enumrate a class along with the controls, call
>> VIDIOC_QUERYCTRL for the class explicitly.
>> If that fails, fall back to an internal string list.
> NACK.
>
> qv4l2 is for testing drivers, so I *want* to see if a driver doesn't provide
> the control class name. They really should provide it, and it is not something
> that should be papered over.
Hehe, ok.
Then you might want to remove all the "papering-over" code a few lines
above, too ? ;)
Regards,
Frank
> Regards,
>
> Hans
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2012-10-10 15:22 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-10-09 14:46 [PATCH] qv4l2: avoid empty titles for the video control tabs Frank Schäfer
2012-10-09 15:24 ` Hans Verkuil
2012-10-10 15:22 ` Frank Schäfer
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).