Re: [RFC PATCHv2 02/11] v4l2-ctrls: add support for dynamically allocated arrays.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



I am sending this again because apparently I sent it originally from my personal email by mistake.

---------------


Hi Hans!

I have been working on testing this lately as you know.

From the example you've added to vivid, i.e.:

+static const struct v4l2_ctrl_config vivid_ctrl_u32_dyn_array = {
+    .ops = &vivid_user_gen_ctrl_ops,
+    .id = VIVID_CID_U32_DYN_ARRAY,
+    .name = "U32 Dynamic Array",
+    .type = V4L2_CTRL_TYPE_U32,
+    .flags = V4L2_CTRL_FLAG_DYNAMIC_ARRAY,
+    .def = 50,
+    .min = 10,
+    .max = 90,
+    .step = 1,
+    .dims = { 100 },
+};
+

+    v4l2_ctrl_new_custom(hdl_user_gen, &vivid_ctrl_u32_dyn_array, NULL);


I was under the impression that it'd be enough to pass the id and V4L2_CTRL_FLAG_DYNAMIC_ARRAY in the config before calling v4l2_ctrl_new_custom. Apparently that's not the case though, because v4l2_ctrl_fill will then set its own flags if I understood correctly, i.e.:


    if (name == NULL)
        v4l2_ctrl_fill(cfg->id, &name, &type, &min, &max, &step,
                            &def,&flags)

<snip>

    *name = v4l2_ctrl_get_name(id);
    *flags = 0


<snip>


To be honest, I didn't quite understand whether you wanted individual drivers to signal they want to treat a given control as a dynamic array or whether I should add that flag in the switch statement in v4l2_ctrl_fill, thereby enabling this feature by default for all drivers that use that control if I understood correctly.

If the former, I was expecting to communicate it to userspace via a menu control, e.g. for h264 and cedrus:

enum v4l2_stateless_h264_decode_mode {
V4L2_STATELESS_H264_DECODE_MODE_SLICE_BASED, /* i.e. a single slice per request */
     V4L2_STATELESS_H264_DECODE_MODE_FRAME_BASED,
+ V4L2_STATELESS_H264_DECODE_MODE_SLICE_ARRAY_BASED, /* i.e. an array of slices per request */
 };

@@ -56,6 +56,7 @@ static const struct cedrus_control cedrus_controls[] = {
     {
         .cfg = {
             .id    = V4L2_CID_STATELESS_H264_SLICE_PARAMS,
+            .flags  = V4L2_CTRL_FLAG_DYNAMIC_ARRAY,
         },
         .codec        = CEDRUS_CODEC_H264,
     },
@@ -86,7 +87,7 @@ static const struct cedrus_control cedrus_controls[] = {
     {
         .cfg = {
             .id    = V4L2_CID_STATELESS_H264_DECODE_MODE,
-            .max    = V4L2_STATELESS_H264_DECODE_MODE_SLICE_BASED,
+            .max    = V4L2_STATELESS_H264_DECODE_MODE_SLICE_ARRAY_BASED,
             .def    = V4L2_STATELESS_H264_DECODE_MODE_SLICE_BASED,
         },
         .codec        = CEDRUS_CODEC_H264,

-- Daniel



[Index of Archives]     [Linux Input]     [Video for Linux]     [Gstreamer Embedded]     [Mplayer Users]     [Linux USB Devel]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Yosemite Backpacking]

  Powered by Linux