12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394 |
- // Copyright 2018 The Chromium Authors. All rights reserved.
- // Use of this source code is governed by a BSD-style license that can be
- // found in the LICENSE file.
- #ifndef BASE_ANDROID_ANDROID_IMAGE_READER_COMPAT_H_
- #define BASE_ANDROID_ANDROID_IMAGE_READER_COMPAT_H_
- #include "base/android/android_image_reader_abi.h"
- #include "base/base_export.h"
- #include "base/macros.h"
- #include "base/no_destructor.h"
- namespace base {
- namespace android {
- // This class provides runtime support for working with AImage, AImageReader and
- // ANativeWindow objects on Android O systems without requiring building for the
- // Android O NDK level. Don't call GetInstance() unless IsSupported() returns
- // true.
- class BASE_EXPORT AndroidImageReader {
- public:
- // Thread safe GetInstance.
- static AndroidImageReader& GetInstance();
- // Check if the image reader usage is supported. This function returns TRUE
- // if android version is >=OREO, image reader support is not disabled and all
- // the required functions are loaded.
- bool IsSupported();
- // Some devices do not support more than 1 image to be acquired from the
- // AImageReader.(crbug.com/1051705). This method returns true for those
- // devices.
- static bool LimitAImageReaderMaxSizeToOne();
- // Naming convention of all the below functions are chosen to exactly match
- // the function names in the NDK.
- void AImage_delete(AImage* image);
- void AImage_deleteAsync(AImage* image, int releaseFenceFd);
- media_status_t AImage_getHardwareBuffer(const AImage* image,
- AHardwareBuffer** buffer);
- media_status_t AImage_getWidth(const AImage* image, int32_t* width);
- media_status_t AImage_getHeight(const AImage* image, int32_t* height);
- media_status_t AImage_getCropRect(const AImage* image, AImageCropRect* rect);
- media_status_t AImageReader_newWithUsage(int32_t width,
- int32_t height,
- int32_t format,
- uint64_t usage,
- int32_t maxImages,
- AImageReader** reader);
- media_status_t AImageReader_setImageListener(
- AImageReader* reader,
- AImageReader_ImageListener* listener);
- void AImageReader_delete(AImageReader* reader);
- media_status_t AImageReader_getFormat(const AImageReader* reader,
- int32_t* format);
- media_status_t AImageReader_getWindow(AImageReader* reader,
- ANativeWindow** window);
- media_status_t AImageReader_acquireLatestImageAsync(AImageReader* reader,
- AImage** image,
- int* acquireFenceFd);
- media_status_t AImageReader_acquireNextImageAsync(AImageReader* reader,
- AImage** image,
- int* acquireFenceFd);
- jobject ANativeWindow_toSurface(JNIEnv* env, ANativeWindow* window);
- private:
- friend class base::NoDestructor<AndroidImageReader>;
- AndroidImageReader();
- bool LoadFunctions();
- const bool is_supported_;
- pAImage_delete AImage_delete_;
- pAImage_deleteAsync AImage_deleteAsync_;
- pAImage_getHardwareBuffer AImage_getHardwareBuffer_;
- pAImage_getWidth AImage_getWidth_;
- pAImage_getHeight AImage_getHeight_;
- pAImage_getCropRect AImage_getCropRect_;
- pAImageReader_newWithUsage AImageReader_newWithUsage_;
- pAImageReader_setImageListener AImageReader_setImageListener_;
- pAImageReader_delete AImageReader_delete_;
- pAImageReader_getFormat AImageReader_getFormat_;
- pAImageReader_getWindow AImageReader_getWindow_;
- pAImageReader_acquireLatestImageAsync AImageReader_acquireLatestImageAsync_;
- pAImageReader_acquireNextImageAsync AImageReader_acquireNextImageAsync_;
- pANativeWindow_toSurface ANativeWindow_toSurface_;
- DISALLOW_COPY_AND_ASSIGN(AndroidImageReader);
- };
- } // namespace android
- } // namespace base
- #endif // BASE_ANDROID_ANDROID_IMAGE_READER_COMPAT_H_
|