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. 4 5 #ifndef BASE_ANDROID_ANDROID_IMAGE_READER_ABI_H_ 6 #define BASE_ANDROID_ANDROID_IMAGE_READER_ABI_H_ 7 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 17 // 18 // Please refer to the API documentation for details: 19 // https://developer.android.com/ndk/reference/group/media (AIMage and 20 // AImageReader) 21 // https://developer.android.com/ndk/reference/group/native-activity 22 // (ANativeWindow) 23 24 #include <android/native_window.h> 25 #include <media/NdkMediaError.h> 26 27 #include <jni.h> 28 #include <stdint.h> 29 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 34 // namespace issues. 35 extern "C" { 36 37 // For AImage 38 typedef struct AHardwareBuffer AHardwareBuffer; 39 40 typedef struct AImage AImage; 41 42 typedef struct AImageCropRect { 43 int32_t left; 44 int32_t top; 45 int32_t right; 46 int32_t bottom; 47 } AImageCropRect; 48 49 enum AIMAGE_FORMATS { 50 AIMAGE_FORMAT_YUV_420_888 = 0x23, 51 AIMAGE_FORMAT_PRIVATE = 0x22 52 }; 53 54 using pAImage_delete = void (*)(AImage* image); 55 56 using pAImage_deleteAsync = void (*)(AImage* image, int releaseFenceFd); 57 58 using pAImage_getHardwareBuffer = media_status_t (*)(const AImage* image, 59 AHardwareBuffer** buffer); 60 61 using pAImage_getWidth = media_status_t (*)(const AImage* image, 62 int32_t* width); 63 64 using pAImage_getHeight = media_status_t (*)(const AImage* image, 65 int32_t* height); 66 67 using pAImage_getCropRect = media_status_t (*)(const AImage* image, 68 AImageCropRect* rect); 69 70 // For AImageReader 71 72 typedef struct AImageReader AImageReader; 73 74 typedef void (*AImageReader_ImageCallback)(void* context, AImageReader* reader); 75 76 typedef struct AImageReader_ImageListener { 77 void* context; 78 AImageReader_ImageCallback onImageAvailable; 79 } AImageReader_ImageListener; 80 81 using pAImageReader_newWithUsage = media_status_t (*)(int32_t width, 82 int32_t height, 83 int32_t format, 84 uint64_t usage, 85 int32_t maxImages, 86 AImageReader** reader); 87 88 using pAImageReader_setImageListener = 89 media_status_t (*)(AImageReader* reader, 90 AImageReader_ImageListener* listener); 91 92 using pAImageReader_delete = void (*)(AImageReader* reader); 93 94 using pAImageReader_getWindow = media_status_t (*)(AImageReader* reader, 95 ANativeWindow** window); 96 97 using pAImageReader_getFormat = media_status_t (*)(const AImageReader* reader, 98 int32_t* format); 99 100 using pAImageReader_acquireLatestImageAsync = 101 media_status_t (*)(AImageReader* reader, 102 AImage** image, 103 int* acquireFenceFd); 104 105 using pAImageReader_acquireNextImageAsync = 106 media_status_t (*)(AImageReader* reader, 107 AImage** image, 108 int* acquireFenceFd); 109 110 // For ANativeWindow 111 using pANativeWindow_toSurface = jobject (*)(JNIEnv* env, 112 ANativeWindow* window); 113 114 } // extern "C" 115 116 #endif // BASE_ANDROID_ANDROID_IMAGE_READER_ABI_H_ 117