This is an automatic generated email to let you know that the following patch were queued at the http://git.linuxtv.org/v4l-utils.git tree:
Subject: v4l2-compliance: Add checks for ENODATA when settings/getting timings. Author: Hans Verkuil <[email protected]> Date: Mon Oct 1 10:54:44 2012 +0200 ENODATA should be returned if the API used for getting, changing, querying or enumerating the current video timings is not supported by the current input or output. Signed-off-by: Hans Verkuil <[email protected]> (cherry picked from commit 39205ca49ca1f1cc853852a1b307811317df2c43) Signed-off-by: Gregor Jasny <[email protected]> utils/v4l2-compliance/v4l2-compliance.cpp | 2 +- utils/v4l2-compliance/v4l2-compliance.h | 2 +- utils/v4l2-compliance/v4l2-test-io-config.cpp | 36 ++++++++++++++++++++----- 3 files changed, 31 insertions(+), 9 deletions(-) --- http://git.linuxtv.org/v4l-utils.git?a=commitdiff;h=139bbd1c1571ec76232c265a9075c374bed84603 diff --git a/utils/v4l2-compliance/v4l2-compliance.cpp b/utils/v4l2-compliance/v4l2-compliance.cpp index b839fde..c4ea8bf 100644 --- a/utils/v4l2-compliance/v4l2-compliance.cpp +++ b/utils/v4l2-compliance/v4l2-compliance.cpp @@ -651,7 +651,7 @@ int main(int argc, char **argv) printf("Input/Output configuration ioctls:\n"); printf("\ttest VIDIOC_ENUM/G/S/QUERY_STD: %s\n", ok(testStd(&node))); printf("\ttest VIDIOC_ENUM/G/S/QUERY_DV_PRESETS: %s\n", ok(testPresets(&node))); - printf("\ttest VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: %s\n", ok(testCustomTimings(&node))); + printf("\ttest VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: %s\n", ok(testTimings(&node))); printf("\ttest VIDIOC_DV_TIMINGS_CAP: %s\n", ok(testTimingsCap(&node))); printf("\n"); diff --git a/utils/v4l2-compliance/v4l2-compliance.h b/utils/v4l2-compliance/v4l2-compliance.h index 1008231..a6bc97b 100644 --- a/utils/v4l2-compliance/v4l2-compliance.h +++ b/utils/v4l2-compliance/v4l2-compliance.h @@ -176,7 +176,7 @@ int testJpegComp(struct node *node); // I/O configuration ioctl tests int testStd(struct node *node); int testPresets(struct node *node); -int testCustomTimings(struct node *node); +int testTimings(struct node *node); int testTimingsCap(struct node *node); // Format ioctl tests diff --git a/utils/v4l2-compliance/v4l2-test-io-config.cpp b/utils/v4l2-compliance/v4l2-test-io-config.cpp index 2b0a4d4..d1a555c 100644 --- a/utils/v4l2-compliance/v4l2-test-io-config.cpp +++ b/utils/v4l2-compliance/v4l2-test-io-config.cpp @@ -44,6 +44,8 @@ static int checkStd(struct node *node, bool has_std, v4l2_std_id mask, bool is_i return fail("STD cap set, but could not get standard\n"); if (!ret && !has_std) return fail("STD cap not set, but could still get a standard\n"); + if (ret != ENOTTY && ret != ENODATA && !has_std) + return fail("STD cap not set, but got wrong error code (%d)\n", ret); if (!ret && has_std) { if (std & ~mask) warn("current standard is invalid according to the standard mask\n"); @@ -89,6 +91,8 @@ static int checkStd(struct node *node, bool has_std, v4l2_std_id mask, bool is_i return fail("STD cap set, but no standards can be enumerated\n"); if (i && !has_std) return fail("STD cap was not set, but standards can be enumerated\n"); + if (ret != ENOTTY && ret != ENODATA && !has_std) + return fail("STD cap not set, but got wrong error code for enumeration (%d)\n", ret); if (std_mask & V4L2_STD_ATSC) return fail("STD mask contains ATSC standards. This is no longer supported\n"); if (has_std && std_mask != mask) @@ -97,6 +101,8 @@ static int checkStd(struct node *node, bool has_std, v4l2_std_id mask, bool is_i ret = doioctl(node, VIDIOC_QUERYSTD, &std); if (!ret && !has_std) return fail("STD cap was not set, but could still query standard\n"); + if (ret != ENOTTY && ret != ENODATA && !has_std) + return fail("STD cap not set, but got wrong error code for query (%d)\n", ret); if (ret != ENOTTY && !is_input) return fail("this is an output, but could still query standard\n"); if (!ret && is_input && (std & ~std_mask)) @@ -144,7 +150,7 @@ int testStd(struct node *node) return has_std ? 0 : ENOTTY; } -static int checkPresets(struct node *node, bool has_presets) +static int checkPresets(struct node *node, bool has_presets, bool is_input) { struct v4l2_dv_enum_preset enumpreset; struct v4l2_dv_preset preset; @@ -159,6 +165,8 @@ static int checkPresets(struct node *node, bool has_presets) return fail("PRESET cap set, but could not get current preset\n"); if (!ret && !has_presets) return fail("PRESET cap not set, but could still get a preset\n"); + if (ret != ENOTTY && ret != ENODATA && !has_presets) + return fail("PRESET cap not set, but got wrong error code (%d)\n", ret); if (preset.preset != V4L2_DV_INVALID) { ret = doioctl(node, VIDIOC_S_DV_PRESET, &preset); if (ret && has_presets) @@ -193,9 +201,15 @@ static int checkPresets(struct node *node, bool has_presets) return fail("PRESET cap set, but no presets can be enumerated\n"); if (i && !has_presets) return fail("PRESET cap was not set, but presets can be enumerated\n"); + if (ret != ENOTTY && ret != ENODATA && !has_presets) + return fail("PRESET cap not set, but got wrong error code for enumeration (%d)\n", ret); ret = doioctl(node, VIDIOC_QUERY_DV_PRESET, &preset); if (!ret && !has_presets) return fail("PRESET cap was not set, but could still query preset\n"); + if (ret != ENOTTY && ret != ENODATA && !has_presets) + return fail("PRESET cap not set, but got wrong error code for query (%d)\n", ret); + if (ret != ENOTTY && !is_input) + return fail("this is an output, but could still query preset\n"); return 0; } @@ -217,7 +231,7 @@ int testPresets(struct node *node) return fail("could not select input %d.\n", i); if (input.capabilities & V4L2_IN_CAP_PRESETS) has_presets = true; - if (checkPresets(node, input.capabilities & V4L2_IN_CAP_PRESETS)) + if (checkPresets(node, input.capabilities & V4L2_IN_CAP_PRESETS, true)) return fail("Presets failed for input %d.\n", i); } @@ -233,7 +247,7 @@ int testPresets(struct node *node) return fail("could not select output %d.\n", o); if (output.capabilities & V4L2_OUT_CAP_PRESETS) has_presets = true; - if (checkPresets(node, output.capabilities & V4L2_OUT_CAP_PRESETS)) + if (checkPresets(node, output.capabilities & V4L2_OUT_CAP_PRESETS, false)) return fail("Presets check failed for output %d.\n", o); } if (has_presets) @@ -241,7 +255,7 @@ int testPresets(struct node *node) return has_presets ? 0 : ENOTTY; } -static int checkTimings(struct node *node, bool has_timings) +static int checkTimings(struct node *node, bool has_timings, bool is_input) { struct v4l2_enum_dv_timings enumtimings; struct v4l2_dv_timings timings; @@ -254,6 +268,8 @@ static int checkTimings(struct node *node, bool has_timings) return fail("TIMINGS cap set, but could not get current timings\n"); if (!ret && !has_timings) return fail("TIMINGS cap not set, but could still get timings\n"); + if (ret != ENOTTY && ret != ENODATA && !has_timings) + return fail("TIMINGS cap not set, but got wrong error code (%d)\n", ret); for (i = 0; ; i++) { memset(&enumtimings, 0xff, sizeof(enumtimings)); @@ -271,13 +287,19 @@ static int checkTimings(struct node *node, bool has_timings) return fail("TIMINGS cap set, but no timings can be enumerated\n"); if (i && !has_timings) return fail("TIMINGS cap was not set, but timings can be enumerated\n"); + if (ret != ENOTTY && ret != ENODATA && !has_timings) + return fail("TIMINGS cap not set, but got wrong error code for enumeration (%d)\n", ret); ret = doioctl(node, VIDIOC_QUERY_DV_TIMINGS, &timings); if (!ret && !has_timings) return fail("TIMINGS cap was not set, but could still query timings\n"); + if (ret != ENOTTY && ret != ENODATA && !has_timings) + return fail("TIMINGS cap not set, but got wrong error code for query (%d)\n", ret); + if (ret != ENOTTY && !is_input) + return fail("this is an output, but could still query timings\n"); return 0; } -int testCustomTimings(struct node *node) +int testTimings(struct node *node) { int ret; unsigned i, o; @@ -295,7 +317,7 @@ int testCustomTimings(struct node *node) return fail("could not select input %d.\n", i); if (input.capabilities & V4L2_IN_CAP_DV_TIMINGS) has_timings = true; - if (checkTimings(node, input.capabilities & V4L2_IN_CAP_DV_TIMINGS)) + if (checkTimings(node, input.capabilities & V4L2_IN_CAP_DV_TIMINGS, true)) return fail("Timings failed for input %d.\n", i); } @@ -311,7 +333,7 @@ int testCustomTimings(struct node *node) return fail("could not select output %d.\n", o); if (output.capabilities & V4L2_OUT_CAP_DV_TIMINGS) has_timings = true; - if (checkTimings(node, output.capabilities & V4L2_OUT_CAP_DV_TIMINGS)) + if (checkTimings(node, output.capabilities & V4L2_OUT_CAP_DV_TIMINGS, false)) return fail("Timings check failed for output %d.\n", o); } return has_timings ? 0 : ENOTTY; _______________________________________________ linuxtv-commits mailing list [email protected] http://www.linuxtv.org/cgi-bin/mailman/listinfo/linuxtv-commits
