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

Reply via email to