This is an automatic generated email to let you know that the following patch 
were queued at the 
http://git.linuxtv.org/cgit.cgi/v4l-utils.git tree:

Subject: v4l2-compliance: improve codec command tests
Author:  Hans Verkuil <hverkuil-ci...@xs4all.nl>
Date:    Wed Apr 10 11:57:18 2019 +0200

The tests for the VIDIOC(_TRY)_EN/DECODER_CMD ioctls were not quite
in accordance to the spec. Update the tests.

Signed-off-by: Hans Verkuil <hverkuil-ci...@xs4all.nl>

 utils/v4l2-compliance/v4l2-test-codecs.cpp | 49 ++++++++++++++++++++++++++++--
 1 file changed, 46 insertions(+), 3 deletions(-)

---

http://git.linuxtv.org/cgit.cgi/v4l-utils.git/commit/?id=e8c422107cf837357375705eb6adc5e8a1cfebd5
diff --git a/utils/v4l2-compliance/v4l2-test-codecs.cpp 
b/utils/v4l2-compliance/v4l2-test-codecs.cpp
index 9cd530e3ef6b..3fd44c8b0d1c 100644
--- a/utils/v4l2-compliance/v4l2-test-codecs.cpp
+++ b/utils/v4l2-compliance/v4l2-test-codecs.cpp
@@ -35,13 +35,14 @@
 int testEncoder(struct node *node)
 {
        struct v4l2_encoder_cmd cmd;
+       bool is_encoder = node->codec_mask & STATEFUL_ENCODER;
        int ret;
 
        memset(&cmd, 0xff, sizeof(cmd));
        memset(&cmd.raw, 0, sizeof(cmd.raw));
        ret = doioctl(node, VIDIOC_ENCODER_CMD, &cmd);
        if (ret == ENOTTY) {
-               fail_on_test(node->codec_mask & STATEFUL_ENCODER);
+               fail_on_test(is_encoder);
                return ret;
        }
        fail_on_test(node->codec_mask & STATEFUL_DECODER);
@@ -49,18 +50,34 @@ int testEncoder(struct node *node)
        ret = doioctl(node, VIDIOC_TRY_ENCODER_CMD, &cmd);
        fail_on_test(ret == ENOTTY);
        fail_on_test(ret != EINVAL);
+
        cmd.cmd = V4L2_ENC_CMD_STOP;
+       cmd.flags = ~0U;
+       ret = doioctl(node, VIDIOC_TRY_ENCODER_CMD, &cmd);
+       fail_on_test(ret != 0);
+       fail_on_test(cmd.flags & ~V4L2_ENC_CMD_STOP_AT_GOP_END);
+       fail_on_test(is_encoder && cmd.flags);
        cmd.flags = 0;
        ret = doioctl(node, VIDIOC_TRY_ENCODER_CMD, &cmd);
        fail_on_test(ret != 0);
        ret = doioctl(node, VIDIOC_ENCODER_CMD, &cmd);
        fail_on_test(ret != 0);
+
+       cmd.cmd = V4L2_ENC_CMD_START;
+       cmd.flags = ~0U;
+       ret = doioctl(node, VIDIOC_TRY_ENCODER_CMD, &cmd);
+       fail_on_test(ret != 0);
+       fail_on_test(cmd.flags);
+
        cmd.cmd = V4L2_ENC_CMD_PAUSE;
        ret = doioctl(node, VIDIOC_ENCODER_CMD, &cmd);
        fail_on_test(ret != EPERM && ret != EINVAL);
+       fail_on_test(is_encoder && ret != EINVAL);
+
        cmd.cmd = V4L2_ENC_CMD_RESUME;
        ret = doioctl(node, VIDIOC_ENCODER_CMD, &cmd);
        fail_on_test(ret != EPERM && ret != EINVAL);
+       fail_on_test(is_encoder && ret != EINVAL);
        return 0;
 }
 
@@ -84,13 +101,14 @@ int testEncIndex(struct node *node)
 int testDecoder(struct node *node)
 {
        struct v4l2_decoder_cmd cmd;
+       bool is_decoder = node->codec_mask & STATEFUL_DECODER;
        int ret;
 
        memset(&cmd, 0xff, sizeof(cmd));
        memset(&cmd.raw, 0, sizeof(cmd.raw));
        ret = doioctl(node, VIDIOC_DECODER_CMD, &cmd);
        if (ret == ENOTTY) {
-               fail_on_test(node->codec_mask & STATEFUL_DECODER);
+               fail_on_test(is_decoder);
                return ret;
        }
        fail_on_test(node->codec_mask & STATEFUL_ENCODER);
@@ -98,18 +116,43 @@ int testDecoder(struct node *node)
        ret = doioctl(node, VIDIOC_TRY_DECODER_CMD, &cmd);
        fail_on_test(ret == ENOTTY);
        fail_on_test(ret != EINVAL);
+
        cmd.cmd = V4L2_DEC_CMD_STOP;
-       cmd.flags = V4L2_DEC_CMD_STOP_IMMEDIATELY;
+       cmd.flags = ~0;
        ret = doioctl(node, VIDIOC_TRY_DECODER_CMD, &cmd);
        fail_on_test(ret != 0);
+       fail_on_test(cmd.flags & ~(V4L2_DEC_CMD_STOP_TO_BLACK | 
V4L2_DEC_CMD_STOP_IMMEDIATELY));
+       fail_on_test(is_decoder && cmd.flags);
        ret = doioctl(node, VIDIOC_DECODER_CMD, &cmd);
        fail_on_test(ret != 0);
+
+       cmd.cmd = V4L2_DEC_CMD_START;
+       cmd.flags = ~0;
+       ret = doioctl(node, VIDIOC_TRY_DECODER_CMD, &cmd);
+       fail_on_test(ret);
+       fail_on_test(cmd.flags & ~V4L2_DEC_CMD_START_MUTE_AUDIO);
+       fail_on_test(is_decoder && cmd.flags);
+
+       cmd.cmd = V4L2_DEC_CMD_START;
+       cmd.flags = 0;
+       cmd.start.speed = ~0;
+       cmd.start.format = ~0U;
+       ret = doioctl(node, VIDIOC_TRY_DECODER_CMD, &cmd);
+       fail_on_test(ret);
+       fail_on_test(cmd.start.format == ~0U);
+       fail_on_test(cmd.start.speed == ~0);
+       fail_on_test(is_decoder && cmd.start.format);
+       fail_on_test(is_decoder && cmd.start.speed);
+
        cmd.cmd = V4L2_DEC_CMD_PAUSE;
        cmd.flags = 0;
        ret = doioctl(node, VIDIOC_DECODER_CMD, &cmd);
        fail_on_test(ret != EPERM && ret != EINVAL);
+       fail_on_test(is_decoder && ret != EINVAL);
+
        cmd.cmd = V4L2_DEC_CMD_RESUME;
        ret = doioctl(node, VIDIOC_DECODER_CMD, &cmd);
        fail_on_test(ret != EPERM && ret != EINVAL);
+       fail_on_test(is_decoder && ret != EINVAL);
        return 0;
 }

_______________________________________________
linuxtv-commits mailing list
linuxtv-commits@linuxtv.org
https://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits

Reply via email to