Fix emulator build error
[platform/framework/web/chromium-efl.git] / base / android / android_image_reader_compat.h
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_COMPAT_H_
6 #define BASE_ANDROID_ANDROID_IMAGE_READER_COMPAT_H_
7
8 #include "base/android/android_image_reader_abi.h"
9 #include "base/base_export.h"
10 #include "base/no_destructor.h"
11
12 namespace base {
13 namespace android {
14
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
18 // true.
19 class BASE_EXPORT AndroidImageReader {
20  public:
21   // Thread safe GetInstance.
22   static AndroidImageReader& GetInstance();
23
24   AndroidImageReader(const AndroidImageReader&) = delete;
25   AndroidImageReader& operator=(const AndroidImageReader&) = delete;
26
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.
30   bool IsSupported();
31
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,
42                                            int32_t height,
43                                            int32_t format,
44                                            uint64_t usage,
45                                            int32_t maxImages,
46                                            AImageReader** reader);
47   media_status_t AImageReader_setImageListener(
48       AImageReader* reader,
49       AImageReader_ImageListener* listener);
50   void AImageReader_delete(AImageReader* reader);
51   media_status_t AImageReader_getFormat(const AImageReader* reader,
52                                         int32_t* format);
53   media_status_t AImageReader_getWindow(AImageReader* reader,
54                                         ANativeWindow** window);
55   media_status_t AImageReader_acquireLatestImageAsync(AImageReader* reader,
56                                                       AImage** image,
57                                                       int* acquireFenceFd);
58   media_status_t AImageReader_acquireNextImageAsync(AImageReader* reader,
59                                                     AImage** image,
60                                                     int* acquireFenceFd);
61   jobject ANativeWindow_toSurface(JNIEnv* env, ANativeWindow* window);
62
63  private:
64   friend class base::NoDestructor<AndroidImageReader>;
65
66   AndroidImageReader();
67   bool LoadFunctions();
68
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_;
84 };
85
86 }  // namespace android
87 }  // namespace base
88
89 #endif  // BASE_ANDROID_ANDROID_IMAGE_READER_COMPAT_H_