xref: /aosp_15_r20/frameworks/native/include/android/bitmap.h (revision 38e8c45f13ce32b0dcecb25141ffecaf386fa17f)
1*38e8c45fSAndroid Build Coastguard Worker /*
2*38e8c45fSAndroid Build Coastguard Worker  * Copyright (C) 2009 The Android Open Source Project
3*38e8c45fSAndroid Build Coastguard Worker  *
4*38e8c45fSAndroid Build Coastguard Worker  * Licensed under the Apache License, Version 2.0 (the "License");
5*38e8c45fSAndroid Build Coastguard Worker  * you may not use this file except in compliance with the License.
6*38e8c45fSAndroid Build Coastguard Worker  * You may obtain a copy of the License at
7*38e8c45fSAndroid Build Coastguard Worker  *
8*38e8c45fSAndroid Build Coastguard Worker  *      http://www.apache.org/licenses/LICENSE-2.0
9*38e8c45fSAndroid Build Coastguard Worker  *
10*38e8c45fSAndroid Build Coastguard Worker  * Unless required by applicable law or agreed to in writing, software
11*38e8c45fSAndroid Build Coastguard Worker  * distributed under the License is distributed on an "AS IS" BASIS,
12*38e8c45fSAndroid Build Coastguard Worker  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13*38e8c45fSAndroid Build Coastguard Worker  * See the License for the specific language governing permissions and
14*38e8c45fSAndroid Build Coastguard Worker  * limitations under the License.
15*38e8c45fSAndroid Build Coastguard Worker  */
16*38e8c45fSAndroid Build Coastguard Worker 
17*38e8c45fSAndroid Build Coastguard Worker /**
18*38e8c45fSAndroid Build Coastguard Worker  * @addtogroup Bitmap
19*38e8c45fSAndroid Build Coastguard Worker  * @{
20*38e8c45fSAndroid Build Coastguard Worker  */
21*38e8c45fSAndroid Build Coastguard Worker 
22*38e8c45fSAndroid Build Coastguard Worker /**
23*38e8c45fSAndroid Build Coastguard Worker  * @file bitmap.h
24*38e8c45fSAndroid Build Coastguard Worker  */
25*38e8c45fSAndroid Build Coastguard Worker 
26*38e8c45fSAndroid Build Coastguard Worker #ifndef ANDROID_BITMAP_H
27*38e8c45fSAndroid Build Coastguard Worker #define ANDROID_BITMAP_H
28*38e8c45fSAndroid Build Coastguard Worker 
29*38e8c45fSAndroid Build Coastguard Worker #include <stdbool.h>
30*38e8c45fSAndroid Build Coastguard Worker #include <stdint.h>
31*38e8c45fSAndroid Build Coastguard Worker #include <stddef.h>
32*38e8c45fSAndroid Build Coastguard Worker #include <jni.h>
33*38e8c45fSAndroid Build Coastguard Worker 
34*38e8c45fSAndroid Build Coastguard Worker #if !defined(__INTRODUCED_IN)
35*38e8c45fSAndroid Build Coastguard Worker #define __INTRODUCED_IN(__api_level) /* nothing */
36*38e8c45fSAndroid Build Coastguard Worker #endif
37*38e8c45fSAndroid Build Coastguard Worker 
38*38e8c45fSAndroid Build Coastguard Worker #ifdef __cplusplus
39*38e8c45fSAndroid Build Coastguard Worker extern "C" {
40*38e8c45fSAndroid Build Coastguard Worker #endif
41*38e8c45fSAndroid Build Coastguard Worker 
42*38e8c45fSAndroid Build Coastguard Worker /** AndroidBitmap functions result code. */
43*38e8c45fSAndroid Build Coastguard Worker enum {
44*38e8c45fSAndroid Build Coastguard Worker     /** Operation was successful. */
45*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_RESULT_SUCCESS           = 0,
46*38e8c45fSAndroid Build Coastguard Worker     /** Bad parameter. */
47*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_RESULT_BAD_PARAMETER     = -1,
48*38e8c45fSAndroid Build Coastguard Worker     /** JNI exception occured. */
49*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_RESULT_JNI_EXCEPTION     = -2,
50*38e8c45fSAndroid Build Coastguard Worker     /** Allocation failed. */
51*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_RESULT_ALLOCATION_FAILED = -3,
52*38e8c45fSAndroid Build Coastguard Worker };
53*38e8c45fSAndroid Build Coastguard Worker 
54*38e8c45fSAndroid Build Coastguard Worker /** Backward compatibility: this macro used to be misspelled. */
55*38e8c45fSAndroid Build Coastguard Worker #define ANDROID_BITMAP_RESUT_SUCCESS ANDROID_BITMAP_RESULT_SUCCESS
56*38e8c45fSAndroid Build Coastguard Worker 
57*38e8c45fSAndroid Build Coastguard Worker /** Bitmap pixel format. */
58*38e8c45fSAndroid Build Coastguard Worker enum AndroidBitmapFormat {
59*38e8c45fSAndroid Build Coastguard Worker     /** No format. */
60*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FORMAT_NONE      = 0,
61*38e8c45fSAndroid Build Coastguard Worker     /** Red: 8 bits, Green: 8 bits, Blue: 8 bits, Alpha: 8 bits. **/
62*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FORMAT_RGBA_8888 = 1,
63*38e8c45fSAndroid Build Coastguard Worker     /** Red: 5 bits, Green: 6 bits, Blue: 5 bits. **/
64*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FORMAT_RGB_565   = 4,
65*38e8c45fSAndroid Build Coastguard Worker     /** Deprecated in API level 13. Because of the poor quality of this configuration, it is advised to use ARGB_8888 instead. **/
66*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FORMAT_RGBA_4444 = 7,
67*38e8c45fSAndroid Build Coastguard Worker     /** Alpha: 8 bits. */
68*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FORMAT_A_8       = 8,
69*38e8c45fSAndroid Build Coastguard Worker     /** Each component is stored as a half float. **/
70*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FORMAT_RGBA_F16  = 9,
71*38e8c45fSAndroid Build Coastguard Worker     /** Red: 10 bits, Green: 10 bits, Blue: 10 bits, Alpha: 2 bits. **/
72*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FORMAT_RGBA_1010102 = 10,
73*38e8c45fSAndroid Build Coastguard Worker };
74*38e8c45fSAndroid Build Coastguard Worker 
75*38e8c45fSAndroid Build Coastguard Worker /** Bitmap alpha format */
76*38e8c45fSAndroid Build Coastguard Worker enum {
77*38e8c45fSAndroid Build Coastguard Worker     /** Pixel components are premultiplied by alpha. */
78*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FLAGS_ALPHA_PREMUL   = 0,
79*38e8c45fSAndroid Build Coastguard Worker     /** Pixels are opaque. */
80*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FLAGS_ALPHA_OPAQUE   = 1,
81*38e8c45fSAndroid Build Coastguard Worker     /** Pixel components are independent of alpha. */
82*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FLAGS_ALPHA_UNPREMUL = 2,
83*38e8c45fSAndroid Build Coastguard Worker     /** Bit mask for AndroidBitmapFormat.flags to isolate the alpha. */
84*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FLAGS_ALPHA_MASK     = 0x3,
85*38e8c45fSAndroid Build Coastguard Worker     /** Shift for AndroidBitmapFormat.flags to isolate the alpha. */
86*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FLAGS_ALPHA_SHIFT    = 0,
87*38e8c45fSAndroid Build Coastguard Worker };
88*38e8c45fSAndroid Build Coastguard Worker 
89*38e8c45fSAndroid Build Coastguard Worker enum {
90*38e8c45fSAndroid Build Coastguard Worker     /** If this bit is set in AndroidBitmapInfo.flags, the Bitmap uses the
91*38e8c45fSAndroid Build Coastguard Worker       * HARDWARE Config, and its {@link AHardwareBuffer} can be retrieved via
92*38e8c45fSAndroid Build Coastguard Worker       * {@link AndroidBitmap_getHardwareBuffer}.
93*38e8c45fSAndroid Build Coastguard Worker       */
94*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_FLAGS_IS_HARDWARE = 1 << 31,
95*38e8c45fSAndroid Build Coastguard Worker };
96*38e8c45fSAndroid Build Coastguard Worker 
97*38e8c45fSAndroid Build Coastguard Worker /** Bitmap info, see AndroidBitmap_getInfo(). */
98*38e8c45fSAndroid Build Coastguard Worker typedef struct {
99*38e8c45fSAndroid Build Coastguard Worker     /** The bitmap width in pixels. */
100*38e8c45fSAndroid Build Coastguard Worker     uint32_t    width;
101*38e8c45fSAndroid Build Coastguard Worker     /** The bitmap height in pixels. */
102*38e8c45fSAndroid Build Coastguard Worker     uint32_t    height;
103*38e8c45fSAndroid Build Coastguard Worker     /** The number of byte per row. */
104*38e8c45fSAndroid Build Coastguard Worker     uint32_t    stride;
105*38e8c45fSAndroid Build Coastguard Worker     /** The bitmap pixel format. See {@link AndroidBitmapFormat} */
106*38e8c45fSAndroid Build Coastguard Worker     int32_t     format;
107*38e8c45fSAndroid Build Coastguard Worker     /** Bitfield containing information about the bitmap.
108*38e8c45fSAndroid Build Coastguard Worker      *
109*38e8c45fSAndroid Build Coastguard Worker      * <p>Two bits are used to encode alpha. Use {@link ANDROID_BITMAP_FLAGS_ALPHA_MASK}
110*38e8c45fSAndroid Build Coastguard Worker      * and {@link ANDROID_BITMAP_FLAGS_ALPHA_SHIFT} to retrieve them.</p>
111*38e8c45fSAndroid Build Coastguard Worker      *
112*38e8c45fSAndroid Build Coastguard Worker      * <p>One bit is used to encode whether the Bitmap uses the HARDWARE Config. Use
113*38e8c45fSAndroid Build Coastguard Worker      * {@link ANDROID_BITMAP_FLAGS_IS_HARDWARE} to know.</p>
114*38e8c45fSAndroid Build Coastguard Worker      *
115*38e8c45fSAndroid Build Coastguard Worker      * <p>These flags were introduced in API level 30.</p>
116*38e8c45fSAndroid Build Coastguard Worker      */
117*38e8c45fSAndroid Build Coastguard Worker     uint32_t    flags;
118*38e8c45fSAndroid Build Coastguard Worker } AndroidBitmapInfo;
119*38e8c45fSAndroid Build Coastguard Worker 
120*38e8c45fSAndroid Build Coastguard Worker /**
121*38e8c45fSAndroid Build Coastguard Worker  * Given a java bitmap object, fill out the {@link AndroidBitmapInfo} struct for it.
122*38e8c45fSAndroid Build Coastguard Worker  * If the call fails, the info parameter will be ignored.
123*38e8c45fSAndroid Build Coastguard Worker  */
124*38e8c45fSAndroid Build Coastguard Worker int AndroidBitmap_getInfo(JNIEnv* env, jobject jbitmap,
125*38e8c45fSAndroid Build Coastguard Worker                           AndroidBitmapInfo* info);
126*38e8c45fSAndroid Build Coastguard Worker 
127*38e8c45fSAndroid Build Coastguard Worker /**
128*38e8c45fSAndroid Build Coastguard Worker  * Given a java bitmap object, return its {@link ADataSpace}.
129*38e8c45fSAndroid Build Coastguard Worker  *
130*38e8c45fSAndroid Build Coastguard Worker  * Note that {@link ADataSpace} only exposes a few values. This may return
131*38e8c45fSAndroid Build Coastguard Worker  * {@link ADATASPACE_UNKNOWN}, even for Named ColorSpaces, if they have no
132*38e8c45fSAndroid Build Coastguard Worker  * corresponding ADataSpace.
133*38e8c45fSAndroid Build Coastguard Worker  *
134*38e8c45fSAndroid Build Coastguard Worker  * Available since API level 30.
135*38e8c45fSAndroid Build Coastguard Worker  */
136*38e8c45fSAndroid Build Coastguard Worker int32_t AndroidBitmap_getDataSpace(JNIEnv* env, jobject jbitmap)  __INTRODUCED_IN(30);
137*38e8c45fSAndroid Build Coastguard Worker 
138*38e8c45fSAndroid Build Coastguard Worker /**
139*38e8c45fSAndroid Build Coastguard Worker  * Given a java bitmap object, attempt to lock the pixel address.
140*38e8c45fSAndroid Build Coastguard Worker  * Locking will ensure that the memory for the pixels will not move
141*38e8c45fSAndroid Build Coastguard Worker  * until the unlockPixels call, and ensure that, if the pixels had been
142*38e8c45fSAndroid Build Coastguard Worker  * previously purged, they will have been restored.
143*38e8c45fSAndroid Build Coastguard Worker  *
144*38e8c45fSAndroid Build Coastguard Worker  * If this call succeeds, it must be balanced by a call to
145*38e8c45fSAndroid Build Coastguard Worker  * AndroidBitmap_unlockPixels, after which time the address of the pixels should
146*38e8c45fSAndroid Build Coastguard Worker  * no longer be used.
147*38e8c45fSAndroid Build Coastguard Worker  *
148*38e8c45fSAndroid Build Coastguard Worker  * If this succeeds, *addrPtr will be set to the pixel address. If the call
149*38e8c45fSAndroid Build Coastguard Worker  * fails, addrPtr will be ignored.
150*38e8c45fSAndroid Build Coastguard Worker  */
151*38e8c45fSAndroid Build Coastguard Worker int AndroidBitmap_lockPixels(JNIEnv* env, jobject jbitmap, void** addrPtr);
152*38e8c45fSAndroid Build Coastguard Worker 
153*38e8c45fSAndroid Build Coastguard Worker /**
154*38e8c45fSAndroid Build Coastguard Worker  * Call this to balance a successful call to AndroidBitmap_lockPixels.
155*38e8c45fSAndroid Build Coastguard Worker  */
156*38e8c45fSAndroid Build Coastguard Worker int AndroidBitmap_unlockPixels(JNIEnv* env, jobject jbitmap);
157*38e8c45fSAndroid Build Coastguard Worker 
158*38e8c45fSAndroid Build Coastguard Worker // Note: these values match android.graphics.Bitmap#compressFormat.
159*38e8c45fSAndroid Build Coastguard Worker 
160*38e8c45fSAndroid Build Coastguard Worker /**
161*38e8c45fSAndroid Build Coastguard Worker  *  Specifies the formats that can be compressed to with
162*38e8c45fSAndroid Build Coastguard Worker  *  {@link AndroidBitmap_compress}.
163*38e8c45fSAndroid Build Coastguard Worker  */
164*38e8c45fSAndroid Build Coastguard Worker enum AndroidBitmapCompressFormat {
165*38e8c45fSAndroid Build Coastguard Worker     /**
166*38e8c45fSAndroid Build Coastguard Worker      * Compress to the JPEG format. quality of 0 means
167*38e8c45fSAndroid Build Coastguard Worker      * compress for the smallest size. 100 means compress for max
168*38e8c45fSAndroid Build Coastguard Worker      * visual quality.
169*38e8c45fSAndroid Build Coastguard Worker      */
170*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_COMPRESS_FORMAT_JPEG = 0,
171*38e8c45fSAndroid Build Coastguard Worker     /**
172*38e8c45fSAndroid Build Coastguard Worker      * Compress to the PNG format. PNG is lossless, so quality is
173*38e8c45fSAndroid Build Coastguard Worker      * ignored.
174*38e8c45fSAndroid Build Coastguard Worker      */
175*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_COMPRESS_FORMAT_PNG = 1,
176*38e8c45fSAndroid Build Coastguard Worker     /**
177*38e8c45fSAndroid Build Coastguard Worker      * Compress to the WEBP lossy format. quality of 0 means
178*38e8c45fSAndroid Build Coastguard Worker      * compress for the smallest size. 100 means compress for max
179*38e8c45fSAndroid Build Coastguard Worker      * visual quality.
180*38e8c45fSAndroid Build Coastguard Worker      */
181*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_COMPRESS_FORMAT_WEBP_LOSSY = 3,
182*38e8c45fSAndroid Build Coastguard Worker     /**
183*38e8c45fSAndroid Build Coastguard Worker      * Compress to the WEBP lossless format. quality refers to how
184*38e8c45fSAndroid Build Coastguard Worker      * much effort to put into compression. A value of 0 means to
185*38e8c45fSAndroid Build Coastguard Worker      * compress quickly, resulting in a relatively large file size.
186*38e8c45fSAndroid Build Coastguard Worker      * 100 means to spend more time compressing, resulting in a
187*38e8c45fSAndroid Build Coastguard Worker      * smaller file.
188*38e8c45fSAndroid Build Coastguard Worker      */
189*38e8c45fSAndroid Build Coastguard Worker     ANDROID_BITMAP_COMPRESS_FORMAT_WEBP_LOSSLESS = 4,
190*38e8c45fSAndroid Build Coastguard Worker };
191*38e8c45fSAndroid Build Coastguard Worker 
192*38e8c45fSAndroid Build Coastguard Worker /**
193*38e8c45fSAndroid Build Coastguard Worker  *  User-defined function for writing the output of compression.
194*38e8c45fSAndroid Build Coastguard Worker  *
195*38e8c45fSAndroid Build Coastguard Worker  *  Available since API level 30.
196*38e8c45fSAndroid Build Coastguard Worker  *
197*38e8c45fSAndroid Build Coastguard Worker  *  @param userContext Pointer to user-defined data passed to
198*38e8c45fSAndroid Build Coastguard Worker  *         {@link AndroidBitmap_compress}.
199*38e8c45fSAndroid Build Coastguard Worker  *  @param data Compressed data of `size` bytes to write.
200*38e8c45fSAndroid Build Coastguard Worker  *  @param size Length in bytes of data to write.
201*38e8c45fSAndroid Build Coastguard Worker  *  @return Whether the operation succeeded.
202*38e8c45fSAndroid Build Coastguard Worker  */
203*38e8c45fSAndroid Build Coastguard Worker typedef bool (*AndroidBitmap_CompressWriteFunc)(void* userContext,
204*38e8c45fSAndroid Build Coastguard Worker                                                 const void* data,
205*38e8c45fSAndroid Build Coastguard Worker                                                 size_t size) __INTRODUCED_IN(30);
206*38e8c45fSAndroid Build Coastguard Worker 
207*38e8c45fSAndroid Build Coastguard Worker /**
208*38e8c45fSAndroid Build Coastguard Worker  *  Compress `pixels` as described by `info`.
209*38e8c45fSAndroid Build Coastguard Worker  *
210*38e8c45fSAndroid Build Coastguard Worker  *  Available since API level 30.
211*38e8c45fSAndroid Build Coastguard Worker  *
212*38e8c45fSAndroid Build Coastguard Worker  *  @param info Description of the pixels to compress.
213*38e8c45fSAndroid Build Coastguard Worker  *  @param dataspace {@link ADataSpace} describing the color space of the
214*38e8c45fSAndroid Build Coastguard Worker  *                   pixels.
215*38e8c45fSAndroid Build Coastguard Worker  *  @param pixels Pointer to pixels to compress.
216*38e8c45fSAndroid Build Coastguard Worker  *  @param format {@link AndroidBitmapCompressFormat} to compress to.
217*38e8c45fSAndroid Build Coastguard Worker  *  @param quality Hint to the compressor, 0-100. The value is interpreted
218*38e8c45fSAndroid Build Coastguard Worker  *                 differently depending on the
219*38e8c45fSAndroid Build Coastguard Worker  *                 {@link AndroidBitmapCompressFormat}.
220*38e8c45fSAndroid Build Coastguard Worker  *  @param userContext User-defined data which will be passed to the supplied
221*38e8c45fSAndroid Build Coastguard Worker  *                     {@link AndroidBitmap_CompressWriteFunc} each time it is
222*38e8c45fSAndroid Build Coastguard Worker  *                     called. May be null.
223*38e8c45fSAndroid Build Coastguard Worker  *  @param fn Function that writes the compressed data. Will be called each time
224*38e8c45fSAndroid Build Coastguard Worker  *            the compressor has compressed more data that is ready to be
225*38e8c45fSAndroid Build Coastguard Worker  *            written. May be called more than once for each call to this method.
226*38e8c45fSAndroid Build Coastguard Worker  *            May not be null.
227*38e8c45fSAndroid Build Coastguard Worker  *  @return AndroidBitmap functions result code.
228*38e8c45fSAndroid Build Coastguard Worker  */
229*38e8c45fSAndroid Build Coastguard Worker int AndroidBitmap_compress(const AndroidBitmapInfo* info,
230*38e8c45fSAndroid Build Coastguard Worker                            int32_t dataspace,
231*38e8c45fSAndroid Build Coastguard Worker                            const void* pixels,
232*38e8c45fSAndroid Build Coastguard Worker                            int32_t format, int32_t quality,
233*38e8c45fSAndroid Build Coastguard Worker                            void* userContext,
234*38e8c45fSAndroid Build Coastguard Worker                            AndroidBitmap_CompressWriteFunc fn) __INTRODUCED_IN(30);
235*38e8c45fSAndroid Build Coastguard Worker 
236*38e8c45fSAndroid Build Coastguard Worker struct AHardwareBuffer;
237*38e8c45fSAndroid Build Coastguard Worker typedef struct AHardwareBuffer AHardwareBuffer;
238*38e8c45fSAndroid Build Coastguard Worker 
239*38e8c45fSAndroid Build Coastguard Worker /**
240*38e8c45fSAndroid Build Coastguard Worker  *  Retrieve the native object associated with a HARDWARE Bitmap.
241*38e8c45fSAndroid Build Coastguard Worker  *
242*38e8c45fSAndroid Build Coastguard Worker  *  Client must not modify it while a Bitmap is wrapping it.
243*38e8c45fSAndroid Build Coastguard Worker  *
244*38e8c45fSAndroid Build Coastguard Worker  *  Available since API level 30.
245*38e8c45fSAndroid Build Coastguard Worker  *
246*38e8c45fSAndroid Build Coastguard Worker  *  @param env Handle to the JNI environment pointer.
247*38e8c45fSAndroid Build Coastguard Worker  *  @param bitmap Handle to an android.graphics.Bitmap.
248*38e8c45fSAndroid Build Coastguard Worker  *  @param outBuffer On success, is set to a pointer to the
249*38e8c45fSAndroid Build Coastguard Worker  *         {@link AHardwareBuffer} associated with bitmap. This acquires
250*38e8c45fSAndroid Build Coastguard Worker  *         a reference on the buffer, and the client must call
251*38e8c45fSAndroid Build Coastguard Worker  *         {@link AHardwareBuffer_release} when finished with it.
252*38e8c45fSAndroid Build Coastguard Worker  *  @return AndroidBitmap functions result code.
253*38e8c45fSAndroid Build Coastguard Worker  *          {@link ANDROID_BITMAP_RESULT_BAD_PARAMETER} if bitmap is not a
254*38e8c45fSAndroid Build Coastguard Worker  *          HARDWARE Bitmap.
255*38e8c45fSAndroid Build Coastguard Worker  */
256*38e8c45fSAndroid Build Coastguard Worker int AndroidBitmap_getHardwareBuffer(JNIEnv* env, jobject bitmap,
257*38e8c45fSAndroid Build Coastguard Worker         AHardwareBuffer** outBuffer) __INTRODUCED_IN(30);
258*38e8c45fSAndroid Build Coastguard Worker 
259*38e8c45fSAndroid Build Coastguard Worker #ifdef __cplusplus
260*38e8c45fSAndroid Build Coastguard Worker }
261*38e8c45fSAndroid Build Coastguard Worker #endif
262*38e8c45fSAndroid Build Coastguard Worker 
263*38e8c45fSAndroid Build Coastguard Worker #endif
264*38e8c45fSAndroid Build Coastguard Worker 
265*38e8c45fSAndroid Build Coastguard Worker /** @} */
266