Revision: 77369
http://sourceforge.net/p/brlcad/code/77369
Author: brlcad
Date: 2020-10-08 18:27:01 +0000 (Thu, 08 Oct 2020)
Log Message:
-----------
break the actual comparison out into a function since the main loop is getting
unwieldy
Modified Paths:
--------------
brlcad/trunk/bench/pixcmp.c
Modified: brlcad/trunk/bench/pixcmp.c
===================================================================
--- brlcad/trunk/bench/pixcmp.c 2020-10-08 18:07:43 UTC (rev 77368)
+++ brlcad/trunk/bench/pixcmp.c 2020-10-08 18:27:01 UTC (rev 77369)
@@ -51,7 +51,7 @@
#define EXIT_OFF_BY_ONE 1
#define EXIT_OFF_BY_MANY 2
-enum label {
+enum diff {
MATCHING,
OFF_BY_ONE,
OFF_BY_MANY,
@@ -140,6 +140,60 @@
}
+HIDDEN enum diff
+compare(int r1, int g1, int b1, int r2, int g2, int b2, size_t *matching,
size_t *off1, size_t *offmany, size_t *missing)
+{
+ enum diff result = MISSING;
+
+ if ((r1 == r2 && r1 != -1)
+ && (g1 == g2 && g1 != -1)
+ && (b1 == b2 && b1 != -1))
+ {
+ result = MATCHING;
+ (*matching)++;
+ } else if (r1 == -1 || r2 == -1 || g1 == -1 || g2 == -1 || b1 == -1 || b2
== -1) {
+ /* image sizes don't match (or other I/O error) */
+ result = MISSING;
+ (*missing)++;
+ } else if (((r1 != r2) && (g1 == g2) && (b1 == b2))
+ || ((r1 == r2) && (g1 != g2) && (b1 == b2))
+ || ((r1 == r2) && (g1 == g2) && (b1 != b2)))
+ {
+ /* off by one channel */
+ if (r1 != r2) {
+ if ((r1 > r2 ? r1 - r2 : r2 - r1) > 1) {
+ result = OFF_BY_MANY;
+ (*offmany)++;
+ } else {
+ result = OFF_BY_ONE;
+ (*off1)++;
+ }
+ } else if (g1 != g2) {
+ if ((g1 > g2 ? g1 - g2 : g2 - g1) > 1) {
+ result = OFF_BY_MANY;
+ (*offmany)++;
+ } else {
+ result = OFF_BY_ONE;
+ (*off1)++;
+ }
+ } else if (b1 != b2) {
+ if ((b1 > b2 ? b1 - b2 : b2 - b1) > 1) {
+ result = OFF_BY_MANY;
+ (*offmany)++;
+ } else {
+ result = OFF_BY_ONE;
+ (*off1)++;
+ }
+ }
+ } else {
+ result = OFF_BY_MANY;
+ (*offmany)++;
+ }
+
+ return result;
+}
+
+
int
main(int argc, char *argv[])
{
@@ -351,10 +405,9 @@
/* iterate over the pixels/bytes in the files */
while (bytes < stop_after) {
- enum label result;
+ enum diff result;
int r1, r2, g1, g2, b1, b2;
r1 = r2 = g1 = g2 = b1 = b2 = -1;
- result = MISSING;
/* bu_log("\tbytes[%zu] < stop[%zu\n", bytes, stop_after); */
@@ -375,50 +428,7 @@
bytes++;
}
- if ((r1 == r2 && r1 != -1)
- && (g1 == g2 && g1 != -1)
- && (b1 == b2 && b1 != -1))
- {
- result = MATCHING;
- matching++;
- } else if (r1 == -1 || r2 == -1 || g1 == -1 || g2 == -1 || b1 == -1 ||
b2 == -1) {
- /* image sizes don't match (or other I/O error) */
- result = MISSING;
- missing++;
- } else if (((r1 != r2) && (g1 == g2) && (b1 == b2))
- || ((r1 == r2) && (g1 != g2) && (b1 == b2))
- || ((r1 == r2) && (g1 == g2) && (b1 != b2)))
- {
- /* off by one channel */
- if (r1 != r2) {
- if ((r1 > r2 ? r1 - r2 : r2 - r1) > 1) {
- result = OFF_BY_MANY;
- offmany++;
- } else {
- result = OFF_BY_ONE;
- off1++;
- }
- } else if (g1 != g2) {
- if ((g1 > g2 ? g1 - g2 : g2 - g1) > 1) {
- result = OFF_BY_MANY;
- offmany++;
- } else {
- result = OFF_BY_ONE;
- off1++;
- }
- } else if (b1 != b2) {
- if ((b1 > b2 ? b1 - b2 : b2 - b1) > 1) {
- result = OFF_BY_MANY;
- offmany++;
- } else {
- result = OFF_BY_ONE;
- off1++;
- }
- }
- } else {
- result = OFF_BY_MANY;
- offmany++;
- }
+ result = compare(r1, g1, b1, r2, g2, b2, &matching, &off1, &offmany,
&missing);
/* print them? */
if ((result==MATCHING && list_same)
This was sent by the SourceForge.net collaborative development platform, the
world's largest Open Source development site.
_______________________________________________
BRL-CAD Source Commits mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/brlcad-commits