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