diff --git a/media/capture/video/ohos/video_capture_device_factory_ohos.cc b/media/capture/video/ohos/video_capture_device_factory_ohos.cc index ffc140fe1c50ba051863ed45d0301e9818e8c2ef..1520acd6b526bd203a3ed065a5672a87a6f9692f 100644 --- a/media/capture/video/ohos/video_capture_device_factory_ohos.cc +++ b/media/capture/video/ohos/video_capture_device_factory_ohos.cc @@ -18,6 +18,7 @@ #include "base/posix/eintr_wrapper.h" #include "base/strings/string_util.h" #include "base/strings/stringprintf.h" +#include "base/system/system_monitor.h" #include "build/build_config.h" #include "camera_manager_adapter.h" #include "media/capture/video/ohos/video_capture_device_ohos.h" @@ -38,8 +39,7 @@ bool CompareCaptureDevices(const VideoCaptureDeviceInfo& a, VideoCaptureDeviceFactoryOHOS::VideoCaptureDeviceFactoryOHOS( scoped_refptr ui_task_runner) : ui_task_runner_(ui_task_runner) { - auto status_callback = - std::make_shared + auto status_callback = std::make_shared (ui_task_runner_, weak_factory_.GetWeakPtr()); OhosAdapterHelper::GetInstance().GetCameraManagerAdapter().Create(status_callback); } @@ -107,9 +107,21 @@ void VideoCaptureDeviceFactoryOHOS::GetDevicesInfo( } void VideoCaptureDeviceFactoryOHOS::OnCameraStatusChanged( - CameraStatusAdapter camera_status) { + CameraStatusAdapter camera_status, std::string callback_device_id) { DCHECK(thread_checker_.CalledOnValidThread()); - LOG(INFO) << "camera status changed"; + std::string current_device_Id = OhosAdapterHelper::GetInstance().GetCameraManagerAdapter(). + GetCurrentDeviceId(); + LOG(INFO) << "camera status changed, current_device_Id is " << current_device_Id + << ", callback_device_id is " << callback_device_id; + if ((camera_status == CameraStatusAdapter::DISAPPEAR) || (camera_status == CameraStatusAdapter::APPEAR)) { + if ((current_device_Id == callback_device_id) && (camera_status == CameraStatusAdapter::DISAPPEAR)) { + OhosAdapterHelper::GetInstance().GetCameraManagerAdapter().StopSession(CameraStopType::NORMAL); + } + if(auto* monitor = base::SystemMonitor::Get()){ + monitor->ProcessDevicesChanged(base::SystemMonitor::DEVTYPE_VIDEO_CAPTURE); + } + } + if (camera_status == CameraStatusAdapter::AVAILABLE) { OhosAdapterHelper::GetInstance().GetCameraManagerAdapter(). SetCameraStatus(CameraStatusAdapter::AVAILABLE); @@ -117,7 +129,6 @@ void VideoCaptureDeviceFactoryOHOS::OnCameraStatusChanged( IsExistCaptureTask()) { return; } - OhosAdapterHelper::GetInstance().GetCameraManagerAdapter(). RestartSession(); } diff --git a/media/capture/video/ohos/video_capture_device_factory_ohos.h b/media/capture/video/ohos/video_capture_device_factory_ohos.h index 611ff874ea3e07f4cbbaefc5d6d7edcdf78815a2..137d9df844ace1a65e4b6b0153738c80a4900eb2 100644 --- a/media/capture/video/ohos/video_capture_device_factory_ohos.h +++ b/media/capture/video/ohos/video_capture_device_factory_ohos.h @@ -37,7 +37,7 @@ class CAPTURE_EXPORT VideoCaptureDeviceFactoryOHOS VideoCaptureErrorOrDevice CreateDevice( const VideoCaptureDeviceDescriptor& device_descriptor) override; void GetDevicesInfo(GetDevicesInfoCallback callback) override; - void OnCameraStatusChanged(CameraStatusAdapter camera_status); + void OnCameraStatusChanged(CameraStatusAdapter camera_status, std::string callback_device_id); private: scoped_refptr ui_task_runner_; diff --git a/media/capture/video/ohos/video_capture_status_callback_listener_ohos.cc b/media/capture/video/ohos/video_capture_status_callback_listener_ohos.cc index ee21e48593c9db108c94d01c73836f0adfc2e0df..ff24fcae9e1feedde9bc6a867fe582bb6d00401d 100644 --- a/media/capture/video/ohos/video_capture_status_callback_listener_ohos.cc +++ b/media/capture/video/ohos/video_capture_status_callback_listener_ohos.cc @@ -19,11 +19,12 @@ VideoCaptureCameraStatusCallbackListenerOHOS::VideoCaptureCameraStatusCallbackLi VideoCaptureCameraStatusCallbackListenerOHOS::~VideoCaptureCameraStatusCallbackListenerOHOS() {} void VideoCaptureCameraStatusCallbackListenerOHOS::OnCameraStatusChanged( - CameraStatusAdapter camera_status) { + CameraStatusAdapter camera_status, + std::string callback_device_id) { task_runner_->PostTask( FROM_HERE, base::BindOnce(&VideoCaptureDeviceFactoryOHOS::OnCameraStatusChanged, capture_device_factory_, - camera_status)); + camera_status, callback_device_id)); } } // namespace media diff --git a/media/capture/video/ohos/video_capture_status_callback_listener_ohos.h b/media/capture/video/ohos/video_capture_status_callback_listener_ohos.h index b28bd7e3d671414363479605f6eef5cd22ab85cd..9eaf60447be1d8c3be2571e9a8293e6eb4240af5 100644 --- a/media/capture/video/ohos/video_capture_status_callback_listener_ohos.h +++ b/media/capture/video/ohos/video_capture_status_callback_listener_ohos.h @@ -23,7 +23,8 @@ class VideoCaptureCameraStatusCallbackListenerOHOS const VideoCaptureCameraStatusCallbackListenerOHOS&) = delete; virtual ~VideoCaptureCameraStatusCallbackListenerOHOS(); - void OnCameraStatusChanged(CameraStatusAdapter camera_status) override; + void OnCameraStatusChanged(CameraStatusAdapter camera_status, + std::string callback_device_id) override; private: scoped_refptr task_runner_;