Since codec controls validation comes with its own logic, split off
std_validate for MPEG-2 for better clarity.

Use a shorter name for the validated structure and use the
type-specific pointer to grab it while at it.

Signed-off-by: Paul Kocialkowski <paul.kocialkow...@bootlin.com>
---
 drivers/media/v4l2-core/v4l2-ctrls.c | 95 +++++++++++++++-------------
 1 file changed, 52 insertions(+), 43 deletions(-)

diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c 
b/drivers/media/v4l2-core/v4l2-ctrls.c
index f2b9bdedbf8c..824126267c44 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -1617,11 +1617,61 @@ static void std_log(const struct v4l2_ctrl *ctrl)
        0;                                                      \
 })
 
+static int std_validate_mpeg2(const struct v4l2_ctrl *ctrl, u32 idx,
+                             union v4l2_ctrl_ptr ptr)
+{
+       struct v4l2_ctrl_mpeg2_slice_params *slice_params =
+               ptr.p_mpeg2_slice_params;
+
+       switch ((u32)ctrl->type) {
+       case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
+               switch (slice_params->sequence.chroma_format) {
+               case 1: /* 4:2:0 */
+               case 2: /* 4:2:2 */
+               case 3: /* 4:4:4 */
+                       break;
+               default:
+                       return -EINVAL;
+               }
+
+               switch (slice_params->picture.intra_dc_precision) {
+               case 0: /* 8 bits */
+               case 1: /* 9 bits */
+               case 2: /* 10 bits */
+               case 3: /* 11 bits */
+                       break;
+               default:
+                       return -EINVAL;
+               }
+
+               switch (slice_params->picture.picture_structure) {
+               case 1: /* interlaced top field */
+               case 2: /* interlaced bottom field */
+               case 3: /* progressive */
+                       break;
+               default:
+                       return -EINVAL;
+               }
+
+               switch (slice_params->picture.picture_coding_type) {
+               case V4L2_MPEG2_PICTURE_CODING_TYPE_I:
+               case V4L2_MPEG2_PICTURE_CODING_TYPE_P:
+               case V4L2_MPEG2_PICTURE_CODING_TYPE_B:
+                       break;
+               default:
+                       return -EINVAL;
+               }
+
+               return 0;
+       default:
+               return 0;
+       }
+}
+
 /* Validate a new control */
 static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
                        union v4l2_ctrl_ptr ptr)
 {
-       struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
        size_t len;
        u64 offset;
        s64 val;
@@ -1685,49 +1735,8 @@ static int std_validate(const struct v4l2_ctrl *ctrl, 
u32 idx,
                return 0;
 
        case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
-               p_mpeg2_slice_params = ptr.p;
-
-               switch (p_mpeg2_slice_params->sequence.chroma_format) {
-               case 1: /* 4:2:0 */
-               case 2: /* 4:2:2 */
-               case 3: /* 4:4:4 */
-                       break;
-               default:
-                       return -EINVAL;
-               }
-
-               switch (p_mpeg2_slice_params->picture.intra_dc_precision) {
-               case 0: /* 8 bits */
-               case 1: /* 9 bits */
-               case 2: /* 10 bits */
-               case 3: /* 11 bits */
-                       break;
-               default:
-                       return -EINVAL;
-               }
-
-               switch (p_mpeg2_slice_params->picture.picture_structure) {
-               case 1: /* interlaced top field */
-               case 2: /* interlaced bottom field */
-               case 3: /* progressive */
-                       break;
-               default:
-                       return -EINVAL;
-               }
-
-               switch (p_mpeg2_slice_params->picture.picture_coding_type) {
-               case V4L2_MPEG2_PICTURE_CODING_TYPE_I:
-               case V4L2_MPEG2_PICTURE_CODING_TYPE_P:
-               case V4L2_MPEG2_PICTURE_CODING_TYPE_B:
-                       break;
-               default:
-                       return -EINVAL;
-               }
-
-               return 0;
-
        case V4L2_CTRL_TYPE_MPEG2_QUANTIZATION:
-               return 0;
+               return std_validate_mpeg2(ctrl, idx, ptr);
 
        case V4L2_CTRL_TYPE_FWHT_PARAMS:
                return 0;
-- 
2.21.0

_______________________________________________
devel mailing list
de...@linuxdriverproject.org
http://driverdev.linuxdriverproject.org/mailman/listinfo/driverdev-devel

Reply via email to