1 // Copyright 2018 The Chromium Authors
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
5 #ifndef BASE_ANDROID_ANDROID_IMAGE_READER_ABI_H_
6 #define BASE_ANDROID_ANDROID_IMAGE_READER_ABI_H_
8 // Minimal binary interface definitions for AImage,AImageReader
9 // and ANativeWindow based on include/media/NdkImage.h,
10 // include/media/NdkImageReader.h and include/android/native_window_jni.h
11 // from the Android NDK for platform level 26+. This is only
12 // intended for use from the AndroidImageReader wrapper for building
13 // without NDK platform level support, it is not a general-use header
14 // and is not complete. Only the functions/data types which
15 // are currently needed by media/gpu/android/image_reader_gl_owner.h are
16 // included in this ABI
18 // Please refer to the API documentation for details:
19 // https://developer.android.com/ndk/reference/group/media (AIMage and
21 // https://developer.android.com/ndk/reference/group/native-activity
24 #include <android/native_window.h>
25 #include <media/NdkMediaError.h>
30 // Use "C" linkage to match the original header file. This isn't strictly
31 // required since the file is not declaring global functions, but the types
32 // should remain in the global namespace for compatibility, and it's a reminder
33 // that forward declarations elsewhere should use "extern "C" to avoid
38 typedef struct AHardwareBuffer AHardwareBuffer;
40 typedef struct AImage AImage;
42 typedef struct AImageCropRect {
50 AIMAGE_FORMAT_YUV_420_888 = 0x23,
51 AIMAGE_FORMAT_PRIVATE = 0x22
54 using pAImage_delete = void (*)(AImage* image);
56 using pAImage_deleteAsync = void (*)(AImage* image, int releaseFenceFd);
58 using pAImage_getHardwareBuffer = media_status_t (*)(const AImage* image,
59 AHardwareBuffer** buffer);
61 using pAImage_getWidth = media_status_t (*)(const AImage* image,
64 using pAImage_getHeight = media_status_t (*)(const AImage* image,
67 using pAImage_getCropRect = media_status_t (*)(const AImage* image,
68 AImageCropRect* rect);
72 typedef struct AImageReader AImageReader;
74 typedef void (*AImageReader_ImageCallback)(void* context, AImageReader* reader);
76 typedef struct AImageReader_ImageListener {
78 AImageReader_ImageCallback onImageAvailable;
79 } AImageReader_ImageListener;
81 using pAImageReader_newWithUsage = media_status_t (*)(int32_t width,
86 AImageReader** reader);
88 using pAImageReader_setImageListener =
89 media_status_t (*)(AImageReader* reader,
90 AImageReader_ImageListener* listener);
92 using pAImageReader_delete = void (*)(AImageReader* reader);
94 using pAImageReader_getWindow = media_status_t (*)(AImageReader* reader,
95 ANativeWindow** window);
97 using pAImageReader_getFormat = media_status_t (*)(const AImageReader* reader,
100 using pAImageReader_acquireLatestImageAsync =
101 media_status_t (*)(AImageReader* reader,
103 int* acquireFenceFd);
105 using pAImageReader_acquireNextImageAsync =
106 media_status_t (*)(AImageReader* reader,
108 int* acquireFenceFd);
111 using pANativeWindow_toSurface = jobject (*)(JNIEnv* env,
112 ANativeWindow* window);
116 #endif // BASE_ANDROID_ANDROID_IMAGE_READER_ABI_H_