On 08/21/2013 11:36 PM, Laurent Pinchart wrote:
> Hi Hans,
>
> Thank you for the patch.
>
> On Monday 12 August 2013 12:58:24 Hans Verkuil wrote:
>> From: Hans Verkuil <[email protected]>
>>
>> Add support for two motion detection controls and a 'detect control class'.
>>
>> Signed-off-by: Hans Verkuil <[email protected]>
>> ---
>> drivers/media/v4l2-core/v4l2-ctrls.c | 33 +++++++++++++++++++++++++++------
>> include/uapi/linux/v4l2-controls.h | 14 ++++++++++++++
>> 2 files changed, 41 insertions(+), 6 deletions(-)
>>
>> diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c
>> b/drivers/media/v4l2-core/v4l2-ctrls.c index fccd08b..89e7cfb 100644
>> --- a/drivers/media/v4l2-core/v4l2-ctrls.c
>> +++ b/drivers/media/v4l2-core/v4l2-ctrls.c
>> @@ -456,6 +456,12 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
>> "RGB full range (0-255)",
>> NULL,
>> };
>> + static const char * const detect_motion_mode[] = {
>> + "Disabled",
>> + "Global",
>> + "Regional",
>> + NULL,
>> + };
>>
>>
>> switch (id) {
>> @@ -545,6 +551,8 @@ const char * const *v4l2_ctrl_get_menu(u32 id)
>> case V4L2_CID_DV_TX_RGB_RANGE:
>> case V4L2_CID_DV_RX_RGB_RANGE:
>> return dv_rgb_range;
>> + case V4L2_CID_DETECT_MOTION_MODE:
>> + return detect_motion_mode;
>>
>> default:
>> return NULL;
>> @@ -557,7 +565,7 @@ const char *v4l2_ctrl_get_name(u32 id)
>> {
>> switch (id) {
>> /* USER controls */
>> - /* Keep the order of the 'case's the same as in videodev2.h! */
>> + /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>
> Maybe we could replace all the individual occurences of that comment with a
> single one at the beginning of the switch ?
It's a pretty long switch, so I think it is good that this comment is repeated
every so often.
>
>> case V4L2_CID_USER_CLASS: return "User Controls";
>> case V4L2_CID_BRIGHTNESS: return "Brightness";
>> case V4L2_CID_CONTRAST: return "Contrast";
>> @@ -601,7 +609,7 @@ const char *v4l2_ctrl_get_name(u32 id)
>> case V4L2_CID_COLORFX_CBCR: return "Color Effects, CbCr";
>>
>> /* MPEG controls */
>> - /* Keep the order of the 'case's the same as in videodev2.h! */
>> + /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> case V4L2_CID_MPEG_CLASS: return "MPEG Encoder Controls";
>> case V4L2_CID_MPEG_STREAM_TYPE: return "Stream Type";
>> case V4L2_CID_MPEG_STREAM_PID_PMT: return "Stream PMT Program ID";
>> @@ -701,7 +709,7 @@ const char *v4l2_ctrl_get_name(u32 id)
>> case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER: return "Repeat
>> Sequence
>> Header";
>>
>> /* CAMERA controls */
>> - /* Keep the order of the 'case's the same as in videodev2.h! */
>> + /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> case V4L2_CID_CAMERA_CLASS: return "Camera Controls";
>> case V4L2_CID_EXPOSURE_AUTO: return "Auto Exposure";
>> case V4L2_CID_EXPOSURE_ABSOLUTE: return "Exposure Time,
>> Absolute";
>> @@ -735,8 +743,8 @@ const char *v4l2_ctrl_get_name(u32 id)
>> case V4L2_CID_AUTO_FOCUS_STATUS: return "Auto Focus, Status";
>> case V4L2_CID_AUTO_FOCUS_RANGE: return "Auto Focus, Range";
>>
>> - /* FM Radio Modulator control */
>> - /* Keep the order of the 'case's the same as in videodev2.h! */
>> + /* FM Radio Modulator controls */
>> + /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> case V4L2_CID_FM_TX_CLASS: return "FM Radio Modulator
>> Controls";
>> case V4L2_CID_RDS_TX_DEVIATION: return "RDS Signal Deviation";
>> case V4L2_CID_RDS_TX_PI: return "RDS Program ID";
>> @@ -759,6 +767,7 @@ const char *v4l2_ctrl_get_name(u32 id)
>> case V4L2_CID_TUNE_ANTENNA_CAPACITOR: return "Tune Antenna Capacitor";
>>
>> /* Flash controls */
>> + /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> case V4L2_CID_FLASH_CLASS: return "Flash Controls";
>> case V4L2_CID_FLASH_LED_MODE: return "LED Mode";
>> case V4L2_CID_FLASH_STROBE_SOURCE: return "Strobe Source";
>> @@ -774,7 +783,7 @@ const char *v4l2_ctrl_get_name(u32 id)
>> case V4L2_CID_FLASH_READY: return "Ready to Strobe";
>>
>> /* JPEG encoder controls */
>> - /* Keep the order of the 'case's the same as in videodev2.h! */
>> + /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> case V4L2_CID_JPEG_CLASS: return "JPEG Compression
>> Controls";
>> case V4L2_CID_JPEG_CHROMA_SUBSAMPLING: return "Chroma Subsampling";
>> case V4L2_CID_JPEG_RESTART_INTERVAL: return "Restart Interval";
>> @@ -782,18 +791,21 @@ const char *v4l2_ctrl_get_name(u32 id)
>> case V4L2_CID_JPEG_ACTIVE_MARKER: return "Active Markers";
>>
>> /* Image source controls */
>> + /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> case V4L2_CID_IMAGE_SOURCE_CLASS: return "Image Source Controls";
>> case V4L2_CID_VBLANK: return "Vertical Blanking";
>> case V4L2_CID_HBLANK: return "Horizontal Blanking";
>> case V4L2_CID_ANALOGUE_GAIN: return "Analogue Gain";
>>
>> /* Image processing controls */
>> + /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> case V4L2_CID_IMAGE_PROC_CLASS: return "Image Processing
>> Controls";
>> case V4L2_CID_LINK_FREQ: return "Link Frequency";
>> case V4L2_CID_PIXEL_RATE: return "Pixel Rate";
>> case V4L2_CID_TEST_PATTERN: return "Test Pattern";
>>
>> /* DV controls */
>> + /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> case V4L2_CID_DV_CLASS: return "Digital Video Controls";
>> case V4L2_CID_DV_TX_HOTPLUG: return "Hotplug Present";
>> case V4L2_CID_DV_TX_RXSENSE: return "RxSense Present";
>> @@ -806,6 +818,12 @@ const char *v4l2_ctrl_get_name(u32 id)
>> case V4L2_CID_FM_RX_CLASS: return "FM Radio Receiver
>> Controls";
>> case V4L2_CID_TUNE_DEEMPHASIS: return "De-Emphasis";
>> case V4L2_CID_RDS_RECEPTION: return "RDS Reception";
>> +
>> + /* FM Radio Receiver controls */
>> + /* Keep the order of the 'case's the same as in v4l2-controls.h! */
>> + case V4L2_CID_DETECT_CLASS: return "Detection Controls";
>> + case V4L2_CID_DETECT_MOTION_MODE: return "Motion Detection Mode";
>> + case V4L2_CID_DETECT_MOTION_THRESHOLD: return "Motion Detection
>> Threshold"; default:
>> return NULL;
>> }
>> @@ -914,6 +932,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum
>> v4l2_ctrl_type *type, case V4L2_CID_DV_RX_RGB_RANGE:
>> case V4L2_CID_TEST_PATTERN:
>> case V4L2_CID_TUNE_DEEMPHASIS:
>> + case V4L2_CID_DETECT_MOTION_MODE:
>> *type = V4L2_CTRL_TYPE_MENU;
>> break;
>> case V4L2_CID_LINK_FREQ:
>> @@ -937,6 +956,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum
>> v4l2_ctrl_type *type, case V4L2_CID_IMAGE_PROC_CLASS:
>> case V4L2_CID_DV_CLASS:
>> case V4L2_CID_FM_RX_CLASS:
>> + case V4L2_CID_DETECT_CLASS:
>> *type = V4L2_CTRL_TYPE_CTRL_CLASS;
>> /* You can neither read not write these */
>> *flags |= V4L2_CTRL_FLAG_READ_ONLY | V4L2_CTRL_FLAG_WRITE_ONLY;
>> @@ -1009,6 +1029,7 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum
>> v4l2_ctrl_type *type, case V4L2_CID_PILOT_TONE_FREQUENCY:
>> case V4L2_CID_TUNE_POWER_LEVEL:
>> case V4L2_CID_TUNE_ANTENNA_CAPACITOR:
>> + case V4L2_CID_DETECT_MOTION_THRESHOLD:
>> *flags |= V4L2_CTRL_FLAG_SLIDER;
>> break;
>> case V4L2_CID_PAN_RELATIVE:
>> diff --git a/include/uapi/linux/v4l2-controls.h
>> b/include/uapi/linux/v4l2-controls.h index e90a88a..d88eebd 100644
>> --- a/include/uapi/linux/v4l2-controls.h
>> +++ b/include/uapi/linux/v4l2-controls.h
>> @@ -60,6 +60,7 @@
>> #define V4L2_CTRL_CLASS_IMAGE_PROC 0x009f0000 /* Image processing
> controls
>> */ #define V4L2_CTRL_CLASS_DV 0x00a00000 /* Digital
>> Video controls */
>> #define V4L2_CTRL_CLASS_FM_RX 0x00a10000 /* FM Receiver
>> controls */
>> +#define V4L2_CTRL_CLASS_DETECT 0x00a20000 /* Detection
>> controls */
>>
>> /* User-class control IDs */
>>
>> @@ -853,4 +854,17 @@ enum v4l2_deemphasis {
>>
>> #define V4L2_CID_RDS_RECEPTION
>> (V4L2_CID_FM_RX_CLASS_BASE + 2)
>>
>> +
>> +/* Detection-class control IDs defined by V4L2 */
>> +#define V4L2_CID_DETECT_CLASS_BASE (V4L2_CTRL_CLASS_DETECT | 0x900)
>> +#define V4L2_CID_DETECT_CLASS (V4L2_CTRL_CLASS_DETECT
>> | 1)
>> +
>> +#define V4L2_CID_DETECT_MOTION_MODE
>> (V4L2_CID_DETECT_CLASS_BASE + 1)
>> +enum v4l2_detect_motion_mode {
>> + V4L2_DETECT_MOTION_DISABLED = 0,
>> + V4L2_DETECT_MOTION_GLOBAL = 1,
>> + V4L2_DETECT_MOTION_REGIONAL = 2,
>> +};
>> +#define V4L2_CID_DETECT_MOTION_THRESHOLD
>> (V4L2_CID_DETECT_CLASS_BASE
> + 2)
>> +
>
> How many more controls do you expect in this class ? Maybe we should make it
> a
> bit generic, by creating an EVENT class that would contain controls
> pertaining
> to event generation ?
There could be quite a few controls here for all sorts of <something> detections
(face, smile, object, etc.). An event class seems awfully vague to me. If I am
looking for motion detection controls I wouldn't expect to find them in an EVENT
class.
Regards,
Hans
--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html