Loading services/camera/libcameraservice/CameraService.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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")) { Loading Loading @@ -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); Loading Loading @@ -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"); } Loading services/camera/libcameraservice/CameraService.h +12 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); Loading Loading @@ -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 Loading services/camera/libcameraservice/api1/Camera2Client.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading services/camera/libcameraservice/api1/Camera2Client.h +3 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading services/camera/libcameraservice/api2/CameraDeviceClient.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -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 Loading
services/camera/libcameraservice/CameraService.cpp +33 −0 Original line number Diff line number Diff line Loading @@ -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 Loading Loading @@ -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")) { Loading Loading @@ -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); Loading Loading @@ -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"); } Loading
services/camera/libcameraservice/CameraService.h +12 −0 Original line number Diff line number Diff line Loading @@ -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, Loading Loading @@ -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); Loading Loading @@ -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 Loading
services/camera/libcameraservice/api1/Camera2Client.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -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) { Loading
services/camera/libcameraservice/api1/Camera2Client.h +3 −0 Original line number Diff line number Diff line Loading @@ -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 */ Loading
services/camera/libcameraservice/api2/CameraDeviceClient.cpp +8 −0 Original line number Diff line number Diff line Loading @@ -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