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_COMPAT_H_
6 #define BASE_ANDROID_ANDROID_IMAGE_READER_COMPAT_H_
8 #include "base/android/android_image_reader_abi.h"
9 #include "base/base_export.h"
10 #include "base/no_destructor.h"
15 // This class provides runtime support for working with AImage, AImageReader and
16 // ANativeWindow objects on Android O systems without requiring building for the
17 // Android O NDK level. Don't call GetInstance() unless IsSupported() returns
19 class BASE_EXPORT AndroidImageReader {
21 // Thread safe GetInstance.
22 static AndroidImageReader& GetInstance();
24 AndroidImageReader(const AndroidImageReader&) = delete;
25 AndroidImageReader& operator=(const AndroidImageReader&) = delete;
27 // Check if the image reader usage is supported. This function returns TRUE
28 // if android version is >=OREO, image reader support is not disabled and all
29 // the required functions are loaded.
32 // Naming convention of all the below functions are chosen to exactly match
33 // the function names in the NDK.
34 void AImage_delete(AImage* image);
35 void AImage_deleteAsync(AImage* image, int releaseFenceFd);
36 media_status_t AImage_getHardwareBuffer(const AImage* image,
37 AHardwareBuffer** buffer);
38 media_status_t AImage_getWidth(const AImage* image, int32_t* width);
39 media_status_t AImage_getHeight(const AImage* image, int32_t* height);
40 media_status_t AImage_getCropRect(const AImage* image, AImageCropRect* rect);
41 media_status_t AImageReader_newWithUsage(int32_t width,
46 AImageReader** reader);
47 media_status_t AImageReader_setImageListener(
49 AImageReader_ImageListener* listener);
50 void AImageReader_delete(AImageReader* reader);
51 media_status_t AImageReader_getFormat(const AImageReader* reader,
53 media_status_t AImageReader_getWindow(AImageReader* reader,
54 ANativeWindow** window);
55 media_status_t AImageReader_acquireLatestImageAsync(AImageReader* reader,
58 media_status_t AImageReader_acquireNextImageAsync(AImageReader* reader,
61 jobject ANativeWindow_toSurface(JNIEnv* env, ANativeWindow* window);
64 friend class base::NoDestructor<AndroidImageReader>;
69 const bool is_supported_;
70 pAImage_delete AImage_delete_;
71 pAImage_deleteAsync AImage_deleteAsync_;
72 pAImage_getHardwareBuffer AImage_getHardwareBuffer_;
73 pAImage_getWidth AImage_getWidth_;
74 pAImage_getHeight AImage_getHeight_;
75 pAImage_getCropRect AImage_getCropRect_;
76 pAImageReader_newWithUsage AImageReader_newWithUsage_;
77 pAImageReader_setImageListener AImageReader_setImageListener_;
78 pAImageReader_delete AImageReader_delete_;
79 pAImageReader_getFormat AImageReader_getFormat_;
80 pAImageReader_getWindow AImageReader_getWindow_;
81 pAImageReader_acquireLatestImageAsync AImageReader_acquireLatestImageAsync_;
82 pAImageReader_acquireNextImageAsync AImageReader_acquireNextImageAsync_;
83 pANativeWindow_toSurface ANativeWindow_toSurface_;
86 } // namespace android
89 #endif // BASE_ANDROID_ANDROID_IMAGE_READER_COMPAT_H_