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