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

Commit bd8c5033 authored by Emilian Peev's avatar Emilian Peev
Browse files

Camera: Cache monitored tag options in service

Monitored camera tag dump options should be stored
by camera service and parsed during initialization of
each new camera client.

Bug: 71640311
Test: Camera CTS,
Manual using application
Change-Id: Id464fbaec40395e93969b90abbd07f0a5cd0dc30
parent f51cb695
Loading
Loading
Loading
Loading
+12 −1
Original line number Diff line number Diff line
@@ -67,6 +67,7 @@
#include "api1/Camera2Client.h"
#include "api2/CameraDeviceClient.h"
#include "utils/CameraTraces.h"
#include "utils/TagMonitor.h"

namespace {
    const char* kPermissionServiceName = "permission";
@@ -1413,7 +1414,7 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&
        LOG_ALWAYS_FATAL_IF(client.get() == nullptr, "%s: CameraService in invalid state",
                __FUNCTION__);

        err = client->initialize(mCameraProviderManager);
        err = client->initialize(mCameraProviderManager, mMonitorTags);
        if (err != OK) {
            ALOGE("%s: Could not initialize client from HAL.", __FUNCTION__);
            // Errors could be from the HAL module open call or from AppOpsManager
@@ -2688,6 +2689,16 @@ status_t CameraService::dump(int fd, const Vector<String16>& args) {
        dprintf(fd, "CameraStates in use, may be deadlocked\n");
    }

    int argSize = args.size();
    for (int i = 0; i < argSize; i++) {
        if (args[i] == TagMonitor::kMonitorOption) {
            if (i + 1 < argSize) {
                mMonitorTags = String8(args[i + 1]);
            }
            break;
        }
    }

    for (auto& state : mCameraStates) {
        String8 cameraId = state.first;

+5 −1
Original line number Diff line number Diff line
@@ -205,7 +205,8 @@ public:

    class BasicClient : public virtual RefBase {
    public:
        virtual status_t       initialize(sp<CameraProviderManager> manager) = 0;
        virtual status_t       initialize(sp<CameraProviderManager> manager,
                const String8& monitorTags) = 0;
        virtual binder::Status disconnect();

        // because we can't virtually inherit IInterface, which breaks
@@ -605,6 +606,9 @@ private:
    RingBuffer<String8> mEventLog;
    Mutex mLogLock;

    // The last monitored tags set by client
    String8 mMonitorTags;

    // Currently allowed user IDs
    std::set<userid_t> mAllowedUsers;

+4 −4
Original line number Diff line number Diff line
@@ -68,8 +68,8 @@ Camera2Client::Camera2Client(const sp<CameraService>& cameraService,
    mLegacyMode = legacyMode;
}

status_t Camera2Client::initialize(sp<CameraProviderManager> manager) {
    return initializeImpl(manager);
status_t Camera2Client::initialize(sp<CameraProviderManager> manager, const String8& monitorTags) {
    return initializeImpl(manager, monitorTags);
}

bool Camera2Client::isZslEnabledInStillTemplate() {
@@ -87,13 +87,13 @@ bool Camera2Client::isZslEnabledInStillTemplate() {
}

template<typename TProviderPtr>
status_t Camera2Client::initializeImpl(TProviderPtr providerPtr)
status_t Camera2Client::initializeImpl(TProviderPtr providerPtr, const String8& monitorTags)
{
    ATRACE_CALL();
    ALOGV("%s: Initializing client for camera %d", __FUNCTION__, mCameraId);
    status_t res;

    res = Camera2ClientBase::initialize(providerPtr);
    res = Camera2ClientBase::initialize(providerPtr, monitorTags);
    if (res != OK) {
        return res;
    }
+3 −2
Original line number Diff line number Diff line
@@ -100,7 +100,8 @@ public:

    virtual ~Camera2Client();

    virtual status_t initialize(sp<CameraProviderManager> manager) override;
    virtual status_t initialize(sp<CameraProviderManager> manager,
            const String8& monitorTags) override;

    virtual status_t dump(int fd, const Vector<String16>& args);

@@ -223,7 +224,7 @@ private:
    status_t overrideVideoSnapshotSize(Parameters &params);

    template<typename TProviderPtr>
    status_t initializeImpl(TProviderPtr providerPtr);
    status_t initializeImpl(TProviderPtr providerPtr, const String8& monitorTags);

    bool isZslEnabledInStillTemplate();
};
+2 −1
Original line number Diff line number Diff line
@@ -62,7 +62,8 @@ CameraClient::CameraClient(const sp<CameraService>& cameraService,
    LOG1("CameraClient::CameraClient X (pid %d, id %d)", callingPid, cameraId);
}

status_t CameraClient::initialize(sp<CameraProviderManager> manager) {
status_t CameraClient::initialize(sp<CameraProviderManager> manager,
        const String8& /*monitorTags*/) {
    int callingPid = getCallingPid();
    status_t res;

Loading