Failed to bypass ISP mode with ioctl()

Hi Forum,

We are attempting to capture V4L2 by bypassing the ISP mode with ioctl() call as following :

// This set ByPass mode -- needed especially if Argus API used before
    struct v4l2_ext_control ctrl;
    ctrl.id = 0x009a2064;
    ctrl.value = 0;
    if (ioctl(ctx.cam_fd, VIDIOC_S_CTRL, &ctrl) < 0)
    {
        if (mConfig.verbose_level>0)
            printf("Failed to SET EXT CTRL for %x || Err : %s\n",ctrl.id,strerror(errno));
    }

But the returned error :

Failed to SET EXT CTRL for 9a2064 || Err : Numerical result out of range

Checking the list of available controls, there exists the control with ID = 9a2064 anyway :

$ v4l2-ctl --list-ctrls -d /dev/video0

Camera Controls

                     group_hold 0x009a2003 (bool)   : default=0 value=0 flags=execute-on-write
                    sensor_mode 0x009a2008 (int64)  : min=0 max=3 step=1 default=0 value=0 flags=slider
                           gain 0x009a2009 (int64)  : min=0 max=480 step=1 default=0 value=0 flags=slider
                       exposure 0x009a200a (int64)  : min=28 max=660000 step=1 default=10000 value=34 flags=update, slider
                     frame_rate 0x009a200b (int64)  : min=1500000 max=43910377 step=1 default=43910377 value=43910377 flags=update, slider
           sensor_configuration 0x009a2032 (u32)    : min=0 max=4294967295 step=1 default=0 [22] flags=read-only, volatile, has-payload
         sensor_mode_i2c_packet 0x009a2033 (u32)    : min=0 max=4294967295 step=1 default=0 [1026] flags=read-only, volatile, has-payload
      sensor_control_i2c_packet 0x009a2034 (u32)    : min=0 max=4294967295 step=1 default=0 [1026] flags=read-only, volatile, has-payload
                    bypass_mode 0x009a2064 (intmenu): min=0 max=1 default=0 value=0
                override_enable 0x009a2065 (intmenu): min=0 max=1 default=0 value=0
                   height_align 0x009a2066 (int)    : min=1 max=16 step=1 default=1 value=1
                     size_align 0x009a2067 (intmenu): min=0 max=2 default=0 value=0
               write_isp_format 0x009a2068 (int)    : min=1 max=1 step=1 default=1 value=1
       sensor_signal_properties 0x009a2069 (u32)    : min=0 max=4294967295 step=1 default=0 [30][18] flags=read-only, has-payload
        sensor_image_properties 0x009a206a (u32)    : min=0 max=4294967295 step=1 default=0 [30][16] flags=read-only, has-payload
      sensor_control_properties 0x009a206b (u32)    : min=0 max=4294967295 step=1 default=0 [30][36] flags=read-only, has-payload
              sensor_dv_timings 0x009a206c (u32)    : min=0 max=4294967295 step=1 default=0 [30][16] flags=read-only, has-payload
               low_latency_mode 0x009a206d (bool)   : default=0 value=0
               preferred_stride 0x009a206e (int)    : min=0 max=65535 step=1 default=0 value=0
                   test_pattern 0x009a2070 (menu)   : min=0 max=3 default=0 value=0
                 operation_mode 0x009a2071 (menu)   : min=0 max=1 default=0 value=0
                    black_level 0x009a2074 (int64)  : min=0 max=511 step=1 default=60 value=60 flags=slider, execute-on-write
            global_shutter_mode 0x009a207a (menu)   : min=0 max=2 default=0 value=0
                   sensor_modes 0x009a2082 (int)    : min=0 max=30 step=1 default=30 value=3 flags=read-only

Also, using v4l2-ctl command to bypass the ISP seems to take effect:

  • With bypass_mode=0, there’s output :
$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=1456,height=1088,pixelformat=RG10 --set-ctrl bypass_mode=0,sensor_mode=0,frame_rate=60000000 --stream-mmap --stream-count=1000
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 41.51 fps
<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<< 41.51 fps
  • With bypass_mode=01 it is pending :
$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=1456,height=1088,pixelformat=RG10 --set-ctrl bypass_mode=1,sensor_mode=0,frame_rate=60000000 --stream-mmap --stream-count=1000

Do you have advice on the error, please ?

Thanks and best regards,
Khang