1package org.opencv.core;
2
3public final class CvType {
4
5    // type depth constants
6    public static final int
7            CV_8U = 0, CV_8S = 1,
8            CV_16U = 2, CV_16S = 3,
9            CV_32S = 4,
10            CV_32F = 5,
11            CV_64F = 6,
12            CV_USRTYPE1 = 7;
13
14    // predefined type constants
15    public static final int
16            CV_8UC1 = CV_8UC(1), CV_8UC2 = CV_8UC(2), CV_8UC3 = CV_8UC(3), CV_8UC4 = CV_8UC(4),
17            CV_8SC1 = CV_8SC(1), CV_8SC2 = CV_8SC(2), CV_8SC3 = CV_8SC(3), CV_8SC4 = CV_8SC(4),
18            CV_16UC1 = CV_16UC(1), CV_16UC2 = CV_16UC(2), CV_16UC3 = CV_16UC(3), CV_16UC4 = CV_16UC(4),
19            CV_16SC1 = CV_16SC(1), CV_16SC2 = CV_16SC(2), CV_16SC3 = CV_16SC(3), CV_16SC4 = CV_16SC(4),
20            CV_32SC1 = CV_32SC(1), CV_32SC2 = CV_32SC(2), CV_32SC3 = CV_32SC(3), CV_32SC4 = CV_32SC(4),
21            CV_32FC1 = CV_32FC(1), CV_32FC2 = CV_32FC(2), CV_32FC3 = CV_32FC(3), CV_32FC4 = CV_32FC(4),
22            CV_64FC1 = CV_64FC(1), CV_64FC2 = CV_64FC(2), CV_64FC3 = CV_64FC(3), CV_64FC4 = CV_64FC(4);
23
24    private static final int CV_CN_MAX = 512, CV_CN_SHIFT = 3, CV_DEPTH_MAX = (1 << CV_CN_SHIFT);
25
26    public static final int makeType(int depth, int channels) {
27        if (channels <= 0 || channels >= CV_CN_MAX) {
28            throw new java.lang.UnsupportedOperationException(
29                    "Channels count should be 1.." + (CV_CN_MAX - 1));
30        }
31        if (depth < 0 || depth >= CV_DEPTH_MAX) {
32            throw new java.lang.UnsupportedOperationException(
33                    "Data type depth should be 0.." + (CV_DEPTH_MAX - 1));
34        }
35        return (depth & (CV_DEPTH_MAX - 1)) + ((channels - 1) << CV_CN_SHIFT);
36    }
37
38    public static final int CV_8UC(int ch) {
39        return makeType(CV_8U, ch);
40    }
41
42    public static final int CV_8SC(int ch) {
43        return makeType(CV_8S, ch);
44    }
45
46    public static final int CV_16UC(int ch) {
47        return makeType(CV_16U, ch);
48    }
49
50    public static final int CV_16SC(int ch) {
51        return makeType(CV_16S, ch);
52    }
53
54    public static final int CV_32SC(int ch) {
55        return makeType(CV_32S, ch);
56    }
57
58    public static final int CV_32FC(int ch) {
59        return makeType(CV_32F, ch);
60    }
61
62    public static final int CV_64FC(int ch) {
63        return makeType(CV_64F, ch);
64    }
65
66    public static final int channels(int type) {
67        return (type >> CV_CN_SHIFT) + 1;
68    }
69
70    public static final int depth(int type) {
71        return type & (CV_DEPTH_MAX - 1);
72    }
73
74    public static final boolean isInteger(int type) {
75        return depth(type) < CV_32F;
76    }
77
78    public static final int ELEM_SIZE(int type) {
79        switch (depth(type)) {
80        case CV_8U:
81        case CV_8S:
82            return channels(type);
83        case CV_16U:
84        case CV_16S:
85            return 2 * channels(type);
86        case CV_32S:
87        case CV_32F:
88            return 4 * channels(type);
89        case CV_64F:
90            return 8 * channels(type);
91        default:
92            throw new java.lang.UnsupportedOperationException(
93                    "Unsupported CvType value: " + type);
94        }
95    }
96
97    public static final String typeToString(int type) {
98        String s;
99        switch (depth(type)) {
100        case CV_8U:
101            s = "CV_8U";
102            break;
103        case CV_8S:
104            s = "CV_8S";
105            break;
106        case CV_16U:
107            s = "CV_16U";
108            break;
109        case CV_16S:
110            s = "CV_16S";
111            break;
112        case CV_32S:
113            s = "CV_32S";
114            break;
115        case CV_32F:
116            s = "CV_32F";
117            break;
118        case CV_64F:
119            s = "CV_64F";
120            break;
121        case CV_USRTYPE1:
122            s = "CV_USRTYPE1";
123            break;
124        default:
125            throw new java.lang.UnsupportedOperationException(
126                    "Unsupported CvType value: " + type);
127        }
128
129        int ch = channels(type);
130        if (ch <= 4)
131            return s + "C" + ch;
132        else
133            return s + "C(" + ch + ")";
134    }
135
136}
137