Loading media/ndk/NdkImageReader.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -655,6 +655,28 @@ AImageReader::acquireLatestImage(/*out*/AImage** image, /*out*/int* acquireFence } } media_status_t AImageReader::setUsage(uint64_t usage) { Mutex::Autolock _l(mLock); if (!mIsOpen || mBufferItemConsumer == nullptr) { ALOGE("not ready to perform setUsage()"); return AMEDIA_ERROR_INVALID_PARAMETER; } if (mUsage == usage) { return AMEDIA_OK; } uint64_t halUsage = AHardwareBuffer_convertToGrallocUsageBits(mUsage); status_t ret = mBufferItemConsumer->setConsumerUsageBits(halUsage); if (ret != OK) { ALOGE("setConsumerUsageBits() failed %d", ret); return AMEDIA_ERROR_UNKNOWN; } mUsage = usage; mHalUsage = halUsage; return AMEDIA_OK; } static media_status_t validateParameters(int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages, Loading Loading @@ -912,3 +934,14 @@ media_status_t AImageReader_setBufferRemovedListener( reader->setBufferRemovedListener(listener); return AMEDIA_OK; } EXPORT media_status_t AImageReader_setUsage( AImageReader *reader, uint64_t usage) { ALOGV("%s", __FUNCTION__); if (reader == nullptr) { ALOGE("%s: invalid argument! reader %p", __FUNCTION__, reader); return AMEDIA_ERROR_INVALID_PARAMETER; } return reader->setUsage(usage); } media/ndk/NdkImageReaderPriv.h +3 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <inttypes.h> #include <media/NdkImageReader.h> #include <media-vndk/VndkImageReader.h> #include <utils/List.h> #include <utils/Mutex.h> Loading Loading @@ -67,6 +68,7 @@ struct AImageReader : public RefBase { media_status_t setImageListener(AImageReader_ImageListener* listener); media_status_t setBufferRemovedListener(AImageReader_BufferRemovedListener* listener); media_status_t setUsage(uint64_t usage); media_status_t acquireNextImage(/*out*/AImage** image, /*out*/int* fenceFd); media_status_t acquireLatestImage(/*out*/AImage** image, /*out*/int* fenceFd); Loading Loading @@ -120,7 +122,7 @@ struct AImageReader : public RefBase { const int32_t mWidth; const int32_t mHeight; int32_t mFormat; const uint64_t mUsage; // AHARDWAREBUFFER_USAGE_* flags. uint64_t mUsage; // AHARDWAREBUFFER_USAGE_* flags. const int32_t mMaxImages; // TODO(jwcai) Seems completely unused in AImageReader class. Loading media/ndk/include/media-vndk/VndkImageReader.h 0 → 100644 +51 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _VNDK_IMAGE_READER_H #define _VNDK_IMAGE_READER_H // vndk is a superset of the NDK #include <media/NdkImageReader.h> __BEGIN_DECLS /** * Set the usage of this image reader. * * <p>Note that calling this method will replace the previously set usage.</p> * * <p>Note: This will trigger re-allocation, could cause producer failures mid-stream * if the new usage combination isn't supported, and thus should be avoided as much as * possible regardless.</p> * * Available since API level 36. * * @param reader The image reader of interest. * @param usage specifies how the consumer will access the AImage. * See {@link AImageReader_newWithUsage} parameter description for more details. * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> * <li>{@link AMEDIA_ERROR_INVALID_PARAMETER} if reader is NULL.</li> * <li>{@link AMEDIA_ERROR_UNKNOWN} if the method fails for some other reasons.</li></ul> * * @see AImage_getHardwareBuffer */ media_status_t AImageReader_setUsage( AImageReader* _Nonnull reader, uint64_t usage) __INTRODUCED_IN(36); __END_DECLS #endif //_VNDK_IMAGE_READER_H media/ndk/libmediandk.map.txt +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ LIBMEDIANDK { AImageReader_newWithDataSpace; # introduced=UpsideDownCake AImageReader_setBufferRemovedListener; # introduced=26 AImageReader_setImageListener; # introduced=24 AImageReader_setUsage; # introduced=36 llndk AImage_delete; # introduced=24 AImage_deleteAsync; # introduced=26 AImage_getCropRect; # introduced=24 Loading Loading
media/ndk/NdkImageReader.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -655,6 +655,28 @@ AImageReader::acquireLatestImage(/*out*/AImage** image, /*out*/int* acquireFence } } media_status_t AImageReader::setUsage(uint64_t usage) { Mutex::Autolock _l(mLock); if (!mIsOpen || mBufferItemConsumer == nullptr) { ALOGE("not ready to perform setUsage()"); return AMEDIA_ERROR_INVALID_PARAMETER; } if (mUsage == usage) { return AMEDIA_OK; } uint64_t halUsage = AHardwareBuffer_convertToGrallocUsageBits(mUsage); status_t ret = mBufferItemConsumer->setConsumerUsageBits(halUsage); if (ret != OK) { ALOGE("setConsumerUsageBits() failed %d", ret); return AMEDIA_ERROR_UNKNOWN; } mUsage = usage; mHalUsage = halUsage; return AMEDIA_OK; } static media_status_t validateParameters(int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages, Loading Loading @@ -912,3 +934,14 @@ media_status_t AImageReader_setBufferRemovedListener( reader->setBufferRemovedListener(listener); return AMEDIA_OK; } EXPORT media_status_t AImageReader_setUsage( AImageReader *reader, uint64_t usage) { ALOGV("%s", __FUNCTION__); if (reader == nullptr) { ALOGE("%s: invalid argument! reader %p", __FUNCTION__, reader); return AMEDIA_ERROR_INVALID_PARAMETER; } return reader->setUsage(usage); }
media/ndk/NdkImageReaderPriv.h +3 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ #include <inttypes.h> #include <media/NdkImageReader.h> #include <media-vndk/VndkImageReader.h> #include <utils/List.h> #include <utils/Mutex.h> Loading Loading @@ -67,6 +68,7 @@ struct AImageReader : public RefBase { media_status_t setImageListener(AImageReader_ImageListener* listener); media_status_t setBufferRemovedListener(AImageReader_BufferRemovedListener* listener); media_status_t setUsage(uint64_t usage); media_status_t acquireNextImage(/*out*/AImage** image, /*out*/int* fenceFd); media_status_t acquireLatestImage(/*out*/AImage** image, /*out*/int* fenceFd); Loading Loading @@ -120,7 +122,7 @@ struct AImageReader : public RefBase { const int32_t mWidth; const int32_t mHeight; int32_t mFormat; const uint64_t mUsage; // AHARDWAREBUFFER_USAGE_* flags. uint64_t mUsage; // AHARDWAREBUFFER_USAGE_* flags. const int32_t mMaxImages; // TODO(jwcai) Seems completely unused in AImageReader class. Loading
media/ndk/include/media-vndk/VndkImageReader.h 0 → 100644 +51 −0 Original line number Diff line number Diff line /* * Copyright (C) 2024 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #ifndef _VNDK_IMAGE_READER_H #define _VNDK_IMAGE_READER_H // vndk is a superset of the NDK #include <media/NdkImageReader.h> __BEGIN_DECLS /** * Set the usage of this image reader. * * <p>Note that calling this method will replace the previously set usage.</p> * * <p>Note: This will trigger re-allocation, could cause producer failures mid-stream * if the new usage combination isn't supported, and thus should be avoided as much as * possible regardless.</p> * * Available since API level 36. * * @param reader The image reader of interest. * @param usage specifies how the consumer will access the AImage. * See {@link AImageReader_newWithUsage} parameter description for more details. * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> * <li>{@link AMEDIA_ERROR_INVALID_PARAMETER} if reader is NULL.</li> * <li>{@link AMEDIA_ERROR_UNKNOWN} if the method fails for some other reasons.</li></ul> * * @see AImage_getHardwareBuffer */ media_status_t AImageReader_setUsage( AImageReader* _Nonnull reader, uint64_t usage) __INTRODUCED_IN(36); __END_DECLS #endif //_VNDK_IMAGE_READER_H
media/ndk/libmediandk.map.txt +1 −0 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ LIBMEDIANDK { AImageReader_newWithDataSpace; # introduced=UpsideDownCake AImageReader_setBufferRemovedListener; # introduced=26 AImageReader_setImageListener; # introduced=24 AImageReader_setUsage; # introduced=36 llndk AImage_delete; # introduced=24 AImage_deleteAsync; # introduced=26 AImage_getCropRect; # introduced=24 Loading