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

Commit af22e91e authored by Shuzhen Wang's avatar Shuzhen Wang
Browse files

Camera: Add debug command for zoom override

Add a "adb shell cmd" debug command to force SETTINGS_OVERRIDE_OFF or
SETTINGS_OVERRIDE_ZOOM. This makes testing of 3P apps easier.

Test: adb shell cmd media.camera set-zoom-override
Bug: 277789566
Change-Id: I398da9aa34eb028813072c56640bcd3e46f321e0
parent ef9e5dd8
Loading
Loading
Loading
Loading
+33 −0
Original line number Diff line number Diff line
@@ -2159,6 +2159,7 @@ Status CameraService::connectHelper(const sp<CALLBACK>& cameraCb, const String8&

        client->setImageDumpMask(mImageDumpMask);
        client->setStreamUseCaseOverrides(mStreamUseCaseOverrides);
        client->setZoomOverride(mZoomOverrideValue);
    } // lock is destroyed, allow further connect calls

    // Important: release the mutex here so the client can call back into the service from its
@@ -5123,6 +5124,8 @@ status_t CameraService::shellCommand(int in, int out, int err, const Vector<Stri
    } else if (args.size() >= 1 && args[0] == String16("clear-stream-use-case-override")) {
        handleClearStreamUseCaseOverrides();
        return OK;
    } else if (args.size() >= 1 && args[0] == String16("set-zoom-override")) {
        return handleSetZoomOverride(args);
    } else if (args.size() >= 2 && args[0] == String16("watch")) {
        return handleWatchCommand(args, in, out);
    } else if (args.size() >= 2 && args[0] == String16("set-watchdog")) {
@@ -5366,6 +5369,34 @@ void CameraService::handleClearStreamUseCaseOverrides() {
    mStreamUseCaseOverrides.clear();
}

status_t CameraService::handleSetZoomOverride(const Vector<String16>& args) {
    char* end;
    int zoomOverrideValue = strtol(String8(args[1]), &end, /*base=*/10);
    if ((*end != '\0') ||
            (zoomOverrideValue != -1 &&
             zoomOverrideValue != ANDROID_CONTROL_SETTINGS_OVERRIDE_OFF &&
             zoomOverrideValue != ANDROID_CONTROL_SETTINGS_OVERRIDE_ZOOM)) {
        return BAD_VALUE;
    }

    Mutex::Autolock lock(mServiceLock);
    mZoomOverrideValue = zoomOverrideValue;

    const auto clients = mActiveClientManager.getAll();
    for (auto& current : clients) {
        if (current != nullptr) {
            const auto basicClient = current->getValue();
            if (basicClient.get() != nullptr) {
                if (basicClient->supportsZoomOverride()) {
                    basicClient->setZoomOverride(mZoomOverrideValue);
                }
            }
        }
    }

    return OK;
}

status_t CameraService::handleWatchCommand(const Vector<String16>& args, int inFd, int outFd) {
    if (args.size() >= 3 && args[1] == String16("start")) {
        return startWatchingTags(args, outFd);
@@ -5732,6 +5763,8 @@ status_t CameraService::printHelp(int out) {
        "      Valid values are (case sensitive): DEFAULT, PREVIEW, STILL_CAPTURE, VIDEO_RECORD,\n"
        "      PREVIEW_VIDEO_STILL, VIDEO_CALL, CROPPED_RAW\n"
        "  clear-stream-use-case-override clear the stream use case override\n"
        "  set-zoom-override <-1/0/1> enable or disable zoom override\n"
        "      Valid values -1: do not override, 0: override to OFF, 1: override to ZOOM\n"
        "  watch <start|stop|dump|print|clear> manages tag monitoring in connected clients\n"
        "  help print this message\n");
}
+12 −0
Original line number Diff line number Diff line
@@ -371,6 +371,12 @@ public:
        // Clear stream use case overrides
        virtual void clearStreamUseCaseOverrides() = 0;

        // Whether the client supports camera zoom override
        virtual bool supportsZoomOverride() = 0;

        // Set/reset zoom override
        virtual status_t setZoomOverride(int32_t zoomOverride) = 0;

        // The injection camera session to replace the internal camera
        // session.
        virtual status_t injectCamera(const String8& injectedCamId,
@@ -1306,6 +1312,9 @@ private:
    // Clear the stream use case overrides
    void handleClearStreamUseCaseOverrides();

    // Set or clear the zoom override flag
    status_t handleSetZoomOverride(const Vector<String16>& args);

    // Handle 'watch' command as passed through 'cmd'
    status_t handleWatchCommand(const Vector<String16> &args, int inFd, int outFd);

@@ -1408,6 +1417,9 @@ private:
    // Current stream use case overrides
    std::vector<int64_t> mStreamUseCaseOverrides;

    // Current zoom override value
    int32_t mZoomOverrideValue = -1;

    /**
     * A listener class that implements the IBinder::DeathRecipient interface
     * for use to call back the error state injected by the external camera, and
+8 −0
Original line number Diff line number Diff line
@@ -2391,6 +2391,14 @@ void Camera2Client::clearStreamUseCaseOverrides() {
    mDevice->clearStreamUseCaseOverrides();
}

bool Camera2Client::supportsZoomOverride() {
    return mDevice->supportsZoomOverride();
}

status_t  Camera2Client::setZoomOverride(int zoomOverride) {
    return mDevice->setZoomOverride(zoomOverride);
}

status_t Camera2Client::waitUntilCurrentRequestIdLocked() {
    int32_t activeRequestId = mStreamingProcessor->getActiveRequestId();
    if (activeRequestId != 0) {
+3 −0
Original line number Diff line number Diff line
@@ -97,6 +97,9 @@ public:
                                    const std::vector<int64_t>& useCaseOverrides);
    virtual void            clearStreamUseCaseOverrides();

    virtual bool            supportsZoomOverride();
    virtual status_t        setZoomOverride(int32_t zoomOverride);

    /**
     * Interface used by CameraService
     */
+8 −0
Original line number Diff line number Diff line
@@ -1789,6 +1789,14 @@ void CameraDeviceClient::clearStreamUseCaseOverrides() {
    mDevice->clearStreamUseCaseOverrides();
}

bool CameraDeviceClient::supportsZoomOverride() {
    return mDevice->supportsZoomOverride();
}

status_t CameraDeviceClient::setZoomOverride(int32_t zoomOverride) {
    return mDevice->setZoomOverride(zoomOverride);
}

binder::Status CameraDeviceClient::switchToOffline(
        const sp<hardware::camera2::ICameraDeviceCallbacks>& cameraCb,
        const std::vector<int>& offlineOutputIds,
Loading