Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2f9ad130 authored by Treehugger Robot's avatar Treehugger Robot Committed by Automerger Merge Worker
Browse files

Merge "AImageReader: Add setUsage() interface" into main am: 618208ac am: 8b9a6fc7

parents 4a435293 8b9a6fc7
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -678,6 +678,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,
@@ -935,3 +957,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);
}
+3 −1
Original line number Diff line number Diff line
@@ -20,6 +20,7 @@
#include <inttypes.h>

#include <media/NdkImageReader.h>
#include <media-vndk/VndkImageReader.h>

#include <utils/List.h>
#include <utils/Mutex.h>
@@ -68,6 +69,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);
@@ -121,7 +123,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.
+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
+1 −0
Original line number Diff line number Diff line
@@ -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