Image.java revision af753a2dfc66c92bfcac64b77c7a4d89d9434ad8
1b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala/* 2b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Copyright (C) 2013 The Android Open Source Project 3b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 4b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Licensed under the Apache License, Version 2.0 (the "License"); 5b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * you may not use this file except in compliance with the License. 6b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * You may obtain a copy of the License at 7b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 8b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * http://www.apache.org/licenses/LICENSE-2.0 9b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 10b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Unless required by applicable law or agreed to in writing, software 11b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * distributed under the License is distributed on an "AS IS" BASIS, 12b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * See the License for the specific language governing permissions and 14b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * limitations under the License. 15b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 16b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 17b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvalapackage android.media; 18b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 19b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvalaimport android.graphics.ImageFormat; 20b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvalaimport java.nio.ByteBuffer; 21b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvalaimport java.lang.AutoCloseable; 22b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 23b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala/** 24b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>A single complete image buffer to use with a media source such as a 25b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * {@link MediaCodec} or a 262f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvala * {@link android.hardware.camera2.CameraDevice}.</p> 27b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 28b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>This class allows for efficient direct application access to the pixel 29b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * data of the Image through one or more 30b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * {@link java.nio.ByteBuffer ByteBuffers}. Each buffer is encapsulated in a 31b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * {@link Plane} that describes the layout of the pixel data in that plane. Due 32b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * to this direct access, and unlike the {@link android.graphics.Bitmap} class, 33b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Images are not directly usable as as UI resources.</p> 34b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 35b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>Since Images are often directly produced or consumed by hardware 36b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * components, they are a limited resource shared across the system, and should 37b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * be closed as soon as they are no longer needed.</p> 38b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 39b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>For example, when using the {@link ImageReader} class to read out Images 40b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * from various media sources, not closing old Image objects will prevent the 41b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * availability of new Images once 42b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * {@link ImageReader#getMaxImages the maximum outstanding image count} is 43b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * reached.</p> 44b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 45b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @see ImageReader 46b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 47212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun Hepublic interface Image extends AutoCloseable { 48b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 49b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Get the format for this image. This format determines the number of 50b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * ByteBuffers needed to represent the image, and the general layout of the 51b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * pixel data in each in ByteBuffer. 52b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 53b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * The format is one of the values from 54b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * {@link android.graphics.ImageFormat}. The mapping between the formats and 55b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * the planes is as follows: 56b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 57b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <table> 58af753a2dfc66c92bfcac64b77c7a4d89d9434ad8Zhijun He * <tr> 59af753a2dfc66c92bfcac64b77c7a4d89d9434ad8Zhijun He * <th>Format</th> 60af753a2dfc66c92bfcac64b77c7a4d89d9434ad8Zhijun He * <th>Plane count</th> 61af753a2dfc66c92bfcac64b77c7a4d89d9434ad8Zhijun He * <th>Layout details</th> 62af753a2dfc66c92bfcac64b77c7a4d89d9434ad8Zhijun He * </tr> 63b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <tr> 64b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <td>{@link android.graphics.ImageFormat#JPEG}</td> 65b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <td>1</td> 66b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <td>Compressed data, so row and pixel strides are 0. To uncompress, use 67b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * {@link android.graphics.BitmapFactory#decodeByteArray}.</td> 68b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * </tr> 69b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <tr> 70b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <td>{@link android.graphics.ImageFormat#YUV_420_888}</td> 71b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <td>3</td> 72b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <td>A luminance plane followed by the Cb and Cr chroma planes. 73b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * The chroma planes have half the width and height of the luminance 74b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * plane (4:2:0 subsampling). Each pixel sample in each plane has 8 bits. 75b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Each plane has its own row stride and pixel stride.</td> 76b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * </tr> 77b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <tr> 78b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <td>{@link android.graphics.ImageFormat#RAW_SENSOR}</td> 79b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <td>1</td> 80b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <td>A single plane of raw sensor image data, with 16 bits per color 81b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * sample. The details of the layout need to be queried from the source of 82b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * the raw sensor data, such as 832f1a2e423e0fbb64467d6fcfa4e82c6384f31210Eino-Ville Talvala * {@link android.hardware.camera2.CameraDevice}. 84b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * </td> 85b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * </tr> 86b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * </table> 87b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 88b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @see android.graphics.ImageFormat 89b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 90212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun He public int getFormat(); 91b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 92b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 93b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * The width of the image in pixels. For formats where some color channels 94b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * are subsampled, this is the width of the largest-resolution plane. 95b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 96212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun He public int getWidth(); 97b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 98b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 99b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * The height of the image in pixels. For formats where some color channels 100b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * are subsampled, this is the height of the largest-resolution plane. 101b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 102212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun He public int getHeight(); 103b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 104b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 105b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Get the timestamp associated with this frame. The timestamp is measured 106b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * in nanoseconds, and is monotonically increasing. However, the zero point 107b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * and whether the timestamp can be compared against other sources of time 108b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * or images depend on the source of this image. 109b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 110212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun He public long getTimestamp(); 111b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 112b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 113b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Get the array of pixel planes for this Image. The number of planes is 114b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * determined by the format of the Image. 115b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 116212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun He public Plane[] getPlanes(); 117b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 118b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 119b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * Free up this frame for reuse. After calling this method, calling any 120b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * methods on this Image will result in an IllegalStateException, and 121b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * attempting to read from ByteBuffers returned by an earlier 122b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * {@code Plane#getBuffer} call will have undefined behavior. 123b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 124212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun He public void close(); 125b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 126b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 127b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>A single color plane of image data.</p> 128b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 129b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>The number and meaning of the planes in an Image are determined by the 130b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * format of the Image.</p> 131b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 132b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>Once the Image has been closed, any access to the the plane's 133b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * ByteBuffer will fail.</p> 134b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 135b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @see #getFormat 136b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 137212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun He public interface Plane { 138b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 139b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>The row stride for this color plane, in bytes. 140b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 141b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>This is the distance between the start of two consecutive rows of 142b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * pixels in the image.</p> 143b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 144212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun He public int getRowStride(); 145b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 146b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>The distance between adjacent pixel samples, in bytes.</p> 147b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 148b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>This is the distance between two consecutive pixel values in a row 149b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * of pixels. It may be larger than the size of a single pixel to 150b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * account for interleaved image data or padded formats.</p> 151b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 152212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun He public int getPixelStride(); 153b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala /** 154b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * <p>Get a set of direct {@link java.nio.ByteBuffer byte buffers} 155b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * containing the frame data.</p> 156b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * 157b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala * @return the byte buffer containing the image data for this plane. 158b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala */ 159212e78df9eb3bfff069de01aa7820cf4201c5f82Zhijun He public ByteBuffer getBuffer(); 160b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala } 161b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala 162b2675542c2f414154125b534767ae0903fba581eEino-Ville Talvala} 163