Loading services/camera/virtualcamera/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,6 @@ cc_library_static { "util/JpegUtil.cc", "util/MetadataUtil.cc", "util/Util.cc", "util/TestPatternHelper.cc", "util/EglDisplayContext.cc", "util/EglFramebuffer.cc", "util/EglProgram.cc", Loading @@ -72,6 +71,7 @@ cc_library_static { "VirtualCameraStream.cc", "VirtualCameraService.cc", "VirtualCameraSessionContext.cc", "VirtualCameraTestInstance.cc", "VirtualCameraRenderThread.cc", ], defaults: [ Loading services/camera/virtualcamera/VirtualCameraRenderThread.cc +1 −13 Original line number Diff line number Diff line Loading @@ -51,7 +51,6 @@ #include "util/EglFramebuffer.h" #include "util/JpegUtil.h" #include "util/MetadataUtil.h" #include "util/TestPatternHelper.h" #include "util/Util.h" #include "utils/Errors.h" Loading Loading @@ -300,11 +299,10 @@ sp<Fence> CaptureRequestBuffer::getFence() const { VirtualCameraRenderThread::VirtualCameraRenderThread( VirtualCameraSessionContext& sessionContext, const Resolution inputSurfaceSize, const Resolution reportedSensorSize, std::shared_ptr<ICameraDeviceCallback> cameraDeviceCallback, bool testMode) std::shared_ptr<ICameraDeviceCallback> cameraDeviceCallback) : mCameraDeviceCallback(cameraDeviceCallback), mInputSurfaceSize(inputSurfaceSize), mReportedSensorSize(reportedSensorSize), mTestMode(testMode), mSessionContext(sessionContext) { } Loading Loading @@ -401,10 +399,6 @@ void VirtualCameraRenderThread::threadLoop() { mEglSurfaceTexture = std::make_unique<EglSurfaceTexture>( mInputSurfaceSize.width, mInputSurfaceSize.height); sp<Surface> inputSurface = mEglSurfaceTexture->getSurface(); if (mTestMode) { inputSurface->connect(NATIVE_WINDOW_API_CPU, false, nullptr); } mInputSurfacePromise.set_value(mEglSurfaceTexture->getSurface()); while (std::unique_ptr<ProcessCaptureRequestTask> task = dequeueTask()) { Loading @@ -422,12 +416,6 @@ void VirtualCameraRenderThread::threadLoop() { void VirtualCameraRenderThread::processCaptureRequest( const ProcessCaptureRequestTask& request) { if (mTestMode) { // In test mode let's just render something to the Surface ourselves. renderTestPatternYCbCr420(mEglSurfaceTexture->getSurface(), request.getFrameNumber()); } std::chrono::nanoseconds timestamp = std::chrono::duration_cast<std::chrono::nanoseconds>( std::chrono::steady_clock::now().time_since_epoch()); Loading services/camera/virtualcamera/VirtualCameraRenderThread.h +1 −3 Original line number Diff line number Diff line Loading @@ -111,8 +111,7 @@ class VirtualCameraRenderThread { Resolution reportedSensorSize, std::shared_ptr< ::aidl::android::hardware::camera::device::ICameraDeviceCallback> cameraDeviceCallback, bool testMode = false); cameraDeviceCallback); ~VirtualCameraRenderThread(); Loading Loading @@ -184,7 +183,6 @@ class VirtualCameraRenderThread { const Resolution mInputSurfaceSize; const Resolution mReportedSensorSize; const int mTestMode; VirtualCameraSessionContext& mSessionContext; Loading services/camera/virtualcamera/VirtualCameraService.cc +13 −1 Original line number Diff line number Diff line Loading @@ -30,10 +30,12 @@ #include "VirtualCameraDevice.h" #include "VirtualCameraProvider.h" #include "VirtualCameraTestInstance.h" #include "aidl/android/companion/virtualcamera/Format.h" #include "aidl/android/companion/virtualcamera/LensFacing.h" #include "aidl/android/companion/virtualcamera/VirtualCameraConfiguration.h" #include "android/binder_auto_utils.h" #include "android/binder_interface_utils.h" #include "android/binder_libbinder.h" #include "android/binder_status.h" #include "binder/Status.h" Loading Loading @@ -64,6 +66,7 @@ namespace { constexpr int kVgaWidth = 640; constexpr int kVgaHeight = 480; constexpr int kMaxFps = 60; constexpr int kTestCameraInputFps = 30; constexpr char kEnableTestCameraCmd[] = "enable_test_camera"; constexpr char kDisableTestCameraCmd[] = "disable_test_camera"; constexpr char kHelp[] = "help"; Loading Loading @@ -94,6 +97,13 @@ ndk::ScopedAStatus validateConfiguration( Status::EX_ILLEGAL_ARGUMENT); } if (configuration.virtualCameraCallback == nullptr) { ALOGE("%s: Input configuration is missing virtual camera callback", __func__); return ndk::ScopedAStatus::fromServiceSpecificError( Status::EX_ILLEGAL_ARGUMENT); } for (const SupportedStreamConfiguration& config : configuration.supportedStreamConfigs) { if (!isFormatSupportedForInput(config.width, config.height, Loading Loading @@ -418,9 +428,11 @@ binder_status_t VirtualCameraService::enableTestCameraCmd( VirtualCameraConfiguration configuration; configuration.supportedStreamConfigs.push_back({.width = kVgaWidth, .height = kVgaHeight, Format::YUV_420_888, Format::RGBA_8888, .maxFps = kMaxFps}); configuration.lensFacing = lensFacing.value_or(LensFacing::EXTERNAL); configuration.virtualCameraCallback = ndk::SharedRefBase::make<VirtualCameraTestInstance>(kTestCameraInputFps); registerCamera(mTestCameraToken, configuration, cameraId.value_or(sNextId++), kDefaultDeviceId, &ret); if (ret) { Loading services/camera/virtualcamera/VirtualCameraSession.cc +1 −5 Original line number Diff line number Diff line Loading @@ -66,7 +66,6 @@ #include "util/EglProgram.h" #include "util/JpegUtil.h" #include "util/MetadataUtil.h" #include "util/TestPatternHelper.h" #include "util/Util.h" namespace android { Loading Loading @@ -360,12 +359,9 @@ ndk::ScopedAStatus VirtualCameraSession::configureStreams( return cameraStatus(Status::ILLEGAL_ARGUMENT); } if (mRenderThread == nullptr) { // If there's no client callback, start camera in test mode. const bool testMode = mVirtualCameraClientCallback == nullptr; mRenderThread = std::make_unique<VirtualCameraRenderThread>( mSessionContext, resolutionFromInputConfig(*inputConfig), virtualCamera->getMaxInputResolution(), mCameraDeviceCallback, testMode); virtualCamera->getMaxInputResolution(), mCameraDeviceCallback); mRenderThread->start(); inputSurface = mRenderThread->getInputSurface(); } Loading Loading
services/camera/virtualcamera/Android.bp +1 −1 Original line number Diff line number Diff line Loading @@ -50,7 +50,6 @@ cc_library_static { "util/JpegUtil.cc", "util/MetadataUtil.cc", "util/Util.cc", "util/TestPatternHelper.cc", "util/EglDisplayContext.cc", "util/EglFramebuffer.cc", "util/EglProgram.cc", Loading @@ -72,6 +71,7 @@ cc_library_static { "VirtualCameraStream.cc", "VirtualCameraService.cc", "VirtualCameraSessionContext.cc", "VirtualCameraTestInstance.cc", "VirtualCameraRenderThread.cc", ], defaults: [ Loading
services/camera/virtualcamera/VirtualCameraRenderThread.cc +1 −13 Original line number Diff line number Diff line Loading @@ -51,7 +51,6 @@ #include "util/EglFramebuffer.h" #include "util/JpegUtil.h" #include "util/MetadataUtil.h" #include "util/TestPatternHelper.h" #include "util/Util.h" #include "utils/Errors.h" Loading Loading @@ -300,11 +299,10 @@ sp<Fence> CaptureRequestBuffer::getFence() const { VirtualCameraRenderThread::VirtualCameraRenderThread( VirtualCameraSessionContext& sessionContext, const Resolution inputSurfaceSize, const Resolution reportedSensorSize, std::shared_ptr<ICameraDeviceCallback> cameraDeviceCallback, bool testMode) std::shared_ptr<ICameraDeviceCallback> cameraDeviceCallback) : mCameraDeviceCallback(cameraDeviceCallback), mInputSurfaceSize(inputSurfaceSize), mReportedSensorSize(reportedSensorSize), mTestMode(testMode), mSessionContext(sessionContext) { } Loading Loading @@ -401,10 +399,6 @@ void VirtualCameraRenderThread::threadLoop() { mEglSurfaceTexture = std::make_unique<EglSurfaceTexture>( mInputSurfaceSize.width, mInputSurfaceSize.height); sp<Surface> inputSurface = mEglSurfaceTexture->getSurface(); if (mTestMode) { inputSurface->connect(NATIVE_WINDOW_API_CPU, false, nullptr); } mInputSurfacePromise.set_value(mEglSurfaceTexture->getSurface()); while (std::unique_ptr<ProcessCaptureRequestTask> task = dequeueTask()) { Loading @@ -422,12 +416,6 @@ void VirtualCameraRenderThread::threadLoop() { void VirtualCameraRenderThread::processCaptureRequest( const ProcessCaptureRequestTask& request) { if (mTestMode) { // In test mode let's just render something to the Surface ourselves. renderTestPatternYCbCr420(mEglSurfaceTexture->getSurface(), request.getFrameNumber()); } std::chrono::nanoseconds timestamp = std::chrono::duration_cast<std::chrono::nanoseconds>( std::chrono::steady_clock::now().time_since_epoch()); Loading
services/camera/virtualcamera/VirtualCameraRenderThread.h +1 −3 Original line number Diff line number Diff line Loading @@ -111,8 +111,7 @@ class VirtualCameraRenderThread { Resolution reportedSensorSize, std::shared_ptr< ::aidl::android::hardware::camera::device::ICameraDeviceCallback> cameraDeviceCallback, bool testMode = false); cameraDeviceCallback); ~VirtualCameraRenderThread(); Loading Loading @@ -184,7 +183,6 @@ class VirtualCameraRenderThread { const Resolution mInputSurfaceSize; const Resolution mReportedSensorSize; const int mTestMode; VirtualCameraSessionContext& mSessionContext; Loading
services/camera/virtualcamera/VirtualCameraService.cc +13 −1 Original line number Diff line number Diff line Loading @@ -30,10 +30,12 @@ #include "VirtualCameraDevice.h" #include "VirtualCameraProvider.h" #include "VirtualCameraTestInstance.h" #include "aidl/android/companion/virtualcamera/Format.h" #include "aidl/android/companion/virtualcamera/LensFacing.h" #include "aidl/android/companion/virtualcamera/VirtualCameraConfiguration.h" #include "android/binder_auto_utils.h" #include "android/binder_interface_utils.h" #include "android/binder_libbinder.h" #include "android/binder_status.h" #include "binder/Status.h" Loading Loading @@ -64,6 +66,7 @@ namespace { constexpr int kVgaWidth = 640; constexpr int kVgaHeight = 480; constexpr int kMaxFps = 60; constexpr int kTestCameraInputFps = 30; constexpr char kEnableTestCameraCmd[] = "enable_test_camera"; constexpr char kDisableTestCameraCmd[] = "disable_test_camera"; constexpr char kHelp[] = "help"; Loading Loading @@ -94,6 +97,13 @@ ndk::ScopedAStatus validateConfiguration( Status::EX_ILLEGAL_ARGUMENT); } if (configuration.virtualCameraCallback == nullptr) { ALOGE("%s: Input configuration is missing virtual camera callback", __func__); return ndk::ScopedAStatus::fromServiceSpecificError( Status::EX_ILLEGAL_ARGUMENT); } for (const SupportedStreamConfiguration& config : configuration.supportedStreamConfigs) { if (!isFormatSupportedForInput(config.width, config.height, Loading Loading @@ -418,9 +428,11 @@ binder_status_t VirtualCameraService::enableTestCameraCmd( VirtualCameraConfiguration configuration; configuration.supportedStreamConfigs.push_back({.width = kVgaWidth, .height = kVgaHeight, Format::YUV_420_888, Format::RGBA_8888, .maxFps = kMaxFps}); configuration.lensFacing = lensFacing.value_or(LensFacing::EXTERNAL); configuration.virtualCameraCallback = ndk::SharedRefBase::make<VirtualCameraTestInstance>(kTestCameraInputFps); registerCamera(mTestCameraToken, configuration, cameraId.value_or(sNextId++), kDefaultDeviceId, &ret); if (ret) { Loading
services/camera/virtualcamera/VirtualCameraSession.cc +1 −5 Original line number Diff line number Diff line Loading @@ -66,7 +66,6 @@ #include "util/EglProgram.h" #include "util/JpegUtil.h" #include "util/MetadataUtil.h" #include "util/TestPatternHelper.h" #include "util/Util.h" namespace android { Loading Loading @@ -360,12 +359,9 @@ ndk::ScopedAStatus VirtualCameraSession::configureStreams( return cameraStatus(Status::ILLEGAL_ARGUMENT); } if (mRenderThread == nullptr) { // If there's no client callback, start camera in test mode. const bool testMode = mVirtualCameraClientCallback == nullptr; mRenderThread = std::make_unique<VirtualCameraRenderThread>( mSessionContext, resolutionFromInputConfig(*inputConfig), virtualCamera->getMaxInputResolution(), mCameraDeviceCallback, testMode); virtualCamera->getMaxInputResolution(), mCameraDeviceCallback); mRenderThread->start(); inputSurface = mRenderThread->getInputSurface(); } Loading