* [PATCH] media: rkisp1: Add the enum_frame_size ioctl
@ 2020-12-06 5:39 Sebastian Fricke
2020-12-07 11:33 ` Helen Koike
0 siblings, 1 reply; 8+ messages in thread
From: Sebastian Fricke @ 2020-12-06 5:39 UTC (permalink / raw)
To: linux-media; +Cc: dafna.hirschfeld, helen.koike, sebastian.fricke.linux
Implement the VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl, check if the mbus
code is valid for the given pad. This call is not available for the
parameter or metadata pads of the RkISP1.
Signed-off-by: Sebastian Fricke <sebastian.fricke.linux@gmail.com>
---
I have tested this patch with the following script:
https://github.com/initBasti/Linux_kernel_media_tree_fork/commit/efc4b399cff53fb36fadde999594961a3d84073e
The results on my NanoPC-T4 (Linux nanopct4 5.10.0-rc6-rockchip64):
pad 0 = RKISP1_ISP_PAD_SINK_VIDEO
pad 1 = RKISP1_ISP_PAD_SINK_PARAMS
pad 2 = RKISP1_ISP_PAD_SOURCE_VIDEO
pad 3 = RKISP1_ISP_PAD_SOURCE_STATS
basti@nanopct4:~$ python3 rkisp1_enum_frame_size_test.py
TEST 0: pad 0 - code 0x300f - size 32x32 - 4032x3024
TEST 1: pad 0 - code 0x3007 - size 32x32 - 4032x3024
TEST 2: pad 0 - code 0x300e - size 32x32 - 4032x3024
TEST 3: pad 0 - code 0x300a - size 32x32 - 4032x3024
TEST 4: pad 0 - code 0x3012 - size 32x32 - 4032x3024
TEST 5: pad 0 - code 0x3008 - size 32x32 - 4032x3024
TEST 6: pad 0 - code 0x3010 - size 32x32 - 4032x3024
TEST 7: pad 0 - code 0x3011 - size 32x32 - 4032x3024
TEST 8: pad 0 - code 0x3014 - size 32x32 - 4032x3024
TEST 9: pad 0 - code 0x3001 - size 32x32 - 4032x3024
TEST 10: pad 0 - code 0x3013 - size 32x32 - 4032x3024
TEST 11: pad 0 - code 0x3002 - size 32x32 - 4032x3024
TEST 12: pad 0 - code 0x2011 - size 32x32 - 4032x3024
TEST 13: pad 0 - code 0x2012 - size 32x32 - 4032x3024
TEST 14: pad 0 - code 0x200f - size 32x32 - 4032x3024
TEST 15: pad 0 - code 0x2010 - size 32x32 - 4032x3024
TEST 16: pad 1 - code 0x7001 - size /
TEST 17: pad 2 - code 0x2008 - size 32x32 - 4032x3024
TEST 18: pad 2 - code 0x300f - size 32x32 - 4032x3024
TEST 19: pad 2 - code 0x3007 - size 32x32 - 4032x3024
TEST 20: pad 2 - code 0x300e - size 32x32 - 4032x3024
TEST 21: pad 2 - code 0x300a - size 32x32 - 4032x3024
TEST 22: pad 2 - code 0x3012 - size 32x32 - 4032x3024
TEST 23: pad 2 - code 0x3008 - size 32x32 - 4032x3024
TEST 24: pad 2 - code 0x3010 - size 32x32 - 4032x3024
TEST 25: pad 2 - code 0x3011 - size 32x32 - 4032x3024
TEST 26: pad 2 - code 0x3014 - size 32x32 - 4032x3024
TEST 27: pad 2 - code 0x3001 - size 32x32 - 4032x3024
TEST 28: pad 2 - code 0x3013 - size 32x32 - 4032x3024
TEST 29: pad 2 - code 0x3002 - size 32x32 - 4032x3024
TEST 30: pad 3 - code 0x7001 - size /
TEST 31: pad 0 - code 0xdead - size / (test with an invalid media bus code)
TEST 32: pad 6 - code 0x300f - size / (test with an invalid pad)
TEST 33: pad 0 - code 0x2008 - size / (test with a format that is not supported by the pad)
TEST 34: pad 2 - code 0x2010 - size / (test with a format that is not supported by the pad)
---
.../platform/rockchip/rkisp1/rkisp1-isp.c | 39 +++++++++++++++++++
1 file changed, 39 insertions(+)
diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
index 889982d8ca41..fa7540155d71 100644
--- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
+++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
@@ -599,6 +599,44 @@ static int rkisp1_isp_enum_mbus_code(struct v4l2_subdev *sd,
return -EINVAL;
}
+static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
+ struct v4l2_subdev_pad_config *cfg,
+ struct v4l2_subdev_frame_size_enum *fse)
+{
+ int i;
+ bool code_match = false;
+
+ if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
+ fse->pad == RKISP1_ISP_PAD_SOURCE_STATS)
+ return -EINVAL;
+
+ if (fse->index > 0)
+ return -EINVAL;
+
+ for (i = 0; i < ARRAY_SIZE(rkisp1_isp_formats); i++) {
+ const struct rkisp1_isp_mbus_info *fmt = &rkisp1_isp_formats[i];
+
+ if (fmt->mbus_code == fse->code) {
+ code_match = true;
+ if (!(fmt->direction & RKISP1_ISP_SD_SINK) &&
+ fse->pad == RKISP1_ISP_PAD_SINK_VIDEO)
+ return -EINVAL;
+ if (!(fmt->direction & RKISP1_ISP_SD_SRC) &&
+ fse->pad == RKISP1_ISP_PAD_SOURCE_VIDEO)
+ return -EINVAL;
+ }
+ }
+
+ if (!code_match)
+ return -EINVAL;
+
+ fse->min_width = RKISP1_ISP_MIN_WIDTH;
+ fse->max_width = RKISP1_ISP_MAX_WIDTH;
+ fse->min_height = RKISP1_ISP_MIN_HEIGHT;
+ fse->max_height = RKISP1_ISP_MAX_HEIGHT;
+
+ return 0;
+}
static int rkisp1_isp_init_config(struct v4l2_subdev *sd,
struct v4l2_subdev_pad_config *cfg)
@@ -880,6 +918,7 @@ static int rkisp1_subdev_link_validate(struct media_link *link)
static const struct v4l2_subdev_pad_ops rkisp1_isp_pad_ops = {
.enum_mbus_code = rkisp1_isp_enum_mbus_code,
+ .enum_frame_size = rkisp1_isp_enum_frame_size,
.get_selection = rkisp1_isp_get_selection,
.set_selection = rkisp1_isp_set_selection,
.init_cfg = rkisp1_isp_init_config,
--
2.20.1
^ permalink raw reply related [flat|nested] 8+ messages in thread
* Re: [PATCH] media: rkisp1: Add the enum_frame_size ioctl
2020-12-06 5:39 [PATCH] media: rkisp1: Add the enum_frame_size ioctl Sebastian Fricke
@ 2020-12-07 11:33 ` Helen Koike
2020-12-07 18:01 ` Sebastian Fricke
0 siblings, 1 reply; 8+ messages in thread
From: Helen Koike @ 2020-12-07 11:33 UTC (permalink / raw)
To: Sebastian Fricke, linux-media; +Cc: dafna.hirschfeld
Hi Sebastian,
Thanks for your patch.
On 12/6/20 2:39 AM, Sebastian Fricke wrote:
> Implement the VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl, check if the mbus
> code is valid for the given pad. This call is not available for the
> parameter or metadata pads of the RkISP1.
>
> Signed-off-by: Sebastian Fricke <sebastian.fricke.linux@gmail.com>
> ---
>
> I have tested this patch with the following script:
> https://github.com/initBasti/Linux_kernel_media_tree_fork/commit/efc4b399cff53fb36fadde999594961a3d84073e
>
> The results on my NanoPC-T4 (Linux nanopct4 5.10.0-rc6-rockchip64):
>
> pad 0 = RKISP1_ISP_PAD_SINK_VIDEO
> pad 1 = RKISP1_ISP_PAD_SINK_PARAMS
> pad 2 = RKISP1_ISP_PAD_SOURCE_VIDEO
> pad 3 = RKISP1_ISP_PAD_SOURCE_STATS
>
> basti@nanopct4:~$ python3 rkisp1_enum_frame_size_test.py
> TEST 0: pad 0 - code 0x300f - size 32x32 - 4032x3024
> TEST 1: pad 0 - code 0x3007 - size 32x32 - 4032x3024
> TEST 2: pad 0 - code 0x300e - size 32x32 - 4032x3024
> TEST 3: pad 0 - code 0x300a - size 32x32 - 4032x3024
> TEST 4: pad 0 - code 0x3012 - size 32x32 - 4032x3024
> TEST 5: pad 0 - code 0x3008 - size 32x32 - 4032x3024
> TEST 6: pad 0 - code 0x3010 - size 32x32 - 4032x3024
> TEST 7: pad 0 - code 0x3011 - size 32x32 - 4032x3024
> TEST 8: pad 0 - code 0x3014 - size 32x32 - 4032x3024
> TEST 9: pad 0 - code 0x3001 - size 32x32 - 4032x3024
> TEST 10: pad 0 - code 0x3013 - size 32x32 - 4032x3024
> TEST 11: pad 0 - code 0x3002 - size 32x32 - 4032x3024
> TEST 12: pad 0 - code 0x2011 - size 32x32 - 4032x3024
> TEST 13: pad 0 - code 0x2012 - size 32x32 - 4032x3024
> TEST 14: pad 0 - code 0x200f - size 32x32 - 4032x3024
> TEST 15: pad 0 - code 0x2010 - size 32x32 - 4032x3024
> TEST 16: pad 1 - code 0x7001 - size /
> TEST 17: pad 2 - code 0x2008 - size 32x32 - 4032x3024
> TEST 18: pad 2 - code 0x300f - size 32x32 - 4032x3024
> TEST 19: pad 2 - code 0x3007 - size 32x32 - 4032x3024
> TEST 20: pad 2 - code 0x300e - size 32x32 - 4032x3024
> TEST 21: pad 2 - code 0x300a - size 32x32 - 4032x3024
> TEST 22: pad 2 - code 0x3012 - size 32x32 - 4032x3024
> TEST 23: pad 2 - code 0x3008 - size 32x32 - 4032x3024
> TEST 24: pad 2 - code 0x3010 - size 32x32 - 4032x3024
> TEST 25: pad 2 - code 0x3011 - size 32x32 - 4032x3024
> TEST 26: pad 2 - code 0x3014 - size 32x32 - 4032x3024
> TEST 27: pad 2 - code 0x3001 - size 32x32 - 4032x3024
> TEST 28: pad 2 - code 0x3013 - size 32x32 - 4032x3024
> TEST 29: pad 2 - code 0x3002 - size 32x32 - 4032x3024
> TEST 30: pad 3 - code 0x7001 - size /
> TEST 31: pad 0 - code 0xdead - size / (test with an invalid media bus code)
> TEST 32: pad 6 - code 0x300f - size / (test with an invalid pad)
> TEST 33: pad 0 - code 0x2008 - size / (test with a format that is not supported by the pad)
> TEST 34: pad 2 - code 0x2010 - size / (test with a format that is not supported by the pad)
Could you please also run v4l2-compliance ?
>
> ---
>
> .../platform/rockchip/rkisp1/rkisp1-isp.c | 39 +++++++++++++++++++
> 1 file changed, 39 insertions(+)
>
> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> index 889982d8ca41..fa7540155d71 100644
> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
> @@ -599,6 +599,44 @@ static int rkisp1_isp_enum_mbus_code(struct v4l2_subdev *sd,
>
> return -EINVAL;
> }
Please add a new line here
> +static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
> + struct v4l2_subdev_pad_config *cfg,
> + struct v4l2_subdev_frame_size_enum *fse)
> +{
> + int i;
unsigned
> + bool code_match = false;
> +
> + if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
> + fse->pad == RKISP1_ISP_PAD_SOURCE_STATS)
> + return -EINVAL;
> +
> + if (fse->index > 0)> + return -EINVAL;
> +
> + for (i = 0; i < ARRAY_SIZE(rkisp1_isp_formats); i++) {
> + const struct rkisp1_isp_mbus_info *fmt = &rkisp1_isp_formats[i];
Can't you use function rkisp1_isp_mbus_info_get() ?
Check how rkisp1_isp_set_src_fmt() checks for a valid mbus code.
Thanks
Helen
> +
> + if (fmt->mbus_code == fse->code) {
> + code_match = true;
> + if (!(fmt->direction & RKISP1_ISP_SD_SINK) &&
> + fse->pad == RKISP1_ISP_PAD_SINK_VIDEO)
> + return -EINVAL;
> + if (!(fmt->direction & RKISP1_ISP_SD_SRC) &&
> + fse->pad == RKISP1_ISP_PAD_SOURCE_VIDEO)
> + return -EINVAL;
> + }
> + }
> +
> + if (!code_match)
> + return -EINVAL;
> +
> + fse->min_width = RKISP1_ISP_MIN_WIDTH;
> + fse->max_width = RKISP1_ISP_MAX_WIDTH;
> + fse->min_height = RKISP1_ISP_MIN_HEIGHT;
> + fse->max_height = RKISP1_ISP_MAX_HEIGHT;
> +
> + return 0;
> +}
>
> static int rkisp1_isp_init_config(struct v4l2_subdev *sd,
> struct v4l2_subdev_pad_config *cfg)
> @@ -880,6 +918,7 @@ static int rkisp1_subdev_link_validate(struct media_link *link)
>
> static const struct v4l2_subdev_pad_ops rkisp1_isp_pad_ops = {
> .enum_mbus_code = rkisp1_isp_enum_mbus_code,
> + .enum_frame_size = rkisp1_isp_enum_frame_size,
> .get_selection = rkisp1_isp_get_selection,
> .set_selection = rkisp1_isp_set_selection,
> .init_cfg = rkisp1_isp_init_config,
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] media: rkisp1: Add the enum_frame_size ioctl
2020-12-07 11:33 ` Helen Koike
@ 2020-12-07 18:01 ` Sebastian Fricke
2020-12-09 14:22 ` Helen Koike
0 siblings, 1 reply; 8+ messages in thread
From: Sebastian Fricke @ 2020-12-07 18:01 UTC (permalink / raw)
To: Helen Koike; +Cc: linux-media, dafna.hirschfeld
On 07.12.2020 08:33, Helen Koike wrote:
>Hi Sebastian,
>
>Thanks for your patch.
Hello Helen,
I am very grateful for your review.
>
>On 12/6/20 2:39 AM, Sebastian Fricke wrote:
>> Implement the VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl, check if the mbus
>> code is valid for the given pad. This call is not available for the
>> parameter or metadata pads of the RkISP1.
>>
>> Signed-off-by: Sebastian Fricke <sebastian.fricke.linux@gmail.com>
>> ---
>>
>> I have tested this patch with the following script:
>> https://github.com/initBasti/Linux_kernel_media_tree_fork/commit/efc4b399cff53fb36fadde999594961a3d84073e
>>
>> The results on my NanoPC-T4 (Linux nanopct4 5.10.0-rc6-rockchip64):
>>
>> pad 0 = RKISP1_ISP_PAD_SINK_VIDEO
>> pad 1 = RKISP1_ISP_PAD_SINK_PARAMS
>> pad 2 = RKISP1_ISP_PAD_SOURCE_VIDEO
>> pad 3 = RKISP1_ISP_PAD_SOURCE_STATS
>>
>> basti@nanopct4:~$ python3 rkisp1_enum_frame_size_test.py
>> TEST 0: pad 0 - code 0x300f - size 32x32 - 4032x3024
>> TEST 1: pad 0 - code 0x3007 - size 32x32 - 4032x3024
>> TEST 2: pad 0 - code 0x300e - size 32x32 - 4032x3024
>> TEST 3: pad 0 - code 0x300a - size 32x32 - 4032x3024
>> TEST 4: pad 0 - code 0x3012 - size 32x32 - 4032x3024
>> TEST 5: pad 0 - code 0x3008 - size 32x32 - 4032x3024
>> TEST 6: pad 0 - code 0x3010 - size 32x32 - 4032x3024
>> TEST 7: pad 0 - code 0x3011 - size 32x32 - 4032x3024
>> TEST 8: pad 0 - code 0x3014 - size 32x32 - 4032x3024
>> TEST 9: pad 0 - code 0x3001 - size 32x32 - 4032x3024
>> TEST 10: pad 0 - code 0x3013 - size 32x32 - 4032x3024
>> TEST 11: pad 0 - code 0x3002 - size 32x32 - 4032x3024
>> TEST 12: pad 0 - code 0x2011 - size 32x32 - 4032x3024
>> TEST 13: pad 0 - code 0x2012 - size 32x32 - 4032x3024
>> TEST 14: pad 0 - code 0x200f - size 32x32 - 4032x3024
>> TEST 15: pad 0 - code 0x2010 - size 32x32 - 4032x3024
>> TEST 16: pad 1 - code 0x7001 - size /
>> TEST 17: pad 2 - code 0x2008 - size 32x32 - 4032x3024
>> TEST 18: pad 2 - code 0x300f - size 32x32 - 4032x3024
>> TEST 19: pad 2 - code 0x3007 - size 32x32 - 4032x3024
>> TEST 20: pad 2 - code 0x300e - size 32x32 - 4032x3024
>> TEST 21: pad 2 - code 0x300a - size 32x32 - 4032x3024
>> TEST 22: pad 2 - code 0x3012 - size 32x32 - 4032x3024
>> TEST 23: pad 2 - code 0x3008 - size 32x32 - 4032x3024
>> TEST 24: pad 2 - code 0x3010 - size 32x32 - 4032x3024
>> TEST 25: pad 2 - code 0x3011 - size 32x32 - 4032x3024
>> TEST 26: pad 2 - code 0x3014 - size 32x32 - 4032x3024
>> TEST 27: pad 2 - code 0x3001 - size 32x32 - 4032x3024
>> TEST 28: pad 2 - code 0x3013 - size 32x32 - 4032x3024
>> TEST 29: pad 2 - code 0x3002 - size 32x32 - 4032x3024
>> TEST 30: pad 3 - code 0x7001 - size /
>> TEST 31: pad 0 - code 0xdead - size / (test with an invalid media bus code)
>> TEST 32: pad 6 - code 0x300f - size / (test with an invalid pad)
>> TEST 33: pad 0 - code 0x2008 - size / (test with a format that is not supported by the pad)
>> TEST 34: pad 2 - code 0x2010 - size / (test with a format that is not supported by the pad)
>
>Could you please also run v4l2-compliance ?
Yes, it finished without errors here is the output.
Greetings,
Sebastian
---
basti@nanopct4:~$ v4l2-compliance
v4l2-compliance 1.21.0-4683, 64 bits, 64-bit time_t
v4l2-compliance SHA: 0aee9991e0c0 2020-12-01 09:48:02
Compliance test for rkisp1 device /dev/video0:
Driver Info:
Driver name : rkisp1
Card type : rkisp1
Bus info : platform:rkisp1
Driver version : 5.10.0
Capabilities : 0xa4201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Device Capabilities
Device Caps : 0x24201000
Video Capture Multiplanar
Streaming
Extended Pix Format
Media Driver Info:
Driver name : rkisp1
Model : rkisp1
Serial :
Bus info : platform:rkisp1
Media version : 5.10.0
Hardware revision: 0x00000000 (0)
Driver version : 5.10.0
Interface Info:
ID : 0x0300000d
Type : V4L Video
Entity Info:
ID : 0x0000000c (12)
Name : rkisp1_mainpath
Function : V4L2 I/O
Pad 0x0100000f : 0: Sink
Link 0x02000022: from remote pad 0x1000008 of entity 'rkisp1_resizer_mainpath': Data, Enabled, Immutable
Required ioctls:
test MC information (see 'Media Driver Info' above): OK
test VIDIOC_QUERYCAP: OK
Allow for multiple opens:
test second /dev/video0 open: OK
test VIDIOC_QUERYCAP: OK
test VIDIOC_G/S_PRIORITY: OK
test for unlimited opens: OK
test invalid ioctls: OK
Debug ioctls:
test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
test VIDIOC_LOG_STATUS: OK (Not Supported)
Input ioctls:
test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
test VIDIOC_ENUMAUDIO: OK (Not Supported)
test VIDIOC_G/S/ENUMINPUT: OK
test VIDIOC_G/S_AUDIO: OK (Not Supported)
Inputs: 1 Audio Inputs: 0 Tuners: 0
Output ioctls:
test VIDIOC_G/S_MODULATOR: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_ENUMAUDOUT: OK (Not Supported)
test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 Audio Outputs: 0 Modulators: 0
Input/Output configuration ioctls:
test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
test VIDIOC_G/S_EDID: OK (Not Supported)
Control ioctls (Input 0):
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
test VIDIOC_QUERYCTRL: OK (Not Supported)
test VIDIOC_G/S_CTRL: OK (Not Supported)
test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 0 Private Controls: 0
Format ioctls (Input 0):
test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
test VIDIOC_G/S_PARM: OK (Not Supported)
test VIDIOC_G_FBUF: OK (Not Supported)
test VIDIOC_G_FMT: OK
test VIDIOC_TRY_FMT: OK
test VIDIOC_S_FMT: OK
test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
test Cropping: OK (Not Supported)
test Composing: OK (Not Supported)
test Scaling: OK
Codec ioctls (Input 0):
test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
test VIDIOC_G_ENC_INDEX: OK (Not Supported)
test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
Buffer ioctls (Input 0):
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
test VIDIOC_EXPBUF: OK
test Requests: OK (Not Supported)
Total for rkisp1 device /dev/video0: 46, Succeeded: 46, Failed: 0, Warnings: 0
>
>>
>> ---
>>
>> .../platform/rockchip/rkisp1/rkisp1-isp.c | 39 +++++++++++++++++++
>> 1 file changed, 39 insertions(+)
>>
>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>> index 889982d8ca41..fa7540155d71 100644
>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>> @@ -599,6 +599,44 @@ static int rkisp1_isp_enum_mbus_code(struct v4l2_subdev *sd,
>>
>> return -EINVAL;
>> }
>
>Please add a new line here
>
>> +static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
>> + struct v4l2_subdev_pad_config *cfg,
>> + struct v4l2_subdev_frame_size_enum *fse)
>> +{
>> + int i;
>
>unsigned
>
>> + bool code_match = false;
>> +
>> + if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
>> + fse->pad == RKISP1_ISP_PAD_SOURCE_STATS)
>> + return -EINVAL;
>
>
>
>> +
>> + if (fse->index > 0)> + return -EINVAL;
>> +
>> + for (i = 0; i < ARRAY_SIZE(rkisp1_isp_formats); i++) {
>> + const struct rkisp1_isp_mbus_info *fmt = &rkisp1_isp_formats[i];
>
>Can't you use function rkisp1_isp_mbus_info_get() ?
>
>Check how rkisp1_isp_set_src_fmt() checks for a valid mbus code.
>
>Thanks
>Helen
>
>> +
>> + if (fmt->mbus_code == fse->code) {
>> + code_match = true;
>> + if (!(fmt->direction & RKISP1_ISP_SD_SINK) &&
>> + fse->pad == RKISP1_ISP_PAD_SINK_VIDEO)
>> + return -EINVAL;
>> + if (!(fmt->direction & RKISP1_ISP_SD_SRC) &&
>> + fse->pad == RKISP1_ISP_PAD_SOURCE_VIDEO)
>> + return -EINVAL;
>> + }
>> + }
>> +
>> + if (!code_match)
>> + return -EINVAL;
>> +
>> + fse->min_width = RKISP1_ISP_MIN_WIDTH;
>> + fse->max_width = RKISP1_ISP_MAX_WIDTH;
>> + fse->min_height = RKISP1_ISP_MIN_HEIGHT;
>> + fse->max_height = RKISP1_ISP_MAX_HEIGHT;
>> +
>> + return 0;
>> +}
>>
>> static int rkisp1_isp_init_config(struct v4l2_subdev *sd,
>> struct v4l2_subdev_pad_config *cfg)
>> @@ -880,6 +918,7 @@ static int rkisp1_subdev_link_validate(struct media_link *link)
>>
>> static const struct v4l2_subdev_pad_ops rkisp1_isp_pad_ops = {
>> .enum_mbus_code = rkisp1_isp_enum_mbus_code,
>> + .enum_frame_size = rkisp1_isp_enum_frame_size,
>> .get_selection = rkisp1_isp_get_selection,
>> .set_selection = rkisp1_isp_set_selection,
>> .init_cfg = rkisp1_isp_init_config,
>>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] media: rkisp1: Add the enum_frame_size ioctl
2020-12-07 18:01 ` Sebastian Fricke
@ 2020-12-09 14:22 ` Helen Koike
2020-12-10 5:03 ` Sebastian Fricke
0 siblings, 1 reply; 8+ messages in thread
From: Helen Koike @ 2020-12-09 14:22 UTC (permalink / raw)
To: Sebastian Fricke; +Cc: linux-media, dafna.hirschfeld
Hi Sebastian,
On 12/7/20 3:01 PM, Sebastian Fricke wrote:
> On 07.12.2020 08:33, Helen Koike wrote:
>> Hi Sebastian,
>>
>> Thanks for your patch.
>
> Hello Helen,
>
> I am very grateful for your review.
>
>>
>> On 12/6/20 2:39 AM, Sebastian Fricke wrote:
>>> Implement the VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl, check if the mbus
>>> code is valid for the given pad. This call is not available for the
>>> parameter or metadata pads of the RkISP1.
>>>
>>> Signed-off-by: Sebastian Fricke <sebastian.fricke.linux@gmail.com>
>>> ---
>>>
>>> I have tested this patch with the following script:
>>> https://github.com/initBasti/Linux_kernel_media_tree_fork/commit/efc4b399cff53fb36fadde999594961a3d84073e
>>>
>>> The results on my NanoPC-T4 (Linux nanopct4 5.10.0-rc6-rockchip64):
>>>
>>> pad 0 = RKISP1_ISP_PAD_SINK_VIDEO
>>> pad 1 = RKISP1_ISP_PAD_SINK_PARAMS
>>> pad 2 = RKISP1_ISP_PAD_SOURCE_VIDEO
>>> pad 3 = RKISP1_ISP_PAD_SOURCE_STATS
>>>
>>> basti@nanopct4:~$ python3 rkisp1_enum_frame_size_test.py
>>> TEST 0: pad 0 - code 0x300f - size 32x32 - 4032x3024
>>> TEST 1: pad 0 - code 0x3007 - size 32x32 - 4032x3024
>>> TEST 2: pad 0 - code 0x300e - size 32x32 - 4032x3024
>>> TEST 3: pad 0 - code 0x300a - size 32x32 - 4032x3024
>>> TEST 4: pad 0 - code 0x3012 - size 32x32 - 4032x3024
>>> TEST 5: pad 0 - code 0x3008 - size 32x32 - 4032x3024
>>> TEST 6: pad 0 - code 0x3010 - size 32x32 - 4032x3024
>>> TEST 7: pad 0 - code 0x3011 - size 32x32 - 4032x3024
>>> TEST 8: pad 0 - code 0x3014 - size 32x32 - 4032x3024
>>> TEST 9: pad 0 - code 0x3001 - size 32x32 - 4032x3024
>>> TEST 10: pad 0 - code 0x3013 - size 32x32 - 4032x3024
>>> TEST 11: pad 0 - code 0x3002 - size 32x32 - 4032x3024
>>> TEST 12: pad 0 - code 0x2011 - size 32x32 - 4032x3024
>>> TEST 13: pad 0 - code 0x2012 - size 32x32 - 4032x3024
>>> TEST 14: pad 0 - code 0x200f - size 32x32 - 4032x3024
>>> TEST 15: pad 0 - code 0x2010 - size 32x32 - 4032x3024
>>> TEST 16: pad 1 - code 0x7001 - size /
>>> TEST 17: pad 2 - code 0x2008 - size 32x32 - 4032x3024
>>> TEST 18: pad 2 - code 0x300f - size 32x32 - 4032x3024
>>> TEST 19: pad 2 - code 0x3007 - size 32x32 - 4032x3024
>>> TEST 20: pad 2 - code 0x300e - size 32x32 - 4032x3024
>>> TEST 21: pad 2 - code 0x300a - size 32x32 - 4032x3024
>>> TEST 22: pad 2 - code 0x3012 - size 32x32 - 4032x3024
>>> TEST 23: pad 2 - code 0x3008 - size 32x32 - 4032x3024
>>> TEST 24: pad 2 - code 0x3010 - size 32x32 - 4032x3024
>>> TEST 25: pad 2 - code 0x3011 - size 32x32 - 4032x3024
>>> TEST 26: pad 2 - code 0x3014 - size 32x32 - 4032x3024
>>> TEST 27: pad 2 - code 0x3001 - size 32x32 - 4032x3024
>>> TEST 28: pad 2 - code 0x3013 - size 32x32 - 4032x3024
>>> TEST 29: pad 2 - code 0x3002 - size 32x32 - 4032x3024
>>> TEST 30: pad 3 - code 0x7001 - size /
>>> TEST 31: pad 0 - code 0xdead - size / (test with an invalid media bus code)
>>> TEST 32: pad 6 - code 0x300f - size / (test with an invalid pad)
>>> TEST 33: pad 0 - code 0x2008 - size / (test with a format that is not supported by the pad)
>>> TEST 34: pad 2 - code 0x2010 - size / (test with a format that is not supported by the pad)
>>
>> Could you please also run v4l2-compliance ?
>
> Yes, it finished without errors here is the output.
>
> Greetings,
> Sebastian
>
> ---
>
> basti@nanopct4:~$ v4l2-compliance v4l2-compliance 1.21.0-4683, 64 bits, 64-bit time_t
> v4l2-compliance SHA: 0aee9991e0c0 2020-12-01 09:48:02
Thanks for running the test.
>
> Compliance test for rkisp1 device /dev/video0:
This is only testing video0 (rkisp1-capture) but enum_frame_size is in the isp node.
Please run v4l2-compliance in the isp node as well. iirc you can use the -m option
to test the whole tree.
Regards,
Helen
>
> Driver Info:
> Driver name : rkisp1
> Card type : rkisp1
> Bus info : platform:rkisp1
> Driver version : 5.10.0
> Capabilities : 0xa4201000
> Video Capture Multiplanar
> Streaming
> Extended Pix Format
> Device Capabilities
> Device Caps : 0x24201000
> Video Capture Multiplanar
> Streaming
> Extended Pix Format
> Media Driver Info:
> Driver name : rkisp1
> Model : rkisp1
> Serial :
> Bus info : platform:rkisp1
> Media version : 5.10.0
> Hardware revision: 0x00000000 (0)
> Driver version : 5.10.0
> Interface Info:
> ID : 0x0300000d
> Type : V4L Video
> Entity Info:
> ID : 0x0000000c (12)
> Name : rkisp1_mainpath
> Function : V4L2 I/O
> Pad 0x0100000f : 0: Sink
> Link 0x02000022: from remote pad 0x1000008 of entity 'rkisp1_resizer_mainpath': Data, Enabled, Immutable
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
> test VIDIOC_QUERYCAP: OK
>
> Allow for multiple opens:
> test second /dev/video0 open: OK
> test VIDIOC_QUERYCAP: OK
> test VIDIOC_G/S_PRIORITY: OK
> test for unlimited opens: OK
>
> test invalid ioctls: OK
> Debug ioctls:
> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 1 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Control ioctls (Input 0):
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> test VIDIOC_QUERYCTRL: OK (Not Supported)
> test VIDIOC_G/S_CTRL: OK (Not Supported)
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 0 Private Controls: 0
>
> Format ioctls (Input 0):
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK
> test VIDIOC_TRY_FMT: OK
> test VIDIOC_S_FMT: OK
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK (Not Supported)
> test Composing: OK (Not Supported)
> test Scaling: OK
>
> Codec ioctls (Input 0):
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls (Input 0):
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
> test VIDIOC_EXPBUF: OK
> test Requests: OK (Not Supported)
>
> Total for rkisp1 device /dev/video0: 46, Succeeded: 46, Failed: 0, Warnings: 0
>
>>
>>>
>>> ---
>>>
>>> .../platform/rockchip/rkisp1/rkisp1-isp.c | 39 +++++++++++++++++++
>>> 1 file changed, 39 insertions(+)
>>>
>>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>> index 889982d8ca41..fa7540155d71 100644
>>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>> @@ -599,6 +599,44 @@ static int rkisp1_isp_enum_mbus_code(struct v4l2_subdev *sd,
>>>
>>> return -EINVAL;
>>> }
>>
>> Please add a new line here
>>
>>> +static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
>>> + struct v4l2_subdev_pad_config *cfg,
>>> + struct v4l2_subdev_frame_size_enum *fse)
>>> +{
>>> + int i;
>>
>> unsigned
>>
>>> + bool code_match = false;
>>> +
>>> + if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
>>> + fse->pad == RKISP1_ISP_PAD_SOURCE_STATS)
>>> + return -EINVAL;
>>
>>
>>
>>> +
>>> + if (fse->index > 0)> + return -EINVAL;
>>> +
>>> + for (i = 0; i < ARRAY_SIZE(rkisp1_isp_formats); i++) {
>>> + const struct rkisp1_isp_mbus_info *fmt = &rkisp1_isp_formats[i];
>>
>> Can't you use function rkisp1_isp_mbus_info_get() ?
>>
>> Check how rkisp1_isp_set_src_fmt() checks for a valid mbus code.
>>
>> Thanks
>> Helen
>>
>>> +
>>> + if (fmt->mbus_code == fse->code) {
>>> + code_match = true;
>>> + if (!(fmt->direction & RKISP1_ISP_SD_SINK) &&
>>> + fse->pad == RKISP1_ISP_PAD_SINK_VIDEO)
>>> + return -EINVAL;
>>> + if (!(fmt->direction & RKISP1_ISP_SD_SRC) &&
>>> + fse->pad == RKISP1_ISP_PAD_SOURCE_VIDEO)
>>> + return -EINVAL;
>>> + }
>>> + }
>>> +
>>> + if (!code_match)
>>> + return -EINVAL;
>>> +
>>> + fse->min_width = RKISP1_ISP_MIN_WIDTH;
>>> + fse->max_width = RKISP1_ISP_MAX_WIDTH;
>>> + fse->min_height = RKISP1_ISP_MIN_HEIGHT;
>>> + fse->max_height = RKISP1_ISP_MAX_HEIGHT;
>>> +
>>> + return 0;
>>> +}
>>>
>>> static int rkisp1_isp_init_config(struct v4l2_subdev *sd,
>>> struct v4l2_subdev_pad_config *cfg)
>>> @@ -880,6 +918,7 @@ static int rkisp1_subdev_link_validate(struct media_link *link)
>>>
>>> static const struct v4l2_subdev_pad_ops rkisp1_isp_pad_ops = {
>>> .enum_mbus_code = rkisp1_isp_enum_mbus_code,
>>> + .enum_frame_size = rkisp1_isp_enum_frame_size,
>>> .get_selection = rkisp1_isp_get_selection,
>>> .set_selection = rkisp1_isp_set_selection,
>>> .init_cfg = rkisp1_isp_init_config,
>>>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] media: rkisp1: Add the enum_frame_size ioctl
2020-12-09 14:22 ` Helen Koike
@ 2020-12-10 5:03 ` Sebastian Fricke
2020-12-10 10:03 ` Dafna Hirschfeld
2020-12-10 12:06 ` Helen Koike
0 siblings, 2 replies; 8+ messages in thread
From: Sebastian Fricke @ 2020-12-10 5:03 UTC (permalink / raw)
To: Helen Koike; +Cc: linux-media, dafna.hirschfeld
On 09.12.2020 11:22, Helen Koike wrote:
>Hi Sebastian,
>
>On 12/7/20 3:01 PM, Sebastian Fricke wrote:
>> On 07.12.2020 08:33, Helen Koike wrote:
>>> Hi Sebastian,
>>>
>>> Thanks for your patch.
>>
>> Hello Helen,
>>
>> I am very grateful for your review.
>>
>>>
>>> On 12/6/20 2:39 AM, Sebastian Fricke wrote:
>>>> Implement the VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl, check if the mbus
>>>> code is valid for the given pad. This call is not available for the
>>>> parameter or metadata pads of the RkISP1.
>>>>
>>>> Signed-off-by: Sebastian Fricke <sebastian.fricke.linux@gmail.com>
>>>> ---
>>>>
>>>> I have tested this patch with the following script:
>>>> https://github.com/initBasti/Linux_kernel_media_tree_fork/commit/efc4b399cff53fb36fadde999594961a3d84073e
>>>>
>>>> The results on my NanoPC-T4 (Linux nanopct4 5.10.0-rc6-rockchip64):
>>>>
>>>> pad 0 = RKISP1_ISP_PAD_SINK_VIDEO
>>>> pad 1 = RKISP1_ISP_PAD_SINK_PARAMS
>>>> pad 2 = RKISP1_ISP_PAD_SOURCE_VIDEO
>>>> pad 3 = RKISP1_ISP_PAD_SOURCE_STATS
>>>>
>>>> basti@nanopct4:~$ python3 rkisp1_enum_frame_size_test.py
>>>> TEST 0: pad 0 - code 0x300f - size 32x32 - 4032x3024
>>>> TEST 1: pad 0 - code 0x3007 - size 32x32 - 4032x3024
>>>> TEST 2: pad 0 - code 0x300e - size 32x32 - 4032x3024
>>>> TEST 3: pad 0 - code 0x300a - size 32x32 - 4032x3024
>>>> TEST 4: pad 0 - code 0x3012 - size 32x32 - 4032x3024
>>>> TEST 5: pad 0 - code 0x3008 - size 32x32 - 4032x3024
>>>> TEST 6: pad 0 - code 0x3010 - size 32x32 - 4032x3024
>>>> TEST 7: pad 0 - code 0x3011 - size 32x32 - 4032x3024
>>>> TEST 8: pad 0 - code 0x3014 - size 32x32 - 4032x3024
>>>> TEST 9: pad 0 - code 0x3001 - size 32x32 - 4032x3024
>>>> TEST 10: pad 0 - code 0x3013 - size 32x32 - 4032x3024
>>>> TEST 11: pad 0 - code 0x3002 - size 32x32 - 4032x3024
>>>> TEST 12: pad 0 - code 0x2011 - size 32x32 - 4032x3024
>>>> TEST 13: pad 0 - code 0x2012 - size 32x32 - 4032x3024
>>>> TEST 14: pad 0 - code 0x200f - size 32x32 - 4032x3024
>>>> TEST 15: pad 0 - code 0x2010 - size 32x32 - 4032x3024
>>>> TEST 16: pad 1 - code 0x7001 - size /
>>>> TEST 17: pad 2 - code 0x2008 - size 32x32 - 4032x3024
>>>> TEST 18: pad 2 - code 0x300f - size 32x32 - 4032x3024
>>>> TEST 19: pad 2 - code 0x3007 - size 32x32 - 4032x3024
>>>> TEST 20: pad 2 - code 0x300e - size 32x32 - 4032x3024
>>>> TEST 21: pad 2 - code 0x300a - size 32x32 - 4032x3024
>>>> TEST 22: pad 2 - code 0x3012 - size 32x32 - 4032x3024
>>>> TEST 23: pad 2 - code 0x3008 - size 32x32 - 4032x3024
>>>> TEST 24: pad 2 - code 0x3010 - size 32x32 - 4032x3024
>>>> TEST 25: pad 2 - code 0x3011 - size 32x32 - 4032x3024
>>>> TEST 26: pad 2 - code 0x3014 - size 32x32 - 4032x3024
>>>> TEST 27: pad 2 - code 0x3001 - size 32x32 - 4032x3024
>>>> TEST 28: pad 2 - code 0x3013 - size 32x32 - 4032x3024
>>>> TEST 29: pad 2 - code 0x3002 - size 32x32 - 4032x3024
>>>> TEST 30: pad 3 - code 0x7001 - size /
>>>> TEST 31: pad 0 - code 0xdead - size / (test with an invalid media bus code)
>>>> TEST 32: pad 6 - code 0x300f - size / (test with an invalid pad)
>>>> TEST 33: pad 0 - code 0x2008 - size / (test with a format that is not supported by the pad)
>>>> TEST 34: pad 2 - code 0x2010 - size / (test with a format that is not supported by the pad)
>>>
>>> Could you please also run v4l2-compliance ?
>>
>> Yes, it finished without errors here is the output.
>>
>> Greetings,
>> Sebastian
>>
>> ---
>>
>> basti@nanopct4:~$ v4l2-compliance v4l2-compliance 1.21.0-4683, 64 bits, 64-bit time_t
>> v4l2-compliance SHA: 0aee9991e0c0 2020-12-01 09:48:02
>
>Thanks for running the test.
>
>>
>> Compliance test for rkisp1 device /dev/video0:
>
>
>This is only testing video0 (rkisp1-capture) but enum_frame_size is in the isp node.
>Please run v4l2-compliance in the isp node as well. iirc you can use the -m option
>to test the whole tree.
Oh, thanks a lot for pointing me to that test, as it actually reports
errors. :(
I am just not sure if these errors are problematic as pad 0 & pad 2
work as intended, while pad 1 & pad 3 report errors.
My goal would actually be if they report that they don't support the
FRAMESIZES.
What do you think?
basti@nanopct4:~$ v4l2-compliance -d /dev/v4l-subdev0
...
Compliance test for rkisp1 device /dev/v4l-subdev0:
Media Driver Info:
Driver name : rkisp1
Model : rkisp1
Serial :
Bus info : platform:rkisp1
Media version : 5.10.0
Hardware revision: 0x00000000 (0)
Driver version : 5.10.0
Interface Info:
ID : 0x0300002c
Type : V4L Sub-Device
Entity Info:
ID : 0x00000001 (1)
Name : rkisp1_isp
Function : Video Pixel Formatter
Pad 0x01000002 : 0: Sink, Must Connect
Link 0x0200001e: from remote pad 0x100001d of entity 'ov13850 1-0010': Data, Enabled
Pad 0x01000003 : 1: Sink
Link 0x02000028: from remote pad 0x1000019 of entity 'rkisp1_params': Data, Enabled, Immutable
Pad 0x01000004 : 2: Source
Link 0x02000020: to remote pad 0x1000007 of entity 'rkisp1_resizer_mainpath': Data, Enabled
Link 0x02000024: to remote pad 0x100000a of entity 'rkisp1_resizer_selfpath': Data, Enabled
Pad 0x01000005 : 3: Source
Link 0x0200002a: to remote pad 0x1000015 of entity 'rkisp1_stats': Data, Enabled, Immutable
Required ioctls:
test MC information (see 'Media Driver Info' above): OK
Allow for multiple opens:
test second /dev/v4l-subdev0 open: OK
test for unlimited opens: OK
test invalid ioctls: OK
Debug ioctls:
test VIDIOC_LOG_STATUS: OK (Not Supported)
Input ioctls:
test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
test VIDIOC_ENUMAUDIO: OK (Not Supported)
test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
test VIDIOC_G/S_AUDIO: OK (Not Supported)
Inputs: 0 Audio Inputs: 0 Tuners: 0
Output ioctls:
test VIDIOC_G/S_MODULATOR: OK (Not Supported)
test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
test VIDIOC_ENUMAUDOUT: OK (Not Supported)
test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
test VIDIOC_G/S_AUDOUT: OK (Not Supported)
Outputs: 0 Audio Outputs: 0 Modulators: 0
Input/Output configuration ioctls:
test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
test VIDIOC_G/S_EDID: OK (Not Supported)
Sub-Device ioctls (Sink Pad 0):
test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
test Try VIDIOC_SUBDEV_G/S_FMT: OK
test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
test Active VIDIOC_SUBDEV_G/S_FMT: OK
test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
Sub-Device ioctls (Sink Pad 1):
fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
test Try VIDIOC_SUBDEV_G/S_FMT: FAIL
test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
test Active VIDIOC_SUBDEV_G/S_FMT: FAIL
test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
Sub-Device ioctls (Source Pad 2):
test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
test Try VIDIOC_SUBDEV_G/S_FMT: OK
test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
test Active VIDIOC_SUBDEV_G/S_FMT: OK
test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
Sub-Device ioctls (Source Pad 3):
fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
test Try VIDIOC_SUBDEV_G/S_FMT: FAIL
test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
test Active VIDIOC_SUBDEV_G/S_FMT: FAIL
test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
Control ioctls:
test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
test VIDIOC_QUERYCTRL: OK (Not Supported)
test VIDIOC_G/S_CTRL: OK (Not Supported)
test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
Standard Controls: 0 Private Controls: 0
Format ioctls:
test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported)
test VIDIOC_G/S_PARM: OK (Not Supported)
test VIDIOC_G_FBUF: OK (Not Supported)
test VIDIOC_G_FMT: OK (Not Supported)
test VIDIOC_TRY_FMT: OK (Not Supported)
test VIDIOC_S_FMT: OK (Not Supported)
test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
test Cropping: OK (Not Supported)
test Composing: OK (Not Supported)
test Scaling: OK (Not Supported)
Codec ioctls:
test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
test VIDIOC_G_ENC_INDEX: OK (Not Supported)
test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
Buffer ioctls:
test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
test VIDIOC_EXPBUF: OK (Not Supported)
test Requests: OK (Not Supported)
Total for rkisp1 device /dev/v4l-subdev0: 70, Succeeded: 62, Failed: 8, Warnings: 0
>
>Regards,
>Helen
>
>>
>> Driver Info:
>> Driver name : rkisp1
>> Card type : rkisp1
>> Bus info : platform:rkisp1
>> Driver version : 5.10.0
>> Capabilities : 0xa4201000
>> Video Capture Multiplanar
>> Streaming
>> Extended Pix Format
>> Device Capabilities
>> Device Caps : 0x24201000
>> Video Capture Multiplanar
>> Streaming
>> Extended Pix Format
>> Media Driver Info:
>> Driver name : rkisp1
>> Model : rkisp1
>> Serial :
>> Bus info : platform:rkisp1
>> Media version : 5.10.0
>> Hardware revision: 0x00000000 (0)
>> Driver version : 5.10.0
>> Interface Info:
>> ID : 0x0300000d
>> Type : V4L Video
>> Entity Info:
>> ID : 0x0000000c (12)
>> Name : rkisp1_mainpath
>> Function : V4L2 I/O
>> Pad 0x0100000f : 0: Sink
>> Link 0x02000022: from remote pad 0x1000008 of entity 'rkisp1_resizer_mainpath': Data, Enabled, Immutable
>>
>> Required ioctls:
>> test MC information (see 'Media Driver Info' above): OK
>> test VIDIOC_QUERYCAP: OK
>>
>> Allow for multiple opens:
>> test second /dev/video0 open: OK
>> test VIDIOC_QUERYCAP: OK
>> test VIDIOC_G/S_PRIORITY: OK
>> test for unlimited opens: OK
>>
>> test invalid ioctls: OK
>> Debug ioctls:
>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>
>> Input ioctls:
>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>> test VIDIOC_G/S/ENUMINPUT: OK
>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>> Inputs: 1 Audio Inputs: 0 Tuners: 0
>>
>> Output ioctls:
>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>
>> Input/Output configuration ioctls:
>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>
>> Control ioctls (Input 0):
>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>> Standard Controls: 0 Private Controls: 0
>>
>> Format ioctls (Input 0):
>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>> test VIDIOC_G/S_PARM: OK (Not Supported)
>> test VIDIOC_G_FBUF: OK (Not Supported)
>> test VIDIOC_G_FMT: OK
>> test VIDIOC_TRY_FMT: OK
>> test VIDIOC_S_FMT: OK
>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>> test Cropping: OK (Not Supported)
>> test Composing: OK (Not Supported)
>> test Scaling: OK
>>
>> Codec ioctls (Input 0):
>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>
>> Buffer ioctls (Input 0):
>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>> test VIDIOC_EXPBUF: OK
>> test Requests: OK (Not Supported)
>>
>> Total for rkisp1 device /dev/video0: 46, Succeeded: 46, Failed: 0, Warnings: 0
>>
>>>
>>>>
>>>> ---
>>>>
>>>> .../platform/rockchip/rkisp1/rkisp1-isp.c | 39 +++++++++++++++++++
>>>> 1 file changed, 39 insertions(+)
>>>>
>>>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>> index 889982d8ca41..fa7540155d71 100644
>>>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>> @@ -599,6 +599,44 @@ static int rkisp1_isp_enum_mbus_code(struct v4l2_subdev *sd,
>>>>
>>>> return -EINVAL;
>>>> }
>>>
>>> Please add a new line here
>>>
>>>> +static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
>>>> + struct v4l2_subdev_pad_config *cfg,
>>>> + struct v4l2_subdev_frame_size_enum *fse)
>>>> +{
>>>> + int i;
>>>
>>> unsigned
>>>
>>>> + bool code_match = false;
>>>> +
>>>> + if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
>>>> + fse->pad == RKISP1_ISP_PAD_SOURCE_STATS)
>>>> + return -EINVAL;
>>>
>>>
>>>
>>>> +
>>>> + if (fse->index > 0)> + return -EINVAL;
>>>> +
>>>> + for (i = 0; i < ARRAY_SIZE(rkisp1_isp_formats); i++) {
>>>> + const struct rkisp1_isp_mbus_info *fmt = &rkisp1_isp_formats[i];
>>>
>>> Can't you use function rkisp1_isp_mbus_info_get() ?
>>>
>>> Check how rkisp1_isp_set_src_fmt() checks for a valid mbus code.
>>>
>>> Thanks
>>> Helen
>>>
>>>> +
>>>> + if (fmt->mbus_code == fse->code) {
>>>> + code_match = true;
>>>> + if (!(fmt->direction & RKISP1_ISP_SD_SINK) &&
>>>> + fse->pad == RKISP1_ISP_PAD_SINK_VIDEO)
>>>> + return -EINVAL;
>>>> + if (!(fmt->direction & RKISP1_ISP_SD_SRC) &&
>>>> + fse->pad == RKISP1_ISP_PAD_SOURCE_VIDEO)
>>>> + return -EINVAL;
>>>> + }
>>>> + }
>>>> +
>>>> + if (!code_match)
>>>> + return -EINVAL;
>>>> +
>>>> + fse->min_width = RKISP1_ISP_MIN_WIDTH;
>>>> + fse->max_width = RKISP1_ISP_MAX_WIDTH;
>>>> + fse->min_height = RKISP1_ISP_MIN_HEIGHT;
>>>> + fse->max_height = RKISP1_ISP_MAX_HEIGHT;
>>>> +
>>>> + return 0;
>>>> +}
>>>>
>>>> static int rkisp1_isp_init_config(struct v4l2_subdev *sd,
>>>> struct v4l2_subdev_pad_config *cfg)
>>>> @@ -880,6 +918,7 @@ static int rkisp1_subdev_link_validate(struct media_link *link)
>>>>
>>>> static const struct v4l2_subdev_pad_ops rkisp1_isp_pad_ops = {
>>>> .enum_mbus_code = rkisp1_isp_enum_mbus_code,
>>>> + .enum_frame_size = rkisp1_isp_enum_frame_size,
>>>> .get_selection = rkisp1_isp_get_selection,
>>>> .set_selection = rkisp1_isp_set_selection,
>>>> .init_cfg = rkisp1_isp_init_config,
>>>>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] media: rkisp1: Add the enum_frame_size ioctl
2020-12-10 5:03 ` Sebastian Fricke
@ 2020-12-10 10:03 ` Dafna Hirschfeld
2020-12-10 12:06 ` Helen Koike
1 sibling, 0 replies; 8+ messages in thread
From: Dafna Hirschfeld @ 2020-12-10 10:03 UTC (permalink / raw)
To: Sebastian Fricke
Cc: Linux Media Mailing List, Collabora Kernel ML, Tomasz Figa, Helen Koike
Hi,
Am 10.12.20 um 06:03 schrieb Sebastian Fricke:
> On 09.12.2020 11:22, Helen Koike wrote:
>> Hi Sebastian,
>>
>> On 12/7/20 3:01 PM, Sebastian Fricke wrote:
>>> On 07.12.2020 08:33, Helen Koike wrote:
>>>> Hi Sebastian,
>>>>
>>>> Thanks for your patch.
>>>
>>> Hello Helen,
>>>
>>> I am very grateful for your review.
>>>
>>>>
>>>> On 12/6/20 2:39 AM, Sebastian Fricke wrote:
>>>>> Implement the VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl, check if the mbus
>>>>> code is valid for the given pad. This call is not available for the
>>>>> parameter or metadata pads of the RkISP1.
>>>>>
>>>>> Signed-off-by: Sebastian Fricke <sebastian.fricke.linux@gmail.com>
>>>>> ---
>>>>>
>>>>> I have tested this patch with the following script:
>>>>> https://github.com/initBasti/Linux_kernel_media_tree_fork/commit/efc4b399cff53fb36fadde999594961a3d84073e
>>>>>
>>>>> The results on my NanoPC-T4 (Linux nanopct4 5.10.0-rc6-rockchip64):
>>>>>
>>>>> pad 0 = RKISP1_ISP_PAD_SINK_VIDEO
>>>>> pad 1 = RKISP1_ISP_PAD_SINK_PARAMS
>>>>> pad 2 = RKISP1_ISP_PAD_SOURCE_VIDEO
>>>>> pad 3 = RKISP1_ISP_PAD_SOURCE_STATS
>>>>>
>>>>> basti@nanopct4:~$ python3 rkisp1_enum_frame_size_test.py
>>>>> TEST 0: pad 0 - code 0x300f - size 32x32 - 4032x3024
>>>>> TEST 1: pad 0 - code 0x3007 - size 32x32 - 4032x3024
>>>>> TEST 2: pad 0 - code 0x300e - size 32x32 - 4032x3024
>>>>> TEST 3: pad 0 - code 0x300a - size 32x32 - 4032x3024
>>>>> TEST 4: pad 0 - code 0x3012 - size 32x32 - 4032x3024
>>>>> TEST 5: pad 0 - code 0x3008 - size 32x32 - 4032x3024
>>>>> TEST 6: pad 0 - code 0x3010 - size 32x32 - 4032x3024
>>>>> TEST 7: pad 0 - code 0x3011 - size 32x32 - 4032x3024
>>>>> TEST 8: pad 0 - code 0x3014 - size 32x32 - 4032x3024
>>>>> TEST 9: pad 0 - code 0x3001 - size 32x32 - 4032x3024
>>>>> TEST 10: pad 0 - code 0x3013 - size 32x32 - 4032x3024
>>>>> TEST 11: pad 0 - code 0x3002 - size 32x32 - 4032x3024
>>>>> TEST 12: pad 0 - code 0x2011 - size 32x32 - 4032x3024
>>>>> TEST 13: pad 0 - code 0x2012 - size 32x32 - 4032x3024
>>>>> TEST 14: pad 0 - code 0x200f - size 32x32 - 4032x3024
>>>>> TEST 15: pad 0 - code 0x2010 - size 32x32 - 4032x3024
>>>>> TEST 16: pad 1 - code 0x7001 - size /
>>>>> TEST 17: pad 2 - code 0x2008 - size 32x32 - 4032x3024
>>>>> TEST 18: pad 2 - code 0x300f - size 32x32 - 4032x3024
>>>>> TEST 19: pad 2 - code 0x3007 - size 32x32 - 4032x3024
>>>>> TEST 20: pad 2 - code 0x300e - size 32x32 - 4032x3024
>>>>> TEST 21: pad 2 - code 0x300a - size 32x32 - 4032x3024
>>>>> TEST 22: pad 2 - code 0x3012 - size 32x32 - 4032x3024
>>>>> TEST 23: pad 2 - code 0x3008 - size 32x32 - 4032x3024
>>>>> TEST 24: pad 2 - code 0x3010 - size 32x32 - 4032x3024
>>>>> TEST 25: pad 2 - code 0x3011 - size 32x32 - 4032x3024
>>>>> TEST 26: pad 2 - code 0x3014 - size 32x32 - 4032x3024
>>>>> TEST 27: pad 2 - code 0x3001 - size 32x32 - 4032x3024
>>>>> TEST 28: pad 2 - code 0x3013 - size 32x32 - 4032x3024
>>>>> TEST 29: pad 2 - code 0x3002 - size 32x32 - 4032x3024
>>>>> TEST 30: pad 3 - code 0x7001 - size /
>>>>> TEST 31: pad 0 - code 0xdead - size / (test with an invalid media bus code)
>>>>> TEST 32: pad 6 - code 0x300f - size / (test with an invalid pad)
>>>>> TEST 33: pad 0 - code 0x2008 - size / (test with a format that is not supported by the pad)
>>>>> TEST 34: pad 2 - code 0x2010 - size / (test with a format that is not supported by the pad)
>>>>
>>>> Could you please also run v4l2-compliance ?
>>>
>>> Yes, it finished without errors here is the output.
>>>
>>> Greetings,
>>> Sebastian
>>>
>>> ---
>>>
>>> basti@nanopct4:~$ v4l2-compliance v4l2-compliance 1.21.0-4683, 64 bits, 64-bit time_t
>>> v4l2-compliance SHA: 0aee9991e0c0 2020-12-01 09:48:02
>>
>> Thanks for running the test.
>>
>>>
>>> Compliance test for rkisp1 device /dev/video0:
>>
>>
>> This is only testing video0 (rkisp1-capture) but enum_frame_size is in the isp node.
>> Please run v4l2-compliance in the isp node as well. iirc you can use the -m option
>> to test the whole tree.
>
> Oh, thanks a lot for pointing me to that test, as it actually reports
> errors. :(
> I am just not sure if these errors are problematic as pad 0 & pad 2
> work as intended, while pad 1 & pad 3 report errors.
> My goal would actually be if they report that they don't support the
> FRAMESIZES.
> What do you think?
Those failures are not related to your patch, you can ignore them.
They should be fixed with this v4l-utils patch:
https://www.spinics.net/lists/linux-media/msg179487.html
So you can just make sure that
the tests for pads 0,2 pass (which they do:) )
Thanks,
Dafna
>
> basti@nanopct4:~$ v4l2-compliance -d /dev/v4l-subdev0
> ...
> Compliance test for rkisp1 device /dev/v4l-subdev0:
>
> Media Driver Info:
> Driver name : rkisp1
> Model : rkisp1
> Serial : Bus info : platform:rkisp1
> Media version : 5.10.0
> Hardware revision: 0x00000000 (0)
> Driver version : 5.10.0
> Interface Info:
> ID : 0x0300002c
> Type : V4L Sub-Device
> Entity Info:
> ID : 0x00000001 (1)
> Name : rkisp1_isp
> Function : Video Pixel Formatter
> Pad 0x01000002 : 0: Sink, Must Connect
> Link 0x0200001e: from remote pad 0x100001d of entity 'ov13850 1-0010': Data, Enabled
> Pad 0x01000003 : 1: Sink
> Link 0x02000028: from remote pad 0x1000019 of entity 'rkisp1_params': Data, Enabled, Immutable
> Pad 0x01000004 : 2: Source
> Link 0x02000020: to remote pad 0x1000007 of entity 'rkisp1_resizer_mainpath': Data, Enabled
> Link 0x02000024: to remote pad 0x100000a of entity 'rkisp1_resizer_selfpath': Data, Enabled
> Pad 0x01000005 : 3: Source
> Link 0x0200002a: to remote pad 0x1000015 of entity 'rkisp1_stats': Data, Enabled, Immutable
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
>
> Allow for multiple opens:
> test second /dev/v4l-subdev0 open: OK
> test for unlimited opens: OK
>
> test invalid ioctls: OK
> Debug ioctls:
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Sub-Device ioctls (Sink Pad 0):
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
> test Try VIDIOC_SUBDEV_G/S_FMT: OK
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
> test Active VIDIOC_SUBDEV_G/S_FMT: OK
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Sink Pad 1):
> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
> test Try VIDIOC_SUBDEV_G/S_FMT: FAIL
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
> test Active VIDIOC_SUBDEV_G/S_FMT: FAIL
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Source Pad 2):
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
> test Try VIDIOC_SUBDEV_G/S_FMT: OK
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
> test Active VIDIOC_SUBDEV_G/S_FMT: OK
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Source Pad 3):
> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
> test Try VIDIOC_SUBDEV_G/S_FMT: FAIL
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
> test Active VIDIOC_SUBDEV_G/S_FMT: FAIL
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> test VIDIOC_QUERYCTRL: OK (Not Supported)
> test VIDIOC_G/S_CTRL: OK (Not Supported)
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 0 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported)
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK (Not Supported)
> test VIDIOC_TRY_FMT: OK (Not Supported)
> test VIDIOC_S_FMT: OK (Not Supported)
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK (Not Supported)
> test Composing: OK (Not Supported)
> test Scaling: OK (Not Supported)
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
> test VIDIOC_EXPBUF: OK (Not Supported)
> test Requests: OK (Not Supported)
>
> Total for rkisp1 device /dev/v4l-subdev0: 70, Succeeded: 62, Failed: 8, Warnings: 0
>
>
>>
>> Regards,
>> Helen
>>
>>>
>>> Driver Info:
>>> Driver name : rkisp1
>>> Card type : rkisp1
>>> Bus info : platform:rkisp1
>>> Driver version : 5.10.0
>>> Capabilities : 0xa4201000
>>> Video Capture Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps : 0x24201000
>>> Video Capture Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Media Driver Info:
>>> Driver name : rkisp1
>>> Model : rkisp1
>>> Serial :
>>> Bus info : platform:rkisp1
>>> Media version : 5.10.0
>>> Hardware revision: 0x00000000 (0)
>>> Driver version : 5.10.0
>>> Interface Info:
>>> ID : 0x0300000d
>>> Type : V4L Video
>>> Entity Info:
>>> ID : 0x0000000c (12)
>>> Name : rkisp1_mainpath
>>> Function : V4L2 I/O
>>> Pad 0x0100000f : 0: Sink
>>> Link 0x02000022: from remote pad 0x1000008 of entity 'rkisp1_resizer_mainpath': Data, Enabled, Immutable
>>>
>>> Required ioctls:
>>> test MC information (see 'Media Driver Info' above): OK
>>> test VIDIOC_QUERYCAP: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/video0 open: OK
>>> test VIDIOC_QUERYCAP: OK
>>> test VIDIOC_G/S_PRIORITY: OK
>>> test for unlimited opens: OK
>>>
>>> test invalid ioctls: OK
>>> Debug ioctls:
>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 1 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Control ioctls (Input 0):
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 0 Private Controls: 0
>>>
>>> Format ioctls (Input 0):
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK
>>> test VIDIOC_TRY_FMT: OK
>>> test VIDIOC_S_FMT: OK
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK (Not Supported)
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK
>>>
>>> Codec ioctls (Input 0):
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls (Input 0):
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>> test VIDIOC_EXPBUF: OK
>>> test Requests: OK (Not Supported)
>>>
>>> Total for rkisp1 device /dev/video0: 46, Succeeded: 46, Failed: 0, Warnings: 0
>>>
>>>>
>>>>>
>>>>> ---
>>>>>
>>>>> .../platform/rockchip/rkisp1/rkisp1-isp.c | 39 +++++++++++++++++++
>>>>> 1 file changed, 39 insertions(+)
>>>>>
>>>>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>>> index 889982d8ca41..fa7540155d71 100644
>>>>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>>> @@ -599,6 +599,44 @@ static int rkisp1_isp_enum_mbus_code(struct v4l2_subdev *sd,
>>>>>
>>>>> return -EINVAL;
>>>>> }
>>>>
>>>> Please add a new line here
>>>>
>>>>> +static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
>>>>> + struct v4l2_subdev_pad_config *cfg,
>>>>> + struct v4l2_subdev_frame_size_enum *fse)
>>>>> +{
>>>>> + int i;
>>>>
>>>> unsigned
>>>>
>>>>> + bool code_match = false;
>>>>> +
>>>>> + if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
>>>>> + fse->pad == RKISP1_ISP_PAD_SOURCE_STATS)
>>>>> + return -EINVAL;
>>>>
>>>>
>>>>
>>>>> +
>>>>> + if (fse->index > 0)> + return -EINVAL;
>>>>> +
>>>>> + for (i = 0; i < ARRAY_SIZE(rkisp1_isp_formats); i++) {
>>>>> + const struct rkisp1_isp_mbus_info *fmt = &rkisp1_isp_formats[i];
>>>>
>>>> Can't you use function rkisp1_isp_mbus_info_get() ?
>>>>
>>>> Check how rkisp1_isp_set_src_fmt() checks for a valid mbus code.
>>>>
>>>> Thanks
>>>> Helen
>>>>
>>>>> +
>>>>> + if (fmt->mbus_code == fse->code) {
>>>>> + code_match = true;
>>>>> + if (!(fmt->direction & RKISP1_ISP_SD_SINK) &&
>>>>> + fse->pad == RKISP1_ISP_PAD_SINK_VIDEO)
>>>>> + return -EINVAL;
>>>>> + if (!(fmt->direction & RKISP1_ISP_SD_SRC) &&
>>>>> + fse->pad == RKISP1_ISP_PAD_SOURCE_VIDEO)
>>>>> + return -EINVAL;
>>>>> + }
>>>>> + }
>>>>> +
>>>>> + if (!code_match)
>>>>> + return -EINVAL;
>>>>> +
>>>>> + fse->min_width = RKISP1_ISP_MIN_WIDTH;
>>>>> + fse->max_width = RKISP1_ISP_MAX_WIDTH;
>>>>> + fse->min_height = RKISP1_ISP_MIN_HEIGHT;
>>>>> + fse->max_height = RKISP1_ISP_MAX_HEIGHT;
>>>>> +
>>>>> + return 0;
>>>>> +}
>>>>>
>>>>> static int rkisp1_isp_init_config(struct v4l2_subdev *sd,
>>>>> struct v4l2_subdev_pad_config *cfg)
>>>>> @@ -880,6 +918,7 @@ static int rkisp1_subdev_link_validate(struct media_link *link)
>>>>>
>>>>> static const struct v4l2_subdev_pad_ops rkisp1_isp_pad_ops = {
>>>>> .enum_mbus_code = rkisp1_isp_enum_mbus_code,
>>>>> + .enum_frame_size = rkisp1_isp_enum_frame_size,
>>>>> .get_selection = rkisp1_isp_get_selection,
>>>>> .set_selection = rkisp1_isp_set_selection,
>>>>> .init_cfg = rkisp1_isp_init_config,
>>>>>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] media: rkisp1: Add the enum_frame_size ioctl
2020-12-10 5:03 ` Sebastian Fricke
2020-12-10 10:03 ` Dafna Hirschfeld
@ 2020-12-10 12:06 ` Helen Koike
2020-12-10 13:06 ` Sebastian Fricke
1 sibling, 1 reply; 8+ messages in thread
From: Helen Koike @ 2020-12-10 12:06 UTC (permalink / raw)
To: Sebastian Fricke; +Cc: linux-media, dafna.hirschfeld
On 12/10/20 2:03 AM, Sebastian Fricke wrote:
> On 09.12.2020 11:22, Helen Koike wrote:
>> Hi Sebastian,
>>
>> On 12/7/20 3:01 PM, Sebastian Fricke wrote:
>>> On 07.12.2020 08:33, Helen Koike wrote:
>>>> Hi Sebastian,
>>>>
>>>> Thanks for your patch.
>>>
>>> Hello Helen,
>>>
>>> I am very grateful for your review.
>>>
>>>>
>>>> On 12/6/20 2:39 AM, Sebastian Fricke wrote:
>>>>> Implement the VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl, check if the mbus
>>>>> code is valid for the given pad. This call is not available for the
>>>>> parameter or metadata pads of the RkISP1.
>>>>>
>>>>> Signed-off-by: Sebastian Fricke <sebastian.fricke.linux@gmail.com>
>>>>> ---
>>>>>
>>>>> I have tested this patch with the following script:
>>>>> https://github.com/initBasti/Linux_kernel_media_tree_fork/commit/efc4b399cff53fb36fadde999594961a3d84073e
>>>>>
>>>>> The results on my NanoPC-T4 (Linux nanopct4 5.10.0-rc6-rockchip64):
>>>>>
>>>>> pad 0 = RKISP1_ISP_PAD_SINK_VIDEO
>>>>> pad 1 = RKISP1_ISP_PAD_SINK_PARAMS
>>>>> pad 2 = RKISP1_ISP_PAD_SOURCE_VIDEO
>>>>> pad 3 = RKISP1_ISP_PAD_SOURCE_STATS
>>>>>
>>>>> basti@nanopct4:~$ python3 rkisp1_enum_frame_size_test.py
>>>>> TEST 0: pad 0 - code 0x300f - size 32x32 - 4032x3024
>>>>> TEST 1: pad 0 - code 0x3007 - size 32x32 - 4032x3024
>>>>> TEST 2: pad 0 - code 0x300e - size 32x32 - 4032x3024
>>>>> TEST 3: pad 0 - code 0x300a - size 32x32 - 4032x3024
>>>>> TEST 4: pad 0 - code 0x3012 - size 32x32 - 4032x3024
>>>>> TEST 5: pad 0 - code 0x3008 - size 32x32 - 4032x3024
>>>>> TEST 6: pad 0 - code 0x3010 - size 32x32 - 4032x3024
>>>>> TEST 7: pad 0 - code 0x3011 - size 32x32 - 4032x3024
>>>>> TEST 8: pad 0 - code 0x3014 - size 32x32 - 4032x3024
>>>>> TEST 9: pad 0 - code 0x3001 - size 32x32 - 4032x3024
>>>>> TEST 10: pad 0 - code 0x3013 - size 32x32 - 4032x3024
>>>>> TEST 11: pad 0 - code 0x3002 - size 32x32 - 4032x3024
>>>>> TEST 12: pad 0 - code 0x2011 - size 32x32 - 4032x3024
>>>>> TEST 13: pad 0 - code 0x2012 - size 32x32 - 4032x3024
>>>>> TEST 14: pad 0 - code 0x200f - size 32x32 - 4032x3024
>>>>> TEST 15: pad 0 - code 0x2010 - size 32x32 - 4032x3024
>>>>> TEST 16: pad 1 - code 0x7001 - size /
>>>>> TEST 17: pad 2 - code 0x2008 - size 32x32 - 4032x3024
>>>>> TEST 18: pad 2 - code 0x300f - size 32x32 - 4032x3024
>>>>> TEST 19: pad 2 - code 0x3007 - size 32x32 - 4032x3024
>>>>> TEST 20: pad 2 - code 0x300e - size 32x32 - 4032x3024
>>>>> TEST 21: pad 2 - code 0x300a - size 32x32 - 4032x3024
>>>>> TEST 22: pad 2 - code 0x3012 - size 32x32 - 4032x3024
>>>>> TEST 23: pad 2 - code 0x3008 - size 32x32 - 4032x3024
>>>>> TEST 24: pad 2 - code 0x3010 - size 32x32 - 4032x3024
>>>>> TEST 25: pad 2 - code 0x3011 - size 32x32 - 4032x3024
>>>>> TEST 26: pad 2 - code 0x3014 - size 32x32 - 4032x3024
>>>>> TEST 27: pad 2 - code 0x3001 - size 32x32 - 4032x3024
>>>>> TEST 28: pad 2 - code 0x3013 - size 32x32 - 4032x3024
>>>>> TEST 29: pad 2 - code 0x3002 - size 32x32 - 4032x3024
>>>>> TEST 30: pad 3 - code 0x7001 - size /
>>>>> TEST 31: pad 0 - code 0xdead - size / (test with an invalid media bus code)
>>>>> TEST 32: pad 6 - code 0x300f - size / (test with an invalid pad)
>>>>> TEST 33: pad 0 - code 0x2008 - size / (test with a format that is not supported by the pad)
>>>>> TEST 34: pad 2 - code 0x2010 - size / (test with a format that is not supported by the pad)
>>>>
>>>> Could you please also run v4l2-compliance ?
>>>
>>> Yes, it finished without errors here is the output.
>>>
>>> Greetings,
>>> Sebastian
>>>
>>> ---
>>>
>>> basti@nanopct4:~$ v4l2-compliance v4l2-compliance 1.21.0-4683, 64 bits, 64-bit time_t
>>> v4l2-compliance SHA: 0aee9991e0c0 2020-12-01 09:48:02
>>
>> Thanks for running the test.
>>
>>>
>>> Compliance test for rkisp1 device /dev/video0:
>>
>>
>> This is only testing video0 (rkisp1-capture) but enum_frame_size is in the isp node.
>> Please run v4l2-compliance in the isp node as well. iirc you can use the -m option
>> to test the whole tree.
>
> Oh, thanks a lot for pointing me to that test, as it actually reports
> errors. :(
> I am just not sure if these errors are problematic as pad 0 & pad 2
> work as intended, while pad 1 & pad 3 report errors.
> My goal would actually be if they report that they don't support the
> FRAMESIZES.
> What do you think?
Try returning -ENOTTY to indicate it isn't supported:
https://linuxtv.org/downloads/v4l-dvb-apis-new/userspace-api/gen-errors.html?highlight=enotty
>
> basti@nanopct4:~$ v4l2-compliance -d /dev/v4l-subdev0
> ...
> Compliance test for rkisp1 device /dev/v4l-subdev0:
>
> Media Driver Info:
> Driver name : rkisp1
> Model : rkisp1
> Serial : Bus info : platform:rkisp1
> Media version : 5.10.0
> Hardware revision: 0x00000000 (0)
> Driver version : 5.10.0
> Interface Info:
> ID : 0x0300002c
> Type : V4L Sub-Device
> Entity Info:
> ID : 0x00000001 (1)
> Name : rkisp1_isp
> Function : Video Pixel Formatter
> Pad 0x01000002 : 0: Sink, Must Connect
> Link 0x0200001e: from remote pad 0x100001d of entity 'ov13850 1-0010': Data, Enabled
> Pad 0x01000003 : 1: Sink
> Link 0x02000028: from remote pad 0x1000019 of entity 'rkisp1_params': Data, Enabled, Immutable
> Pad 0x01000004 : 2: Source
> Link 0x02000020: to remote pad 0x1000007 of entity 'rkisp1_resizer_mainpath': Data, Enabled
> Link 0x02000024: to remote pad 0x100000a of entity 'rkisp1_resizer_selfpath': Data, Enabled
> Pad 0x01000005 : 3: Source
> Link 0x0200002a: to remote pad 0x1000015 of entity 'rkisp1_stats': Data, Enabled, Immutable
>
> Required ioctls:
> test MC information (see 'Media Driver Info' above): OK
>
> Allow for multiple opens:
> test second /dev/v4l-subdev0 open: OK
> test for unlimited opens: OK
>
> test invalid ioctls: OK
> Debug ioctls:
> test VIDIOC_LOG_STATUS: OK (Not Supported)
>
> Input ioctls:
> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
> test VIDIOC_ENUMAUDIO: OK (Not Supported)
> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDIO: OK (Not Supported)
> Inputs: 0 Audio Inputs: 0 Tuners: 0
>
> Output ioctls:
> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
> Outputs: 0 Audio Outputs: 0 Modulators: 0
>
> Input/Output configuration ioctls:
> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
> test VIDIOC_G/S_EDID: OK (Not Supported)
>
> Sub-Device ioctls (Sink Pad 0):
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
> test Try VIDIOC_SUBDEV_G/S_FMT: OK
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
> test Active VIDIOC_SUBDEV_G/S_FMT: OK
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Sink Pad 1):
> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
> test Try VIDIOC_SUBDEV_G/S_FMT: FAIL
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
> test Active VIDIOC_SUBDEV_G/S_FMT: FAIL
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Source Pad 2):
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
> test Try VIDIOC_SUBDEV_G/S_FMT: OK
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
> test Active VIDIOC_SUBDEV_G/S_FMT: OK
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Sub-Device ioctls (Source Pad 3):
> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
> test Try VIDIOC_SUBDEV_G/S_FMT: FAIL
> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
> test Active VIDIOC_SUBDEV_G/S_FMT: FAIL
> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>
> Control ioctls:
> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
> test VIDIOC_QUERYCTRL: OK (Not Supported)
> test VIDIOC_G/S_CTRL: OK (Not Supported)
> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
> Standard Controls: 0 Private Controls: 0
>
> Format ioctls:
> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported)
> test VIDIOC_G/S_PARM: OK (Not Supported)
> test VIDIOC_G_FBUF: OK (Not Supported)
> test VIDIOC_G_FMT: OK (Not Supported)
> test VIDIOC_TRY_FMT: OK (Not Supported)
> test VIDIOC_S_FMT: OK (Not Supported)
> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
> test Cropping: OK (Not Supported)
> test Composing: OK (Not Supported)
> test Scaling: OK (Not Supported)
>
> Codec ioctls:
> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>
> Buffer ioctls:
> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
> test VIDIOC_EXPBUF: OK (Not Supported)
> test Requests: OK (Not Supported)
>
> Total for rkisp1 device /dev/v4l-subdev0: 70, Succeeded: 62, Failed: 8, Warnings: 0
>
>
>>
>> Regards,
>> Helen
>>
>>>
>>> Driver Info:
>>> Driver name : rkisp1
>>> Card type : rkisp1
>>> Bus info : platform:rkisp1
>>> Driver version : 5.10.0
>>> Capabilities : 0xa4201000
>>> Video Capture Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Device Capabilities
>>> Device Caps : 0x24201000
>>> Video Capture Multiplanar
>>> Streaming
>>> Extended Pix Format
>>> Media Driver Info:
>>> Driver name : rkisp1
>>> Model : rkisp1
>>> Serial :
>>> Bus info : platform:rkisp1
>>> Media version : 5.10.0
>>> Hardware revision: 0x00000000 (0)
>>> Driver version : 5.10.0
>>> Interface Info:
>>> ID : 0x0300000d
>>> Type : V4L Video
>>> Entity Info:
>>> ID : 0x0000000c (12)
>>> Name : rkisp1_mainpath
>>> Function : V4L2 I/O
>>> Pad 0x0100000f : 0: Sink
>>> Link 0x02000022: from remote pad 0x1000008 of entity 'rkisp1_resizer_mainpath': Data, Enabled, Immutable
>>>
>>> Required ioctls:
>>> test MC information (see 'Media Driver Info' above): OK
>>> test VIDIOC_QUERYCAP: OK
>>>
>>> Allow for multiple opens:
>>> test second /dev/video0 open: OK
>>> test VIDIOC_QUERYCAP: OK
>>> test VIDIOC_G/S_PRIORITY: OK
>>> test for unlimited opens: OK
>>>
>>> test invalid ioctls: OK
>>> Debug ioctls:
>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>
>>> Input ioctls:
>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMINPUT: OK
>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>> Inputs: 1 Audio Inputs: 0 Tuners: 0
>>>
>>> Output ioctls:
>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>
>>> Input/Output configuration ioctls:
>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>
>>> Control ioctls (Input 0):
>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>> Standard Controls: 0 Private Controls: 0
>>>
>>> Format ioctls (Input 0):
>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>> test VIDIOC_G_FMT: OK
>>> test VIDIOC_TRY_FMT: OK
>>> test VIDIOC_S_FMT: OK
>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>> test Cropping: OK (Not Supported)
>>> test Composing: OK (Not Supported)
>>> test Scaling: OK
>>>
>>> Codec ioctls (Input 0):
>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>
>>> Buffer ioctls (Input 0):
>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>> test VIDIOC_EXPBUF: OK
>>> test Requests: OK (Not Supported)
>>>
>>> Total for rkisp1 device /dev/video0: 46, Succeeded: 46, Failed: 0, Warnings: 0
>>>
>>>>
>>>>>
>>>>> ---
>>>>>
>>>>> .../platform/rockchip/rkisp1/rkisp1-isp.c | 39 +++++++++++++++++++
>>>>> 1 file changed, 39 insertions(+)
>>>>>
>>>>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>>> index 889982d8ca41..fa7540155d71 100644
>>>>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>>> @@ -599,6 +599,44 @@ static int rkisp1_isp_enum_mbus_code(struct v4l2_subdev *sd,
>>>>>
>>>>> return -EINVAL;
>>>>> }
>>>>
>>>> Please add a new line here
>>>>
>>>>> +static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
>>>>> + struct v4l2_subdev_pad_config *cfg,
>>>>> + struct v4l2_subdev_frame_size_enum *fse)
>>>>> +{
>>>>> + int i;
>>>>
>>>> unsigned
>>>>
>>>>> + bool code_match = false;
>>>>> +
>>>>> + if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
>>>>> + fse->pad == RKISP1_ISP_PAD_SOURCE_STATS)
>>>>> + return -EINVAL;
I mean here.
Regards,
Helen
>>>>
>>>>
>>>>
>>>>> +
>>>>> + if (fse->index > 0)> + return -EINVAL;
>>>>> +
>>>>> + for (i = 0; i < ARRAY_SIZE(rkisp1_isp_formats); i++) {
>>>>> + const struct rkisp1_isp_mbus_info *fmt = &rkisp1_isp_formats[i];
>>>>
>>>> Can't you use function rkisp1_isp_mbus_info_get() ?
>>>>
>>>> Check how rkisp1_isp_set_src_fmt() checks for a valid mbus code.
>>>>
>>>> Thanks
>>>> Helen
>>>>
>>>>> +
>>>>> + if (fmt->mbus_code == fse->code) {
>>>>> + code_match = true;
>>>>> + if (!(fmt->direction & RKISP1_ISP_SD_SINK) &&
>>>>> + fse->pad == RKISP1_ISP_PAD_SINK_VIDEO)
>>>>> + return -EINVAL;
>>>>> + if (!(fmt->direction & RKISP1_ISP_SD_SRC) &&
>>>>> + fse->pad == RKISP1_ISP_PAD_SOURCE_VIDEO)
>>>>> + return -EINVAL;
>>>>> + }
>>>>> + }
>>>>> +
>>>>> + if (!code_match)
>>>>> + return -EINVAL;
>>>>> +
>>>>> + fse->min_width = RKISP1_ISP_MIN_WIDTH;
>>>>> + fse->max_width = RKISP1_ISP_MAX_WIDTH;
>>>>> + fse->min_height = RKISP1_ISP_MIN_HEIGHT;
>>>>> + fse->max_height = RKISP1_ISP_MAX_HEIGHT;
>>>>> +
>>>>> + return 0;
>>>>> +}
>>>>>
>>>>> static int rkisp1_isp_init_config(struct v4l2_subdev *sd,
>>>>> struct v4l2_subdev_pad_config *cfg)
>>>>> @@ -880,6 +918,7 @@ static int rkisp1_subdev_link_validate(struct media_link *link)
>>>>>
>>>>> static const struct v4l2_subdev_pad_ops rkisp1_isp_pad_ops = {
>>>>> .enum_mbus_code = rkisp1_isp_enum_mbus_code,
>>>>> + .enum_frame_size = rkisp1_isp_enum_frame_size,
>>>>> .get_selection = rkisp1_isp_get_selection,
>>>>> .set_selection = rkisp1_isp_set_selection,
>>>>> .init_cfg = rkisp1_isp_init_config,
>>>>>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] media: rkisp1: Add the enum_frame_size ioctl
2020-12-10 12:06 ` Helen Koike
@ 2020-12-10 13:06 ` Sebastian Fricke
0 siblings, 0 replies; 8+ messages in thread
From: Sebastian Fricke @ 2020-12-10 13:06 UTC (permalink / raw)
To: Helen Koike; +Cc: linux-media, dafna.hirschfeld
On 10.12.2020 09:06, Helen Koike wrote:
>
>
>On 12/10/20 2:03 AM, Sebastian Fricke wrote:
>> On 09.12.2020 11:22, Helen Koike wrote:
>>> Hi Sebastian,
>>>
>>> On 12/7/20 3:01 PM, Sebastian Fricke wrote:
>>>> On 07.12.2020 08:33, Helen Koike wrote:
>>>>> Hi Sebastian,
>>>>>
>>>>> Thanks for your patch.
>>>>
>>>> Hello Helen,
>>>>
>>>> I am very grateful for your review.
>>>>
>>>>>
>>>>> On 12/6/20 2:39 AM, Sebastian Fricke wrote:
>>>>>> Implement the VIDIOC_SUBDEV_ENUM_FRAME_SIZE ioctl, check if the mbus
>>>>>> code is valid for the given pad. This call is not available for the
>>>>>> parameter or metadata pads of the RkISP1.
>>>>>>
>>>>>> Signed-off-by: Sebastian Fricke <sebastian.fricke.linux@gmail.com>
>>>>>> ---
>>>>>>
>>>>>> I have tested this patch with the following script:
>>>>>> https://github.com/initBasti/Linux_kernel_media_tree_fork/commit/efc4b399cff53fb36fadde999594961a3d84073e
>>>>>>
>>>>>> The results on my NanoPC-T4 (Linux nanopct4 5.10.0-rc6-rockchip64):
>>>>>>
>>>>>> pad 0 = RKISP1_ISP_PAD_SINK_VIDEO
>>>>>> pad 1 = RKISP1_ISP_PAD_SINK_PARAMS
>>>>>> pad 2 = RKISP1_ISP_PAD_SOURCE_VIDEO
>>>>>> pad 3 = RKISP1_ISP_PAD_SOURCE_STATS
>>>>>>
>>>>>> basti@nanopct4:~$ python3 rkisp1_enum_frame_size_test.py
>>>>>> TEST 0: pad 0 - code 0x300f - size 32x32 - 4032x3024
>>>>>> TEST 1: pad 0 - code 0x3007 - size 32x32 - 4032x3024
>>>>>> TEST 2: pad 0 - code 0x300e - size 32x32 - 4032x3024
>>>>>> TEST 3: pad 0 - code 0x300a - size 32x32 - 4032x3024
>>>>>> TEST 4: pad 0 - code 0x3012 - size 32x32 - 4032x3024
>>>>>> TEST 5: pad 0 - code 0x3008 - size 32x32 - 4032x3024
>>>>>> TEST 6: pad 0 - code 0x3010 - size 32x32 - 4032x3024
>>>>>> TEST 7: pad 0 - code 0x3011 - size 32x32 - 4032x3024
>>>>>> TEST 8: pad 0 - code 0x3014 - size 32x32 - 4032x3024
>>>>>> TEST 9: pad 0 - code 0x3001 - size 32x32 - 4032x3024
>>>>>> TEST 10: pad 0 - code 0x3013 - size 32x32 - 4032x3024
>>>>>> TEST 11: pad 0 - code 0x3002 - size 32x32 - 4032x3024
>>>>>> TEST 12: pad 0 - code 0x2011 - size 32x32 - 4032x3024
>>>>>> TEST 13: pad 0 - code 0x2012 - size 32x32 - 4032x3024
>>>>>> TEST 14: pad 0 - code 0x200f - size 32x32 - 4032x3024
>>>>>> TEST 15: pad 0 - code 0x2010 - size 32x32 - 4032x3024
>>>>>> TEST 16: pad 1 - code 0x7001 - size /
>>>>>> TEST 17: pad 2 - code 0x2008 - size 32x32 - 4032x3024
>>>>>> TEST 18: pad 2 - code 0x300f - size 32x32 - 4032x3024
>>>>>> TEST 19: pad 2 - code 0x3007 - size 32x32 - 4032x3024
>>>>>> TEST 20: pad 2 - code 0x300e - size 32x32 - 4032x3024
>>>>>> TEST 21: pad 2 - code 0x300a - size 32x32 - 4032x3024
>>>>>> TEST 22: pad 2 - code 0x3012 - size 32x32 - 4032x3024
>>>>>> TEST 23: pad 2 - code 0x3008 - size 32x32 - 4032x3024
>>>>>> TEST 24: pad 2 - code 0x3010 - size 32x32 - 4032x3024
>>>>>> TEST 25: pad 2 - code 0x3011 - size 32x32 - 4032x3024
>>>>>> TEST 26: pad 2 - code 0x3014 - size 32x32 - 4032x3024
>>>>>> TEST 27: pad 2 - code 0x3001 - size 32x32 - 4032x3024
>>>>>> TEST 28: pad 2 - code 0x3013 - size 32x32 - 4032x3024
>>>>>> TEST 29: pad 2 - code 0x3002 - size 32x32 - 4032x3024
>>>>>> TEST 30: pad 3 - code 0x7001 - size /
>>>>>> TEST 31: pad 0 - code 0xdead - size / (test with an invalid media bus code)
>>>>>> TEST 32: pad 6 - code 0x300f - size / (test with an invalid pad)
>>>>>> TEST 33: pad 0 - code 0x2008 - size / (test with a format that is not supported by the pad)
>>>>>> TEST 34: pad 2 - code 0x2010 - size / (test with a format that is not supported by the pad)
>>>>>
>>>>> Could you please also run v4l2-compliance ?
>>>>
>>>> Yes, it finished without errors here is the output.
>>>>
>>>> Greetings,
>>>> Sebastian
>>>>
>>>> ---
>>>>
>>>> basti@nanopct4:~$ v4l2-compliance v4l2-compliance 1.21.0-4683, 64 bits, 64-bit time_t
>>>> v4l2-compliance SHA: 0aee9991e0c0 2020-12-01 09:48:02
>>>
>>> Thanks for running the test.
>>>
>>>>
>>>> Compliance test for rkisp1 device /dev/video0:
>>>
>>>
>>> This is only testing video0 (rkisp1-capture) but enum_frame_size is in the isp node.
>>> Please run v4l2-compliance in the isp node as well. iirc you can use the -m option
>>> to test the whole tree.
>>
>> Oh, thanks a lot for pointing me to that test, as it actually reports
>> errors. :(
>> I am just not sure if these errors are problematic as pad 0 & pad 2
>> work as intended, while pad 1 & pad 3 report errors.
>> My goal would actually be if they report that they don't support the
>> FRAMESIZES.
>> What do you think?
>
>Try returning -ENOTTY to indicate it isn't supported:
>https://linuxtv.org/downloads/v4l-dvb-apis-new/userspace-api/gen-errors.html?highlight=enotty
Ah great, I will include that in v3. Do you think that v2 requires any
other changes? Because if that is not the case, I can create v3 this
afternoon.
Thank you and greetings,
Sebastian
>
>>
>> basti@nanopct4:~$ v4l2-compliance -d /dev/v4l-subdev0
>> ...
>> Compliance test for rkisp1 device /dev/v4l-subdev0:
>>
>> Media Driver Info:
>> Driver name : rkisp1
>> Model : rkisp1
>> Serial : Bus info : platform:rkisp1
>> Media version : 5.10.0
>> Hardware revision: 0x00000000 (0)
>> Driver version : 5.10.0
>> Interface Info:
>> ID : 0x0300002c
>> Type : V4L Sub-Device
>> Entity Info:
>> ID : 0x00000001 (1)
>> Name : rkisp1_isp
>> Function : Video Pixel Formatter
>> Pad 0x01000002 : 0: Sink, Must Connect
>> Link 0x0200001e: from remote pad 0x100001d of entity 'ov13850 1-0010': Data, Enabled
>> Pad 0x01000003 : 1: Sink
>> Link 0x02000028: from remote pad 0x1000019 of entity 'rkisp1_params': Data, Enabled, Immutable
>> Pad 0x01000004 : 2: Source
>> Link 0x02000020: to remote pad 0x1000007 of entity 'rkisp1_resizer_mainpath': Data, Enabled
>> Link 0x02000024: to remote pad 0x100000a of entity 'rkisp1_resizer_selfpath': Data, Enabled
>> Pad 0x01000005 : 3: Source
>> Link 0x0200002a: to remote pad 0x1000015 of entity 'rkisp1_stats': Data, Enabled, Immutable
>>
>> Required ioctls:
>> test MC information (see 'Media Driver Info' above): OK
>>
>> Allow for multiple opens:
>> test second /dev/v4l-subdev0 open: OK
>> test for unlimited opens: OK
>>
>> test invalid ioctls: OK
>> Debug ioctls:
>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>
>> Input ioctls:
>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>> test VIDIOC_G/S/ENUMINPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>> Inputs: 0 Audio Inputs: 0 Tuners: 0
>>
>> Output ioctls:
>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>
>> Input/Output configuration ioctls:
>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>
>> Sub-Device ioctls (Sink Pad 0):
>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
>> test Try VIDIOC_SUBDEV_G/S_FMT: OK
>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
>> test Active VIDIOC_SUBDEV_G/S_FMT: OK
>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
>> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>
>> Sub-Device ioctls (Sink Pad 1):
>> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
>> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
>> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
>> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
>> test Try VIDIOC_SUBDEV_G/S_FMT: FAIL
>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
>> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
>> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
>> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
>> test Active VIDIOC_SUBDEV_G/S_FMT: FAIL
>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>
>> Sub-Device ioctls (Source Pad 2):
>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
>> test Try VIDIOC_SUBDEV_G/S_FMT: OK
>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: OK
>> test Active VIDIOC_SUBDEV_G/S_FMT: OK
>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK
>> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>
>> Sub-Device ioctls (Source Pad 3):
>> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
>> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
>> test Try VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
>> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
>> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
>> test Try VIDIOC_SUBDEV_G/S_FMT: FAIL
>> test Try VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> fail: v4l2-test-subdevs.cpp(139): doioctl(node, VIDIOC_SUBDEV_ENUM_FRAME_SIZE, &fse)
>> fail: v4l2-test-subdevs.cpp(240): ret && ret != ENOTTY
>> test Active VIDIOC_SUBDEV_ENUM_MBUS_CODE/FRAME_SIZE/FRAME_INTERVAL: FAIL
>> fail: v4l2-test-subdevs.cpp(303): fmt.width == 0 || fmt.width > 65536
>> fail: v4l2-test-subdevs.cpp(348): checkMBusFrameFmt(node, fmt.format)
>> test Active VIDIOC_SUBDEV_G/S_FMT: FAIL
>> test Active VIDIOC_SUBDEV_G/S_SELECTION/CROP: OK (Not Supported)
>> test VIDIOC_SUBDEV_G/S_FRAME_INTERVAL: OK (Not Supported)
>>
>> Control ioctls:
>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>> Standard Controls: 0 Private Controls: 0
>>
>> Format ioctls:
>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK (Not Supported)
>> test VIDIOC_G/S_PARM: OK (Not Supported)
>> test VIDIOC_G_FBUF: OK (Not Supported)
>> test VIDIOC_G_FMT: OK (Not Supported)
>> test VIDIOC_TRY_FMT: OK (Not Supported)
>> test VIDIOC_S_FMT: OK (Not Supported)
>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>> test Cropping: OK (Not Supported)
>> test Composing: OK (Not Supported)
>> test Scaling: OK (Not Supported)
>>
>> Codec ioctls:
>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>
>> Buffer ioctls:
>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK (Not Supported)
>> test VIDIOC_EXPBUF: OK (Not Supported)
>> test Requests: OK (Not Supported)
>>
>> Total for rkisp1 device /dev/v4l-subdev0: 70, Succeeded: 62, Failed: 8, Warnings: 0
>>
>>
>>>
>>> Regards,
>>> Helen
>>>
>>>>
>>>> Driver Info:
>>>> Driver name : rkisp1
>>>> Card type : rkisp1
>>>> Bus info : platform:rkisp1
>>>> Driver version : 5.10.0
>>>> Capabilities : 0xa4201000
>>>> Video Capture Multiplanar
>>>> Streaming
>>>> Extended Pix Format
>>>> Device Capabilities
>>>> Device Caps : 0x24201000
>>>> Video Capture Multiplanar
>>>> Streaming
>>>> Extended Pix Format
>>>> Media Driver Info:
>>>> Driver name : rkisp1
>>>> Model : rkisp1
>>>> Serial :
>>>> Bus info : platform:rkisp1
>>>> Media version : 5.10.0
>>>> Hardware revision: 0x00000000 (0)
>>>> Driver version : 5.10.0
>>>> Interface Info:
>>>> ID : 0x0300000d
>>>> Type : V4L Video
>>>> Entity Info:
>>>> ID : 0x0000000c (12)
>>>> Name : rkisp1_mainpath
>>>> Function : V4L2 I/O
>>>> Pad 0x0100000f : 0: Sink
>>>> Link 0x02000022: from remote pad 0x1000008 of entity 'rkisp1_resizer_mainpath': Data, Enabled, Immutable
>>>>
>>>> Required ioctls:
>>>> test MC information (see 'Media Driver Info' above): OK
>>>> test VIDIOC_QUERYCAP: OK
>>>>
>>>> Allow for multiple opens:
>>>> test second /dev/video0 open: OK
>>>> test VIDIOC_QUERYCAP: OK
>>>> test VIDIOC_G/S_PRIORITY: OK
>>>> test for unlimited opens: OK
>>>>
>>>> test invalid ioctls: OK
>>>> Debug ioctls:
>>>> test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported)
>>>> test VIDIOC_LOG_STATUS: OK (Not Supported)
>>>>
>>>> Input ioctls:
>>>> test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported)
>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>> test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported)
>>>> test VIDIOC_ENUMAUDIO: OK (Not Supported)
>>>> test VIDIOC_G/S/ENUMINPUT: OK
>>>> test VIDIOC_G/S_AUDIO: OK (Not Supported)
>>>> Inputs: 1 Audio Inputs: 0 Tuners: 0
>>>>
>>>> Output ioctls:
>>>> test VIDIOC_G/S_MODULATOR: OK (Not Supported)
>>>> test VIDIOC_G/S_FREQUENCY: OK (Not Supported)
>>>> test VIDIOC_ENUMAUDOUT: OK (Not Supported)
>>>> test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported)
>>>> test VIDIOC_G/S_AUDOUT: OK (Not Supported)
>>>> Outputs: 0 Audio Outputs: 0 Modulators: 0
>>>>
>>>> Input/Output configuration ioctls:
>>>> test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported)
>>>> test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported)
>>>> test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported)
>>>> test VIDIOC_G/S_EDID: OK (Not Supported)
>>>>
>>>> Control ioctls (Input 0):
>>>> test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported)
>>>> test VIDIOC_QUERYCTRL: OK (Not Supported)
>>>> test VIDIOC_G/S_CTRL: OK (Not Supported)
>>>> test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported)
>>>> test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported)
>>>> test VIDIOC_G/S_JPEGCOMP: OK (Not Supported)
>>>> Standard Controls: 0 Private Controls: 0
>>>>
>>>> Format ioctls (Input 0):
>>>> test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK
>>>> test VIDIOC_G/S_PARM: OK (Not Supported)
>>>> test VIDIOC_G_FBUF: OK (Not Supported)
>>>> test VIDIOC_G_FMT: OK
>>>> test VIDIOC_TRY_FMT: OK
>>>> test VIDIOC_S_FMT: OK
>>>> test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported)
>>>> test Cropping: OK (Not Supported)
>>>> test Composing: OK (Not Supported)
>>>> test Scaling: OK
>>>>
>>>> Codec ioctls (Input 0):
>>>> test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported)
>>>> test VIDIOC_G_ENC_INDEX: OK (Not Supported)
>>>> test VIDIOC_(TRY_)DECODER_CMD: OK (Not Supported)
>>>>
>>>> Buffer ioctls (Input 0):
>>>> test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK
>>>> test VIDIOC_EXPBUF: OK
>>>> test Requests: OK (Not Supported)
>>>>
>>>> Total for rkisp1 device /dev/video0: 46, Succeeded: 46, Failed: 0, Warnings: 0
>>>>
>>>>>
>>>>>>
>>>>>> ---
>>>>>>
>>>>>> .../platform/rockchip/rkisp1/rkisp1-isp.c | 39 +++++++++++++++++++
>>>>>> 1 file changed, 39 insertions(+)
>>>>>>
>>>>>> diff --git a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>>>> index 889982d8ca41..fa7540155d71 100644
>>>>>> --- a/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>>>> +++ b/drivers/media/platform/rockchip/rkisp1/rkisp1-isp.c
>>>>>> @@ -599,6 +599,44 @@ static int rkisp1_isp_enum_mbus_code(struct v4l2_subdev *sd,
>>>>>>
>>>>>> return -EINVAL;
>>>>>> }
>>>>>
>>>>> Please add a new line here
>>>>>
>>>>>> +static int rkisp1_isp_enum_frame_size(struct v4l2_subdev *sd,
>>>>>> + struct v4l2_subdev_pad_config *cfg,
>>>>>> + struct v4l2_subdev_frame_size_enum *fse)
>>>>>> +{
>>>>>> + int i;
>>>>>
>>>>> unsigned
>>>>>
>>>>>> + bool code_match = false;
>>>>>> +
>>>>>> + if (fse->pad == RKISP1_ISP_PAD_SINK_PARAMS ||
>>>>>> + fse->pad == RKISP1_ISP_PAD_SOURCE_STATS)
>>>>>> + return -EINVAL;
>
>I mean here.
>
>Regards,
>Helen
>
>>>>>
>>>>>
>>>>>
>>>>>> +
>>>>>> + if (fse->index > 0)> + return -EINVAL;
>>>>>> +
>>>>>> + for (i = 0; i < ARRAY_SIZE(rkisp1_isp_formats); i++) {
>>>>>> + const struct rkisp1_isp_mbus_info *fmt = &rkisp1_isp_formats[i];
>>>>>
>>>>> Can't you use function rkisp1_isp_mbus_info_get() ?
>>>>>
>>>>> Check how rkisp1_isp_set_src_fmt() checks for a valid mbus code.
>>>>>
>>>>> Thanks
>>>>> Helen
>>>>>
>>>>>> +
>>>>>> + if (fmt->mbus_code == fse->code) {
>>>>>> + code_match = true;
>>>>>> + if (!(fmt->direction & RKISP1_ISP_SD_SINK) &&
>>>>>> + fse->pad == RKISP1_ISP_PAD_SINK_VIDEO)
>>>>>> + return -EINVAL;
>>>>>> + if (!(fmt->direction & RKISP1_ISP_SD_SRC) &&
>>>>>> + fse->pad == RKISP1_ISP_PAD_SOURCE_VIDEO)
>>>>>> + return -EINVAL;
>>>>>> + }
>>>>>> + }
>>>>>> +
>>>>>> + if (!code_match)
>>>>>> + return -EINVAL;
>>>>>> +
>>>>>> + fse->min_width = RKISP1_ISP_MIN_WIDTH;
>>>>>> + fse->max_width = RKISP1_ISP_MAX_WIDTH;
>>>>>> + fse->min_height = RKISP1_ISP_MIN_HEIGHT;
>>>>>> + fse->max_height = RKISP1_ISP_MAX_HEIGHT;
>>>>>> +
>>>>>> + return 0;
>>>>>> +}
>>>>>>
>>>>>> static int rkisp1_isp_init_config(struct v4l2_subdev *sd,
>>>>>> struct v4l2_subdev_pad_config *cfg)
>>>>>> @@ -880,6 +918,7 @@ static int rkisp1_subdev_link_validate(struct media_link *link)
>>>>>>
>>>>>> static const struct v4l2_subdev_pad_ops rkisp1_isp_pad_ops = {
>>>>>> .enum_mbus_code = rkisp1_isp_enum_mbus_code,
>>>>>> + .enum_frame_size = rkisp1_isp_enum_frame_size,
>>>>>> .get_selection = rkisp1_isp_get_selection,
>>>>>> .set_selection = rkisp1_isp_set_selection,
>>>>>> .init_cfg = rkisp1_isp_init_config,
>>>>>>
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2020-12-10 13:06 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-12-06 5:39 [PATCH] media: rkisp1: Add the enum_frame_size ioctl Sebastian Fricke
2020-12-07 11:33 ` Helen Koike
2020-12-07 18:01 ` Sebastian Fricke
2020-12-09 14:22 ` Helen Koike
2020-12-10 5:03 ` Sebastian Fricke
2020-12-10 10:03 ` Dafna Hirschfeld
2020-12-10 12:06 ` Helen Koike
2020-12-10 13:06 ` Sebastian Fricke
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.