Re: [PATCH v5 4/7] v4l2-ctl/compliance: Add simple routing test

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

 



On 07/06/2023 13:35, Hans Verkuil wrote:
> On 29/05/2023 10:50, Tomi Valkeinen wrote:
>> Add a very simple test for
>> VIDIOC_SUBDEV_G_ROUTING/VIDIOC_SUBDEV_S_ROUTING.
>>
>> We can't (at least at the moment) really know here what kind of routings
>> the driver would accept, but we can test a VIDIOC_SUBDEV_G_ROUTING call,
>> followed by a VIDIOC_SUBDEV_S_ROUTING call with the routing we
>> received.
>>
>> Signed-off-by: Tomi Valkeinen <tomi.valkeinen@xxxxxxxxxxxxxxxx>
>> Reviewed-by: Laurent Pinchart <laurent.pinchart+renesas@xxxxxxxxxxxxxxxx>
>> ---
>>  utils/v4l2-compliance/v4l2-compliance.cpp   | 12 ++++++++++++
>>  utils/v4l2-compliance/v4l2-compliance.h     |  1 +
>>  utils/v4l2-compliance/v4l2-test-subdevs.cpp | 16 ++++++++++++++++
>>  3 files changed, 29 insertions(+)
>>
>> diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp b/utils/v4l2-compliance/v4l2-compliance.cpp
>> index d7c10482..f082f569 100644
>> --- a/utils/v4l2-compliance/v4l2-compliance.cpp
>> +++ b/utils/v4l2-compliance/v4l2-compliance.cpp
>> @@ -1249,6 +1249,18 @@ void testNode(struct node &node, struct node &node_m2m_cap, struct node &expbuf_
>>  		node.is_passthrough_subdev = has_source && has_sink;
>>  
>>  		if (has_routes) {
>> +			printf("Sub-Device routing ioctls:\n");
>> +
>> +			for (unsigned which = V4L2_SUBDEV_FORMAT_TRY;
>> +				which <= V4L2_SUBDEV_FORMAT_ACTIVE; which++) {
>> +
>> +				printf("\ttest %s VIDIOC_SUBDEV_G_ROUTING/VIDIOC_SUBDEV_S_ROUTING: %s\n",
>> +				       which ? "Active" : "Try",
>> +				       ok(testSubDevRouting(&node, which)));
>> +			}
>> +
>> +			printf("\n");
>> +
>>  			for (unsigned which = V4L2_SUBDEV_FORMAT_TRY;
>>  				which <= V4L2_SUBDEV_FORMAT_ACTIVE; which++) {
>>  
>> diff --git a/utils/v4l2-compliance/v4l2-compliance.h b/utils/v4l2-compliance/v4l2-compliance.h
>> index 0cd43980..35b2274b 100644
>> --- a/utils/v4l2-compliance/v4l2-compliance.h
>> +++ b/utils/v4l2-compliance/v4l2-compliance.h
>> @@ -375,6 +375,7 @@ int testSubDevEnum(struct node *node, unsigned which, unsigned pad, unsigned str
>>  int testSubDevFormat(struct node *node, unsigned which, unsigned pad, unsigned stream);
>>  int testSubDevSelection(struct node *node, unsigned which, unsigned pad, unsigned stream);
>>  int testSubDevFrameInterval(struct node *node, unsigned pad, unsigned stream);
>> +int testSubDevRouting(struct node *node, unsigned which);
>>  
>>  // Buffer ioctl tests
>>  int testReqBufs(struct node *node);
>> diff --git a/utils/v4l2-compliance/v4l2-test-subdevs.cpp b/utils/v4l2-compliance/v4l2-test-subdevs.cpp
>> index 07192bda..962d9244 100644
>> --- a/utils/v4l2-compliance/v4l2-test-subdevs.cpp
>> +++ b/utils/v4l2-compliance/v4l2-test-subdevs.cpp
>> @@ -551,3 +551,19 @@ int testSubDevSelection(struct node *node, unsigned which, unsigned pad, unsigne
>>  
>>  	return have_sel ? 0 : ENOTTY;
>>  }
>> +
>> +int testSubDevRouting(struct node *node, unsigned which)
>> +{
>> +	struct v4l2_subdev_routing routing = {};
>> +	struct v4l2_subdev_route routes[256] = {};
> 
> NUM_ROUTES_MAX
> 
>> +
>> +	routing.which = which;
>> +	routing.routes = (__u64)&routes;
>> +	routing.num_routes = 256;
> 
> NUM_ROUTES_MAX

Actually, you should also test the corner cases of NUM_ROUTES_MAX + 1
(that should fail, right?) and setting num_routes to 0 and check that
ENOSPC is returned and num_routes is updated.

Also verify that 'reserved' is zeroed (i.e. set it to 0xff here, then
check for 0 after the ioctl).

Regards,

	Hans

> 
> Regards,
> 
> 	Hans
> 
>> +
>> +	fail_on_test(doioctl(node, VIDIOC_SUBDEV_G_ROUTING, &routing));
>> +
>> +	fail_on_test(doioctl(node, VIDIOC_SUBDEV_S_ROUTING, &routing));
>> +
>> +	return 0;
>> +}
> 




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

  Powered by Linux