1a696f5d667227365da732481770767dcb330dd23Mathias Agopian/*
2a696f5d667227365da732481770767dcb330dd23Mathias Agopian * Copyright (C) 2010 The Android Open Source Project
3a696f5d667227365da732481770767dcb330dd23Mathias Agopian *
4a696f5d667227365da732481770767dcb330dd23Mathias Agopian * Licensed under the Apache License, Version 2.0 (the "License");
5a696f5d667227365da732481770767dcb330dd23Mathias Agopian * you may not use this file except in compliance with the License.
6a696f5d667227365da732481770767dcb330dd23Mathias Agopian * You may obtain a copy of the License at
7a696f5d667227365da732481770767dcb330dd23Mathias Agopian *
8a696f5d667227365da732481770767dcb330dd23Mathias Agopian *      http://www.apache.org/licenses/LICENSE-2.0
9a696f5d667227365da732481770767dcb330dd23Mathias Agopian *
10a696f5d667227365da732481770767dcb330dd23Mathias Agopian * Unless required by applicable law or agreed to in writing, software
11a696f5d667227365da732481770767dcb330dd23Mathias Agopian * distributed under the License is distributed on an "AS IS" BASIS,
12a696f5d667227365da732481770767dcb330dd23Mathias Agopian * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13a696f5d667227365da732481770767dcb330dd23Mathias Agopian * See the License for the specific language governing permissions and
14a696f5d667227365da732481770767dcb330dd23Mathias Agopian * limitations under the License.
15a696f5d667227365da732481770767dcb330dd23Mathias Agopian */
16a696f5d667227365da732481770767dcb330dd23Mathias Agopian
17a696f5d667227365da732481770767dcb330dd23Mathias Agopianpackage android.graphics;
18a696f5d667227365da732481770767dcb330dd23Mathias Agopian
19058d0390a44f68b67788021bae9ca1775812997bMathias Agopianpublic class ImageFormat {
20525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    /*
21525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * these constants are chosen to be binary compatible with their previous
22525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * location in PixelFormat.java
23525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     */
24a696f5d667227365da732481770767dcb330dd23Mathias Agopian
25525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    public static final int UNKNOWN = 0;
26a696f5d667227365da732481770767dcb330dd23Mathias Agopian
27525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    /**
289184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * RGB format used for pictures encoded as RGB_565. See
29525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * {@link android.hardware.Camera.Parameters#setPictureFormat(int)}.
30525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     */
31525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    public static final int RGB_565 = 4;
32a696f5d667227365da732481770767dcb330dd23Mathias Agopian
33525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    /**
349184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * <p>Android YUV format.</p>
3558a7775d3e12efdc5aaaf19d0ac5e487d622cf36Mathias Agopian     *
369184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * <p>This format is exposed to software decoders and applications.</p>
3758a7775d3e12efdc5aaaf19d0ac5e487d622cf36Mathias Agopian     *
389184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * <p>YV12 is a 4:2:0 YCrCb planar format comprised of a WxH Y plane followed
399184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * by (W/2) x (H/2) Cr and Cb planes.</p>
4058a7775d3e12efdc5aaaf19d0ac5e487d622cf36Mathias Agopian     *
419184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * <p>This format assumes
429184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * <ul>
439184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * <li>an even width</li>
449184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * <li>an even height</li>
459184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * <li>a horizontal stride multiple of 16 pixels</li>
469184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * <li>a vertical stride equal to the height</li>
479184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * </ul>
489184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * </p>
4958a7775d3e12efdc5aaaf19d0ac5e487d622cf36Mathias Agopian     *
509184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * <pre> y_size = stride * height
51951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * c_stride = ALIGN(stride/2, 16)
52951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * c_size = c_stride * height/2
539184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * size = y_size + c_size * 2
549184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * cr_offset = y_size
559184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * cb_offset = y_size + c_size</pre>
5658a7775d3e12efdc5aaaf19d0ac5e487d622cf36Mathias Agopian     *
57951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * <p>This format is guaranteed to be supported for camera preview images since
589184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * API level 12; for earlier API versions, check
59525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * {@link android.hardware.Camera.Parameters#getSupportedPreviewFormats()}.
60951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     *
61951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * <p>Note that for camera preview callback use (see
62951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * {@link android.hardware.Camera#setPreviewCallback}), the
63951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * <var>stride</var> value is the smallest possible; that is, it is equal
64951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * to:
65951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     *
66951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * <pre>stride = ALIGN(width, 16)</pre>
67951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     *
68951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * @see android.hardware.Camera.Parameters#setPreviewCallback
69951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * @see android.hardware.Camera.Parameters#setPreviewFormat
70951516358e2841d2425f610bcd0175d9960135d2Eino-Ville Talvala     * @see android.hardware.Camera.Parameters#getSupportedPreviewFormats
719184ec307be30719b2b7bfc3fb3e0a1365ccdf73Eino-Ville Talvala     * </p>
72525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     */
73525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    public static final int YV12 = 0x32315659;
74a696f5d667227365da732481770767dcb330dd23Mathias Agopian
75525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    /**
76525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * YCbCr format, used for video. Whether this format is supported by the
77525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * camera hardware can be determined by
78525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * {@link android.hardware.Camera.Parameters#getSupportedPreviewFormats()}.
79525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     */
80525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    public static final int NV16 = 0x10;
81a696f5d667227365da732481770767dcb330dd23Mathias Agopian
82525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    /**
83525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * YCrCb format used for images, which uses the NV21 encoding format. This
84525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * is the default format for camera preview images, when not otherwise set
85525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * with {@link android.hardware.Camera.Parameters#setPreviewFormat(int)}.
86525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     */
87525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    public static final int NV21 = 0x11;
88a696f5d667227365da732481770767dcb330dd23Mathias Agopian
89525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    /**
90525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * YCbCr format used for images, which uses YUYV (YUY2) encoding format.
91525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * This is an alternative format for camera preview images. Whether this
92525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * format is supported by the camera hardware can be determined by
93525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * {@link android.hardware.Camera.Parameters#getSupportedPreviewFormats()}.
94525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     */
95525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    public static final int YUY2 = 0x14;
96a696f5d667227365da732481770767dcb330dd23Mathias Agopian
97525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    /**
98525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * Encoded formats. These are not necessarily supported by the hardware.
99525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     */
100525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    public static final int JPEG = 0x100;
101a696f5d667227365da732481770767dcb330dd23Mathias Agopian
102525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    /**
10370fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li     * Raw bayer format used for images, which is 10 bit precision samples
10470fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li     * stored in 16 bit words. The filter pattern is RGGB. Whether this format
10570fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li     * is supported by the camera hardware can be determined by
10670fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li     * {@link android.hardware.Camera.Parameters#getSupportedPreviewFormats()}.
10770fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li     *
10870fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li     * @hide
10970fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li     */
11070fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li    public static final int BAYER_RGGB = 0x200;
11170fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li
11270fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li    /**
113525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * Use this function to retrieve the number of bits per pixel of an
114525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * ImageFormat.
11570fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li     *
116525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * @param format
117525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     * @return the number of bits per pixel of the given format or -1 if the
118525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     *         format doesn't exist or is not supported.
119525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian     */
120525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    public static int getBitsPerPixel(int format) {
121525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian        switch (format) {
122525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian            case RGB_565:
123525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian                return 16;
124525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian            case NV16:
125525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian                return 16;
126525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian            case YUY2:
127525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian                return 16;
128525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian            case YV12:
129525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian                return 12;
130525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian            case NV21:
131525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian                return 12;
13270fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li            case BAYER_RGGB:
13370fb9085044c5e6f52c33c970d238b764cf2373bWu-cheng Li                return 16;
134525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian        }
135525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian        return -1;
136525af5d5b0fcd4de9bac2f4be016cdd2f3534a40Mathias Agopian    }
137a696f5d667227365da732481770767dcb330dd23Mathias Agopian}
138