media: v4l2-ctrl: Initialize _BUTTON and _CTRL_CLASS
PATCH v3 1/2 media: v4l2-ctrl: Initialize _BUTTON and _CTRL_CLASS
These two control types don't really need a default value, as they are not expected to carry any value.
However, it's slightly clearer to initialize them explicitly instead of falling back to the switch default.
---
Changes from v2:
* Initialize the controls to zero, instead of default.
Changes from v1:
* No change.
--- drivers/media/v4l2-core/v4l2-ctrls.c | 4 ++++ 1 file changed, 4 insertions(+)
drivers/media/v4l2-core/v4l2-ctrls.c +4 -0
@@ -1532,6 +1532,10 @@ static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,case V4L2_CTRL_TYPE_BOOLEAN : ptr.p_s32[idx] = ctrl->default_value;break ; +case V4L2_CTRL_TYPE_BUTTON : +case V4L2_CTRL_TYPE_CTRL_CLASS : + ptr.p_s32[idx] =0 ; +break ;case V4L2_CTRL_TYPE_U8 : ptr.p_u8[idx] = ctrl->default_value;break ;
Signature · 1 line
2.20.1
PATCH v3 2/2 media: v4l2-ctrl: Move compound control initialization
Rework std_init adding an explicit initialization for compound controls.
While here, make sure the control is initialized to zero, before providing default values for all its fields.
---
Changes from v2:
* Align parameters to parenthesis
* Drop unneeded zero initialization
Changes from v1:
* Drop the s/break/return replacements
* Drop unneeded default cases
* Fix memset to take account of the index
--- drivers/media/v4l2-core/v4l2-ctrls.c | 37 +++++++++++++++++----------- 1 file changed, 22 insertions(+), 15 deletions(-)
drivers/media/v4l2-core/v4l2-ctrls.c +22 -15
@@ -1506,17 +1506,36 @@ static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx, } } -static void std_init (const struct v4l2_ctrl *ctrl,u32 idx, -union v4l2_ctrl_ptr ptr) +static void std_init_compound (const struct v4l2_ctrl *ctrl,u32 idx, +union v4l2_ctrl_ptr ptr) {struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params; + idx *= ctrl->elem_size; +memset (ptr.p + idx,0 , ctrl->elem_size); +/* * The cast is needed to get rid of a gcc warning complaining that * V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS is not part of the * v4l2_ctrl_type enum. */ switch ((u32 )ctrl->type) { +case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS : + p_mpeg2_slice_params = ptr.p; +/* 4:2:0 */ + p_mpeg2_slice_params->sequence.chroma_format =1 ; +/* interlaced top field */ + p_mpeg2_slice_params->picture.picture_structure =1 ; + p_mpeg2_slice_params->picture.picture_coding_type = +V4L2_MPEG2_PICTURE_CODING_TYPE_I ; +break ; + } +} + +static void std_init (const struct v4l2_ctrl *ctrl,u32 idx, +union v4l2_ctrl_ptr ptr) +{ +switch (ctrl->type) {case V4L2_CTRL_TYPE_STRING : idx *= ctrl->elem_size;memset (ptr.p_char + idx,' ' , ctrl->minimum);
@@ -1545,20 +1564,8 @@ static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,case V4L2_CTRL_TYPE_U32 : ptr.p_u32[idx] = ctrl->default_value;break ; -case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS : - p_mpeg2_slice_params = ptr.p; -/* 4:2:0 */ - p_mpeg2_slice_params->sequence.chroma_format =1 ; -/* 8 bits */ - p_mpeg2_slice_params->picture.intra_dc_precision =0 ; -/* interlaced top field */ - p_mpeg2_slice_params->picture.picture_structure =1 ; - p_mpeg2_slice_params->picture.picture_coding_type = -V4L2_MPEG2_PICTURE_CODING_TYPE_I ; -break ;default : - idx *= ctrl->elem_size; -memset (ptr.p + idx,0 , ctrl->elem_size); +std_init_compound (ctrl, idx, ptr);break ; } }
Signature · 1 line
2.20.1
Re: [PATCH v3 2/2] media: v4l2-ctrl: Move compound control initialization
Quoted 7 lines · On Thu, 6 Jun 2019 13:12:54 -0300 Ezequiel Garcia <[email protected]>…
Rework
std_initadding an explicit initialization for compound controls.While here, make sure the control is initialized to zero, before providing default values for all its fields.
Signed-off-by Ezequiel Garcia <[email protected]>
Quoted 78 lines
---
Changes from v2:
* Align parameters to parenthesis
* Drop unneeded zero initializationChanges from v1:
* Drop the s/break/return replacements
* Drop unneeded default cases
* Fix memset to take account of the index--- drivers/media/v4l2-core/v4l2-ctrls.c | 37 +++++++++++++++++----------- 1 file changed, 22 insertions(+), 15 deletions(-)drivers/media/v4l2-core/v4l2-ctrls.c +22
-15@@ -1506,17 +1506,36 @@ static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx, } } -static void std_init (const struct v4l2_ctrl *ctrl,u32 idx, -union v4l2_ctrl_ptr ptr) +static void std_init_compound (const struct v4l2_ctrl *ctrl,u32 idx, +union v4l2_ctrl_ptr ptr) {struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params; + idx *= ctrl->elem_size; +memset (ptr.p + idx,0 , ctrl->elem_size); +/* * The cast is needed to get rid of a gcc warning complaining that * V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS is not part of the * v4l2_ctrl_type enum. */ switch ((u32 )ctrl->type) { +case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS : + p_mpeg2_slice_params = ptr.p; +/* 4:2:0 */ + p_mpeg2_slice_params->sequence.chroma_format =1 ; +/* interlaced top field */ + p_mpeg2_slice_params->picture.picture_structure =1 ; + p_mpeg2_slice_params->picture.picture_coding_type = +V4L2_MPEG2_PICTURE_CODING_TYPE_I ; +break ; + } +} + +static void std_init (const struct v4l2_ctrl *ctrl,u32 idx, +union v4l2_ctrl_ptr ptr) +{ +switch (ctrl->type) {case V4L2_CTRL_TYPE_STRING : idx *= ctrl->elem_size;memset (ptr.p_char + idx,' ' , ctrl->minimum);@@ -1545,20 +1564,8 @@ static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,case V4L2_CTRL_TYPE_U32 : ptr.p_u32[idx] = ctrl->default_value;break ; -case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS : - p_mpeg2_slice_params = ptr.p; -/* 4:2:0 */ - p_mpeg2_slice_params->sequence.chroma_format =1 ; -/* 8 bits */ - p_mpeg2_slice_params->picture.intra_dc_precision =0 ; -/* interlaced top field */ - p_mpeg2_slice_params->picture.picture_structure =1 ; - p_mpeg2_slice_params->picture.picture_coding_type = -V4L2_MPEG2_PICTURE_CODING_TYPE_I ; -break ;default : - idx *= ctrl->elem_size; -memset (ptr.p + idx,0 , ctrl->elem_size); +std_init_compound (ctrl, idx, ptr);break ; } }
Re: [PATCH v3 2/2] media: v4l2-ctrl: Move compound control initialization
In reply to Ezequiel GarciaQuoted 36 lines · Ezequiel Garcia
Rework
std_initadding an explicit initialization for compound controls.While here, make sure the control is initialized to zero, before providing default values for all its fields.
Signed-off-by Ezequiel Garcia <[email protected]>---
Changes from v2:
* Align parameters to parenthesis
* Drop unneeded zero initializationChanges from v1:
* Drop the s/break/return replacements
* Drop unneeded default cases
* Fix memset to take account of the index--- drivers/media/v4l2-core/v4l2-ctrls.c | 37 +++++++++++++++++----------- 1 file changed, 22 insertions(+), 15 deletions(-)drivers/media/v4l2-core/v4l2-ctrls.c +3
-2@@ -1506,17 +1506,36 @@ static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx, } } -static void std_init (const struct v4l2_ctrl *ctrl,u32 idx, -union v4l2_ctrl_ptr ptr) +static void std_init_compound (const struct v4l2_ctrl *ctrl,u32 idx, +union v4l2_ctrl_ptr ptr) {struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params; + idx *= ctrl->elem_size;
drivers/media/v4l2-core/v4l2-ctrls.c static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx, · line 1524
Quoted 10 lines
drivers/media/v4l2-core/v4l2-ctrls.c +4
-0+memset (ptr.p + idx,0 , ctrl->elem_size); +/* * The cast is needed to get rid of a gcc warning complaining that * V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS is not part of the * v4l2_ctrl_type enum. */ switch ((u32 )ctrl->type) { +case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS : + p_mpeg2_slice_params = ptr.p;
This is wrong, it should be ptr.p + idx, just as is done in the memset. I'd add a 'void *p = ptr.p + idx * ctrl->elem_size;' variable at the beginning and use 'p' in the memset and in the line above.
Regards,
Hans
Quoted 40 lines
drivers/media/v4l2-core/v4l2-ctrls.c +15
-13+/* 4:2:0 */ + p_mpeg2_slice_params->sequence.chroma_format =1 ; +/* interlaced top field */ + p_mpeg2_slice_params->picture.picture_structure =1 ; + p_mpeg2_slice_params->picture.picture_coding_type = +V4L2_MPEG2_PICTURE_CODING_TYPE_I ; +break ; + } +} + +static void std_init (const struct v4l2_ctrl *ctrl,u32 idx, +union v4l2_ctrl_ptr ptr) +{ +switch (ctrl->type) {case V4L2_CTRL_TYPE_STRING : idx *= ctrl->elem_size;memset (ptr.p_char + idx,' ' , ctrl->minimum);@@ -1545,20 +1564,8 @@ static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,case V4L2_CTRL_TYPE_U32 : ptr.p_u32[idx] = ctrl->default_value;break ; -case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS : - p_mpeg2_slice_params = ptr.p; -/* 4:2:0 */ - p_mpeg2_slice_params->sequence.chroma_format =1 ; -/* 8 bits */ - p_mpeg2_slice_params->picture.intra_dc_precision =0 ; -/* interlaced top field */ - p_mpeg2_slice_params->picture.picture_structure =1 ; - p_mpeg2_slice_params->picture.picture_coding_type = -V4L2_MPEG2_PICTURE_CODING_TYPE_I ; -break ;default : - idx *= ctrl->elem_size; -memset (ptr.p + idx,0 , ctrl->elem_size); +std_init_compound (ctrl, idx, ptr);break ; } }
PATCH v3 1/1 media: v4l2-ctrl: Move compound control initialization
Rework std_init adding an explicit initialization for compound controls.
While here, make sure the control is initialized to zero, before providing default values for all its fields.
---
Changes from v2:
* Fix missing index usage
Changes from v2:
* Align parameters to parenthesis
* Drop unneeded zero initialization
Changes from v1:
* Drop the s/break/return replacements
* Drop unneeded default cases
* Fix memset to take account of the index
--- drivers/media/v4l2-core/v4l2-ctrls.c | 37 +++++++++++++++++----------- 1 file changed, 22 insertions(+), 15 deletions(-)
drivers/media/v4l2-core/v4l2-ctrls.c +22 -15
@@ -1502,10 +1502,13 @@ static bool std_equal(const struct v4l2_ctrl *ctrl, u32 idx, } } -static void std_init (const struct v4l2_ctrl *ctrl,u32 idx, -union v4l2_ctrl_ptr ptr) +static void std_init_compound (const struct v4l2_ctrl *ctrl,u32 idx, +union v4l2_ctrl_ptr ptr) {struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params; +void *p = ptr.p + idx * ctrl->elem_size; + +memset (p,0 , ctrl->elem_size);/* * The cast is needed to get rid of a gcc warning complaining that
@@ -1513,6 +1516,22 @@ static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,* v4l2_ctrl_type enum. */ switch ((u32 )ctrl->type) { +case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS : + p_mpeg2_slice_params = p; +/* 4:2:0 */ + p_mpeg2_slice_params->sequence.chroma_format =1 ; +/* interlaced top field */ + p_mpeg2_slice_params->picture.picture_structure =1 ; + p_mpeg2_slice_params->picture.picture_coding_type = +V4L2_MPEG2_PICTURE_CODING_TYPE_I ; +break ; + } +} + +static void std_init (const struct v4l2_ctrl *ctrl,u32 idx, +union v4l2_ctrl_ptr ptr) +{ +switch (ctrl->type) {case V4L2_CTRL_TYPE_STRING : idx *= ctrl->elem_size;memset (ptr.p_char + idx,' ' , ctrl->minimum);
@@ -1541,20 +1560,8 @@ static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,case V4L2_CTRL_TYPE_U32 : ptr.p_u32[idx] = ctrl->default_value;break ; -case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS : - p_mpeg2_slice_params = ptr.p; -/* 4:2:0 */ - p_mpeg2_slice_params->sequence.chroma_format =1 ; -/* 8 bits */ - p_mpeg2_slice_params->picture.intra_dc_precision =0 ; -/* interlaced top field */ - p_mpeg2_slice_params->picture.picture_structure =1 ; - p_mpeg2_slice_params->picture.picture_coding_type = -V4L2_MPEG2_PICTURE_CODING_TYPE_I ; -break ;default : - idx *= ctrl->elem_size; -memset (ptr.p + idx,0 , ctrl->elem_size); +std_init_compound (ctrl, idx, ptr);break ; } }
Signature · 1 line
2.20.1
Re: [PATCH v3] media: v4l2-ctrl: Move compound control initialization
Quoted 12 lines · Ezequiel Garcia
Rework
std_initadding an explicit initialization for compound controls.While here, make sure the control is initialized to zero, before providing default values for all its fields.
Reviewed-by Boris Brezillon <[email protected]>Signed-off-by Ezequiel Garcia <[email protected]>---
Changes from v2:
* Fix missing index usage
Erratum, should be "Changes from v3" since this is v4 patch.
Thanks,
Ezequiel
Quoted 7 lines · On Thu, 6 Jun 2019 13:12:53 -0300 Ezequiel Garcia <[email protected]>…
These two control types don't really need a default value, as they are not expected to carry any value.
However, it's slightly clearer to initialize them explicitly instead of falling back to the switch default.
Signed-off-by Ezequiel Garcia <[email protected]>
Quoted 25 lines
---
Changes from v2:
* Initialize the controls to zero, instead of default.Changes from v1:
* No change.--- drivers/media/v4l2-core/v4l2-ctrls.c | 4 ++++ 1 file changed, 4 insertions(+)drivers/media/v4l2-core/v4l2-ctrls.c +4
-0@@ -1532,6 +1532,10 @@ static void std_init(const struct v4l2_ctrl *ctrl, u32 idx,case V4L2_CTRL_TYPE_BOOLEAN : ptr.p_s32[idx] = ctrl->default_value;break ; +case V4L2_CTRL_TYPE_BUTTON : +case V4L2_CTRL_TYPE_CTRL_CLASS : + ptr.p_s32[idx] =0 ; +break ;case V4L2_CTRL_TYPE_U8 : ptr.p_u8[idx] = ctrl->default_value;break ;