Loading media/ndk/NdkImage.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <android_media_Utils.h> #include <private/android/AHardwareBufferHelpers.h> #include <ui/PublicFormat.h> #include <utils/Log.h> #include "hardware/camera3.h" Loading @@ -35,6 +36,8 @@ AImage::AImage(AImageReader* reader, int32_t format, uint64_t usage, BufferItem* int64_t timestamp, int32_t width, int32_t height, int32_t numPlanes) : mReader(reader), mFormat(format), mUsage(usage), mBuffer(buffer), mLockedBuffer(nullptr), mTimestamp(timestamp), mWidth(width), mHeight(height), mNumPlanes(numPlanes) { PublicFormat publicFormat = static_cast<PublicFormat>(format); mHalDataSpace = mapPublicFormatToHalDataspace(publicFormat); LOG_FATAL_IF(reader == nullptr, "AImageReader shouldn't be null while creating AImage"); } Loading Loading @@ -157,6 +160,20 @@ AImage::getTimestamp(int64_t* timestamp) const { return AMEDIA_OK; } media_status_t AImage::getDataSpace(android_dataspace* dataSpace) const { if (dataSpace == nullptr) { return AMEDIA_ERROR_INVALID_PARAMETER; } *dataSpace = static_cast<android_dataspace>(-1); if (isClosed()) { ALOGE("%s: image %p has been closed!", __FUNCTION__, this); return AMEDIA_ERROR_INVALID_OBJECT; } *dataSpace = mHalDataSpace; return AMEDIA_OK; } media_status_t AImage::lockImage() { if (mBuffer == nullptr || mBuffer->mGraphicBuffer == nullptr) { LOG_ALWAYS_FATAL("%s: AImage %p has no buffer.", __FUNCTION__, this); Loading Loading @@ -763,3 +780,15 @@ media_status_t AImage_getHardwareBuffer( } return image->getHardwareBuffer(buffer); } EXPORT media_status_t AImage_getDataSpace( const AImage* image, /*out*/int32_t* dataSpace) { ALOGV("%s", __FUNCTION__); if (image == nullptr || dataSpace == nullptr) { ALOGE("%s: bad argument. image %p dataSpace %p", __FUNCTION__, image, dataSpace); return AMEDIA_ERROR_INVALID_PARAMETER; } return image->getDataSpace((android_dataspace*)(dataSpace)); } No newline at end of file media/ndk/NdkImagePriv.h +2 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ struct AImage { media_status_t getPlaneRowStride(int planeIdx, /*out*/int32_t* rowStride) const; media_status_t getPlaneData(int planeIdx,/*out*/uint8_t** data, /*out*/int* dataLength) const; media_status_t getHardwareBuffer(/*out*/AHardwareBuffer** buffer) const; media_status_t getDataSpace(/*out*/android_dataspace* dataSpace) const; private: // AImage should be deleted through free() API. Loading @@ -101,6 +102,7 @@ struct AImage { const int32_t mWidth; const int32_t mHeight; const int32_t mNumPlanes; android_dataspace mHalDataSpace = HAL_DATASPACE_UNKNOWN; bool mIsClosed = false; mutable Mutex mLock; }; Loading media/ndk/NdkImageReader.cpp +61 −32 Original line number Diff line number Diff line Loading @@ -46,6 +46,9 @@ const char* AImageReader::kGraphicBufferKey = "GraphicBuffer"; static constexpr int kWindowHalTokenSizeMax = 256; static media_status_t validateParameters(int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages, /*out*/ AImageReader**& reader); static native_handle_t *convertHalTokenToNativeHandle(const HalToken &halToken); bool Loading Loading @@ -263,13 +266,17 @@ AImageReader::AImageReader(int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages) int32_t maxImages, uint32_t hardwareBufferFormat, android_dataspace dataSpace) : mWidth(width), mHeight(height), mFormat(format), mUsage(usage), mMaxImages(maxImages), mNumPlanes(getNumPlanesForFormat(format)), mHalFormat(hardwareBufferFormat), mHalDataSpace(dataSpace), mFrameListener(new FrameListener(this)), mBufferRemovedListener(new BufferRemovedListener(this)) {} Loading @@ -280,9 +287,6 @@ AImageReader::~AImageReader() { media_status_t AImageReader::init() { PublicFormat publicFormat = static_cast<PublicFormat>(mFormat); mHalFormat = mapPublicFormatToHalFormat(publicFormat); mHalDataSpace = mapPublicFormatToHalDataspace(publicFormat); mHalUsage = AHardwareBuffer_convertToGrallocUsageBits(mUsage); sp<IGraphicBufferProducer> gbProducer; Loading Loading @@ -646,6 +650,41 @@ AImageReader::acquireLatestImage(/*out*/AImage** image, /*out*/int* acquireFence } } static media_status_t validateParameters(int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages, /*out*/ AImageReader**& reader) { if (reader == nullptr) { ALOGE("%s: reader argument is null", __FUNCTION__); return AMEDIA_ERROR_INVALID_PARAMETER; } if (width < 1 || height < 1) { ALOGE("%s: image dimension must be positive: w:%d h:%d", __FUNCTION__, width, height); return AMEDIA_ERROR_INVALID_PARAMETER; } if (maxImages < 1) { ALOGE("%s: max outstanding image count must be at least 1 (%d)", __FUNCTION__, maxImages); return AMEDIA_ERROR_INVALID_PARAMETER; } if (maxImages > BufferQueueDefs::NUM_BUFFER_SLOTS) { ALOGE("%s: max outstanding image count (%d) cannot be larget than %d.", __FUNCTION__, maxImages, BufferQueueDefs::NUM_BUFFER_SLOTS); return AMEDIA_ERROR_INVALID_PARAMETER; } if (!AImageReader::isSupportedFormatAndUsage(format, usage)) { ALOGE("%s: format %d is not supported with usage 0x%" PRIx64 " by AImageReader", __FUNCTION__, format, usage); return AMEDIA_ERROR_INVALID_PARAMETER; } return AMEDIA_OK; } static native_handle_t *convertHalTokenToNativeHandle( const HalToken &halToken) { // We attempt to store halToken in the ints of the native_handle_t after its Loading Loading @@ -696,42 +735,32 @@ media_status_t AImageReader_getWindowNativeHandle( } //extern "C" EXPORT media_status_t AImageReader_newWithUsage( int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages, /*out*/ AImageReader** reader) { media_status_t AImageReader_newWithDataSpace( int32_t width, int32_t height, uint64_t usage, int32_t maxImages, uint32_t hardwareBufferFormat, int32_t dataSpace, /*out*/ AImageReader** reader) { ALOGV("%s", __FUNCTION__); if (width < 1 || height < 1) { ALOGE("%s: image dimension must be positive: w:%d h:%d", __FUNCTION__, width, height); return AMEDIA_ERROR_INVALID_PARAMETER; } if (maxImages < 1) { ALOGE("%s: max outstanding image count must be at least 1 (%d)", __FUNCTION__, maxImages); return AMEDIA_ERROR_INVALID_PARAMETER; android_dataspace halDataSpace = static_cast<android_dataspace>(dataSpace); int32_t format = static_cast<int32_t>( mapHalFormatDataspaceToPublicFormat(hardwareBufferFormat, halDataSpace)); return AImageReader_newWithUsage(width, height, format, usage, maxImages, reader); } if (maxImages > BufferQueueDefs::NUM_BUFFER_SLOTS) { ALOGE("%s: max outstanding image count (%d) cannot be larget than %d.", __FUNCTION__, maxImages, BufferQueueDefs::NUM_BUFFER_SLOTS); return AMEDIA_ERROR_INVALID_PARAMETER; } EXPORT media_status_t AImageReader_newWithUsage( int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages, /*out*/ AImageReader** reader) { ALOGV("%s", __FUNCTION__); if (!AImageReader::isSupportedFormatAndUsage(format, usage)) { ALOGE("%s: format %d is not supported with usage 0x%" PRIx64 " by AImageReader", __FUNCTION__, format, usage); return AMEDIA_ERROR_INVALID_PARAMETER; } validateParameters(width, height, format, usage, maxImages, reader); if (reader == nullptr) { ALOGE("%s: reader argument is null", __FUNCTION__); return AMEDIA_ERROR_INVALID_PARAMETER; } PublicFormat publicFormat = static_cast<PublicFormat>(format); uint32_t halFormat = mapPublicFormatToHalFormat(publicFormat); android_dataspace halDataSpace = mapPublicFormatToHalDataspace(publicFormat); AImageReader* tmpReader = new AImageReader( width, height, format, usage, maxImages); width, height, format, usage, maxImages, halFormat, halDataSpace); if (tmpReader == nullptr) { ALOGE("%s: AImageReader allocation failed", __FUNCTION__); return AMEDIA_ERROR_UNKNOWN; Loading media/ndk/NdkImageReaderPriv.h +8 −6 Original line number Diff line number Diff line Loading @@ -56,10 +56,12 @@ struct AImageReader : public RefBase { int32_t height, int32_t format, uint64_t usage, int32_t maxImages); int32_t maxImages, uint32_t hardwareBufferFormat, android_dataspace dataSpace); ~AImageReader(); // Inintialize AImageReader, uninitialized or failed to initialize AImageReader // Initialize AImageReader, uninitialized or failed to initialize AImageReader // should never be passed to application media_status_t init(); Loading @@ -79,7 +81,6 @@ struct AImageReader : public RefBase { void close(); private: friend struct AImage; // for grabing reader lock BufferItem* getBufferItemLocked(); Loading Loading @@ -118,13 +119,16 @@ struct AImageReader : public RefBase { const int32_t mWidth; const int32_t mHeight; const int32_t mFormat; int32_t mFormat; const uint64_t mUsage; // AHARDWAREBUFFER_USAGE_* flags. const int32_t mMaxImages; // TODO(jwcai) Seems completely unused in AImageReader class. const int32_t mNumPlanes; uint32_t mHalFormat = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM; android_dataspace mHalDataSpace = HAL_DATASPACE_UNKNOWN; struct FrameListener : public ConsumerBase::FrameAvailableListener { public: explicit FrameListener(AImageReader* parent) : mReader(parent) {} Loading Loading @@ -155,8 +159,6 @@ struct AImageReader : public RefBase { }; sp<BufferRemovedListener> mBufferRemovedListener; int mHalFormat; android_dataspace mHalDataSpace; uint64_t mHalUsage; sp<IGraphicBufferProducer> mProducer; Loading media/ndk/include/media/NdkImage.h +29 −10 Original line number Diff line number Diff line Loading @@ -583,7 +583,7 @@ void AImage_delete(AImage* image) __INTRODUCED_IN(24); * Available since API level 24. * * @param image the {@link AImage} of interest. * @param width the width of the image will be filled here if the method call succeeeds. * @param width the width of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -599,7 +599,7 @@ media_status_t AImage_getWidth(const AImage* image, /*out*/int32_t* width) __INT * Available since API level 24. * * @param image the {@link AImage} of interest. * @param height the height of the image will be filled here if the method call succeeeds. * @param height the height of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -617,7 +617,7 @@ media_status_t AImage_getHeight(const AImage* image, /*out*/int32_t* height) __I * Available since API level 24. * * @param image the {@link AImage} of interest. * @param format the format of the image will be filled here if the method call succeeeds. * @param format the format of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -636,7 +636,7 @@ media_status_t AImage_getFormat(const AImage* image, /*out*/int32_t* format) __I * Available since API level 24. * * @param image the {@link AImage} of interest. * @param rect the cropped rectangle of the image will be filled here if the method call succeeeds. * @param rect the cropped rectangle of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -662,7 +662,7 @@ media_status_t AImage_getCropRect(const AImage* image, /*out*/AImageCropRect* re * Available since API level 24. * * @param image the {@link AImage} of interest. * @param timestampNs the timestamp of the image will be filled here if the method call succeeeds. * @param timestampNs the timestamp of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -682,7 +682,7 @@ media_status_t AImage_getTimestamp(const AImage* image, /*out*/int64_t* timestam * * @param image the {@link AImage} of interest. * @param numPlanes the number of planes of the image will be filled here if the method call * succeeeds. * succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -706,7 +706,7 @@ media_status_t AImage_getNumberOfPlanes(const AImage* image, /*out*/int32_t* num * * @param image the {@link AImage} of interest. * @param planeIdx the index of the plane. Must be less than the number of planes of input image. * @param pixelStride the pixel stride of the image will be filled here if the method call succeeeds. * @param pixelStride the pixel stride of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading Loading @@ -735,7 +735,7 @@ media_status_t AImage_getPlanePixelStride( * * @param image the {@link AImage} of interest. * @param planeIdx the index of the plane. Must be less than the number of planes of input image. * @param rowStride the row stride of the image will be filled here if the method call succeeeds. * @param rowStride the row stride of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -762,8 +762,8 @@ media_status_t AImage_getPlaneRowStride( * * @param image the {@link AImage} of interest. * @param planeIdx the index of the plane. Must be less than the number of planes of input image. * @param data the data pointer of the image will be filled here if the method call succeeeds. * @param dataLength the valid length of data will be filled here if the method call succeeeds. * @param data the data pointer of the image will be filled here if the method call succeeds. * @param dataLength the valid length of data will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading Loading @@ -826,6 +826,25 @@ void AImage_deleteAsync(AImage* image, int releaseFenceFd) __INTRODUCED_IN(26); */ media_status_t AImage_getHardwareBuffer(const AImage* image, /*out*/AHardwareBuffer** buffer) __INTRODUCED_IN(26); /** * Query the dataspace of the input {@link AImage}. * * Available since API level 33. * * @param image the {@link AImage} of interest. * @param dataSpace the dataspace of the image will be filled here if the method call succeeds. * This must be one of the ADATASPACE_* enum value defined in * {@link ADataSpace}. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> * <li>{@link AMEDIA_ERROR_INVALID_PARAMETER} if image or dataSpace is NULL.</li> * <li>{@link AMEDIA_ERROR_INVALID_OBJECT} if the {@link AImageReader} generated this * image has been deleted.</li></ul> */ media_status_t AImage_getDataSpace(const AImage* image, /*out*/int32_t* dataSpace) __INTRODUCED_IN(33); __END_DECLS #endif //_NDK_IMAGE_H Loading Loading
media/ndk/NdkImage.cpp +29 −0 Original line number Diff line number Diff line Loading @@ -24,6 +24,7 @@ #include <android_media_Utils.h> #include <private/android/AHardwareBufferHelpers.h> #include <ui/PublicFormat.h> #include <utils/Log.h> #include "hardware/camera3.h" Loading @@ -35,6 +36,8 @@ AImage::AImage(AImageReader* reader, int32_t format, uint64_t usage, BufferItem* int64_t timestamp, int32_t width, int32_t height, int32_t numPlanes) : mReader(reader), mFormat(format), mUsage(usage), mBuffer(buffer), mLockedBuffer(nullptr), mTimestamp(timestamp), mWidth(width), mHeight(height), mNumPlanes(numPlanes) { PublicFormat publicFormat = static_cast<PublicFormat>(format); mHalDataSpace = mapPublicFormatToHalDataspace(publicFormat); LOG_FATAL_IF(reader == nullptr, "AImageReader shouldn't be null while creating AImage"); } Loading Loading @@ -157,6 +160,20 @@ AImage::getTimestamp(int64_t* timestamp) const { return AMEDIA_OK; } media_status_t AImage::getDataSpace(android_dataspace* dataSpace) const { if (dataSpace == nullptr) { return AMEDIA_ERROR_INVALID_PARAMETER; } *dataSpace = static_cast<android_dataspace>(-1); if (isClosed()) { ALOGE("%s: image %p has been closed!", __FUNCTION__, this); return AMEDIA_ERROR_INVALID_OBJECT; } *dataSpace = mHalDataSpace; return AMEDIA_OK; } media_status_t AImage::lockImage() { if (mBuffer == nullptr || mBuffer->mGraphicBuffer == nullptr) { LOG_ALWAYS_FATAL("%s: AImage %p has no buffer.", __FUNCTION__, this); Loading Loading @@ -763,3 +780,15 @@ media_status_t AImage_getHardwareBuffer( } return image->getHardwareBuffer(buffer); } EXPORT media_status_t AImage_getDataSpace( const AImage* image, /*out*/int32_t* dataSpace) { ALOGV("%s", __FUNCTION__); if (image == nullptr || dataSpace == nullptr) { ALOGE("%s: bad argument. image %p dataSpace %p", __FUNCTION__, image, dataSpace); return AMEDIA_ERROR_INVALID_PARAMETER; } return image->getDataSpace((android_dataspace*)(dataSpace)); } No newline at end of file
media/ndk/NdkImagePriv.h +2 −0 Original line number Diff line number Diff line Loading @@ -82,6 +82,7 @@ struct AImage { media_status_t getPlaneRowStride(int planeIdx, /*out*/int32_t* rowStride) const; media_status_t getPlaneData(int planeIdx,/*out*/uint8_t** data, /*out*/int* dataLength) const; media_status_t getHardwareBuffer(/*out*/AHardwareBuffer** buffer) const; media_status_t getDataSpace(/*out*/android_dataspace* dataSpace) const; private: // AImage should be deleted through free() API. Loading @@ -101,6 +102,7 @@ struct AImage { const int32_t mWidth; const int32_t mHeight; const int32_t mNumPlanes; android_dataspace mHalDataSpace = HAL_DATASPACE_UNKNOWN; bool mIsClosed = false; mutable Mutex mLock; }; Loading
media/ndk/NdkImageReader.cpp +61 −32 Original line number Diff line number Diff line Loading @@ -46,6 +46,9 @@ const char* AImageReader::kGraphicBufferKey = "GraphicBuffer"; static constexpr int kWindowHalTokenSizeMax = 256; static media_status_t validateParameters(int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages, /*out*/ AImageReader**& reader); static native_handle_t *convertHalTokenToNativeHandle(const HalToken &halToken); bool Loading Loading @@ -263,13 +266,17 @@ AImageReader::AImageReader(int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages) int32_t maxImages, uint32_t hardwareBufferFormat, android_dataspace dataSpace) : mWidth(width), mHeight(height), mFormat(format), mUsage(usage), mMaxImages(maxImages), mNumPlanes(getNumPlanesForFormat(format)), mHalFormat(hardwareBufferFormat), mHalDataSpace(dataSpace), mFrameListener(new FrameListener(this)), mBufferRemovedListener(new BufferRemovedListener(this)) {} Loading @@ -280,9 +287,6 @@ AImageReader::~AImageReader() { media_status_t AImageReader::init() { PublicFormat publicFormat = static_cast<PublicFormat>(mFormat); mHalFormat = mapPublicFormatToHalFormat(publicFormat); mHalDataSpace = mapPublicFormatToHalDataspace(publicFormat); mHalUsage = AHardwareBuffer_convertToGrallocUsageBits(mUsage); sp<IGraphicBufferProducer> gbProducer; Loading Loading @@ -646,6 +650,41 @@ AImageReader::acquireLatestImage(/*out*/AImage** image, /*out*/int* acquireFence } } static media_status_t validateParameters(int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages, /*out*/ AImageReader**& reader) { if (reader == nullptr) { ALOGE("%s: reader argument is null", __FUNCTION__); return AMEDIA_ERROR_INVALID_PARAMETER; } if (width < 1 || height < 1) { ALOGE("%s: image dimension must be positive: w:%d h:%d", __FUNCTION__, width, height); return AMEDIA_ERROR_INVALID_PARAMETER; } if (maxImages < 1) { ALOGE("%s: max outstanding image count must be at least 1 (%d)", __FUNCTION__, maxImages); return AMEDIA_ERROR_INVALID_PARAMETER; } if (maxImages > BufferQueueDefs::NUM_BUFFER_SLOTS) { ALOGE("%s: max outstanding image count (%d) cannot be larget than %d.", __FUNCTION__, maxImages, BufferQueueDefs::NUM_BUFFER_SLOTS); return AMEDIA_ERROR_INVALID_PARAMETER; } if (!AImageReader::isSupportedFormatAndUsage(format, usage)) { ALOGE("%s: format %d is not supported with usage 0x%" PRIx64 " by AImageReader", __FUNCTION__, format, usage); return AMEDIA_ERROR_INVALID_PARAMETER; } return AMEDIA_OK; } static native_handle_t *convertHalTokenToNativeHandle( const HalToken &halToken) { // We attempt to store halToken in the ints of the native_handle_t after its Loading Loading @@ -696,42 +735,32 @@ media_status_t AImageReader_getWindowNativeHandle( } //extern "C" EXPORT media_status_t AImageReader_newWithUsage( int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages, /*out*/ AImageReader** reader) { media_status_t AImageReader_newWithDataSpace( int32_t width, int32_t height, uint64_t usage, int32_t maxImages, uint32_t hardwareBufferFormat, int32_t dataSpace, /*out*/ AImageReader** reader) { ALOGV("%s", __FUNCTION__); if (width < 1 || height < 1) { ALOGE("%s: image dimension must be positive: w:%d h:%d", __FUNCTION__, width, height); return AMEDIA_ERROR_INVALID_PARAMETER; } if (maxImages < 1) { ALOGE("%s: max outstanding image count must be at least 1 (%d)", __FUNCTION__, maxImages); return AMEDIA_ERROR_INVALID_PARAMETER; android_dataspace halDataSpace = static_cast<android_dataspace>(dataSpace); int32_t format = static_cast<int32_t>( mapHalFormatDataspaceToPublicFormat(hardwareBufferFormat, halDataSpace)); return AImageReader_newWithUsage(width, height, format, usage, maxImages, reader); } if (maxImages > BufferQueueDefs::NUM_BUFFER_SLOTS) { ALOGE("%s: max outstanding image count (%d) cannot be larget than %d.", __FUNCTION__, maxImages, BufferQueueDefs::NUM_BUFFER_SLOTS); return AMEDIA_ERROR_INVALID_PARAMETER; } EXPORT media_status_t AImageReader_newWithUsage( int32_t width, int32_t height, int32_t format, uint64_t usage, int32_t maxImages, /*out*/ AImageReader** reader) { ALOGV("%s", __FUNCTION__); if (!AImageReader::isSupportedFormatAndUsage(format, usage)) { ALOGE("%s: format %d is not supported with usage 0x%" PRIx64 " by AImageReader", __FUNCTION__, format, usage); return AMEDIA_ERROR_INVALID_PARAMETER; } validateParameters(width, height, format, usage, maxImages, reader); if (reader == nullptr) { ALOGE("%s: reader argument is null", __FUNCTION__); return AMEDIA_ERROR_INVALID_PARAMETER; } PublicFormat publicFormat = static_cast<PublicFormat>(format); uint32_t halFormat = mapPublicFormatToHalFormat(publicFormat); android_dataspace halDataSpace = mapPublicFormatToHalDataspace(publicFormat); AImageReader* tmpReader = new AImageReader( width, height, format, usage, maxImages); width, height, format, usage, maxImages, halFormat, halDataSpace); if (tmpReader == nullptr) { ALOGE("%s: AImageReader allocation failed", __FUNCTION__); return AMEDIA_ERROR_UNKNOWN; Loading
media/ndk/NdkImageReaderPriv.h +8 −6 Original line number Diff line number Diff line Loading @@ -56,10 +56,12 @@ struct AImageReader : public RefBase { int32_t height, int32_t format, uint64_t usage, int32_t maxImages); int32_t maxImages, uint32_t hardwareBufferFormat, android_dataspace dataSpace); ~AImageReader(); // Inintialize AImageReader, uninitialized or failed to initialize AImageReader // Initialize AImageReader, uninitialized or failed to initialize AImageReader // should never be passed to application media_status_t init(); Loading @@ -79,7 +81,6 @@ struct AImageReader : public RefBase { void close(); private: friend struct AImage; // for grabing reader lock BufferItem* getBufferItemLocked(); Loading Loading @@ -118,13 +119,16 @@ struct AImageReader : public RefBase { const int32_t mWidth; const int32_t mHeight; const int32_t mFormat; int32_t mFormat; const uint64_t mUsage; // AHARDWAREBUFFER_USAGE_* flags. const int32_t mMaxImages; // TODO(jwcai) Seems completely unused in AImageReader class. const int32_t mNumPlanes; uint32_t mHalFormat = AHARDWAREBUFFER_FORMAT_R8G8B8A8_UNORM; android_dataspace mHalDataSpace = HAL_DATASPACE_UNKNOWN; struct FrameListener : public ConsumerBase::FrameAvailableListener { public: explicit FrameListener(AImageReader* parent) : mReader(parent) {} Loading Loading @@ -155,8 +159,6 @@ struct AImageReader : public RefBase { }; sp<BufferRemovedListener> mBufferRemovedListener; int mHalFormat; android_dataspace mHalDataSpace; uint64_t mHalUsage; sp<IGraphicBufferProducer> mProducer; Loading
media/ndk/include/media/NdkImage.h +29 −10 Original line number Diff line number Diff line Loading @@ -583,7 +583,7 @@ void AImage_delete(AImage* image) __INTRODUCED_IN(24); * Available since API level 24. * * @param image the {@link AImage} of interest. * @param width the width of the image will be filled here if the method call succeeeds. * @param width the width of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -599,7 +599,7 @@ media_status_t AImage_getWidth(const AImage* image, /*out*/int32_t* width) __INT * Available since API level 24. * * @param image the {@link AImage} of interest. * @param height the height of the image will be filled here if the method call succeeeds. * @param height the height of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -617,7 +617,7 @@ media_status_t AImage_getHeight(const AImage* image, /*out*/int32_t* height) __I * Available since API level 24. * * @param image the {@link AImage} of interest. * @param format the format of the image will be filled here if the method call succeeeds. * @param format the format of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -636,7 +636,7 @@ media_status_t AImage_getFormat(const AImage* image, /*out*/int32_t* format) __I * Available since API level 24. * * @param image the {@link AImage} of interest. * @param rect the cropped rectangle of the image will be filled here if the method call succeeeds. * @param rect the cropped rectangle of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -662,7 +662,7 @@ media_status_t AImage_getCropRect(const AImage* image, /*out*/AImageCropRect* re * Available since API level 24. * * @param image the {@link AImage} of interest. * @param timestampNs the timestamp of the image will be filled here if the method call succeeeds. * @param timestampNs the timestamp of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -682,7 +682,7 @@ media_status_t AImage_getTimestamp(const AImage* image, /*out*/int64_t* timestam * * @param image the {@link AImage} of interest. * @param numPlanes the number of planes of the image will be filled here if the method call * succeeeds. * succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -706,7 +706,7 @@ media_status_t AImage_getNumberOfPlanes(const AImage* image, /*out*/int32_t* num * * @param image the {@link AImage} of interest. * @param planeIdx the index of the plane. Must be less than the number of planes of input image. * @param pixelStride the pixel stride of the image will be filled here if the method call succeeeds. * @param pixelStride the pixel stride of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading Loading @@ -735,7 +735,7 @@ media_status_t AImage_getPlanePixelStride( * * @param image the {@link AImage} of interest. * @param planeIdx the index of the plane. Must be less than the number of planes of input image. * @param rowStride the row stride of the image will be filled here if the method call succeeeds. * @param rowStride the row stride of the image will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading @@ -762,8 +762,8 @@ media_status_t AImage_getPlaneRowStride( * * @param image the {@link AImage} of interest. * @param planeIdx the index of the plane. Must be less than the number of planes of input image. * @param data the data pointer of the image will be filled here if the method call succeeeds. * @param dataLength the valid length of data will be filled here if the method call succeeeds. * @param data the data pointer of the image will be filled here if the method call succeeds. * @param dataLength the valid length of data will be filled here if the method call succeeds. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> Loading Loading @@ -826,6 +826,25 @@ void AImage_deleteAsync(AImage* image, int releaseFenceFd) __INTRODUCED_IN(26); */ media_status_t AImage_getHardwareBuffer(const AImage* image, /*out*/AHardwareBuffer** buffer) __INTRODUCED_IN(26); /** * Query the dataspace of the input {@link AImage}. * * Available since API level 33. * * @param image the {@link AImage} of interest. * @param dataSpace the dataspace of the image will be filled here if the method call succeeds. * This must be one of the ADATASPACE_* enum value defined in * {@link ADataSpace}. * * @return <ul> * <li>{@link AMEDIA_OK} if the method call succeeds.</li> * <li>{@link AMEDIA_ERROR_INVALID_PARAMETER} if image or dataSpace is NULL.</li> * <li>{@link AMEDIA_ERROR_INVALID_OBJECT} if the {@link AImageReader} generated this * image has been deleted.</li></ul> */ media_status_t AImage_getDataSpace(const AImage* image, /*out*/int32_t* dataSpace) __INTRODUCED_IN(33); __END_DECLS #endif //_NDK_IMAGE_H Loading