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