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

Commit 2f68652a authored by Jayant Chowdhary's avatar Jayant Chowdhary
Browse files

Filter out metadata out of version tags from hidl cameraservice interface.



Tags which are in versions > vndk version used by vendor clients need to
be filtered out to avoid metadata invalidation in the receiving process.

Bug: 231517902

Test: make VtsHalCameraServiceV2_0TargetTest.cpp a vendor test, run it
      on a mixed build (sc-v2 vendor + T framework); without the CL,
      metadatata validation fails, with the CL metadata validation
      passes.

Test: Vendor testing

Change-Id: I08e823845fc171615a48fe9d7d1e0550367f873e
Signed-off-by: default avatarJayant Chowdhary <jchowdhary@google.com>
parent 63d2f56b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -92,9 +92,9 @@ cc_library_shared {
        "gui/RingBufferConsumer.cpp",
        "hidl/AidlCameraDeviceCallbacks.cpp",
        "hidl/AidlCameraServiceListener.cpp",
        "hidl/Convert.cpp",
        "hidl/HidlCameraDeviceUser.cpp",
        "hidl/HidlCameraService.cpp",
        "hidl/Utils.cpp",
        "utils/CameraServiceProxyWrapper.cpp",
        "utils/CameraThreadState.cpp",
        "utils/CameraTraces.cpp",
+9 −3
Original line number Diff line number Diff line
@@ -16,7 +16,7 @@
#include <hardware/camera.h>

#include <hidl/AidlCameraDeviceCallbacks.h>
#include <hidl/Convert.h>
#include <hidl/Utils.h>

namespace android {
namespace frameworks {
@@ -34,7 +34,7 @@ const char *H2BCameraDeviceCallbacks::kResultKey = "CaptureResult";

H2BCameraDeviceCallbacks::H2BCameraDeviceCallbacks(const sp<HalInterface>& base) : CBase(base) { }

bool H2BCameraDeviceCallbacks::initializeLooper() {
bool H2BCameraDeviceCallbacks::initializeLooper(int vndkVersion) {
    mCbLooper = new ALooper;
    mCbLooper->setName("cs-looper");
    status_t err = mCbLooper->start(/*runOnCallingThread*/ false, /*canCallJava*/ false,
@@ -43,7 +43,7 @@ bool H2BCameraDeviceCallbacks::initializeLooper() {
        ALOGE("Unable to start camera device callback looper");
        return false;
    }
    mHandler = new CallbackHandler(this);
    mHandler = new CallbackHandler(this, vndkVersion);
    mCbLooper->registerHandler(mHandler);
    return true;
}
@@ -144,6 +144,12 @@ void H2BCameraDeviceCallbacks::CallbackHandler::processResultMessage(

    // Convert Metadata into HCameraMetadata;
    FmqSizeOrMetadata hResult;
    using hardware::cameraservice::utils::conversion::filterVndkKeys;
    if (filterVndkKeys(mVndkVersion, result, /*isStatic*/false) != OK) {
        ALOGE("%s: filtering vndk keys from result failed, not sending onResultReceived callback",
                __FUNCTION__);
        return;
    }
    const camera_metadata_t *rawMetadata = result.getAndLock();
    converter->convertResultMetadataToHidl(rawMetadata, &hResult);
    result.unlock(rawMetadata);
+4 −2
Original line number Diff line number Diff line
@@ -61,7 +61,7 @@ struct H2BCameraDeviceCallbacks :

    ~H2BCameraDeviceCallbacks();

    bool initializeLooper();
    bool initializeLooper(int vndkVersion);

    virtual binder::Status onDeviceError(int32_t errorCode,
                                         const CaptureResultExtras& resultExtras) override;
@@ -103,10 +103,12 @@ struct H2BCameraDeviceCallbacks :
    struct CallbackHandler : public AHandler {
        public:
            void onMessageReceived(const sp<AMessage> &msg) override;
            CallbackHandler(H2BCameraDeviceCallbacks *converter) : mConverter(converter) { }
            CallbackHandler(H2BCameraDeviceCallbacks *converter, int vndkVersion) :
                    mConverter(converter), mVndkVersion(vndkVersion) { }
        private:
            void processResultMessage(sp<ResultWrapper> &resultWrapper);
            wp<H2BCameraDeviceCallbacks> mConverter = nullptr;
            int mVndkVersion = -1;
            Mutex mMetadataQueueLock;
    };

+1 −1
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@
 */

#include <hidl/AidlCameraServiceListener.h>
#include <hidl/Convert.h>
#include <hidl/Utils.h>

namespace android {
namespace frameworks {
+1 −1
Original line number Diff line number Diff line
@@ -20,8 +20,8 @@
#include <gui/bufferqueue/1.0/H2BGraphicBufferProducer.h>

#include <hidl/AidlCameraDeviceCallbacks.h>
#include <hidl/Convert.h>
#include <hidl/HidlCameraDeviceUser.h>
#include <hidl/Utils.h>
#include <android/hardware/camera/device/3.2/types.h>

namespace android {
Loading